Nasljeđivanje vs sastav
Nasljeđivanje i sastav dva su važna koncepta koja se nalaze u OOP-u (objektno orijentirano programiranje). Jednostavno rečeno, i Sastav i Nasljeđivanje bave se pružanjem dodatnih svojstava ili ponašanja klasi. Nasljeđivanje je sposobnost klase da nasljeđuje svojstva i ponašanje od roditeljske klase proširivanjem. S druge strane, Sastav je sposobnost klase da sadrži podatke različitih klasa kao podatke članova.
Što je nasljeđivanje?
Kao što je gore spomenuto, Nasljeđivanje je sposobnost da klasa nasljeđuje svojstva i ponašanje od roditeljske klase proširivanjem. Nasljeđivanje u osnovi pruža ponovnu upotrebu koda omogućavajući proširivanje svojstava i ponašanja postojeće klase novo definiranom klasom. Ako se klasa A proširuje s B, tada se klasa B naziva roditeljska klasa (ili super klasa), a klasa A se zove podređena klasa (ili izvedena klasa / potklasa). U ovom primjeru scenarija, klasa A će naslijediti sve javne i zaštićene atribute i metode super klase (B). Podklasa može opcionalno nadjačati (pružiti novu ili proširenu funkcionalnost metodama) ponašanje naslijeđeno od roditeljske klase.
Nasljeđivanje predstavlja odnos "jest-a" u OOP-u. To u suštini znači da je A i B. Drugim riječima, B može biti klasa s općim opisom određenog stvarnog svijeta, ali A određuje određenu specijalizaciju. U stvarnom programskom problemu klasa Person mogla bi se proširiti i stvoriti klasu Employee. To se naziva specijalizacijom. Ali prvo biste također mogli stvoriti klasu Employee, a zatim je generalizirati i na Person klasu (tj. Generalizaciju). U ovom primjeru, Zaposleni će imati sva svojstva i ponašanje Osobe (tj. Zaposlenik je i Osoba) i može sadržavati i neke dodatne funkcionalnosti (dakle, Osoba nije uposlenik).
Što je sastav?
Sastav je sposobnost klase da sadrži podatke različitih klasa kao podatke članova. Na primjer, klasa A može sadržavati objekt klase B kao člana. Ovdje se sve javne metode (ili funkcije) definirane u B mogu izvesti unutar klase A. Klasa A postaje spremnik, dok klasa B postaje klasa koja se nalazi u sadržaju. Sastav se također naziva i Containership. U ovom se primjeru može reći da se klasa A sastoji od klase B. U OOP-u Sastav predstavlja odnos "ima-a". Važno je napomenuti da, iako spremnik ima pristup izvršavanju svih javnih metoda sadržane klase, nije u mogućnosti promijeniti ili pružiti dodatnu funkcionalnost. Kada je u pitanju problem u stvarnom svijetu programiranja, predmet klase TextBox može biti sadržan u obliku klase, i na taj način se može reći da obrazac sadrži TextBox (ili alternativno, obrazac je sastavljen od TextBoxa).
Koja je razlika između nasljeđivanja i sastava?
Iako su nasljeđivanje i sastav dva OOP koncepta, oni se prilično razlikuju u onome što dopuštaju programeru da postigne. Nasljeđivanje je sposobnost da klasa nasljeđuje svojstva i ponašanje od roditeljske klase proširivanjem, dok je Sastav sposobnost da klasa sadrži podatke različitih klasa kao članske podatke. Ako se klasa proširi, ona nasljeđuje sva javna i zaštićena svojstva / ponašanje i ta bi ponašanja mogla nadjačati potklasu. Ali ako je klasa sadržana u drugom, spremnik ne dobiva mogućnost promijeniti ili dodati ponašanje sadržanom. Nasljeđivanje predstavlja odnos "jeste-a" u OOP-u, dok Sastav predstavlja odnos "ima-a".