Perintö vs. konttikuljetus
Perintö ja säilöntä ovat kaksi tärkeää käsitettä, jotka löytyvät OOP:sta (Object Oriented Programming Esimerkki: C++). Yksinkertaisesti sanottuna sekä Containership että Inheritance 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 säilöntä 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) emoluok alta perityn toiminnan. Perinnöllisyys edustaa "on-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 Containership?
Säilöntä 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. Konttia kutsutaan myös koostumukseksi. Tässä esimerkissä voidaan sanoa, että luokka A koostuu luokasta B. OOP:ssa Containership 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).
Perinnön ja konttien välinen ero
Vaikka perintö ja kontti ovat kaksi OOP-konseptia, ne ovat melko erilaisia siinä, mitä ne antavat ohjelmoijalle mahdollisuuden saavuttaa. Periytys tarkoittaa luokan kykyä periä ominaisuuksia ja käyttäytymistä emoluok alta laajentamalla sitä, kun taas säilöntä 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ä. Perintö edustaa "on-a" -suhdetta OOP:ssa, kun taas säilöntä edustaa "on-a" -suhdetta.