Perintö vs. koostumus
Perintö ja kokoonpano ovat kaksi tärkeää OOP:n (Object Oriented Programming) käsitettä. Yksinkertaisesti sanottuna sekä koostumus että perintö käsittelevät lisäominaisuuksien tai -käyttäytymisen tarjoamista luokalle. Periytys on luokan kykyä periä ominaisuuksia ja käyttäytymistä emoluok alta laajentamalla sitä. Toisa alta kokoonpano on luokan kyky sisältää eri luokkien objekteja jäsentietoina.
Mitä perintö on?
Kuten edellä mainittiin, periytyminen on luokan kykyä periä ominaisuuksia ja käyttäytymistä yläluok alta laajentamalla sitä. Periytys mahdollistaa koodin uudelleenkäytön mahdollistamalla olemassa olevan luokan ominaisuuksien ja toiminnan laajentamisen äskettäin määritellyllä luokalla. Jos luokka A laajentaa B:tä, luokkaa B kutsutaan pääluokaksi (tai superluokaksi) ja luokkaa A alaluokaksi (tai johdetuksi luokaksi/alaluokaksi). Tässä esimerkkiskenaariossa luokka A perii kaikki superluokan (B) julkiset ja suojatut attribuutit ja menetelmät. Alaluokka voi valinnaisesti ohittaa (tarjoaa uusia tai laajennettuja toimintoja menetelmille) yläluokasta perityn toiminnan.
Perinnöllisyys edustaa "is-a" -suhdetta OOP:ssa. Tämä tarkoittaa olennaisesti sitä, että A on myös B. Toisin sanoen B voi olla luokka, jolla on yleinen kuvaus tietystä reaalimaailman kokonaisuudesta, mutta A määrittelee tietyn erikoistumisen. Tosimaailman ohjelmointiongelmassa Person-luokkaa voitaisiin laajentaa työntekijäluokan luomiseksi. Tätä kutsutaan erikoistumiseksi. Mutta voit myös luoda ensin Työntekijä-luokan ja sitten yleistää sen myös Henkilö-luokalle (ts.e. yleistys). Tässä esimerkissä Työntekijällä on kaikki Henkilön ominaisuudet ja käyttäytyminen (eli työntekijä on myös henkilö) ja se voi sisältää myös joitain lisätoimintoja (eli henkilö ei ole työntekijä).
Mikä on sävellys?
Koostumus on luokan kykyä sisältää eri luokkien objekteja jäsentietoina. Esimerkiksi luokka A voi sisältää jäsenenä luokan B objektin. Tässä kaikki B:ssä määritellyt julkiset menetelmät (tai funktiot) voidaan suorittaa luokassa A. Luokasta A tulee kontti, kun taas luokasta B tulee sisäinen luokka. Koostumuksesta käytetään myös nimitystä Containership. Tässä esimerkissä voidaan sanoa, että luokka A koostuu luokasta B. OOP:ssa Koostumus edustaa "has-a" -suhdetta. On tärkeää huomata, että vaikka säilöllä on pääsy kaikkiin sisällytetyn luokan julkisiin menetelmiin, se ei voi muuttaa tai tarjota lisätoimintoja. Kun kyse on tosielämän ohjelmointiongelmasta, luokan TextBox objekti voi sisältyä luokkaan Form, ja näin ollen voidaan sanoa, että Form sisältää TextBoxin (tai vaihtoehtoisesti Form koostuu TextBoxista).
Mitä eroa on perinnöllä ja koostumuksella?
Vaikka perinnöllisyys ja kokoonpano ovat kaksi OOP-käsitettä, ne ovat melko erilaisia siinä, mitä ne antavat ohjelmoijalle mahdollisuuden saavuttaa. Periytys tarkoittaa luokan kykyä periä ominaisuuksia ja käyttäytymistä yläluokasta laajentamalla sitä, kun taas Koostumus on luokan kyky sisältää eri luokkien objekteja jäsentietoina. Jos luokkaa laajennetaan, se perii kaikki julkiset ja suojatut ominaisuudet/käyttäytymiset ja alaluokka voi ohittaa nämä käyttäytymiset. Mutta jos luokka sisältyy toiseen, säilö ei saa kykyä muuttaa tai lisätä sisältyvän käyttäytymistä. Perinnöllisyys edustaa "on-a" -suhdetta OOP:ssa, kun taas koostumus edustaa "on-a" -suhdetta.