Wat is OOP?
Objectgeoriënteerd programmeren (OOP) is een programmeerparadigma dat gebaseert is op het concept van objecten.
Objecten kunnen data bevatten in de vorm van eigenschappen en acties in de vorm van methoden (functies).
Wat het eigenlijk betekent, is dat we objecten uit de echte wereld nemen en ze in code weergeven
OOP kent een aantal voordelen die draaien rond de vier pijlers van OOP. Wat zijn deze vier pijlers?
Geheugensteuntje:
Denk aan het enelse: A PIE (Abstraction, Polymorphism, Inheritance, Encapsulation)
Wat is abstractie?
Abstractie is de scheiding tussen implementatie en gebruik. Zo Zullen gebruikers van een methode enkel moeten weten wat de methode doet, zonder te hoeven weten op welke manier die methode is geïmplementeerd.
Abstractie kan worden toegepast door bijvoorbeeld een codeblok te voorzien van een naam. Als we dan het volledige codeblok willen uitvoeren dan moeten we gewoon de naam gebruiken. In dit geval spreken we over functionele abstractie.
Een andere manier van abstractie is door een klasse te creëren waaruit instanties gecreërd kunnen worden. Deze instanties bezitten dan eigenschappen en methoden die we wel kunnen gebruiken maar waarvan we niet hoeven te weten hoe hun implementatie eruit ziet.
Wat zijn de voordelen van abstractie?
Wat is inkapseling (engels: encapsulation)?
Inkapseling is het proces waarbij je samenhorende data samen gaat grouperen en gaat bepalen welke data van buitenaf toegankelijk is en welke niet.
Een voorbeeld hiervan is het encapsuleren van eigenschappen en methoden in de klasse van een object. Door deze eigenschappen als public of private te definiëren bepalen we welke eigenschappen en methoden voor de gebruiker van het object toegankelijk zijn.
Wat zijn de voordelen van inkapseling?
Wat is overerving?
Overerving is het mechanisme waarbij een klasse de methoden en eigenschappen van een superklasse overerft en kan gebruiken. Dankzij oververving kunnen we IS-A relaties vastleggen tussen objecten (parent-child relaties).
Wat is het voordeel van overerving?
Wat is het nadeel van overerving?
Het is niet echt flexibel voor veranderingen.
Bijvoorbeeld: Stel dat we een klasse Animal hebben met twee methoden eat en walk. We creëren dan de subklassen Cat en Dog die de methoden van Animal overerven.
Indien we nu op een later tijdstip een derde subklasse goldfish willen toevoegen aan de hiërarchie, dan klopt deze hiërarchie niet meer omdat een goudvis niet kan stappen maar wel kan zwemmen. Om dit dan op te lossen moet de hiërarchie aangpast worden.
Wat is polymorfisme?
polymorfisme betekent letterlijk ‘meerdere vormen’. Polymorfisme bij OOP wijst op het feit dat objecten meerdere vormen kunnen aannemen.
Een object heeft meerdere vormen wanneer zijn klasse een superklasse heeft. Zo is het mogelijk dat een object een instantie is van de klasse Hond, Maar dat die klasse een superklasse Dier heeft. In dit geval kunnen we zeggen dat het object zowel een hond als een dier is en dus meerdere vormen kan aannemen.
Hoe kan polymorfisme worden bereikt?
Via overerving, function overriding, en function overloading.
Wat zijn de voordelen van polymorfisme?
for (let animal of animals) {
animal.makeNoice();
}
Zonder polymorfisme zou dit als volgt moeten:
for (let animal of animal s) {
if (animal.type === ‘cat’) {
makeCatNoice();
} else if (animal.type === ‘dog’) {
makeDogNoice();
} else if (animal.type === ‘bird’){
makeDogNoice();
} …
}
Wat zijn compositions?
Een composition is een object dat bestaat uit een samenstelling van methoden die in andere objecten zijn gedefinieerd.
Wat is is het voordeel van compositions?
In tegenstelling tot overerving, geeft het ons enorme flexibiliteit. Wat hiermee wordt bedoelt is dat we makkelijk nieuwe objecttypes kunnen toevoegen aan het programma zonder dat we de relaties tussen onze objecten moeten aanpassen zoals bij klassen het geval zou zijn.
Implementeer de composition die bestaat uit de objecten canEat en canWalk
function mixin(target, …sources) {
Object.assign(target, …sources);
}
const canEat = {
eat: function () {
this.hunger–;
console.log(‘eating’);
},
};
const canWalk = {
walk: function () {
console.log(‘walking’);
},
};
function Person() {
this.hunger = 100;
}
mixin(Person.prototype, canEat, canWalk);
const person = new Person();