Die Kapselung ist ein Prinzip des objektorientierten Entwurfs, das die Verbergung der internen Struktur eines Objekts und die Bereitstellung nur der notwendigen öffentlichen Schnittstelle beinhaltet.
Hintergrund der Frage: Seit der Entstehung der OOP gehört es zu den Hauptaufgaben, den internen Zustand von Objekten vor falschen Änderungen von außen zu schützen und eine strenge Kontrolle über die Logik zu gewährleisten.
Problem: Ohne Kapselung sind alle Daten und Methoden für externen Code zugänglich, was zu einem Verlust der Kontrolle über den Zustand von Objekten und zu schwer fassbaren Fehlern führt.
Lösung:
In C++ werden drei Zugriffs-Spezifizierer verwendet: private, protected, public. private verbietet den Zugriff auf Mitglieder außerhalb der Klasse, protected gewährt nur den Nachkommen Zugang, und public macht die Mitglieder Teil der Schnittstelle.
Code-Beispiel:
class Stack { private: int *data; int top; public: Stack(); void push(int val); int pop(); };
Wichtige Merkmale:
Stimmt es, dass private Mitglieder auf keine Weise außerhalb der Klasse geändert werden können?
Nicht wahr. Es können Friend-Funktionen, Friend-Klassen oder unsichere Methoden (zum Beispiel durch Pointer-Casting oder durch undefined behavior) verwendet werden.
In welcher Reihenfolge werden die Spezifizierer bei der Vererbung angewendet (private, protected, public)?
Wenn die Vererbung als private deklariert ist, werden alle public und protected Mitglieder der Basisklasse zu private Mitgliedern der abgeleiteten Klasse.
Was sind die Unterschiede zwischen protected und private Vererbung?
Bei protected Vererbung werden alle public und protected Mitglieder der Basisklasse zu protected Mitgliedern der abgeleiteten Klasse; bei private werden alle zu private Mitgliedern.
Alle Mitglieder der Klasse sind als public deklariert, jeder externe Code kann die Struktur ändern und die Invarianten des Objekts verletzen.
Vorteile:
Nachteile:
Es werden nur die notwendigen public-Methoden verwendet, andere Daten sind geschlossen (private), der Zustand ist geschützt.
Vorteile:
Nachteile: