Programmeerimisel on korduvkasutatav kood olemasoleva tarkvara kasutamine uue tarkvara loomiseks, kasutades korduvkasutatavuse põhimõtteid. Koodi korduvkasutatavust peetakse infotehnoloogiamahukates ettevõtetes põhiliseks produktiivseks funktsionaalsuseks. Seda edendatakse objektorienteeritud süsteemides, luues klassidevahelisi suhteid. Objektorienteeritud programmeerimisel on nende suhete loomiseks kaks põhilist viisi - pärimine ja kompositsioon. Pärandi rakendamine on üks viis klasside seostamiseks, kuid OOP pakub klasside vahel uut tüüpi suhet, mida nimetatakse kompositsiooniks. Uute ja olemasolevate klasside vahelise seose loomisega saab uus klass pärida või manustada koodi ühest või enamast olemasolevast klassist.

OOP-is on pärimine metoodika, mille abil objekt omandab ühe või mitme teise objekti omadused. See on üks võimsamaid vahendeid koodi taaskasutatavuse rakendamisel OOP-is. Pärandi kasutamisel saab luua uue klassi, luues vanema ja lapse suhted olemasolevate klassidega. Objektide kompositsioon on alternatiiv klassipärandile. Objekti kasutamist teises objektis nimetatakse kompositsiooniks. Mitmel juhul võiksite kasutada objekti väljana teises klassis, kuna on keeruline luua keerukaid klasse, kasutades komponentidena eelnevalt kirjutatud, hästi kavandatud klasse. Seda nimetatakse kompositsiooniks. Nii pärand kui ka kompositsioon pakuvad paljudel juhtudel samaväärset funktsionaalsust, objektide kompositsioon on parem korduskasutusmudel kui klassi pärand. Selles artiklis võrreldakse kahte lähenemisviisi.

Mis on pärimine?

Pärimine on üks võimsamaid vahendeid koodide taaskasutatavuse rakendamisel objektorienteeritud programmeerimisel. See viitab funktsionaalsusele, mille abil üks objekt omandab ühe või mitme teise objekti omadused. Pärimine C ++ tähendab, et saate luua klasse, mis tuletavad nende atribuudid olemasolevatest klassidest. See tähendab, et olete spetsialiseerunud klassile, et luua klassidevaheline seos, mille tulemuseks on tugev seos põhi- ja tuletatud klasside vahel. Pärandi rakendamine soodustab koodi korduvkasutatavust, kuna olemasolevatest klassidest luuakse uued klassid. Klassipärimine hõlbustab ka rakenduse taaskasutamise modifitseerimist. Kuid klassipärimisel on ka miinuseid. Esiteks, kuna pärand määratletakse kompileerimise ajal, ei saa te vanemklassidest päritud rakendusi jooksval ajal muuta.

Mis on kompositsioon?

OOP pakub veel ühte suhet klasside vahel, mida nimetatakse kompositsiooniks, mida tuntakse ka kui oma-seost. Kui ühe objekti omadused peavad olema osa teisest objektist, nõuab suhe kompositsiooni loomist. Klassi moodustamiseks olemasolevatest klassidest tuleks iga klassi objekt kuulutada uue klassi liikmeks. Lihtsamalt öeldes nimetatakse objekti kasutamist teises objektis kompositsiooniks. Mitu korda võiksite kasutada mõnda objekti mõne teise klassi väljana. Kasutate kompositsioonis klassi sees olevat eset. Erinevalt klassipärandist määratletakse objektide koostis dünaamiliselt töö ajal, kuna objektid omandavad viited teistele objektidele. Lisaks pakub kompositsioon paremat viisi objekti kasutamiseks, ilma et see kahjustaks objekti sisemisi detaile, st kompositsioon on kasulik.

Erinevus kompositsiooni ja pärimise vahel

Lähenemisviis

