Mantojums vs kompozīcija
Mantojums un kompozīcija ir divi svarīgi jēdzieni, kas atrodami OOP (Object Oriented Programming). Vienkārši izsakoties, gan sastāvs, gan mantojums attiecas uz klases papildu īpašību vai izturēšanās nodrošināšanu. Mantojums ir klases spēja mantot īpašības un izturēšanos no vecāku klases, pagarinot to. No otras puses, kompozīcija ir klases spēja kā dalībnieku datus saturēt dažādu klašu objektus.
Kas ir mantojums?
Kā minēts iepriekš, mantojums ir klases spēja mantot īpašības un izturēšanos no vecāku klases, pagarinot to. Mantojums būtībā nodrošina koda atkārtotu izmantošanu, ļaujot paplašināt esošās klases īpašības un izturēšanos ar nesen definētu klasi. Ja A klase paplašina B, tad B klasi sauc par vecāku klasi (vai superklases) un A klasi sauc par bērnu klasi (vai atvasinātu klasi / apakšklasi). Šajā scenārija A klasē tiks mantoti visi superklases (B) publiskie un aizsargājamie atribūti un metodes. Apakšklase pēc izvēles var ignorēt (nodrošināt metodēm jaunu vai paplašinātu funkcionalitāti) no vecāku klases mantoto izturēšanos.
Mantojums OOP nozīmē “ir-ir” attiecības. Tas būtībā nozīmē, ka A ir arī B. Citiem vārdiem sakot, B var būt klase ar vispārīgu noteiktas reālās pasaules vienības aprakstu, bet A norāda noteiktu specializāciju. Reālās pasaules programmēšanas problēmā Personu klasi varētu paplašināt, lai izveidotu Darbinieku klasi. To sauc par specializāciju. Bet jūs vispirms varētu arī izveidot nodarbību klasi Darbinieki un pēc tam to vispārināt arī personāla klasē (t.i., vispārināt). Šajā piemērā Darbiniekam būs visas Personas īpašības un izturēšanās (t.i., Darbinieks ir arī Persona), un tajā var būt arī dažas papildu funkcijas (tātad, Persona nav Darbinieks), kā arī.
Kas ir sastāvs?
Kompozīcija ir klases spēja kā dalībnieku datus saturēt dažādu klašu objektus. Piemēram, A klasē kā biedrs varētu būt B klases objekts. Šeit visas B kategorijas definētās publiskās metodes (vai funkcijas) var izpildīt A klasē. A klase kļūst par konteineru, savukārt B klase kļūst par ierobežoto klasi. Sastāvs tiek saukts arī par konteineru. Šajā piemērā var teikt, ka A klase sastāv no B klases. OOP kompozīcija apzīmē “ir-ir” attiecības. Ir svarīgi atzīmēt, ka, pat ja konteineram ir pieeja visu ietvertās klases publisko metožu izpildei, tas nespēj mainīt vai nodrošināt papildu funkcionalitāti. Runājot par reālās pasaules programmēšanas problēmu, klases TextBox objekts var būt ietverts klases formā, un tādējādi var teikt, ka veidlapā ir TextBox (vai alternatīvi, veidlapu veido TextBox).
Kāda ir atšķirība starp mantojumu un kompozīciju?
Lai gan mantojums un kompozīcija ir divi OOP jēdzieni, tie diezgan atšķiras no tā, ko tie ļauj sasniegt programmētājam. Mantojums ir klases spēja mantot īpašības un izturēšanos no vecāku klases, pagarinot to, savukārt kompozīcija ir klases spēja kā dalībnieku datus ietvert dažādu klašu objektus. Ja klase tiek pagarināta, tā pārmanto visas publiskās un aizsargājamās īpašības / izturēšanos, un šo uzvedību apakšklase var ignorēt. Bet, ja klase ir ietverta citā, konteiners nesaņem iespēju mainīt vai pievienot izturēšanos tajā. Mantojums OOP nozīmē “ir-ir” attiecības, savukārt kompozīcija - “ir-ir” attiecības.