Agregace (programování)

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 14. prosince 2014; kontroly vyžadují 27 úprav .

V objektově orientovaném programování znamená agregace (nebo, jak se dříve také říkalo, delegování ) techniku ​​vytvoření nové třídy z existujících tříd jejich zahrnutím. Agregace je také často označována jako „vlastnický vztah“ v tom smyslu, že „auto má karoserii, kola a motor“.

Vnořené objekty nové třídy jsou obvykle deklarovány jako soukromé, což je činí nepřístupnými pro aplikační programátory pracující s třídou. Na druhou stranu tvůrce třídy může tyto objekty upravit, aniž by narušil existující klientský kód. Navíc nahrazení vnořených objektů za běhu programu umožňuje dynamicky měnit jeho chování. Mechanismus dědičnosti tuto flexibilitu nemá, protože odvozené třídy podléhají omezením, která se kontrolují v době kompilace.

Na základě agregace je implementována technika delegování , kdy je úkol přidělený externímu objektu delegován na interní objekt, který se specializuje na řešení problémů tohoto druhu.

Příklad

Agregace : profesoři - fakulty, profesoři zůstávají žít po zničení fakulty
Složení : univerzita - fakulty, fakulty bez univerzity umírají.

Agregace

Agregace (agregace podle odkazu) je vztah část-celek mezi dvěma stejnými objekty, kdy jeden objekt (kontejner) má vazbu na jiný objekt. Oba objekty mohou existovat nezávisle: pokud je kontejner zničen, jeho obsah není.

třídní profesor ; třída Oddělení { soukromý : Profesor * členové [ 5 ]; // Agregace, protože žádný operátor mazání }; class Ehe // Příklad agregace { soukromý : Osoba & _partner1 ; // Entaltener Teil. // Agregační osoba & _partner2 ; // Entaltener Teil. // Agregace public : // Ehe konstruktor ( Osoba a partner1 , Osoba a partner2 ) : _partner1 ( partner1 ), _partner2 ( partner2 ) { } };

Složení

Kompozice (agregace podle hodnoty) je přísnější variantou agregace, kdy zahrnutý objekt může existovat pouze jako součást kontejneru. Pokud je kontejner zničen, bude zničen i zahrnutý objekt.

třídaOddělení ; _ třída univerzita { soukromý : fakulta katedry [ 20 ]; // složení }; třída Karburátor ; auto třídy { soukromý : Karburátor * itsCarb ; public : Automobil () { itsCarb = nový karburátor ();} virtual ~ Automobil () { delete itsCarb ;} // Složení od objekt itsCarb bude smazán };