Dedovanje proti sestavi
Dedovanje in sestavljanje sta dva pomembna pojma, ki ju najdemo v OOP (Object Oriented Programming). Preprosto povedano, sestava in dedovanje ukvarjata z zagotavljanjem dodatnih lastnosti ali vedenja razredu. Dedovanje je zmožnost razreda, da podeduje lastnosti in vedenje od nadrejenega razreda tako, da ga razširi. Po drugi strani pa je sestava zmožnost razreda, da vsebuje predmete različnih razredov kot podatke o članih.
Kaj je dedovanje?
Kot je omenjeno zgoraj, je dedovanje zmožnost razreda, da podeduje lastnosti in vedenje od nadrejenega razreda tako, da ga razširi. Dedovanje v bistvu zagotavlja ponovno uporabo kode tako, da omogoča razširitev lastnosti in obnašanja obstoječega razreda z na novo definiranim razredom. Če razred A razširi B, se razred B imenuje nadrejeni razred (ali nadrazred), razred A pa podrejeni razred (ali izpeljani razred/podrazred). V tem primeru scenarija bo razred A podedoval vse javne in zaščitene atribute in metode nadrazreda (B). Podrazred lahko po želji preglasi (zagotovi novo ali razširjeno funkcionalnost metod) vedenje, podedovano od nadrejenega razreda.
Dedovanje predstavlja razmerje »je-a« v OOP. To v bistvu pomeni, da je A tudi B. Z drugimi besedami, B je lahko razred s splošnim opisom določene entitete resničnega sveta, A določa določeno specializacijo. V problemu programiranja v resničnem svetu bi lahko razred Oseba razširili, da bi ustvarili razred Uslužbenec. Temu se reče specializacija. Lahko pa tudi najprej ustvarite razred zaposleni in ga nato posplošite tudi na razred osebe (tj.e. posploševanje). V tem primeru bo imel zaposleni vse lastnosti in vedenje osebe (tj. zaposleni je tudi oseba) in lahko vsebuje tudi nekatere dodatne funkcije (torej oseba ni zaposleni).
Kaj je sestava?
Sestava je zmožnost razreda, da vsebuje predmete različnih razredov kot podatke o članih. Na primer, razred A lahko vsebuje objekt razreda B kot člana. Tukaj se lahko vse javne metode (ali funkcije), definirane v B, izvajajo znotraj razreda A. Razred A postane vsebnik, medtem ko razred B postane vsebovani razred. Sestavo imenujemo tudi zabojništvo. V tem primeru lahko rečemo, da je razred A sestavljen iz razreda B. V OOP Sestava predstavlja razmerje »ima-je«. Pomembno je omeniti, da čeprav ima vsebnik dostop do izvajanja vseh javnih metod vsebovanega razreda, ne more spremeniti ali zagotoviti dodatne funkcionalnosti. Ko gre za problem programiranja v resničnem svetu, je lahko objekt razreda TextBox vsebovan v razredu Form, zato lahko rečemo, da obrazec vsebuje TextBox (ali pa je obrazec sestavljen iz TextBox).
Kakšna je razlika med dedovanjem in sestavo?
Čeprav sta dedovanje in sestava dva koncepta OOP, se precej razlikujeta v tem, kar omogočata programerju, da doseže. Dedovanje je zmožnost razreda, da podeduje lastnosti in vedenje od nadrejenega razreda tako, da ga razširi, medtem ko je sestava zmožnost razreda, da vsebuje predmete različnih razredov kot podatke o članih. Če je razred razširjen, podeduje vse javne in zaščitene lastnosti/vedenje in ta vedenja lahko preglasi podrazred. Toda če je razred vsebovan v drugem, vsebnik ne dobi možnosti spreminjanja ali dodajanja vedenja vsebovanemu. Dedovanje predstavlja razmerje »je-a« v OOP, medtem ko sestava predstavlja razmerje »ima-a«.