Encapsulatie is een van de sleutelprincipes van objectgeoriënteerd programmeren (OOP), ontstaan uit de behoefte om gegevens te groeperen met de functies die deze gegevens verwerken, en om de implementatiedetails voor de gebruiker te verbergen.
Sinds de opkomst van OOP is encapsulatie gericht op het verhogen van de betrouwbaarheid van programma's, het verminderen van fouten en het verbeteren van de onderhoudbaarheid van de code. In C++ wordt dit gerealiseerd door middel van gegevensverbergingsmechanismen en het verstrekken van een interface voor interactie met een object.
Zonder encapsulatie zijn interne gegevens en implementatiedetails van een klasse toegankelijk voor wijziging vanuit elk deel van het programma. Dit leidt tot fouten, complicaties bij het aanbrengen van wijzigingen en slechte beheerbaarheid van de code.
Encapsulatie in C++ wordt bereikt met behulp van toegangsmodifiers (private, protected, public) in klassen. De interne gegevens van de klasse worden gedeclareerd met private of protected, en toegang wordt verkregen via openbare methoden (getters en setters).
Voorbeeld code:
class Account { private: double balance; public: Account(double initial) : balance(initial) {} double getBalance() const { return balance; } void deposit(double amount) { if (amount > 0) balance += amount; } };
Belangrijke kenmerken:
Kan een protected lid toegankelijk zijn vanuit elke plaats in het programma waar er een object van de klasse is?
Nee, protected leden zijn alleen toegankelijk vanuit de methoden van de klasse zelf, vrienden en afgeleide klassen, maar niet vanuit andere klassen en niet via een object van buitenaf.
Kan een public lid van de klasse "geëncapsuleerd" zijn?
Nee, public leden worden niet gecapsuleerd; hun taak is om een externe interface te bieden. Soms schenden te open public leden het principe van encapsulatie.
Voegt de modifier private veiligheid toe aan de code tijdens runtime?
Nee, toegangsmodifiers werken alleen op compilersniveau en voorkomen geen toegang tot gegevens in het uitvoerbare bestand — maar beperken ontwerpfouten.
De ontwikkelaar maakte alle klassevariabelen public voor de "gemak van de businesslogica".
Voordelen:
Nadelen:
Gegevens zijn gedeclareerd als private, interactie via getters/setters met verplichte validatie.
Voordelen:
Nadelen: