37

不完全是属性,也不完全是方法。刻板印象?<<get>> <<set>>?


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

4

12 回答 12

22

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

在绘制属性图表时,它们最终是这样的:

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

«property» 是从 «operator» 派生的自定义构造型。

丑陋,我知道。但它有效,而且很清楚。我以同样的方式做构造函数。

于 2009-01-22T18:02:48.730 回答
21

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

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

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

于 2009-01-22T17:41:22.160 回答
9

您可以用与字段相同的方式表示属性。要指定附加信息,如只读或只写,您可以使用

+名称:字符串 {READONLY}

于 2009-01-22T17:40:00.883 回答
9

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

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

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

+=============================+
| ClassName                   |
+-----------------------------+
| +<<get>> -<<set>> Id : int  |

为了减少混乱,如果getset具有相同的访问修饰符:

+====================================+
| ClassName                          |
+------------------------------------+
| +<<get, set>> Description : string |
| +<<get>> -<<set>> Id : int         |

这清楚地传达了属性是否具有 get 或 set,以及它是否是只读的(通过<<set>>在类图中不存在)。所以基本上你在问题中所说的。

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


更新:我使用这个符号已经有一段时间了,并做了一些细微的修改。

只读属性

+<<get>> IsVisible : bool

没有集合的 get 意味着:

public bool IsVisible => // logic goes here

具有只读支持字段的自动属性

+<<get>> Id : int {readonly}

暗示:

public int Id { get; }
于 2017-05-03T12:50:05.713 回答
4

我会将它们作为 UML 中的公共字段,因为这就是它们的概念。UML 不是您的编程语言的语法(尽管一些工具供应商声称它是)。

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

如果该属性在某些方面是特殊的,例如它是派生的或只读的,您可以使用构造型注释对其进行标记。

于 2009-03-06T12:48:45.630 回答
2

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

于 2009-01-22T17:36:02.747 回答
2

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

于 2009-01-22T17:39:28.653 回答
1

将属性描述为单个字段的问题在于,对于使用 2.0 框架及更高版本的 C#,get 和 set 可以具有不同的访问修饰符。

于 2009-10-19T14:21:46.227 回答
1

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

于 2010-03-26T12:22:20.420 回答
1

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

于 2015-08-12T13:02:27.193 回答
0

我这样用

-memberThePropertyWillExpose
+memberThePropertyIsExposing

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

于 2009-03-06T12:52:34.140 回答
0

在 Visio 中,您可以为属性创建一个 <<readonly>> 构造型,并且只为每个只读属性使用这个构造型。只写也一样。它会告诉你一个很好的符号:

<<readonly>> +PropertyName : int

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

于 2013-04-29T18:29:13.467 回答