Overerving versus containerschip
Inheritance en Containership zijn twee belangrijke concepten die te vinden zijn in OOP (Object Oriented Programming Voorbeeld: C++). In eenvoudige bewoordingen hebben zowel Containership als Inheritance te maken met het verstrekken van aanvullende eigenschappen of gedrag aan een klasse. Overerving is het vermogen van een klasse om eigenschappen en gedrag van een bovenliggende klasse te erven door deze uit te breiden. Aan de andere kant is Containership het vermogen van een klasse om objecten van verschillende klassen als lidgegevens te bevatten.
Wat is overerving?
Zoals hierboven vermeld, is overerving de mogelijkheid voor een klasse om eigenschappen en gedrag van een bovenliggende klasse te erven door deze uit te breiden. Overerving biedt in wezen codehergebruik door eigenschappen en gedrag van een bestaande klasse uit te breiden met een nieuw gedefinieerde klasse. Als klasse A B uitbreidt, dan wordt klasse B de bovenliggende klasse (of superklasse) genoemd en wordt klasse A de onderliggende klasse (of afgeleide klasse/subklasse) genoemd. In dit voorbeeldscenario neemt klasse A alle openbare en beschermde kenmerken en methoden van de superklasse (B) over. De subklasse kan optioneel het gedrag overschrijven dat is geërfd van de bovenliggende klasse (nieuwe of uitgebreide functionaliteit aan methoden bieden). Overerving vertegenwoordigt een "is-a" -relatie in OOP. Dit betekent in wezen dat A ook een B is. Met andere woorden, B kan de klasse zijn met een algemene beschrijving van een bepaalde entiteit in de echte wereld, maar A specificeert een bepaalde specialisatie. In een echt programmeerprobleem zou de klasse Persoon kunnen worden uitgebreid om de klasse Werknemer te creëren. Dit wordt specialisatie genoemd. Maar u kunt ook eerst de klasse Employee maken en deze vervolgens generaliseren naar een klasse Person (d.w.z.e. generalisatie). In dit voorbeeld heeft de werknemer alle eigenschappen en het gedrag van de persoon (d.w.z. de werknemer is ook een persoon) en kan ook een aantal extra functionaliteit bevatten (de persoon is dus geen werknemer).
Wat is containerschip?
Containerschap is het vermogen van een klasse om objecten van verschillende klassen als lidgegevens te bevatten. Klasse A kan bijvoorbeeld een object van klasse B als lid bevatten. Hier kunnen alle openbare methoden (of functies) gedefinieerd in B worden uitgevoerd binnen de klasse A. Klasse A wordt de container, terwijl klasse B de ingesloten klasse wordt. Containerschip wordt ook wel Composition genoemd. In dit voorbeeld kan worden gezegd dat klasse A is samengesteld uit klasse B. In OOP vertegenwoordigt Containership een "has-a" -relatie. Het is belangrijk op te merken dat, hoewel de container toegang heeft om alle openbare methoden van de ingesloten klasse uit te voeren, deze niet in staat is om aanvullende functionaliteit te wijzigen of te bieden. Als het gaat om een programmeerprobleem in de echte wereld, kan een object van de klasse TextBox zich in de klasse Form bevinden, en dus kan worden gezegd dat een Form een TextBox bevat (of als alternatief bestaat een Form uit een TextBox).
Verschil tussen erfenis en containerschip
Hoewel Inheritance en Containership twee OOP-concepten zijn, zijn ze heel verschillend in wat ze de programmeur laten bereiken. Overerving is het vermogen van een klasse om eigenschappen en gedrag van een bovenliggende klasse te erven door deze uit te breiden, terwijl Containership het vermogen van een klasse is om objecten van verschillende klassen als lidgegevens te bevatten. Als een klasse wordt uitgebreid, erft deze alle openbare en beschermde eigenschappen/gedrag en dat gedrag kan worden overschreven door de subklasse. Maar als een klasse zich in een andere bevindt, krijgt de container niet de mogelijkheid om gedrag te veranderen of toe te voegen aan de ingesloten klasse. Overerving vertegenwoordigt een "is-een"-relatie in OOP, terwijl Containership een "heeft-een"-relatie vertegenwoordigt.