Mitgliedsvariablen sind die Implementierung der Klasse, nicht die Schnittstelle. Möglicherweise möchten Sie die Implementierung ändern, sodass andere Klassen nicht direkt auf diese Implementierung verweisen dürfen.
Betrachten Sie eine Klasse mit den folgenden Methoden - C ++ - Syntax, aber das ist nicht wichtig ...
class example
{
public:
virtual void Set_Mode (int p_mode);
virtual int Mode () const;
};
Es scheint ziemlich offensichtlich, dass es eine Mitgliedsvariable namens mode
oder m_mode
ähnlich geben wird, die diesen Moduswert direkt speichert und so ziemlich das tut, was eine "Eigenschaft" in einigen Sprachen tun würde - aber das muss nicht unbedingt wahr sein. Es gibt viele verschiedene Möglichkeiten, wie damit umgegangen werden kann. Zum Beispiel könnte die Set_Mode-Methode ...
- Identifizieren Sie den Modus mithilfe einer switch-Anweisung.
- Instanziieren Sie abhängig von diesem Moduswert eine Unterklasse einiger interner Klassen.
- Speichern Sie einen Zeiger auf diese Instanz als Mitgliedsvariable.
Danach können viele andere Methoden der Beispielklasse über den Zeiger geeignete Methoden dieser internen Klasse aufrufen und so ein modusspezifisches Verhalten erhalten, ohne den aktuellen Modus überprüfen zu müssen.
Der Punkt hier ist weniger, dass es mehr als einen möglichen Weg gibt, um solche Dinge zu implementieren, und viel mehr, dass Sie irgendwann Ihre Meinung ändern können. Vielleicht haben Sie mit einer einfachen Variablen begonnen, aber alle switch-Anweisungen zur Identifizierung des Modus in jeder Methode sind schmerzhaft. Oder vielleicht haben Sie mit der Instanzzeiger-Sache angefangen, aber das stellte sich als zu schwer für Ihre Situation heraus.
Es stellt sich heraus, dass solche Dinge für alle Mitgliedsdaten passieren können. Möglicherweise müssen Sie die Einheiten, in denen ein Wert gespeichert ist, von Meilen auf Kilometer ändern, oder Sie stellen möglicherweise fest, dass Ihre Aufzählung zur eindeutigen Identifizierung des Falls nicht mehr alle Fälle eindeutig identifizieren kann, ohne zusätzliche Informationen oder was auch immer zu berücksichtigen.
Dies kann auch für Methoden passieren - einige Methoden sind ausschließlich für den internen Gebrauch bestimmt, hängen von der Implementierung ab und sollten privat sein. Viele Methoden sind jedoch Teil der Schnittstelle und müssen nicht umbenannt werden oder was auch immer, nur weil die interne Implementierung der Klasse ersetzt wurde.
Wenn Ihre Implementierung verfügbar gemacht wird, hängt unweigerlich anderer Code davon ab, und Sie sind daran gebunden, diese Implementierung beizubehalten. Wenn Ihre Implementierung vor anderem Code verborgen ist, kann diese Situation nicht auftreten.
Das Blockieren des Zugriffs auf Implementierungsdetails wird als "Ausblenden von Daten" bezeichnet.