ブリッジ/ワイヤレスリピーターとして機能するワイヤレスネットワークがあるとします。どちらもクラス図をどのように考慮しますか?私の頭の中では、単独で存在できる親オブジェクトを持つことには意味があります。次に、両方が親に依存しているが、親のインスタンスも作成する子オブジェクト。子は、継承されたすべての属性にアクセスでき、親インスタンスのメソッドと属性を使用するメソッドをオーバーロードできます。
私の考えでは、ワイヤレスリピーターには親ワイヤレスネットワーク(集合)がありますが、ワイヤレスネットワーク属性を継承する完全に別のネットワークもあります。ブリッジネットワークはメインワイヤレスネットワークのプライベート拡張であり、これをシーケンス図で示すことができる必要があるため、私はその方向性を求めています。
設計では、WirelessNetwork
は1つ以上のWirelessRepeater
を持つことができ、WirelessRepeater
自体はWirelessNetwork
です。ここではUMLの問題はありませんが、継承と構成をグラフィカルに区別できる場合(例:2つの平行線)は、ダイアグラムが読みやすくなります。
設計の結果は、WirelessRepeater
がWirelessNetwork
のすべての属性を持つことです。しかし、それ自体の価値があると、それは必ずしも所有ネットワークの価値に対応するわけではありません。さらに、リピーターはすべてのネットワークサービスを提供します。これには、リピーターに関連しないサービスも含まれます(たとえば、実際のリピーターの構成オプションは、ルーターの構成オプションに比べて非常に制限されています)。
したがって、モデルは正確ではありません。
IMHOは プロキシパターン を使用するほうがよいでしょう。リピーターはネットワークのプロキシであり、ネットワークとプロキシの両方が、利用可能なネットワークメソッドを定義するクラスから継承します。両方(例:connect()
)ですが、ネットワークにのみ関連するメソッド(例:setIPAdressingScheme()
)は含まれません。
これは冗長です。継承すると、とにかく親を構築します。その親を自分で構成する場合は、親の2番目のインスタンスが作成されるだけです。
継承により、親のインスタンス、それらのインターフェース、およびそれらの間の配線が無料で提供されます。
構成(および委任)はすべて同じものを提供しますが、すべてを配線する必要があるため、追加のキーストロークがかかります。しかし、ここには多くのパワーと柔軟性があります。
特別な理由なしに両方を同時に実行しても、混乱しているメンテナンス開発者以外に多くのことは得られません。