使用统一建模语言图编程Go

WeN*_*ers 4 paradigms uml go

我刚开始使用Go(GoLang),我发现它是一种很棒的语言.但是,经过多年的UML和面向对象的方法,我发现建模Go程序(逆向工程)有点问题,因为Go Structs包含属性/状态,但没有方法,以及使用Structs作为参数的方法/函数(即使那些做魔法使它使一个Struct看起来像一个对象),也不包含方法或状态.

这是否意味着我应该使用另一种Methodology来模拟Go程序,或者UML是否对语言结构进行了充分的建模?

是的我知道如果你在Structs上使用方法,可以通过结构和结构方法的组合将UML中对象的行为映射到Go,但我发现这是错误的,在范例中阻抗不匹配排序.

对于一个行为不再受物体控制的勇敢新世界,是时候采用新的(消亡思想!)图表技术了吗?行为可以建模而不参考它正在影响的状态?

更新:

我正在尝试数据流图,看看它们是否更适合范式.到目前为止一切都那么好,但我认为当我对Struct的方法进行建模时,我将会失败,DFD中的折衷方案是它们被视为函数.:(

Go支持继承!arghhh!(头被吹干净.)你可以组成一个由另一个结构组成的结构,它有方法,子结构现在继承了......你得到了吗?我的思绪被吹了.意味着UML有效......完全但感觉很脏.

Go不支持继承,它就是这样.:) DFD就是这样!

and*_*olm 5

方法在结构本身定义之外声明的事实不应该是重要的; 它只是一个小的语法差异.这些方法属于结构类型,就像它们在大括号内一样.(它们在括号之外声明,因为方法不限于结构.)

使用UML和Go的真正潜在问题是UML通常与传统的面向对象设计(即类层次结构)一起使用,而Go采用不同的方法来继承和多态.也许UML可以适应Go的类型系统 - 我对UML不太熟悉 - 但是你的设计方法可能需要在某种程度上改变,无论你是否继续使用UML.

Go不打算用于Smalltalk和Java的所有对象样式.惯用Go程序通常包含很大比例的程序代码.如果您的设计过程侧重于对象建模,那么Go将无法正常工作.


Jim*_* L. 5

UML 仍然为您提供了可用于分析和设计组件、接口和数据的工具。Go 不是 OO 语言,所以你不能使用继承、多态、方法等。你不需要新的范式,你可能需要一个旧的范式:结构化分析和结构化设计。