web-dev-qa-db-ja.com

UMLでC#プロパティを表す方法は?

完全に属性ではなく、完全にメソッドでもありません。ステレオタイプ? <<get>><<set>>


私は既存のシステムをレトロモデリングしているので、これは読み取り専用フィールドまたはメソッドのペアと同じではないことを明確に反映する必要があります(ILの内容に関係なく)ので、私は行くと思いますステレオタイプを使用しますが、一般的な解決策として言語に依存しないget_ set_を受け入れます。サニティテストに感謝します。

31
annakata

プロパティは、get_MyValue()およびset_MyValue(value)を記述する便利な方法であり、通常のメソッド呼び出し(括弧を使用)ではなく割り当てを可能にします。

アクセスしているのは実際には.NETプロパティであり、C#にはこれらにアクセスするための独自の構文があります。肌の下から本物のget_およびset_メソッドが作成されるので、それらのメソッドを簡単に表示できます(UML言語を独立させるため-たとえば、UMLをVB.NET開発者に等しく適用できるようにするため)

...またはあなたが提案したように、あなた自身のステレオタイプを紹介してください!

17
Ray Hayes

私は通常、VisioでUML図を作成します(わかっています、わかっていますが、どうしますか?)。

プロパティを図式化すると、次のようになります。

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

"property"は"operator"から派生したカスタムステレオタイプです。

醜い、私は知っています。しかし、それは機能し、それは明らかです。私はコンストラクターを同じように行います。

18
Mike Hofer

プロパティはフィールドと同じ方法で表すことができます。読み取り専用や書き込み専用などの追加情報を指定するには、

+名前:文字列{読み取り専用}

9
Hemanshu Bhojak

プロパティ名の横に<<get>>および<<set>>ステレオタイプを使用しているため、フィールドのように見えますが、getまたはsetのアクセス修飾子を区別できます。 :

+=============================+
| 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>>が存在しないため)。だから基本的にあなたがあなたの質問で言ったこと。

プロパティはゲッターメソッドとセッターメソッドのシンタックスシュガーですが、フィールドのように感じるはずです。UMLダイアグラムはその事実を反映すると同時に、パブリックとプライベート、およびセッターかどうかも伝達する必要があると思います。存在するかどうか。

5
Greg Burghardt

概念的にはそれがUMLのパブリックフィールドとして配置します。 UMLは、プログラミング言語の構文ではありません(ただし、一部のツールベンダーは構文であると主張しています)。

実装言語がプロパティを処理する方法の詳細は、UMLに表示する必要はありません。これは、実装の詳細を抽象化し、設計に集中できるツールとしてUMLを使用するという点を完全に打ち負かします。

プロパティが派生または読み取り専用など、何らかの方法で特別な場合は、ステレオタイプアノテーションでマークを付けることができます。

4
VoidPointer

ええと、疑似UML図のメソッドとしてそれを投入するだけです。 :-)

2
Rob

プロパティは、いくつかのより優れた構文でラップされたGet/Setメソッドです。それらをメソッドとして配置するか、新しいUML構文を作成してください:)

2
workmad3

Workmad3に同意します。プロパティは、get/setメソッドを少し良くするためのトリックです。そのため、2つの異なる方法で保存する必要があると思います。さらに、この場合、それらに異なるアクセス許可を設定できます

1
Assassin

プロパティを単一のフィールドとして表現する場合の問題は、2.0フレームワークを使用するC#の場合、getとsetを超えると異なるアクセス修飾子を使用できることです。

1
anon

私はこのように使用します

-memberThePropertyWillExpose
+memberThePropertyIsExposing

まあ、これが正しい方法であれば、これについてのコメントは大歓迎です!!

0
Kunal S

クラス図のフィールドには、「property」(例:<< Property >> PropertyName)というステレオタイプを使用できます。ステレオタイプは、UML表記を拡張するために使用されます。

0
Jay Harry

Visioでは、属性の<<読み取り専用>>ステレオタイプを作成し、読み取り専用属性ごとにこのステレオタイプを使用できます。書き込み専用でも同じです。それはあなたに良い表記法を示します:

<<readonly>> +PropertyName : int

それについて醜いものは何もありません。標準のVisioの変更可能オプションは、視覚的な表現がなく、実際に各属性のプロパティを開いて表示する必要があり、印刷された図に表示される可能性がないという点で、はるかに醜いです。

0
Alexander