如何在UML中表示C#属性?
不是一个属性,不是一个方法。 定型? <>
<>
?
我正在对现有系统进行逆向建模,所以我需要清楚地反映出这与readonly字段或方法对不同(不管IL说的是什么),所以我想我会选择刻板印象,但我会接受语言独立的get_set_作为一般解决方案。 谢谢大家的理智测试。
属性只是编写get_MyValue()
和set_MyValue(value)
的便捷方式,允许赋值而不是普通方法调用(使用括号)。
您访问的实际上是一个.NET属性,C#有自己的语法来访问它们。 由于在皮肤下创建了真正的get_
和set_
方法,因此您可以简单地显示这些方法(使您的UML语言独立 – 例如,使您的UML同样适用于VB.NET开发人员)
……或者如你所说,介绍你自己的刻板印象!
我通常在Visio中准备我的UML图表(我知道,我知道;但是你要做什么?)。
在绘制属性时,它们最终如此:
+------------------------+ | MyClass | |------------------------| | - _foo : int | |------------------------| | «property» + Foo : int | +------------------------+
«property»是源自«operator»的自定义构造型。
丑陋,我知道。 但它确实有效,而且很明显。 我以相同的方式构建构造函数。
您可以使用与字段相同的方式表示属性。 要指定readonly或writeonly等其他信息,您可以使用
+名称:字符串{READONLY}
我把它们作为公共字段放在UML中,因为这就是它们在概念上的含义。 UML不是您的编程语言的语法(虽然一些工具供应商声称它是)。
有关实现语言如何处理属性的详细信息不需要在UML中显示。 这完全违背了使用UML作为抽象实现细节并让您专注于设计的工具的观点。
如果属性在某种程度上是特殊的,例如它是派生的或只读的,则可以使用构造型注释标记该属性。
我一直在属性名称旁边使用<
和<
构造型,因此它们看起来像字段,但允许您区分get
或set
的访问修饰符:
+=============================+ | ClassName | +-----------------------------+ | +<> Id : int | | -<> Id : int | | +<> IsSomething : bool | +-----------------------------+ | + Method1(arg1 : string) | +=============================+
或者,如果您不想要多次出现属性,这也可以起作用:
+=============================+ | ClassName | +-----------------------------+ | +<> -<> Id : int |
并且为了减少混乱,如果get
和set
具有相同的访问修饰符:
+====================================+ | ClassName | +------------------------------------+ | +<> Description : string | | +<> -<> Id : int |
这清楚地表明属性是否具有get或set,以及它是否是readonly(通过类图中存在的<
)。 所以基本上你在你的问题中说了什么。
虽然属性是getter和setter方法的语法糖,但它们应该感觉像字段,我相信UML图应该反映这一事实,同时还传达什么是公共和什么是私有,以及是否是一个setter存在与否。
嗯,我只是把它作为我的伪UML图中的方法。 🙂
属性是一些更好的语法包含的Get / Set方法。 只需将它们作为方法,或为它们创建一些新的UML语法:)
将属性描述为单个字段的问题在于,使用2.0框架的C#以及get和set之外的问题可以具有不同的访问修饰符。
我同意workmad3。 属性只是一个技巧,使get / set方法更好一点。 出于这个原因,我认为它应该保存为两种不同的方法。 在这种情况下,您可以为它们设置不同的访问权限
我这样用
-memberThePropertyWillExpose +memberThePropertyIsExposing
好吧,如果这是正确的方式,欢迎对此发表评论!!
在Visio中,您可以为Attribute创建<< readonly >>构造型,并且只对每个只读属性使用此构造型。 同样的只写。 它会告诉你一个好的表示法:
<> +PropertyName : int
它没什么难看的。 标准的Visio的Changeable选项更加丑陋,它没有任何可视化表示,你实际上需要打开每个属性的属性才能看到它,没有机会在打印图上看到它。
您可以为类图中的字段使用名为“property”的构造型(例如<< Property >> PropertyName)。 刻板印象用于扩展UML表示法。