web-dev-qa-db-ja.com

UMLクラス図:依存関係を表示する方法

クラスA、B、C、Dの4つのクラスがあるプログラムを検討してください。

クラスAとBは、抽象スーパークラスCのサブクラスです。

クラスDはCに依存しています。意味:C objectOfTypeCフィールドを保持しています。

ご存じのように、objectOfTypeC参照は多態的にクラスAとBのオブジェクトを保持する場合があります。この参照の値は実行時に動的に変化する可能性があります。

このような状況は、OOPでは非常に一般的です。

一般的な例は、複数のクラスがすべて抽象クラスまたはインターフェイスSuperTypeを継承または実装するストラテジーパターンです。別のクラスSomeClassは、タイプSuperTypeの参照を保持し、その参照内のSuperTypeサブクラスの異なるインスタンスを動的に保持できます。

私の質問はこれです。これをUMLクラス図に表示する方法は2つありますが、どちらが正しいのかわかりません。

enter image description hereenter image description here

(注意:これらの例では、スーパータイプはインターフェイスですが、抽象クラス、または通常のスーパークラスの場合もあります)

より正しいオプションはどれですか?

3
Aviv Cohn

あなたが言及した 戦略パターンのUML を見ると、オプション1が正しいことがわかります。それを正しく説明するために。 UMLでは、通常、関連関係(矢印など)は、エンティティが矢印が指しているタイプの属性を持つことを意味します。これはまさにSomeClassSuperTypeの間の関連付けのケースです。オプション2は、SomeClassClass1Class2、およびClass3のそれぞれに1つずつ、3つの属性を持っていることを意味します。これはあなたが望むものではありません。

7
Euphoric