クラスA、B、C、Dの4つのクラスがあるプログラムを検討してください。
クラスAとBは、抽象スーパークラスCのサブクラスです。
クラスDはCに依存しています。意味:C objectOfTypeC
フィールドを保持しています。
ご存じのように、objectOfTypeC
参照は多態的にクラスAとBのオブジェクトを保持する場合があります。この参照の値は実行時に動的に変化する可能性があります。
このような状況は、OOPでは非常に一般的です。
一般的な例は、複数のクラスがすべて抽象クラスまたはインターフェイスSuperType
を継承または実装するストラテジーパターンです。別のクラスSomeClass
は、タイプSuperType
の参照を保持し、その参照内のSuperType
サブクラスの異なるインスタンスを動的に保持できます。
私の質問はこれです。これをUMLクラス図に表示する方法は2つありますが、どちらが正しいのかわかりません。
(注意:これらの例では、スーパータイプはインターフェイスですが、抽象クラス、または通常のスーパークラスの場合もあります)
より正しいオプションはどれですか?
あなたが言及した 戦略パターンのUML を見ると、オプション1が正しいことがわかります。それを正しく説明するために。 UMLでは、通常、関連関係(矢印など)は、エンティティが矢印が指しているタイプの属性を持つことを意味します。これはまさにSomeClass
とSuperType
の間の関連付けのケースです。オプション2は、SomeClass
がClass1
、Class2
、およびClass3
のそれぞれに1つずつ、3つの属性を持っていることを意味します。これはあなたが望むものではありません。