Što je sastav nad nasljeđivanjem?

Kompozicija preko nasljeđivanja je metodologija programiranja koja se koristi u objektno orijentiranim programskim jezicima kako bi se uspostavili dinamičniji i promjenjiviji odnosi između objekata u aplikaciji. Osnovni format za kompoziciju preko nasljeđivanja je uključivanje instance objekta unutar drugog objekta. Ovo se izrazito razlikuje od objektno orijentirane metode nasljeđivanja, ali može poslužiti istoj svrsi u mnogim modelima. Prednosti kompozicije u odnosu na nasljeđivanje uključuju dobro definirane granice između složenih objekata i objekata omotača, mogućnost promjene implementacije objekta bez utjecaja na cijelu hijerarhiju nasljeđivanja i manje restriktivan okvir za početni dizajn programa. Neke od komplikacija, međutim, mogle bi uključivati ​​poteškoće u serijalizaciji i pretjerano složene strukture u velikim, uspostavljenim programima.

U objektno orijentiranom programiranju, jedna od značajki koju je važno uspostaviti tijekom dizajna je kako se različiti objekti međusobno odnose. Nasljeđivanje je središnji mehanizam u objektno orijentiranom programiranju i omogućuje jednom objektu da naslijedi sve podatke i metode svog roditelja, koje potom može dodati, modificirati ili proširiti vlastitom implementacijom. Primjer dizajna koji se temelji na nasljeđivanju mogao bi biti program koji ima jednu glavnu klasu koja definira automobil i modelira neke generičke atribute svih automobila. Klasa za svaku pojedinu marku automobila tada se izrađuje kao potomak glavne klase, ali definira specifične informacije, kao što su veličina motora, kapacitet goriva ili druge informacije specifične za tu određenu marku automobila.

Kompozicija se izražava uključivanjem instanci objekta unutar drugih objekata. Ako postoji glavna klasa koja definira generički automobil, tada bi umjesto stvaranja podklasa za određene marke automobila, glavna klasa mogla sadržavati instance drugih objekata koji preciznije definiraju automobil. To bi moglo značiti da bi glavna klasa automobila mogla sadržavati objekt za tip motora i jedan za kapacitet goriva, koji bi se postavili kada se klasa koristi za stvaranje instance određene marke automobila.

Sa kompozicijom preko nasljeđivanja, objekti koji su sadržani u glavnoj klasi nisu izravno povezani s glavnom klasom, dajući programerima slobodu da mijenjaju način rada pojedinačnih objekata. Problem koji kompozicija nad nasljeđivanjem može pomoći spriječiti je situacija u kojoj stablo nasljeđivanja može biti pretjerano duboko, što znači da bi bilo koje modifikacije klase u stablu mogle zahtijevati promjene niz duljinu stabla. Nemaju svi objektno orijentirani jezici podršku za višestruko nasljeđivanje, a kompozicija preko nasljeđivanja je metoda koja se može koristiti za zaobilaženje ovog ograničenja.