Was ist der genaue Unterschied zwischen Kapselung und Abstraktion?
Antworten
Zu viele Anzeigen?Ein weiteres Beispiel:
Angenommen, ich habe eine unveränderliche Rectangle-Klasse wie diese erstellt:
class Rectangle {
public:
Rectangle(int width, int height) : width_(width), height_(height) {}
int width() const { return width_; }
int height() const { return height_; }
private:
int width_;
int height_;
}
Jetzt ist es offensichtlich, dass ich gekapselt Breite und Höhe (der Zugang ist irgendwie eingeschränkt), aber ich habe nicht abstrahiert irgendetwas (okay, vielleicht habe ich ignoriert, wo sich das Rechteck im Koordinatenraum befindet, aber das ist ein Fehler des Beispiels).
Eine gute Abstraktion bedeutet in der Regel auch eine gute Kapselung.
Ein Beispiel für eine gute Abstraktion ist eine generische Datenbankverbindungsklasse. Ihre öffentliche Schnittstelle ist datenbankunabhängig und sehr einfach, erlaubt mir aber, mit der Verbindung zu tun, was ich will. Und sehen Sie? Es gibt auch eine Kapselung, denn die Klasse muss alle Low-Level-Handles und -Aufrufe in sich tragen.
Je mehr ich las, desto verwirrter wurde ich. Also, hier ist einfach das, was ich verstanden habe:
Verkapselung:
Wir sehen eine Uhr in der Regel von außen, und ihre Bestandteile sind im Inneren des Gehäuses eingekapselt. Wir haben eine Art Kontrolle für verschiedene Operationen. Diese Art, Details zu verbergen und die Steuerung (z. B. das Einstellen der Uhrzeit) offenzulegen, ist die Kapselung.
Abstraktion:
Bis jetzt haben wir über eine Uhr gesprochen. Aber wir haben nicht spezifiziert, was für eine Art von Uhr. Sie könnte digital oder analog sein, für den Zeiger oder die Wand. Es gibt viele Möglichkeiten. Was wir wissen, ist, dass es sich um eine Uhr handelt, die die Zeit anzeigt, und das ist das Einzige, was uns interessiert: die Zeit. Diese Art und Weise, Details zu verbergen und ein allgemeines Merkmal oder einen Anwendungsfall darzustellen, ist Abstraktion.