Overerving (informatica): verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
MewTheEditor (overleg | bijdragen)
→‎Soorten overerving: Taalfouten in laatste paragraaf weggehaald
MewTheEditor (overleg | bijdragen)
Geherstructureerd en taal opgekuist.
Regel 1:
'''Overerving''' is een term die gebruikt wordt bij de methodiek van het [[Object-oriëntatie|object-georiënteerd programmeren]]. Het betekent dat een [[klasse (informatica)|klasse]] variabelen (eigenschappen) en - afhankelijk van de definitie van de programmeertaal voor methodes - [[functie (informatica)|functies]] en procedures erft van een superklasse.
 
== Soorten overerving ==
Als superklasse kan bijvoorbeeld "Dier" genomen worden. Een van de eigenschappen van een "Dier" is de vorm; de vorm wordt bepaald door de DNA-code van het dier. Bij het aanmaken van het dier wordt de DNA-code bepaald. De DNA-code kan bepaald worden door het afnemen van bloed, voor het gemak geeft een functie met de naam "bloed" de DNA-code van het dier.
Men kan een onderscheid maken tussen '"implementatie-overerving'" en '"blauwdrukovererving'" (<i>interface inheritance</i>). Het verschil is dat bij de laatste variant alleen de definitie overgeërfd wordt, en niet de implementatie daarvan. Om objectgerichtheid, en in het bijzonder [[Polymorfisme_(informatica)|polymorfisme]], echt goed tot zijn recht te laten komen, is dat laatste van belang. In plaats van implementatie-overerving kunnen in dat geval inbedding en delegatie als alternatief toegepast worden.
 
 
== Voorbeeld ==
Als superklasse kan bijvoorbeeld "Dier" genomen worden. Een van de eigenschappen van een "Dier" is de vorm; de vorm wordt bepaald door de DNA-code van het dier. Bij het aanmaken van het dier wordt de DNA-code bepaaldvastgelegd. De DNA-code kan bepaald worden door het afnemen van bloed,: voor het gemak geeft een functie met de naam "bloed" de DNA-code van het dier.
 
De klasse zou er als volgt uit kunnen zien:
 
<pre>
klasse Dier {
constante DNAcode;
constructor Dier(DNA) {DNAcode = DNA} // maakt het dier aan.
methode bloed():DNAcode // geeft DNA code af door middel van bloed
}
}
</pre>
 
Dieren reageren ook op prikkels van buitenbuitenaf, dus zou aan deze [[klasse (informatica)|klasse]] ook een methode met de naam "prikkel" toegevoegd kunnen worden die een [[variabele (informatica)|variabele]] waarde van de [[klasse (informatica)|klasse]] binnenkrijgt en verwerkt.
 
<pre>
klasse Dier {
constante DNAcode
constructor Dier(DNA) {DNAcode = DNA} // maakt het dier aan.
methode bloed():DNAcode // geeft DNA code af door middel van bloed
methode prikkel(Prikkel) // geeft een prikkel aan het dier
}
}
</pre>
 
Door over te erven van de klasse "Dier" worden alle eigenschappen en methodes van die klasse overgenomen. Dit maakt het mogelijk om nieuwe diersoorten te maken die allemaal een DNA-code hebben en prikkels kunnen verwerken. De programmeur kan een nieuwe diersoort een unieke DNA-code geven en het op een andere manier laten reageren op een prikkel dan is voorgeschreven in de superklasse "Dier".
 
Een voorbeeld van een klasse die erft van "Dier" is een klasse "Zoogdier" diewaarvan op zichzelf zijnde eigenschappen en methodes overerftop haar beurt worden overgeërfd aandoor een klasse "Olifant".
 
<pre>
klasse Zoogdier (Dier) {
variabele Geluid = 'zzzz';
constructor Zoogdier(DNA) { super(DNA) }
methode maakGeluid():Geluid { return Geluid } // geeft het geluid van een Zoogdier
}
}
 
klasse Olifant (Zoogdier) {
variabele Geluid = 'Muuuh'
constructor Olifant { super('GCTTGGACCGTCGATGA') }
methode stamp() // laat een Olifant stampen
}
}
</pre>
 
De "Zoogdier"-klasse neemt alle methodes en eigenschappen van "Dier" over en voegt er eigen methodes en eigenschappen aan toe. De "Olifant" -klasse overschrijft alleen de variabele "Geluid",; alle andere methodes en toegankelijke eigenschappen voor en van de [[klasse (informatica)|klasse]] neemt hij over van zijn superklasse(n). Als het geluid van een "Olifant" wordt opgevraagd wordt dus het geluid '"Muuuh'" teruggegeven in plaats van het standaardgeluid '"zzzz'".
 
Een stukje terminologie. De klasse "Dier" is hier een [[generalisatie]] van "Zoogdier". De klasse "Zoogdier" is een [[specialisatie]] van "Dier". Het verschijnsel overerving wordt daarom ook wel specialisatie genoemd.
 
Door overerving goed toe te passen is het dus mogelijk om van alle wezens die uiteindelijk eigenschappen erven van de superklasse "Dier" de DNA-code te krijgen en ze een prikkel toe te sturen. ditDit wordtheet [[polymorfisme (informatica)|polymorfisme]] genoemd. Bij klassen die erven van "Zoogdier" kan zelfs het geluid worden opgevraagd.
 
== Soorten overerving ==
Men kan een onderscheid maken tussen 'implementatie-overerving' en 'blauwdrukovererving' (<i>interface inheritance</i>). Het verschil is dat bij de laatste variant alleen de definitie overgeërfd wordt, en niet de implementatie daarvan. Om objectgerichtheid, en in het bijzonder [[Polymorfisme_(informatica)|polymorfisme]], echt goed tot zijn recht te laten komen, is dat laatste van belang. In plaats van implementatie-overerving kunnen in dat geval inbedding en delegatie als alternatief toegepast worden.
 
[[Categorie:Programmeerconcept]]