Pärimine vs konteinerlaev
Pärimine ja konteiner on kaks olulist mõistet, mida OOP-is (objektorienteeritud programmeerimise näide: C++) leidub. Lihtsam alt öeldes tegelevad nii konteineri kui ka pärandusega klassile täiendavate omaduste või käitumise pakkumine. Pärand on klassi võime pärida vanemklassi omadusi ja käitumist seda laiendades. Teisest küljest on konteineri sisu klassi võime sisaldada liikmeandmetena eri klasside objekte.
Mis on pärimine?
Nagu eespool mainitud, on pärimine klassi võime pärida atribuudid ja käitumise ülemklassilt seda laiendades. Pärimine pakub sisuliselt koodi taaskasutamist, võimaldades laiendada olemasoleva klassi omadusi ja käitumist äsja määratletud klassi võrra. Kui klass A laiendab B-d, siis klassi B nimetatakse ülemklassiks (või superklassiks) ja klassi A nimetatakse alamklassiks (või tuletatud klassiks/alamklassiks). Selle näite stsenaariumi korral pärib klass A kõik superklassi (B) avalikud ja kaitstud atribuudid ja meetodid. Alamklass võib valikuliselt alistada (pakkuda meetoditele uut või laiendatud funktsionaalsust) vanemklassilt päritud käitumist. Pärand esindab OOP-is suhet "on-a". See tähendab sisuliselt, et A on ka B. Teisisõnu, B võib olla klass, millel on teatud reaalmaailma olemi üldine kirjeldus, kuid A määrab teatud eriala. Reaalse maailma programmeerimisprobleemi korral saab klassi Isik laiendada, et luua klass Töötaja. Seda nimetatakse spetsialiseerumiseks. Kuid võite ka esm alt luua klassi Töötaja ja seejärel üldistada selle ka klassiks Isik (st.e. üldistus). Selles näites on töötajal kõik Isiku omadused ja käitumine (st töötaja on ka isik) ning see võib sisaldada ka mõningaid lisafunktsioone (seega isik ei ole töötaja).
Mis on konteinerlaevandus?
Containership on klassi võime sisaldada liikmeandmetena eri klasside objekte. Näiteks võib klass A liikmena sisaldada klassi B objekti. Siin saab kõiki B-s määratletud avalikke meetodeid (või funktsioone) täita klassis A. Klassist A saab konteiner, klassist B aga suletud klass. Konteinerit nimetatakse ka kompositsiooniks. Selles näites võib öelda, et klass A koosneb klassist B. OOP-is tähistab konteineri suhe "has-a". Oluline on märkida, et kuigi konteineril on juurdepääs kõigi sisalduva klassi avalike meetodite täitmiseks, ei saa see muuta ega pakkuda täiendavaid funktsioone. Kui tegemist on reaalse maailma programmeerimisprobleemiga, võib klassis Form sisalduda objekt klassist TextBox ja seega võib öelda, et vorm sisaldab tekstikasti (või teise võimalusena koosneb vorm TextBoxist).
Erinevus pärimise ja konteineri vahel
Kuigi pärand ja konteiner on kaks OOP-i mõistet, on need programmeerijal saavutatavas osas üsna erinevad. Pärand on klassi võime pärida atribuute ja käitumist vanemklassilt seda laiendades, samas kui konteiner on klassi võime sisaldada liikmeandmetena eri klasside objekte. Kui klassi laiendatakse, pärib see kõik avalikud ja kaitstud omadused/käitumine ning alamklass võib selle käitumise tühistada. Kuid kui klass sisaldub teises, ei saa konteiner võimet muuta või lisada sisalduva käitumist. Pärand tähistab OOP-is suhet "on-a", samas kui konteineri staatus tähistab suhet "on-a".