Nasljedstvo vs sastav
Nasljeđivanje i Kompozicija su dva važna koncepta koja se nalaze u OOP-u (Object Oriented Programming). Jednostavno rečeno, i Kompozicija i Nasljeđivanje bave se pružanjem dodatnih svojstava ili ponašanja klasi. Nasljeđivanje je sposobnost klase da naslijedi svojstva i ponašanje od nadređene klase tako što će je proširiti. S druge strane, Kompozicija je sposobnost klase da sadrži objekte različitih klasa kao podatke o članovima.
Šta je nasljeđe?
Kao što je gore spomenuto, nasljeđivanje je sposobnost klase da naslijedi svojstva i ponašanje od nadređene klase tako što će je proširiti. Nasljeđivanje u suštini pruža ponovnu upotrebu koda dozvoljavajući proširenje svojstava i ponašanja postojeće klase od strane novo definirane klase. Ako klasa A proširuje B, onda se klasa B naziva roditeljska klasa (ili super klasa), a klasa A naziva se podređena klasa (ili izvedena klasa/podklasa). U ovom primjeru scenarija, klasa A će naslijediti sve javne i zaštićene atribute i metode super klase (B). Potklasa može opciono nadjačati (omogućiti novu ili proširenu funkcionalnost metodama) ponašanje naslijeđeno od roditeljske klase.
Nasljeđivanje predstavlja odnos “je-a” u OOP-u. Ovo u suštini znači da je A takođe B. Drugim rečima, B može biti klasa sa opštim opisom određenog entiteta iz stvarnog sveta, ali A specificira određenu specijalizaciju. U problemu programiranja u stvarnom svijetu, klasa Person bi se mogla proširiti kako bi se stvorila klasa Employee. To se zove specijalizacija. Ali također možete prvo kreirati klasu Employee, a zatim je generalizirati i na klasu Person (tj.e. generalizacija). U ovom primjeru, Zaposleni će imati sva svojstva i ponašanje osobe (tj. Zaposleni je također Osoba) i može sadržavati neke dodatne funkcije (dakle, Osoba nije Zaposlenik) također.
Šta je kompozicija?
Sastav je sposobnost klase da sadrži objekte različitih klasa kao podatke o članovima. Na primjer, klasa A može sadržavati objekt klase B kao člana. Ovdje se sve javne metode (ili funkcije) definirane u B mogu izvršiti unutar klase A. Klasa A postaje kontejner, dok klasa B postaje sadržana klasa. Kompozicija se takođe naziva Kontejneri. U ovom primjeru, može se reći da je klasa A sastavljena od klase B. U OOP-u, Kompozicija predstavlja odnos “ima-a”. Važno je napomenuti da, iako kontejner ima pristup za izvršavanje svih javnih metoda sadržane klase, on nije u mogućnosti promijeniti ili pružiti dodatnu funkcionalnost. Kada je u pitanju problem programiranja u stvarnom svijetu, objekt klase TextBox može biti sadržan u klasi Form, pa se stoga može reći da Forma sadrži TextBox (ili alternativno, Forma je sastavljena od TextBoxa).
Koja je razlika između nasljeđa i sastava?
Iako su nasljeđivanje i sastav dva OOP koncepta, oni se prilično razlikuju u onome što omogućavaju programeru da postigne. Nasljeđivanje je sposobnost klase da naslijedi svojstva i ponašanje od nadređene klase proširenjem, dok je Kompozicija sposobnost klase da sadrži objekte različitih klasa kao podatke o članovima. Ako je klasa proširena, ona nasljeđuje sva javna i zaštićena svojstva/ponašanje i ta ponašanja mogu biti nadjačana od strane potklase. Ali ako je klasa sadržana u drugoj, kontejner nema mogućnost da promijeni ili doda ponašanje sadržanom. Nasljeđivanje predstavlja odnos “je-a” u OOP-u, dok kompozicija predstavlja “ima-a” odnos.