Je commence à étudier OOAD et j'ai du mal à trouver un C++
exemple de code qui illustrerait la manière dont Association
, Aggregation
et Composition
sont implémentés par programme. (Il y a plusieurs articles partout mais ils concernent C # ou Java). J'ai trouvé un exemple ou deux, mais ils sont tous en conflit avec les instructions de mon instructeur et je suis confus.
Ma compréhension est que dans:
Et voici comment je l'ai implémenté:
//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;
}
};
Est-ce correct? Sinon, comment faut-il procéder à la place? Ce serait apprécié si vous me donniez également une référence d'un code d'un livre (afin que je puisse discuter avec mon instructeur)
Il existe plusieurs façons de mapper les concepts OO d'association , d'agrégation et composition en code C++. Cela est particulièrement vrai pour l'agrégation , car il n'y a même pas de consensus sur ce que cela signifie exactement.
Votre mappage suggère la sémantique suivante, qui n'est pas fausse:
Comme indiqué, l'agrégation est la plus difficile ici car, même au sein d'UML, la signification de agrégation n'est pas limpide. Une autre signification possible de l'agrégation est "Foo contient un objet Bar qui est partagé avec d'autres objets". Cela serait généralement représenté dans le code C++ au moyen d'un std::shared_pointer
ou boost::shared_pointer
.
La signification que votre instructeur attache à l'agrégation doit être discutée avec lui.