Razlika med sestavo in dednostjo

Pri programiranju je koda za večkratno uporabo uporaba obstoječe programske opreme za izdelavo nove programske opreme po načelih ponovne uporabe. Ponovna uporaba kode velja za temeljno produktivno funkcionalnost v podjetjih, ki intenzivno uporabljajo informacijsko tehnologijo. Spodbuja se v objektno usmerjenih sistemih z vzpostavljanjem razmerij med razredi. Obstajata dva temeljna načina za vzpostavitev teh odnosov v objektno usmerjenem programiranju - Dedovanje in Sestava. Izvajanje dedovanja je eden od načinov za povezavo razredov, vendar OOP zagotavlja novo vrsto razmerja med razredi, imenovano sestava. Z vzpostavljanjem razmerja med novimi in obstoječimi razredi lahko novi razred podeduje ali vdela kodo iz enega ali več obstoječih razredov.

V OOP je dedovanje metodologija, s katero predmet pridobi značilnosti enega ali več drugih predmetov. Je eno najmočnejših orodij za izvajanje ponovne uporabe kode v OOP. Pri uporabi dedovanja se lahko ustvari nov razred z vzpostavljanjem odnosov med starši in otroki z obstoječimi razredi. Objektna sestava je alternativa razrednemu dedovanju. Uporaba predmeta znotraj drugega predmeta je znana kot sestava. Velikokrat bi želeli objekt uporabiti kot polje v drugem razredu, ker je enostavno ustvariti zapletene razrede z uporabo predhodno napisanih, dobro zasnovanih razredov kot komponent. Temu se reče sestava. No, tako dedovanje kot sestava zagotavljata enakovredno funkcionalnost v mnogih primerih, sestava predmetov je boljši model ponovne uporabe kot dedovanje razredov. Ta članek primerja dva pristopa.

Kaj je dedovanje?

Dedovanje je eno najmočnejših orodij pri izvajanju ponovne uporabe kode v objektno usmerjenem programiranju. Nanaša se na funkcionalnost, s katero en predmet pridobi značilnosti enega ali več drugih predmetov. Dedovanje v C ++ pomeni, da lahko ustvarite razrede, ki izhajajo iz njihovih atributov iz obstoječih razredov. To pomeni, da ste specializirani za ustvarjanje razmerja med-razredi med razredoma, kar ima za posledico močno povezavo med osnovnimi in izvedenimi razredi. Izvajanje dedovanja spodbuja ponovno uporabo kode, ker se iz obstoječih razredov ustvarjajo novi razredi. Dedovanje razreda omogoča tudi lažje spreminjanje uporabe, ki se ponovno uporablja. Toda razredno dedovanje ima tudi nekaj slabosti. Prvič, ker je dedovanje določeno v času prevajanja, ne morete spremeniti izvedb, podedovanih od nadrejenih razredov, med izvajanjem.

Kaj je sestava?

OOP ponuja še eno razmerje med razredimi, imenovanimi sestava, ki je znana tudi kot relacija has-a. Če morajo lastnosti enega predmeta biti del drugega predmeta, odnos zahteva sestavo. Za sestavljanje razreda iz obstoječih razredov je treba predmet vsakega razreda razglasiti za člana novega razreda. Z enostavnimi besedami je uporaba predmeta znotraj drugega predmeta znana kot sestava. Velikokrat boste morda želeli objekt uporabiti kot polje v drugem razredu. Uporabite predmet znotraj razreda v sestavi. Za razliko od dedovanja razredov se sestava predmetov dinamično definira med izvajanjem skozi predmete, ki pridobijo reference na druge predmete. Poleg tega kompozicija omogoča boljši način uporabe predmeta, ne da bi pri tem ogrozila notranje podrobnosti predmeta, torej tam, kjer je kompozicija uporabna.

Razlika med sestavo in dedovanjem

Pristop

Medtem ko tako dedovanje kot sestava spodbujata ponovno uporabo kode v objektno usmerjenem sistemu z vzpostavljanjem razmerij med razredi in na več načinov zagotavljata enakovredno funkcionalnost, uporabljajo različne pristope. Z dedovanjem lahko ustvarite razrede, ki izhajajo iz njihovih atributov iz obstoječih razredov, tako da se lahko med dedovanjem za ustvarjanje razreda razširite na obstoječi razred. Nasprotno, uporaba predmeta znotraj drugega predmeta je znana kot sestava. Objektna sestava je alternativa razrednemu dedovanju. Če morajo lastnosti enega predmeta biti del drugega predmeta, odnos zahteva sestavo.

Razmerje

Pri dedovanju ste specializirani razred, da ustvarite razmerje »je-a« med razredima, kar ima za posledico močno povezavo med osnovnimi in izvedenimi razredi. Omogoča oblikovanje hierarhije razredov, hierarhija pa se začne z najbolj splošnim razredom in se premakne na bolj specifične razrede. Z izvajanjem dedovanja članske funkcije iz enega razreda postanejo lastnosti drugega razreda, ne da bi jih izrecno kodirale znotraj razreda. V sestavi uporabljate predmet znotraj razreda in vse zahteve do predmeta se posredujejo predmetu. Notranje podrobnosti se kompozicijsko ne izpostavljajo, zato gre za razmerje "ima-a".

Izvajanje

Dedovanje razredov je določeno v času prevajanja, zato ne morete spremeniti izvedb, podedovanih od nadrejenih razredov, med izvajanjem. Ker dedovanje izpostavlja podrazred podrobnostim o izvajanju staršev, pogosto prekine enkapsulacijo. Vse spremembe v nadrejenem razredu se bodo odražale v podrazredu, kar lahko povzroči težave, ko poskusite ponovno uporabiti podrazred. Nasprotno, sestava predmetov se med izvajanjem dinamično definira s pomočjo predmetov, ki pridobijo reference na druge predmete. In ker do objektov dostopate izključno prek njihovih vmesnikov, to ne bo prekinilo zaklepanja. Vsak predmet lahko v času izvajanja zamenja drug predmet, če ima isti tip.

Sestava proti dedovanju: primerjalna shema

Povzetek sestave proti dedovanju

Velikokrat bi želeli objekt uporabiti kot polje v drugem razredu, ker je zapletene razrede lažje ustvariti s predhodno napisanimi, dobro zasnovanimi razredi. Tukaj uporabljate sestavo. Dedovanje omogoča način ponovne uporabe kode z razširitvijo razreda z minimalnimi napori, zato je dedovanje dragoceno orodje pri vzpostavljanju odnosov med razredi. Na splošno je bolje uporabiti sestavo, saj omogoča način uporabe predmeta, ne da bi pri tem ogrozili notranje podrobnosti predmeta, kjer je kompozicija uporabna. Dedovanje ni brez težav, ampak kot pri dedovanju tudi sestava predmetov povzroča podobne težave glede ustvarjanja in uničenja predmetov.