如何在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作为抽象实现细节并让您专注于设计的工具的观点。

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

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

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

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

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

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

 +====================================+ | 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表示法。