不完全属性,不是一个方法。定型? <<get>>
<<set>>
?
我正在对现有系统进行逆向建模,所以我需要清楚地反映出这与readonly字段或方法对不同(不管IL说什么),所以我想我我会使用刻板印象,但我会接受语言独立的get_set_作为一般解决方案。非常感谢所有的理智测试。
答案 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表示法。