私は、集約と合成を使用してシミュレーション用のエンティティを作成しています。以下のC++の例でクラスの集約/合成メンバー間の関係を管理する
:上記の例で
class CCar
{
CCar(CDriver* pDriver)
{ m_pDriver = pDriver; }
CDriver* m_pDriver;
CEngine m_Engine;
CDriverControls m_Controls;
};
は、車は、エンジンと(組成物による)駆動コントロールのセットから成ります。車にはドライバーが必要です(アグリゲーションによる)。
しかし、これは階層的関係についてのみ説明します。ドライバーは車に属し、エンジンとコントロールは車にも属します。しかし、これらのメンバーはすべて互いに関連しています。ドライバーはコントロールでアクションを実行する必要があり、コントロールはエンジンでアクションを実行する必要があります。これらの関係は、複数の方向でも機能します。エンジンがストールしてコントロールが握られる可能性があります。または、コントロールが乱暴に回転してドライバーを傷つける可能性がありますか?そして、もしドライバーがエンジンの音を気に入らず車を離れるなら、どうでしょうか?これらの関係はどのように機能しますか?
私は他のオブジェクトと頻繁にやり取りする多くの異なるオブジェクトから多くの異なるエンティティを合成しており、これらの関係を設計された方法で管理する方法に興味があります。
よろしくお願いします。
編集:応答が示唆として
、これを管理するための一つの方法は、これは理にかなっていると、この具体的な例を解きなど、ドライバーに車を指し、そして車に運転手のポインタを与えています。しかし、設計上の意味では、これは運転者の責任を増加させます。このオブジェクトには、それがどの車に属しているかを把握することが任されていますが、確かにこれはどの物体が一緒に属しているかを把握するコンテナの義務です。同様に、これらの関係を管理してCCarを処理すると、CCarがblobに変わります。これらの種類の関係に対処するための設計されたソリューションはありますか?
返信ありがとうございます。 与えられた例は本当に単なる例ですが(おそらくより良いものを使用している可能性もありますが)、私は直面している問題を説明しようとしていました。私は実際に車とドライバーに関するプログラムを書いているわけではありません。 –