Ce este compoziția față de moștenire?

Compoziția peste moștenire este o metodologie de programare care este utilizată în limbajele de programare orientate pe obiect pentru a ajuta la stabilirea unor relații mai dinamice și mai variabile între obiectele dintr-o aplicație. Formatul de bază pentru compoziția peste moștenire este includerea unei instanțe a unui obiect în interiorul altui obiect. Aceasta este net diferită de metoda de moștenire orientată pe obiect, dar poate servi aceluiași scop în multe modele. Avantajele compoziției față de moștenire includ granițele bine definite între obiectele compuse și obiectele wrapper, capacitatea de a modifica implementarea unui obiect fără a afecta o întreagă ierarhie de moștenire și un cadru mai puțin restrictiv pentru proiectarea inițială a programului. Unele dintre complicații, totuși, ar putea include dificultăți în serializare și structuri prea complexe în programe mari, stabilite.

În programarea orientată pe obiecte, una dintre trăsăturile care este important de stabilit în timpul proiectării este modul în care diferitele obiecte se relaționează între ele. Moștenirea este un mecanism central în programarea orientată pe obiect și permite unui obiect să moștenească toate datele și metodele părintelui său, pe care apoi le poate adăuga, modifica sau extinde cu propria sa implementare. Un exemplu de design bazat pe moștenire ar putea fi cu un program care are o clasă principală care definește o mașină și modelează unele atribute generice ale tuturor mașinilor. Clasa pentru fiecare marcă individuală de mașină este apoi făcută ca descendentă a clasei principale, dar definește informații specifice, cum ar fi dimensiunea motorului, capacitatea de combustibil sau alte informații specifice acelei mărci de mașină.

Compoziția este exprimată prin includerea instanțelor de obiect în alte obiecte. Dacă există o clasă principală care definește o mașină generică, atunci în loc să creeze subclase pentru anumite mărci de mașini, clasa principală ar putea conține, în schimb, instanțe ale altor obiecte care definesc mașina mai specific. Aceasta ar putea însemna că clasa principală de mașini ar putea conține un obiect pentru tipul de motor și unul pentru capacitatea de combustibil, care ar fi setat atunci când clasa este utilizată pentru a crea o instanță a unei anumite mărci de mașină.

Cu compoziția peste moștenire, obiectele care sunt conținute în clasa principală nu sunt direct legate de clasa principală, oferind dezvoltatorilor libertatea de a schimba modul în care funcționează obiectele individuale. O problemă pe care o poate preveni compoziția față de moștenire este o situație în care un arbore de moștenire poate fi excesiv de adânc, ceea ce înseamnă că orice modificare a unei clase din arbore ar putea necesita modificări pe lungimea arborelui. Nu toate limbajele orientate obiect au suport pentru moșteniri multiple, iar compoziția peste moștenire este o metodă care poate fi folosită pentru a rezolva această restricție.