Mantojums pret sastāvu
Mantošana un kompozīcija ir divi svarīgi jēdzieni, kas atrodami OOP (Object Oriented Programming). Vienkārši sakot, gan sastāvs, gan mantojums attiecas uz papildu īpašību vai uzvedības nodrošināšanu klasei. Mantošana ir klases spēja mantot īpašības un uzvedību no vecāku klases, paplašinot to. No otras puses, Kompozīcija ir klases spēja kā dalībnieka datus saturēt dažādu klašu objektus.
Kas ir mantojums?
Kā minēts iepriekš, mantošana ir klases spēja mantot vecāku klases īpašības un uzvedību, paplašinot to. Mantošana būtībā nodrošina koda atkārtotu izmantošanu, ļaujot paplašināt esošās klases rekvizītus un uzvedību ar jaunu definētu klasi. Ja A klase pagarina B, tad B klasi sauc par vecāku klasi (vai superklasi) un A klasi - par bērnu klasi (vai atvasinātu klasi / apakšklasi). Šajā scenārija piemērā A klase mantos visus publiskos un aizsargātos superklases (B) atribūtus un metodes. Apakšklase var pēc izvēles ignorēt vecāku klases mantoto rīcību (nodrošināt metodēm jaunu vai paplašinātu funkcionalitāti).
Mantošana ir “ir-a” attiecības OOP. Tas būtībā nozīmē, ka A ir arī B. Citiem vārdiem sakot, B var būt klase ar vispārēju noteiktas reālās pasaules vienības aprakstu, bet A norāda noteiktu specializāciju. Reālās pasaules programmēšanas problēmā Personas klasi varētu paplašināt, lai izveidotu Darbinieku klasi. To sauc par specializāciju. Bet jūs varētu arī vispirms izveidot nodarbināto klasi un pēc tam to vispārināt arī uz personu klasi (ti, vispārinājumu). Šajā piemērā darbiniekam būs visas personas īpašības un uzvedība (ti, darbinieks ir arī persona), un tas var saturēt arī dažas papildu funkcijas (tātad persona nav darbinieks).
Kas ir kompozīcija?
Kompozīcija ir klases spēja kā dalībnieka datus saturēt dažādu klašu objektus. Piemēram, A klasē kā dalībnieks varētu būt B klases objekts. Šeit visas publiski pieejamās metodes (vai funkcijas), kas definētas B, var izpildīt A klasē. A klase kļūst par konteineru, bet B klase - par ietverto klasi. Kompozīciju dēvē arī par Containership. Šajā piemērā var teikt, ka A klase sastāv no B klases. OOP kompozīcija pārstāv “ir-ir” attiecības. Ir svarīgi atzīmēt, ka, pat ja konteineram ir piekļuve visām iekļautās klases publiskajām metodēm, tas nevar mainīt vai nodrošināt papildu funkcionalitāti. Runājot par reālās pasaules programmēšanas problēmu, klases FormBox objekts var būt ietverts klases Formā,un līdz ar to var teikt, ka veidlapa satur TextBox (vai arī veidlapu veido TextBox).
Kāda ir atšķirība starp mantojumu un sastāvu?
Kaut arī mantošana un kompozīcija ir divi OOP jēdzieni, tie ir diezgan atšķirīgi tajā, ko tie ļauj programmētājam sasniegt. Mantošana ir klases spēja mantot īpašības un uzvedību no vecāku klases, paplašinot to, savukārt Kompozīcija ir klases spēja saturēt dažādu klašu objektus kā dalībnieka datus. Ja klase tiek paplašināta, tā pārņem visas sabiedrības un aizsargātās īpašības / uzvedību, un apakšklase var ignorēt šo uzvedību. Bet, ja klase ir iekļauta citā, konteiners nesaņem iespēju mainīt vai pievienot uzvedību saturam. Mantošana OOP nozīmē “ir-a”, bet kompozīcija - “ir-ir”.