Ehkki nii pärand kui ka kompositsioon soodustavad koodide taaskasutatavust objektorienteeritud süsteemis, luues klassidevahelisi suhteid ja pakuvad mitmel viisil samaväärset funktsionaalsust, kasutavad nad erinevaid lähenemisviise. Pärimise abil saate luua klasse, mis tuletavad nende atribuudid olemasolevatest klassidest, nii et klasside loomiseks pärimise abil saate olemasolevat klassi laiendada. Vastupidi, objekti kasutamist teises objektis nimetatakse kompositsiooniks. Objektide kompositsioon on alternatiiv klassipärandile. Kui ühe objekti omadused peavad olema osa teisest objektist, nõuab suhe kompositsiooni loomist.

Suhe

Pärimise korral spetsialiseerute klassile klasside vahelise is-a-seose loomiseks, mille tulemuseks on tugev sidumine põhi- ja tuletatud klasside vahel. See võimaldab kujundada klasside hierarhiat ning hierarhia algab kõige üldisemast klassist ja liigub konkreetsematesse klassidesse. Pärandi rakendamisel muutuvad ühe klassi liikmefunktsioonid teise klassi omadusteks, ilma et nad klassis seda otseselt kodeeriks. Kompositsioonis kasutate klassi sees olevat objekti ja kõik objektiga seotud taotlused edastatakse objektile. Sisemised detailid ei ole kompositsioonis üksteisega kokku puutunud, seega on see suhe, millel on olemas.

Rakendamine

Klassi pärand määratletakse kompileerimise ajal, nii et vanemklassidelt päritud rakendusi ei saa tööaja jooksul muuta. Kuna pärand annab alamklassi üksikasjalikuma teabe oma vanema rakendamise kohta, rikub see sageli kapseldumist. Kõik muudatused vanemklassis kajastuvad alaklassis, mis võib tekitada probleeme, kui proovite alaklassi uuesti kasutada. Objektide kompositsioon, vastupidi, on dünaamiliselt määratletud töö ajal, kuna objektid omandavad viited teistele objektidele. Ja kuna objektidele pääseb juurde ainult nende liideste kaudu, ei häiri see kapseldamist. Mis tahes objekti saab käituse ajal teise objektiga asendada, kui sellel on sama tüüp.

Koostis vs pärand: võrdlusdiagramm

Kompositsiooni kokkuvõte pärimise kohta

Mitmel juhul soovite objekti kasutada väljana teises klassis, kuna keerukaid klasse on lihtsam luua eelnevalt kirjutatud, hästi kavandatud klasside abil. Siin kasutate kompositsiooni. Pärimine annab võimaluse koodi taaskasutamiseks, laiendades klassi minimaalse pingutusega, see on põhjus, miks pärand on väärtuslik vahend klassidevaheliste suhete loomisel. Üldiselt on eelistatav kasutada kompositsiooni, kuna see annab võimaluse kasutada objekti, kahjustamata objekti sisemisi detaile, kus kompositsioon on kasulik. Pärimine ei ole probleemideta, kuid sarnaselt pärandiga tekitab esemete kompositsioon sarnaseid toimimisprobleeme seoses esemete loomise ja hävitamisega.

Viited

  • Kujutise krediit: https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)#/media/File:Multilevel_Inheritance.jpg
  • Kujutise krediit: https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/AggregationAndComposition.svg/500px-AggregationAndComposition.svg.png
  • Bulka, Dov ja David Mayhew. Tõhus C ++: jõudluse programmeerimise tehnikad. Boston, Massachusetts: Addison-Wesley, 2000. Trükk
  • Gamma, Erich. Kujundusmustrid: korduvkasutatava objektorienteeritud tarkvara elemendid. London: Pearson Education, 1995. Trükk
  • Ganesh, S. G. 60 näpunäidet objektorienteeritud programmeerimise kohta. NYC: Tata McGraw-Hill Education, 2007. Trükk
  • Farrell, Joyce. Objektorienteeritud programmeerimine C ++ abil. Boston, Massachusetts: Cengage, 2008. Trükk