代码之家  ›  专栏  ›  技术社区  ›  annakata

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

  •  42
  • annakata  · 技术社区  · 16 年前

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


    12 回复  |  直到 12 年前
        1
  •  17
  •   Ray Hayes    16 年前

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

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

    属性是从运算符派生的自定义原型。

        2
  •  17
  •   Mike Hofer    16 年前

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

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

    …或者按照你的建议,介绍你自己的刻板印象!

        3
  •  9
  •   Hemanshu Bhojak    16 年前

    我一直在使用 <<get>> <<set>> 属性名称旁边的原型,使其看起来像字段,但允许您区分 get set :

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

    或者,如果你不希望一个属性出现多次,这也可以:

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

    为了减少混乱,如果 设置

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

    <<set>>

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


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

    只读属性

    +<<get>> IsVisible : bool
    

    没有set的get意味着:

    public bool IsVisible => // logic goes here
    

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

    暗示:

    public int Id { get; }
    
        4
  •  4
  •   Greg Burghardt    8 年前

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

    +名称:字符串{READONLY}

        5
  •  3
  •   VoidPointer    16 年前

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

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

        6
  •  2
  •   Rob    16 年前

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

        7
  •  2
  •   workmad3    16 年前

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

        8
  •  1
  •   anon    16 年前

        9
  •  1
  •   Assassin    15 年前

    我同意工人的意见。属性只是一个技巧,让get/set方法变得更好一些。因此,我认为应该将其保存为两种不同的方法。更重要的是,在这种情况下,您可以为它们设置不同的访问权限

        10
  •  0
  •   Kunal S    16 年前

    您可以为类图中的字段使用名为“property”的原型(例如<<property>>PropertyName)。原型用于扩展UML符号。

        11
  •  0
  •   Alexander    12 年前

    我这样使用

    -memberThePropertyWillExpose
    +memberThePropertyIsExposing
    

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

        12
  •  0
  •   Jay Harry    9 年前

    在Visio中,您可以创建<<只读>>属性的原型,只需将此原型用于每个只读属性。只写也是一样。它将向您展示一个好的符号:

    <<readonly>> +PropertyName : int