Inheritance vs Containership
Erfenis en Containership is twee belangrike konsepte wat in OOP (Object Oriented Programming Voorbeeld: C++) gevind word. In eenvoudige terme handel beide Containership en Inheritance oor die verskaffing van bykomende eienskappe of gedrag aan 'n klas. Oorerwing is die vermoë vir 'n klas om eienskappe en gedrag van 'n ouerklas te erf deur dit uit te brei. Aan die ander kant is Containership die vermoë van 'n klas om voorwerpe van verskillende klasse as liddata te bevat.
Wat is erfenis?
Soos hierbo genoem, is erfenis die vermoë vir 'n klas om eienskappe en gedrag van 'n ouerklas te erf deur dit uit te brei. Oorerwing verskaf in wese kode hergebruik deur die uitbreiding van eienskappe en gedrag van 'n bestaande klas deur 'n nuut gedefinieerde klas toe te laat. As klas A B uitbrei, dan word klas B die ouerklas (of superklas) genoem en klas A word die kinderklas (of afgeleide klas/subklas) genoem. In hierdie voorbeeldscenario sal klas A alle publieke en beskermde eienskappe en metodes van die superklas (B) erf. Die subklas kan opsioneel die gedrag wat van die ouerklas geërf is, ignoreer (nuwe of uitgebreide funksionaliteit aan metodes verskaf). Oorerwing verteenwoordig 'n "is-'n" verhouding in OOP. Dit beteken in wese dat A ook 'n B is. Met ander woorde, B kan die klas wees met 'n algemene beskrywing van 'n sekere werklike wêreld entiteit, maar A spesifiseer 'n sekere spesialisasie. In 'n werklike programmeringsprobleem kan die Persoonklas uitgebrei word om die Werknemerklas te skep. Dit word spesialisasie genoem. Maar jy kan ook eers die Werknemerklas skep en dit dan ook veralgemeen na 'n Persoonklas (bv.e. veralgemening). In hierdie voorbeeld sal die Werknemer al die eienskappe en gedrag van die Persoon hê (d.w.s. Werknemer is ook 'n Persoon) en kan ook 'n paar bykomende funksionaliteit bevat (dus, Persoon is nie 'n Werknemer nie).
Wat is Containership?
Containerskap is die vermoë van 'n klas om voorwerpe van verskillende klasse as liddata te bevat. Klas A kan byvoorbeeld 'n objek van klas B as 'n lid bevat. Hier kan al die publieke metodes (of funksies) wat in B gedefinieer word binne die klas A uitgevoer word. Klas A word die houer, terwyl klas B die vervatte klas word. Houerskip word ook na verwys as samestelling. In hierdie voorbeeld kan gesê word dat klas A saamgestel is uit klas B. In OOP verteenwoordig Containership 'n "het-'n"-verhouding. Dit is belangrik om daarop te let dat, alhoewel die houer toegang het om al die publieke metodes van die ingeslote klas uit te voer, dit nie in staat is om te verander of bykomende funksionaliteit te verskaf nie. Wanneer dit kom by 'n werklike wêreld programmeringsprobleem, kan 'n objek van klas TextBox in die klasvorm vervat wees, en dus kan gesê word dat 'n vorm 'n teksboks bevat (of alternatiewelik is 'n vorm saamgestel uit 'n teksboks).
Verskil tussen erfenis en houerskip
Alhoewel Erfenis en Containership twee OOP-konsepte is, verskil hulle heeltemal in wat hulle die programmeerder toelaat om te bereik. Oorerwing is die vermoë vir 'n klas om eienskappe en gedrag van 'n ouerklas te erf deur dit uit te brei, terwyl Containership die vermoë van 'n klas is om voorwerpe van verskillende klasse as liddata te bevat. As 'n klas uitgebrei word, erf dit al die publieke en beskermde eiendomme/gedrag en daardie gedrag kan deur die subklas oorheers word. Maar as 'n klas in 'n ander vervat is, kry die houer nie die vermoë om gedrag by die inhoud te verander of by te voeg nie. Oorerwing verteenwoordig 'n "is-'n"-verhouding in OOP, terwyl Containership 'n "het-'n"-verhouding verteenwoordig.