集約と構成を使用してシミュレーション用のエンティティを作成しています。
次の C++ の例では:
class CCar
{
CCar( CDriver* pDriver )
{ m_pDriver = pDriver; }
CDriver* m_pDriver;
CEngine m_Engine;
CDriverControls m_Controls;
};
上記の例では、車はエンジンと一連の運転制御装置 (構成による) で構成されています。車にはドライバーも必要です (集計による)。
しかし、これは階層関係を説明するだけです。ドライバーは車に属し、エンジンとコントロールも車に属します。しかし、これらのメンバーはすべて互いに関連しています。ドライバーはコントロールでアクションを実行する必要があり、コントロールはエンジンでアクションを実行する必要があります。これらの関係は複数の方向にも作用します。エンジンが失速してコントロールが動かなくなったり、コントロールが乱暴にスピンしてドライバーを傷つけたりする可能性があります。また、ドライバーがエンジン音が気に入らず、車から離れたらどうしますか? これらの関係はどのように機能しますか?
私は、他のオブジェクトと頻繁に相互作用する多くの異なるオブジェクトから多くの異なるエンティティを合成しており、これらの関係を設計された方法で管理する方法に興味があります。
ありがとう!
編集:
回答が示唆するように、これを管理する 1 つの方法は、車をドライバーに向けたり、ドライバーに車へのポインターを提供したりすることです。これは理にかなっていて、この特定の例を解決します。ただし、設計上の意味では、これはドライバーの責任を増大させます。このオブジェクトは、どの車に属しているかを追跡する役割を担っていますが、確かにこれは、どのオブジェクトが一緒に属しているかを追跡するコンテナの義務なのでしょうか? 同様に、これらの関係の管理を CCar に任せると、CCar がブロブになります。この種の関係に対処するための設計されたソリューションはありますか?