OOP Concepten Flashcards
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?
- Abstractie
- Inkapseling
- Overerving
- Polymorfisme
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?
- Het reduceert de complexiteit van een programma.
- Het vermijd redundante code.
- Zorgt ervoor dat het programma makkelijker te onderhouden is.
- Zorgt ervoor dat het programma makkelijker te begrijpen is.
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?
- Het belangrijkste voordeel is dat gegevens beter zijn beveiligd.
- Doordat ze beter zijn beveiligd, verkleint ook de kans op bugs.
- Het programma is makkelijker om te onderhouden. Als er bijvoorbeeld aanpassingen moeten gebeuren binnen een klasse, dan kan dat zonder dat andere klassen daarvoor moeten aangepast worden.
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?
- Doordat we methoden en eigenschappen van een superklasse kunnen overerven (dus code kunnen hergebruiken), Moeten we minder code schrijven en besparen we dus werk en tijd.
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?
- bestaande code kan hergebruikt worden.
- Het reduceert het aantal code dat we moeten schrijven. Bijvoorbeeld: Stel dat we een array aan objecten hebben. We willen dan voor elk object een bepaalde functie uitvoeren. Dan kunnen we dit makkelijk als volgt:
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();