Encapsulatie is een principe van objectgeoriënteerd ontwerp dat de interne werking van een object verbergt en alleen de noodzakelijke publieke interface biedt.
Achtergrond: Sinds de opkomst van OOP is één van de belangrijkste uitdagingen het beschermen van de interne toestand van objecten tegen onjuiste wijzigingen van buitenaf en het waarborgen van strikte controle over de logica.
Probleem: Zonder encapsulatie worden alle gegevens en methoden toegankelijk voor externe code, wat leidt tot verlies van controle over de toestand van objecten en het ontstaan van moeilijk te traceren fouten.
Oplossing:
In C++ worden drie toegangspecificaties gebruikt: private, protected, public. private verbiedt toegang tot leden buiten de klasse, protected geeft alleen toegang aan afgeleiden, en public maakt leden deel uit van de interface.
Codevoorbeeld:
class Stack { private: int *data; int top; public: Stack(); void push(int val); int pop(); };
Belangrijke kenmerken:
Is het waar dat private-leden op geen enkele manier buiten de klasse kunnen worden gewijzigd?
Onjuist. Je kunt friend-functies, friend-klassen of onveilige technieken gebruiken (bijvoorbeeld via pointercasting of door undefined behavior).
In welke volgorde worden specificaties toegepast bij overerving (private, protected, public)?
Als de overerving als private is verklaard, worden alle public en protected leden van de basisklasse private-leden van de afgeleide klasse.
Wat is het verschil tussen protected en private overerving?
Bij protected overerving worden alle public en protected leden van de basisklasse protected-leden van de afgeleide klasse; bij private worden ze allemaal private.
Alle leden van de klasse zijn public gedeclareerd, elke externe code kan de structuur wijzigen en de invarianties van het object schenden.
Voordelen:
Nadelen:
Alleen noodzakelijke public-methoden worden gebruikt, de andere gegevens zijn verborgen (private), en de toestand is beschermd.
Voordelen:
Nadelen: