În programarea orientată pe obiecte , agregarea (sau, așa cum era numită și mai devreme, delegarea ) înseamnă tehnica de a crea o nouă clasă din clasele existente prin includerea lor. Agregarea este adesea menționată și ca o „relație de proprietate” în sensul că „o mașină are o caroserie, roți și un motor”.
Obiectele imbricate ale unei clase noi sunt de obicei declarate private, ceea ce le face inaccesibile pentru programatorii de aplicații care lucrează cu clasa. Pe de altă parte, creatorul clasei poate modifica aceste obiecte fără a rupe codul client existent. În plus, înlocuirea obiectelor imbricate în timpul rulării programului vă permite să schimbați dinamic comportamentul acestuia. Mecanismul de moștenire nu are această flexibilitate, deoarece clasele derivate sunt supuse unor restricții care sunt verificate în timpul compilării.
Pe baza agregării se implementează tehnica delegării , atunci când sarcina atribuită unui obiect extern este delegată unui obiect intern specializat în rezolvarea unor probleme de acest gen.
Agregare : profesori - facultăți, profesorii rămân să trăiască după distrugerea facultății
Compoziție : universitate - facultăți, facultăți fără universitate mor.
Agregarea (agregarea prin referință) este o relație parțială-întreg între două obiecte egale, când un obiect (container) are o legătură cu un alt obiect. Ambele obiecte pot exista independent: dacă containerul este distrus, atunci conținutul său nu este.
profesor de clasă ; Departamentul de clasă { privat : Profesor * membri [ 5 ]; // Agregare, deoarece nici un operator de ștergere }; clasa Ehe // Exemplu de agregare { privat : Persoană & _partener1 ; // Enthaltener Teil. // Persoană de agregare & _partner2 ; // Enthaltener Teil. // Public de agregare : // Ehe constructor ( Persoană și partener1 , Persoană și partener2 ) : _partner1 ( partener1 ), _partner2 ( partener2 ) { } };Compoziția (agregarea după valoare) este o variantă mai strictă a agregării, atunci când obiectul inclus poate exista doar ca parte a containerului. Dacă containerul este distrus, atunci și obiectul inclus va fi distrus.
clasaDepartament ; _ universitate de clasă { privat : Facultatea departamentului [ 20 ]; // compoziție }; clasa Carburator ; masina de clasa { privat : Carburator * itsCarb ; public : Automobil () { itsCarb = Carburator nou ();} virtual ~ Automobile () { șterge itsCarb ;} // Compoziție din moment ce obiectul itsCarb va fi șters };