Dedovanje proti kontejnerskemu prevozu
Dedovanje in vsebništvo sta dva pomembna pojma, ki ju najdemo v OOP (primer objektno usmerjenega programiranja: C++). Preprosto povedano, se tako Containership kot Inheritance 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 Containership 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 metodam) vedenje, podedovano od nadrejenega razreda. Dedovanje predstavlja odnos "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 kontejnerski prevoz?
Vsebnost je zmožnost razreda, da vsebuje objekte 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. Prevoz kontejnerjev se imenuje tudi sestava. V tem primeru lahko rečemo, da je razred A sestavljen iz razreda B. V OOP Containership 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).
Razlika med dedovanjem in kontejnerskim prevozom
Čeprav sta dedovanje in vsebništvo dva koncepta OOP, se precej razlikujeta v tem, kar programerju omogočata doseči. Dedovanje je zmožnost razreda, da podeduje lastnosti in vedenje od nadrejenega razreda tako, da ga razširi, medtem ko je Containership 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-je" v OOP, medtem ko Containership predstavlja razmerje "ima-je".