Erinevus pärimise ja koostise vahel

Erinevus pärimise ja koostise vahel
Erinevus pärimise ja koostise vahel

Video: Erinevus pärimise ja koostise vahel

Video: Erinevus pärimise ja koostise vahel
Video: Kuidas kinnitada põrandaliistu liimiga? 2024, November
Anonim

Pärimine vs koostis

Pärimine ja koosseis on kaks olulist OOP-i (Object Oriented Programming) mõistet. Lihtsam alt öeldes tegelevad nii koosseis kui ka pärand klassile täiendavate omaduste või käitumise pakkumisega. Pärand on klassi võime pärida vanemklassi omadusi ja käitumist seda laiendades. Teisest küljest on kompositsioon 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) põhiklassilt päritud käitumise.

Pärimine tähistab 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 kompositsioon?

Kompositsioon on klassi võime sisaldada liikmeandmetena erinevate 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. Kompositsiooni nimetatakse ka konteineriteks. Selles näites võib öelda, et klass A koosneb klassist B. OOP-is esindab koosseis suhet "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).

Mis vahe on pärimisel ja koostisel?

Kuigi pärimine ja koosseis 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, laiendades seda, samas kui koosseis 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 koosseis tähistab suhet "on-a".

Soovitan: