Jsem si vědom toho, že obnovuji relativně staré téma, ale hledal jsem něco ohledně agregací a našel jsem tohle, takže je možné, že sem přijde i někdo jiný a bude hledat jasné vysvětlení.
Dle mého je implementační rozdíl jasný.
Asociace je vztah, kdy se instance předává, používá se, ale neukládá se.
class Foo {
private byte booSize = 0;
public void bar(Boo b) {
booSize = b.size;
}
}
Co přiložil zakladatel topicku, je agregace, přijímám instanci a ukládám si ji do sebe, poté s ní můžu dělat cokoliv.
public class Person
{
private Costume currentClothes;
public void setClothes(Costume clothes)
{
currentClothes = clothes;
}
}
Kompozice je vztah, kdy je třída přímo závislá na ostatních, př:
class Auto {
private Motor motor;
public Auto(/*Motor m*/) {
motor = new Motor();
}
}
Instance, na kterých je závislá, si může vytvořit sama nebo přijmout v konstruktoru, ale po ukončení konstruktoru musejí být všechny kompoziční vlastnosti nastavené.