U programiranju koda za višekratnu upotrebu je upotreba postojećeg softvera za izgradnju novog softvera koristeći principe ponovne upotrebe. Ponovna upotreba koda smatra se temeljnom produktivnom funkcionalnošću u tvrtkama koje intenzivno koriste informacijske tehnologije. To se promovira u objektno orijentiranim sustavima uspostavljanjem odnosa između klasa. Postoje dva temeljna načina uspostavljanja tih odnosa u objektno orijentiranom programiranju - Nasljeđivanje i Sastav. Provedba nasljeđivanja jedan je od načina povezivanja klasa, ali OOP pruža novu vrstu odnosa između klasa koji se naziva sastav. Uspostavljanjem odnosa između novih i postojećih klasa, nova klasa može naslijediti ili ugraditi kod iz jedne ili više postojećih klasa.
U OOP-u je nasljeđivanje metodologija kojom objekt stječe karakteristike jednog ili više drugih objekata. To je jedan od najmoćnijih alata za primjenu ponovne upotrebe koda u OOP-u. Kada se koristi nasljeđivanje, može se stvoriti nova klasa uspostavljanjem odnosa roditelj-dijete s postojećim klasama. Sastav objekta je alternativa nasljeđivanju klasa. Upotreba objekta unutar drugog objekta poznata je kao sastav. U mnogim prilikama želite koristiti objekt kao polje unutar druge klase jer je lako stvoriti složene klase koristeći prethodno napisane, dobro dizajnirane klase kao komponente. To se zove sastav. Pa, i nasljeđivanje i sastav pružaju jednaku funkcionalnost u mnogim slučajevima, sastav objekta je bolji model ponovne uporabe od nasljeđivanja klasa. Ovaj članak uspoređuje dva pristupa.
Nasljeđivanje je jedan od najmoćnijih alata za primjenu ponovne upotrebe koda u objektno orijentiranom programiranju. Odnosi se na funkcionalnost kojom jedan objekt stječe karakteristike jednog ili više drugih objekata. Nasljeđivanje u C ++ znači da možete stvoriti klase koje dobivaju njihove atribute iz postojećih klasa. To znači da ste specijalizirali klasu da biste stvorili odnos-klasa između klasa što rezultira snažnom povezanošću između osnovnih i izvedenih klasa. Primjena nasljeđivanja promiče ponovnu upotrebu koda jer se iz postojećih klasa stvaraju nove klase. Nasljeđivanje klase također olakšava modifikaciju ponovne upotrebe. No, nasljeđivanje klase ima i neke nedostatke. Prvo, s obzirom da je nasljeđivanje definirano u vrijeme prevođenja, ne možete promijeniti implementacije naslijeđene od roditeljskih klasa u vrijeme izvođenja..
OOP pruža još jedan odnos između klasa koji se naziva sastav, koji je također poznat kao odnos "veza". Ako značajke jednog objekta moraju biti dio drugog objekta, odnos zahtijeva sastav. Za sastavljanje klase iz postojećih klasa treba objekt svake klase proglasiti članom nove klase. Jednostavnim riječima, korištenje predmeta unutar drugog objekta poznato je kao sastav. Mnogo puta biste trebali koristiti objekt kao polje unutar druge klase. Koristite objekt unutar klase u sastavu. Za razliku od nasljeđivanja klasa, sastav objekta se dinamički definira tijekom izvođenja kroz objekte koji stječu reference na druge objekte. Pored toga, kompozicija omogućuje bolji način korištenja objekta bez ugrožavanja unutarnjih pojedinosti objekta, to jest gdje je sastav koristan.
Iako nasljeđivanje i sastav promiču ponovnu upotrebu koda u objektno orijentiranom sustavu uspostavljanjem odnosa između klasa i pružaju jednaku funkcionalnost na više načina, oni koriste različite pristupe. S nasljeđivanjem možete stvoriti klase koje dobivaju njihove atribute iz postojećih klasa, tako da dok pomoću nasljeđivanja možete stvoriti klasu, možete se proširiti na postojeću klasu. Naprotiv, korištenje objekta unutar drugog objekta poznato je kao sastav. Sastav objekta je alternativa nasljeđivanju klasa. Ako značajke jednog objekta moraju biti dio drugog objekta, odnos zahtijeva sastav.
U nasljeđivanju ste specijalizirali klasu da biste stvorili odnos "is-a" između klasa što rezultira snažnom povezanošću između klase baze i izvedbe. Omogućuje oblikovanje hijerarhije klasa, a hijerarhija započinje s najopćenitijom klasom i prelazi na specifičnije klase. Primjenjujući nasljeđivanje, funkcije člana iz jedne klase postaju svojstva druge klase bez da ih eksplicitno kodiraju unutar klase. U sastavu, koristite objekt unutar klase i svi zahtjevi za objekt se prosljeđuju objektu. Unutarnji detalji nisu izloženi jedni drugima u sastavu, tako da je riječ o odnosu "koji ima".
Nasljeđivanje klase definirano je u trenutku prevođenja, tako da ne možete promijeniti implementacije naslijeđene od nadređenih klasa u vrijeme izvođenja. Budući da nasljeđivanje izlaže podrazred pojedinostima o provedbi roditelja, ono često prekida enkapsulaciju. Sve promjene u nadređenoj klasi odrazit će se u podrazredu što može stvoriti probleme prilikom pokušaja ponovne upotrebe podrazreda. Sastav objekta, naprotiv, definira se dinamično tijekom izvođenja kroz objekte koji dobivaju reference na druge objekte. A budući da se objektima pristupa isključivo kroz njihova sučelja, neće se prekinuti enkapsulacija. Bilo koji objekt može se tijekom izvođenja zamijeniti drugim objektom, pod uvjetom da ima istu vrstu.
U mnogim prilikama želite koristiti objekt kao polje unutar druge klase jer je složene klase lakše stvoriti pomoću prethodno napisanih, dobro osmišljenih klasa. Ovdje koristite sastav. Nasljeđivanje pruža način da se koda ponovo koristi proširivanjem klase uz minimalan napor, zato je nasljeđivanje vrijedan alat u uspostavljanju odnosa između klasa. Općenito, poželjnije je koristiti kompoziciju jer ona pruža način korištenja objekta bez ugrožavanja unutarnjih detalja objekta o kojem je sastav koristan. Nasljeđivanje nije bez problema, ali kao i nasljeđivanje, sastav predmeta izaziva slične probleme vezane uz stvaranje i uništavanje predmeta.