Pärimine vs kompositsioon
Pärand ja kompositsioon on OOP-is (Object Oriented Programming) leitud kaks olulist mõistet. Lihtsamalt öeldes käsitlevad nii kompositsioon kui ka pärimine klassile täiendavate omaduste või käitumise pakkumist. Pärimine on klassi võime pärida vanemklassilt omadusi ja käitumist, laiendades seda. Teisest küljest on kompositsioon klassi võime sisaldada liikmesandmetena erinevate klasside objekte.
Mis on pärimine?
Nagu ülalpool mainitud, on pärimine klassi võime pärida vanemklassilt omadusi ja käitumist, laiendades seda. Pärimine pakub sisuliselt koodi taaskasutamist, võimaldades olemasoleva klassi omadusi ja käitumist laiendada äsja määratletud klassile. Kui klass A laieneb B-le, siis nimetatakse klassi B vanemklassiks (või superklassiks) ja klassi A lapseklassiks (või tuletatud klassiks / alamklassiks). Selle näitestsenaariumi korral pärib klass A superklassi (B) kõik avalikud ja kaitstud atribuudid ja meetodid. Alamklass võib valikuliselt alistada vanemklassilt päritud käitumise (pakkuda meetoditele uut või laiendatud funktsionaalsust).
Pärimine tähistab OOP-is suhet. See tähendab sisuliselt seda, et A on ka B. Teisisõnu, B võib olla klass, millel on teatud reaalse maailma olemi üldine kirjeldus, kuid A määratleb teatud spetsialiseerumise. Reaalses maailmas programmeerimisprobleemide korral võiks laiendada Isikuklassi töötajaklassi loomiseks. Seda nimetatakse spetsialiseerumiseks. Kuid võite ka kõigepealt luua töötajaklassi ja seejärel üldistada selle ka isikuklassiks (st üldistada). Selles näites on töötajal kõik isiku omadused ja käitumine (s.t töötaja on ka isik) ning see võib sisaldada ka mõnda muud funktsionaalsust (seega pole isik ka töötaja).
Mis on kompositsioon?
Koosseis on klassi võime sisaldada liikmesandmetena erinevate klasside objekte. Näiteks võib klass A liigena sisaldada klassi B objekti. Klassis A saab täita kõiki B-s määratletud avalikke meetodeid (või funktsioone). Klassist A saab konteiner, klassist B aga suletud klass. Kompositsiooni nimetatakse ka mahutiks. Selles näites võib öelda, et klass A koosneb klassist B. OOP-is tähistab kompositsioon “on-on” suhet. Oluline on märkida, et kuigi konteineril on juurdepääs kõigi suletud klassi avalike meetodite käivitamiseks, ei saa see muuta ega pakkuda täiendavaid funktsioone. Reaalse maailma programmeerimisprobleemi korral võib klassi TextBox objekt kuuluda klassivormi ja seega võib öelda, et vorm sisaldab tekstiboksi (või alternatiivina, kui vorm koosneb tekstikastist).
Mis vahe on pärimisel ja kompositsioonil??
Ehkki pärimine ja kompositsioon on kaks OOP-kontseptsiooni, on nad programmeerija saavutamisel üsna erinevad. Pärimine on klassi võime pärida vanusklassi omadusi ja käitumist selle laiendamise teel, samas kui kompositsioon on klassi võime sisaldada liikmesandmetena erinevate klasside objekte. Klassi laiendamisel pärib see kõiki avalikke ja kaitstud omadusi / käitumist ning alaklass võib selle käitumise üle tähtsustada. Kuid kui klass sisaldub teises, ei saa konteiner võimalust suletud olekus käitumist muuta ega sellele käitumist lisada. Pärimine tähistab OOP-is suhet, samal ajal kui kompositsioon tähistab suhet.