如何在UML中表示C#属性?

时间:2009-01-22 17:33:29

标签: c# .net properties uml

不完全属性,不是一个方法。定型? <<get>> <<set>>


我正在对现有系统进行逆向建模,所以我需要清楚地反映出这与readonly字段或方法对不同(不管IL说什么),所以我想我我会使用刻板印象,但我会接受语言独立的get_set_作为一般解决方案。非常感谢所有的理智测试。

12 个答案:

答案 0 :(得分:18)

我通常在Visio中准备我的UML图表(我知道,我知道;但是你要做什么?)。

在绘制属性时,它们最终会如此:

+------------------------+
| MyClass                |
|------------------------|
| - _foo : int           |
|------------------------|
| «property» + Foo : int |
+------------------------+

«property»是源自«operator»的自定义构造型。

丑陋,我知道。但它很有效,而且很明显。我以相同的方式构建构造函数。

答案 1 :(得分:17)

属性只是编写get_MyValue()set_MyValue(value)的一种便捷方式,允许赋值而不是普通方法调用(使用括号)。

您访问的实际上是一个.NET属性,C#有自己的语法来访问它们。由于在皮肤下创建了真正的get_set_方法,因此您可以简单地显示这些方法(使您的UML语言独立 - 例如,使您的UML同样适用于VB.NET开发人员)< / p>

...或者正如你所建议的那样,介绍你自己的刻板印象!

答案 2 :(得分:9)

您可以使用与字段相同的方式表示属性。要指定readonly或writeonly等附加信息,可以使用

+姓名:字符串{READONLY}

答案 3 :(得分:4)

我将它们作为公共字段放在UML中,因为这就是它们在概念上的含义。 UML不是您的编程语言的语法(虽然一些工具供应商声称它是)。

有关实现语言如何处理属性的详细信息不需要在UML中显示。这完全违背了使用UML作为一种工具的观点,该工具将实现细节抽象化并让您专注于设计。

如果属性在某种程度上是特殊的,例如它是派生的或只读的,则可以使用构造型注释标记该属性。

答案 4 :(得分:4)

我一直在属性名称旁边使用<<get>><<set>>构造型,因此它们看起来像字段,但允许您区分get或{{的访问修饰符1}}:

set

或者,如果您不想要多次出现一个属性,这也可以起作用:

+=============================+
| ClassName                   |
+-----------------------------+
| +<<get>> Id : int           |
| -<<set>> Id : int           |
| +<<get>> IsSomething : bool |
+-----------------------------+
| + Method1(arg1 : string)    |
+=============================+

如果+=============================+ | ClassName | +-----------------------------+ | +<<get>> -<<set>> Id : int | get具有相同的访问修饰符,可以减少混乱:

set

这清楚地表明属性是否具有get或set,以及它是否是readonly(通过类图中存在的+====================================+ | ClassName | +------------------------------------+ | +<<get, set>> Description : string | | +<<get>> -<<set>> Id : int | )。所以基本上你在你的问题中说了什么。

虽然属性是getter和setter方法的语法糖,但它们应该感觉像字段,我相信UML图应该反映这个事实,同时还传达什么是公共的,什么是私有的,以及是否存在二传手。

答案 5 :(得分:2)

嗯,我只是把它作为我的伪UML图中的一个方法。 : - )

答案 6 :(得分:2)

属性是一些更好的语法包含的Get / Set方法。只需将它们作为方法放入,或为它们创建一些新的UML语法:)

答案 7 :(得分:1)

将属性描述为单个字段的问题是,对于使用2.0框架的C#,以及get和set之外的问题,可以使用不同的访问修饰符。

答案 8 :(得分:1)

我同意workmad3。属性只是一个技巧,使get / set方法更好一点。出于这个原因,我认为它应该保存为两种不同的方法。在这种情况下,您可以为它们设置不同的访问权限

答案 9 :(得分:0)

我像这样使用

-memberThePropertyWillExpose
+memberThePropertyIsExposing

如果这是正确的方式,欢迎对此发表评论!!

答案 10 :(得分:0)

在Visio中,您可以创建&lt;&lt; readonly&gt;&gt;对于Attribute的构造型,只需对每个只读属性使用此构造型。对于只写也是如此。它会告诉你一个好的符号:

<<readonly>> +PropertyName : int

没有什么可丑的。标准Visio的可更改选项更加丑陋,因为它没有任何可视化表示,您实际上需要打开每个属性的属性才能看到它,没有机会在打印图上看到它。

答案 11 :(得分:0)

您可以为类图中的字段使用名为“property”的构造型(例如&lt;&lt;&lt; Property&gt;&gt; PropertyName)。刻板印象用于扩展UML表示法。