Data Encapsulatie in C++: Uw Code Beschermen
Alle C++ programma's zijn samengesteld uit de volgende twee fundamentele elementen:
Programma statements (code) – Dit is het deel van een programma dat acties uitvoert en ze worden functies genoemd.
Programma data – De data is de informatie van het programma die beïnvloed wordt door de programma functies.
Encapsulatie is een Object Oriented Programming concept dat data en functies die de data manipuleren samenbindt, en dat beide veilig houdt van buitenste interferentie en misbruik. Data encapsulatie leidde tot het belangrijke OOP concept van data hiding (data verbergen).
Data encapsulatie is een mechanisme om de data, en de functies die ze gebruiken te bundelen en data abstractie is een mechanisme om alleen de interfaces bloot te leggen en de implementatiedetails te verbergen voor de gebruiker.
C++ ondersteunt de eigenschappen van encapsulatie en data hiding door het creëren van door de gebruiker gedefinieerde typen, genaamd klassen. We hebben al bestudeerd dat een klasse private, protected en public leden kan bevatten. Standaard zijn alle items gedefinieerd in een klasse private. Bijvoorbeeld:
class Box {
public:
double getVolume(void) {
return length * breadth * height;
}
private:
double length; // Lengte van een box
double breadth; // Breedte van een box
double height; // Hoogte van een box
};
De variabelen length, breadth, en height zijn private. Dit betekent dat ze alleen toegankelijk zijn door andere leden van de Box klasse, en niet door enig ander deel van uw programma. Dit is een manier waarop encapsulatie bereikt wordt.
Om delen van een klasse public te maken (d.w.z., toegankelijk voor andere delen van uw programma), moet u ze declareren na het public trefwoord. Alle variabelen of functies gedefinieerd na de public specifier zijn toegankelijk voor alle andere functies in uw programma.
Het maken van één klasse een friend van een andere onthult de implementatiedetails en verlaagt encapsulatie. Het ideaal is om zoveel mogelijk details van elke klasse verborgen te houden voor alle andere klassen.
Data Encapsulatie Voorbeeld
Elk C++ programma waar u een klasse implementeert met publieke en private leden is een voorbeeld van data encapsulatie en data abstractie. Overweeg het volgende voorbeeld:
Live Demo #include <iostream>
using namespace std;
class Adder {
public:
// constructor
Adder(int i = 0) {
total = i;
}
// interface naar buitenwereld
void addNum(int number) {
total += number;
}
// interface naar buitenwereld
int getTotal() {
return total;
};
private:
// verborgen data van buitenwereld
int total;
};
int main() {
Adder a;
a.addNum(10);
a.addNum(20);
a.addNum(30);
cout << "Total " << a.getTotal() <<endl;
return 0;
}
Wanneer de bovenstaande code gecompileerd en uitgevoerd wordt, produceert het het volgende resultaat:
Total 60
Bovenstaande klasse telt getallen op en retourneert de som. De publieke leden addNum en getTotal zijn de interfaces naar de buitenwereld en een gebruiker moet ze kennen om de klasse te gebruiken. Het private lid total is iets wat verborgen is voor de buitenwereld, maar nodig is voor de klasse om correct te functioneren.
Ontwerpstrategie
De meeste van ons hebben geleerd om klassemembers standaard private te maken tenzij we ze echt hoeven te exposen. Dat is gewoon goede encapsulatie.
Dit wordt het meest frequent toegepast op datamembers, maar geldt gelijkelijk voor alle leden, inclusief virtual functies.
C Taal
- C++ datatypes begrijpen: fundamentals, modifiers en best practices
- C++ operators: complete gids met praktische voorbeelden
- C++ klassen & objecten: praktische gids voor object-georiënteerd programmeren
- C++ Class Templates Beheersen: Een Praktische Gids
- C++ Char Datatype: Declaratie, ASCII en Conversie‑Technieken
- Storage Classes in C++ Begrijpen: Scope, Levensduur en Gebruik
- C++ Datastructuren: Efficiënte Programma's Bouwen met Arrays, Structs en Meer
- Polymorfisme in C++ Begrijpen: Een Praktische Gids
- Java encapsulatie meesteren: een praktische gids tot data hiding
- Java Encapsulation uitgelegd: Veilige Data Verberging & Controle
- Java Data Structures: Kernklassen & Collections Framework Verkend