Ohjelmoinnissa uudelleenkäytettävä koodi on olemassa olevien ohjelmistojen käyttö uusien ohjelmistojen rakentamiseen uudelleenkäytettävyysperiaatteita käyttämällä. Koodin uudelleenkäytettävyyttä pidetään perustavanlaatuisena tuottavana toimintona tietotekniikkaintensiivisissä yrityksissä. Sitä edistetään oliokeskeisissä järjestelmissä luomalla suhteita luokkien välillä. Näiden suhteiden luomiseksi olio-ohjelmoinnissa on kaksi perustavaa tapaa - Perintö ja Koostumus. Perinnöksen toteuttaminen on yksi tapa luokkia suhteuttaa toisiinsa, mutta OOP tarjoaa uudenlaisen suhteen luokkien välillä, jota kutsutaan koostumukseksi. Luomalla suhteen uusien ja olemassa olevien luokkien välille, uusi luokka voi periä tai upottaa koodin yhdestä tai useammasta olemassa olevasta luokasta.
OOP: ssa periminen on menetelmä, jolla objekti saa yhden tai useamman muun objektin ominaisuudet. Se on yksi tehokkaimmista työkaluista koodin uudelleenkäytettävyyden toteuttamisessa OOP: ssa. Perintöä käytettäessä voidaan luoda uusi luokka luomalla vanhempien ja lasten suhteet olemassa oleviin luokkiin. Objektin koostumus on vaihtoehto luokan perinnölle. Kohteen käyttäminen toisessa objektissa kutsutaan koostumukseksi. Usein haluat käyttää objektia kentällä toisen luokan sisällä, koska on helppo luoda monimutkaisia luokkia käyttämällä aiemmin kirjoitettuja, hyvin suunniteltuja luokkia komponenteina. Tätä kutsutaan koostumukseksi. No, sekä perintö että koostumus tarjoavat monissa tapauksissa vastaavan toiminnallisuuden, esineiden koostumus on parempi uudelleenkäyttömalli kuin luokan perintö. Tässä artikkelissa verrataan kahta lähestymistapaa.
Perintö on yksi tehokkaimmista työkaluista koodin uudelleenkäytettävyyden toteuttamisessa olio-ohjelmointiin. Se viittaa toiminnallisuuteen, jolla yksi esine hankkii yhden tai useamman muun objektin ominaisuudet. Perintö C ++: ssa tarkoittaa, että voit luoda luokkia, jotka johtavat attribuuttinsa olemassa olevista luokista. Tämä tarkoittaa, että erikoistut luokkaan luomaan luokkien välinen suhde, joka johtaa vahvaan kytkentään perus- ja johdettujen luokkien välillä. Perinnön toteuttaminen edistää koodin uudelleenkäytettävyyttä, koska olemassa olevista luokista luodaan uusia luokkia. Luokan perintö helpottaa myös uudelleen käytettävän toteutuksen muokkaamista. Mutta luokan perinnöllä on myös joitain haittapuolia. Ensinnäkin, koska perintö määritetään käännöshetkellä, et voi muuttaa vanhemmaluokkilta perittyjä toteutuksia ajon aikana.
OOP tarjoaa vielä yhden suhteen luokkien välillä, jota kutsutaan koostumukseksi, joka tunnetaan myös nimellä "has-a-suhde". Jos yhden objektin ominaisuuksien on oltava osa toista objektia, suhde vaatii koostumusta. Luodaksesi luokan olemassa olevista luokista, jokaisen luokan kohde tulee julistaa uuden luokan jäseneksi. Yksinkertaisin sanoin, esineen käyttäminen toisessa objektissa kutsutaan koostumukseksi. Voit usein käyttää objektia kentässä toisen luokan sisällä. Käytät luokan sisällä olevaa objektia koostumuksessa. Toisin kuin luokan perintö, objektikoostumus määritetään dynaamisesti ajon aikana objektien hankkimalla viitteitä muihin kohteisiin. Lisäksi koostumus tarjoaa paremman tavan käyttää objektia vaarantamatta objektin sisäisiä yksityiskohtia, jolloin koostumus on hyödyllinen.
Vaikka sekä perintö että koostumus edistävät koodin uudelleenkäytettävyyttä oliokeskeisessä järjestelmässä luomalla suhteita luokkien välillä ja tarjoavat monella tapaa vastaavan toiminnallisuuden, he käyttävät erilaisia lähestymistapoja. Perinnöllä voit luoda luokkia, jotka johtavat niiden ominaisuudet olemassa olevista luokista, joten kun käytät perintöä luokan luomiseen, voit laajentaa olemassa olevaa luokkaa. Päinvastoin, esineen käyttäminen toisessa objektissa tunnetaan koostumuksena. Objektin koostumus on vaihtoehto luokan perinnölle. Jos yhden objektin ominaisuuksien on oltava osa toista objektia, suhde vaatii koostumusta.
Perinnöissä erikoistut luokkaan luomaan luokkien väliseen "is-a" -suhteeseen, mikä johtaa vahvaan kytkentään perus- ja johdettujen luokkien välillä. Se mahdollistaa luokkien hierarkian suunnittelun ja hierarkian alkaa yleisimmältä luokalta ja siirtyy tarkempiin luokkiin. Perinnöllisyyden avulla yhden luokan jäsentoiminnoista tulee toisen luokan ominaisuuksia koodamatta niitä nimenomaisesti luokassa. Yhdistelmässä käytät luokan sisällä olevaa objektia, ja kaikki objektia koskevat pyynnöt välitetään objektille. Sisäiset yksityiskohdat eivät ole alttiina toisilleen koostumuksessa, joten se on "on-a" -suhde.
Luokan perintö määritetään käännöshetkellä, joten et voi muuttaa vanhemmaluokilta perittyjä toteutuksia ajon aikana. Koska perintö altistaa alaluokan vanhemman toteutuksen yksityiskohdille, se rikkoa koteloinnin usein. Vanhemman luokan muutokset heijastuvat alaluokassa, mikä voi aiheuttaa ongelmia, kun yrität käyttää alaluokkaa uudelleen. Objektikoostumus päinvastoin määritetään dynaamisesti ajon aikana, jolloin objektit hankkivat viittauksia muihin kohteisiin. Ja koska esineisiin pääsee yksinomaan niiden rajapintojen kautta, se ei riko kotelointia. Mikä tahansa objekti voidaan korvata ajon aikana toisella objektilla, kunhan se on saman tyyppinen.
Usein haluat käyttää objektia kentällä toisen luokan sisällä, koska monimutkaisia luokkia on helpompi luoda käyttämällä aiemmin kirjoitettuja, hyvin suunniteltuja luokkia. Tässä käytät sävellystä. Perintö tarjoaa tavan käyttää koodia uudelleen laajentamalla luokkaa pienellä vaivalla. Siksi perintö on arvokas työkalu suhteiden luomiseen luokkien välillä. Yleensä on edullista käyttää koostumusta, koska se tarjoaa tavan käyttää objektia vaarantamatta kohteen sisäisiä yksityiskohtia, missä koostumus on hyödyllinen. Perintö ei ole ongelmatonta, mutta kuten perintö, esinekoostumus herättää samanlaisia suorituskykyongelmia esineiden luomisessa ja tuhoamisessa.