- Kenmerken van overerving
- Hiërarchie
- Polymorfisme
- Soorten overerving
- Unieke erfenis
- Overerving op meerdere niveaus
- Hiërarchische overerving
- Hybride overerving
- Meerdere overerving
- Typen overerving van een basisklasse
- Openbare erfenis
- Beschermde erfenis
- Privé erfenis
- Voorbeelden
- Python-voorbeeld
- Voorbeeld in C ++
- Referenties
De overerving in objectgeoriënteerd programmeren is een manier om objecten in een hiërarchie te ordenen van algemeen naar specifiek. Het is de gadget die wordt gebruikt om een klasse uit te breiden naar een andere klasse, met behoud van een analoge uitvoering.
In de meeste op klassen gebaseerde objectgeoriënteerde talen krijgt een object dat is gemaakt door overerving, een kindobject genaamd, alle eigenschappen en gedragingen van het bovenliggende object.
Eenvoudig bewijs van overerving in objectoriëntatie. Bron: Pluke / CC0 Creative Commons CC0 1.0 Universal Public Domain
Daarom is het een kwaliteit die de relatie tussen verschillende klassen vertegenwoordigt. Door overerving kan een klas hetzelfde gedrag vertonen als een andere klas en dat gedrag uitbreiden of aanpassen om een speciale actie voor specifieke behoeften te bieden.
Overerving kan helpen bij het weergeven van objecten die enkele verschillen en overeenkomsten vertonen in de manier waarop ze werken. U kunt alle functionaliteit die de objecten gemeen hebben in een basisklasse plaatsen, en vervolgens een of meer subklassen definiëren met uw eigen aangepaste functionaliteit.
Kenmerken van overerving
Overerving is een van de belangrijkste kenmerken van objectgeoriënteerd programmeren, dat wordt gebruikt om een nieuwe klasse te definiëren uit bestaande klassen.
Dat wil zeggen, nieuwe klassen kunnen worden afgeleid van bestaande basisklassen, waarbij nieuwe functies worden toegevoegd. U hoeft niet helemaal opnieuw te schrijven. Daarom biedt overerving een manier om bestaande code gemakkelijk opnieuw te gebruiken.
Als je al een klasse hebt die bijna alles doet wat je wilt, kun je een subklasse maken waarin een deel van zijn gedrag gedeeltelijk wordt overschreven, of misschien is er nieuwe functionaliteit toegevoegd.
Een afgeleide klasse erft alle methoden van de basisklasse, behalve de volgende:
- Constructeurs, destructors en kopieerconstructeurs van de basisklasse.
- Operators overbelast vanuit de basisklasse.
- Basisklasse vriendelijke functies.
Hiërarchie
Zoals een stamboom doet, dient overerving om een hiërarchie van klassen te vormen. Het is belangrijk op te merken dat de attributen die zijn bepaald voor een basisklasse automatisch aanwezig zullen zijn in de afgeleide klasse. Ook werken de methoden voor de basisklasse voor de derivaten.
Een klasse wordt beschouwd als een subklasse van de klasse waarvan hij erft. Aan de andere kant wordt deze klasse jouw superklasse. De meest algemene klasse kan de basisklasse worden genoemd, aangezien deze aan de basis van de hiërarchie staat.
Polymorfisme
Overerving is erg populair in sommige talen met statische typen, omdat de programmeur hierdoor enkele beperkingen van het statische type kan vermijden.
Een object dat erft van een ander object, wordt beschouwd als een subtype van dat object. Een voorbeeld kunnen de objecten "instructeur" en "student" zijn, die elk van "persoon" erft.
Als docent en student van hetzelfde persoonstype zijn, kun je een functie schrijven die het persoonstype accepteert als parameter en die werkt op de docent- en studentobjecten, omdat beide erfgenamen zijn.
Soorten overerving
Unieke erfenis
Wanneer een afgeleide klasse de eigenschappen en het gedrag van een enkele basisklasse erft. Dat wil zeggen dat de ene klasse zich uitstrekt tot slechts één andere klasse.
Overerving op meerdere niveaus
Verwijst naar de gadget waar u kunt erven van een afgeleide klasse, waardoor deze afgeleide klasse de basisklasse wordt voor een nieuwe klasse. Dat wil zeggen, het ontstaat wanneer een afgeleide klasse wordt gemaakt op basis van een andere afgeleide klasse.
Hiërarchische overerving
Bij deze overerving erven veel subklassen van een enkele klasse. Dat wil zeggen, het gebeurt wanneer een enkele basisklasse wordt overgenomen door meer dan één afgeleide klasse.
Hybride overerving
Het is de resulterende overerving wanneer een van de drie voorgaande overervingen wordt gecombineerd (enkelvoudig, hiërarchisch en meervoudig).
Meerdere overerving
Het komt overeen met het overervingscijfer wanneer een klasse erft van meer dan één superklasse. Het nadeel van dit type overerving is dat de afgeleide klasse moet omgaan met de afhankelijkheid die deze heeft van twee basisklassen.
Aan de andere kant stelt dit type overerving programmeurs in staat klassen te bouwen die de aspecten van meerdere klassen en hun overeenkomstige hiërarchieën combineren.
Typen overerving van een basisklasse
Openbare erfenis
Wanneer een klasse is afgeleid van een openbare basisklasse, worden de openbare leden van de basisklasse openbare leden van de afgeleide klasse en worden de beschermde leden van de basisklasse beschermde leden van de afgeleide klasse.
De privéleden van een superklasse zullen nooit rechtstreeks toegankelijk zijn vanuit een afgeleide klasse, maar zijn toegankelijk via oproepen naar de openbare en beschermde leden van de basisklasse.
Beschermde erfenis
Bij het maken van een klasse die erft van een beschermde superklasse, worden zowel de openbare als de beschermde leden van deze superklasse beschermde leden van de afgeleide klasse.
Privé erfenis
Wanneer een subklasse wordt aangemaakt vanuit een privé-superklasse, worden de openbare en beschermde leden van deze superklasse privé-leden van de subklasse.
Voorbeelden
Python-voorbeeld
Om te laten zien hoe het principe van overerving werkt, nemen we robots of een betere klasse robots in de programmeertaal Python. Om dit te doen, zal een klasse genaamd RobotMédico (PhysicianRobot) worden gespecificeerd, die is afgeleid van de Robot-superklasse.
Als je de code van de RobotMédico-klasse bekijkt, kun je zien dat er in deze klasse geen attribuut of methode is gedefinieerd.
Aangezien de klasse RobotMedico een subklasse is van Robot, erft deze in dit geval zowel de __init__ als de say_hi-methode. Door deze methoden over te nemen, kunnen ze worden gebruikt alsof ze zijn gedefinieerd in de klasse RobotMédico.
Wanneer een instantie van RobotMedico wordt aangemaakt, zal de __init__ functie ook een name attribuut aanmaken. De say_hi-methode kan worden toegepast op het object "y" van RobotMédico, zoals te zien is in het resultaat van de vorige code.
Voorbeeld in C ++
Een klasse kan van meer dan één klasse erven, wat betekent dat het gegevens en functies van meerdere superklassen kan erven. Om een afgeleide klasse te definiëren, gebruikt u een klasse-afleidingslijst om de basisklassen te specificeren.
Een klasse-afleidingslijst in C ++ noemt een of meer basisklassen en heeft de volgende vorm: klasse afgeleide klasse: toegangsspecificatie basisklasse, waarbij toegangsspecificatie openbaar, beschermd of privé is en basisklasse is de naam van een eerder gedefinieerde klasse. Als toegangsspecificatie niet wordt gebruikt, wordt standaard privé gebruikt.
De superklasse "Vorm" en de daarvan afgeleide klasse "Rechthoek" kunnen als volgt worden beschouwd:
Wanneer de bovenstaande code is gecompileerd en uitgevoerd, wordt de volgende uitvoer weergegeven: "Totale oppervlakte: 35".
Referenties
- Dave Braunschweig (2020). Overerving en polymorfisme. Rebus-gemeenschap. Ontleend aan: press.rebus.community.
- Python-cursus (2020). Erfenis. Genomen uit: python-course.eu.
- Data Mentor (2020). R Overerving. Genomen uit: datamentor.io.
- Tutorials Point (2020). C ++ Overerving. Genomen van: tutorialspoint.com.
- Net-informatie (2020). Verschillende soorten overerving. Genomen uit: net-informations.com.