私はOOADの研究を始めており、Association
、Aggregation
およびComposition
がプログラムによって実装される方法を示すC++
コード例を見つけるのが困難です。 (至る所にいくつかの投稿がありますが、それらはC#またはJavaに関連しています)。私は例を1つまたは2つ見つけましたが、それらはすべて私のインストラクターの指示と矛盾し、混乱しています。
私の理解は、
そして、これは私がそれを実装した方法です:
//ASSOCIATION
class Bar
{
Baz baz;
};
class Foo
{
Bar* bar;
void setBar(Bar* _bar)
{
bar=_bar;
}
};
//AGGREGATION
class Bar
{
Baz baz;
};
class Foo
{
Bar* bar;
void setBar(Bar* _bar)
{
bar = new Bar;
bar->baz=_bar->baz;
}
};
//COMPOSTION
class Bar
{
Baz baz;
};
class Foo
{
Bar bar;
Foo(Baz baz)
{
bar.baz=baz;
}
};
これは正しいです?そうでない場合は、代わりにどのように行う必要がありますか?本のコードのリファレンスも教えていただければ幸いです(インストラクターと話し合うため)。
OOassociation、aggregationおよびcompositionをC++コードに変換します。これは特にaggregation、それが正確に何を意味するのかコンセンサスすら存在しないため。
マッピングは次のセマンティクスを示唆していますが、これは誤りではありません。
すでに述べたように、UML内でもaggregationの意味が明確ではないため、ここでは集約は困難です。集計のもう1つの可能な意味は、「Fooには他のオブジェクトと共有されるBarオブジェクトが含まれている」ことです。これは通常、C++コードではstd::shared_pointer
またはboost::shared_pointer
によって表されます。
インストラクターがaggregationにアタッチするという意味は、彼と話し合う必要があります。