Skip to content

Pijlers van OOP

Abstractie (Abstraction)

Abstractie is het proces van het identificeren van essentiële kenmerken en het negeren van onnodige details. In OOP is het dus belangrijk dat je nadenkt welke informatie je wel en welke informatie je niet wil vastleggen in een bepaalde klasse.

Stel dat je een auto hebt. De abstractie van de klasse “auto” omvat kenmerken zoals snelheid, brandstofniveau en stuurbaarheid, terwijl irrelevante details zoals de interne motoronderdelen of de motorinhoud of het gewicht worden genegeerd.

Wanneer klassen aan elkaar gerelateerd zijn, zal je zien dat je goed na moet denken waar je bepaalde informatie vasthoudt. In het voorbeeld van de auto, kan het zijn dat je apart een klasse “motor” hebt gedefinieerd, met een relatie die aangeeft dat een motor onderdeel kan zijn van een auto. Dan kan het zijn dat je in de klasse “motor” wel de eigenschappen motorinhoud of gewicht toevoegt, zodat je kan bepalen of een bepaalde motor wel of niet in een auto past.

Overerving (Inheritance)

Overerving is het mechanisme waarmee een nieuwe klasse kenmerken en gedrag van een bestaande klasse kan overnemen. Het gaat hier dus altijd om meerdere klassen die aan elkaar gerelateerd zijn. De bron van de informatie noemen we de “superklasse”. De ontvanger de “subklasse”.

Stel dat er een algemene klasse Voertuig is. Je kunt een nieuwe klasse “Auto” maken die overerft van Voertuig, en zo krijgt de Auto automatisch alle kenmerken en gedragingen van een Voertuig.

Je kan dit vergelijken met het overerven van eigenschappen van ouders door kinderen. Ze krijgen de haarkleur van één van de ouders, de oogkleur, en je kan aan het gezicht herkennen dat het kinderen zijn van hun ouders. Bij mensen gaat het dus om mix van eigenschappen van twee ouders.

Eén of meerdere superklassen?

In OOP gaat het doorgaans om het overerven van één klasse. De klasse Pinguïn neemt bij voorbeeld eigenschappen van de klasse Vogel over, zoals het hebben van een snavel en veren.

Er is wel een bijzonder geval genaamd “meervoudige overerving” waarbij klassen ook van andere superklassen kunnen overerven, maar niet alle programmeertalen erkennen dit als mogelijkheid.

Polymorfisme (Polymorphism)

Polymorfisme staat toe dat objecten van verschillende klassen op een uniforme manier worden behandeld.

Een Dier klasse kan een methode “geluid maken” hebben. Zowel een Hond als een Kat kunnen deze methode implementeren, maar op verschillende manieren. Het geluid dat een hond maakt wordt dan anders dan het geluid dat een kat maakt. Maar als je in een computerspel een hond en een kat elkaar schrik laten aanjagen, kan je tegen beiden zeggen dat ze moeten “geluid maken”. Afhankelijk van de klasse is dan het resultaat anders.

Hierdoor kan een algemene methode voor alle dieren worden gebruikt, ongeacht hun specifieke implementatie.

Inkapseling (Encapsulation)

Inkapseling (Encapsulation) houdt in dat de interne details van een object verborgen worden en alleen toegankelijk zijn via een publieke interface.

Een klasse Bankrekening kan private attributen hebben zoals saldo en rekeningnummer. De toegang tot deze attributen wordt gecontroleerd via openbare methoden zoals storten() en opnemen(), waardoor de interne details van de bankrekening worden afgeschermd.

Deze vier pijlers helpen bij het bouwen van modulaire, herbruikbare en onderhoudsvriendelijke code in objectgeoriënteerde programmeerparadigma’s.