Kapselung ist eines der Schlüsselprinzipien der objektorientierten Programmierung (OOP), das aus der Notwendigkeit entstanden ist, Daten mit Funktionen zu gruppieren, die diese Daten verarbeiten, und die Implementierungsdetails vor dem Benutzer zu verbergen.
Seit dem Aufkommen der OOP zielt Kapselung darauf ab, die Zuverlässigkeit von Programmen zu erhöhen, Fehler zu reduzieren und die Wartbarkeit des Codes zu verbessern. In C++ wird sie durch Mittel zur Datensicherheit und Bereitstellung einer Schnittstelle für die Interaktion mit dem Objekt realisiert.
Ohne Kapselung sind interne Daten und Implementierungsdetails einer Klasse von jedem Teil des Programms aus änderbar. Dies führt zu Fehlern, Schwierigkeiten bei Änderungen und schlechter Wartbarkeit des Codes.
Die Kapselung in C++ wird durch Zugriffsmodifizierer (private, protected, public) in Klassen erreicht. Interne Daten der Klasse werden mit private oder protected deklariert, und der Zugriff auf diese erfolgt über öffentliche Methoden (Getter und Setter).
Beispielcode:
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; } };
Wichtige Merkmale:
Kann ein protected-Mitglied von jedem Ort des Programms, wo es ein Objekt der Klasse gibt, zugänglich sein?
Nein, protected-Mitglieder sind nur von den Methoden der eigenen Klasse, Freunden und abgeleiteten Klassen zugänglich, aber nicht von anderen Klassen und nicht über ein externes Objekt.
Kann ein public-Mitglied der Klasse "gekapselt" sein?
Nein, public-Mitglieder werden nicht kapsuliert, sie dienen der Bereitstellung einer externen Schnittstelle. Manchmal verletzen übermäßig offene public-Mitglieder das Prinzip der Kapselung.
Fügt der Modifizierer private Sicherheit zum Code zur Laufzeit hinzu?
Nein, Zugriffsmodifizierer wirken nur auf der Compiler-Ebene und verhindern nicht den Zugriff auf Daten in der ausführbaren Datei – sie begrenzen jedoch Entwurfsfehler.
Der Entwickler hat alle Variablen der Klasse public gemacht, um "die Geschäftslogik zu vereinfachen".
Vorteile:
Nachteile:
Daten sind als private deklariert, Interaktion erfolgt über Getter/Setter mit obligatorischer Validierung.
Vorteile:
Nachteile: