Frage

" Abstraktion und Kapselung sind ergänzende Konzepte: Abstraktion auf dem beobachtbaren Verhalten eines Objekts fokussiert ... Verkapselung konzentriert sich auf die Umsetzung, die zu dieser gibt Verhalten ... Verkapselung wird meist erreicht durch Information Hiding , das ist der Prozess der alle Geheimnisse des Objekts versteckt, die nicht auf seine wesentlichen Merkmale beitragen " -. Grady Booch in Object Oriented Analysis and Design

Kann zeigen Sie mir einige stark überzeugende Beispiele für die Vorteile der Verkapselung durch Information Hiding?

War es hilfreich?

Lösung

Das Beispiel in meiner ersten OO-Klasse gegeben:

Stellen Sie sich einen Media-Player. Es Abstracts die Konzepte des Spielens, Pause, Vorspulen usw. Als Anwender können Sie diese verwenden, um das Gerät zu betreiben.

Ihre VCR implementiert diese Schnittstelle und versteckte oder verkapselt die Details der mechanischen Antriebe und Bänder.

Wenn eine neue Implementierung von einem Media-Player kommt (zum Beispiel eines DVD-Player, die Discs verwendet anstatt Bänder) kann die Umsetzung ersetzen verkapselt in dem Media-Player und Benutzer können es weiterhin verwenden, wie sie mit ihrem Videorecorder (gleiche Operationen wie Wiedergabe, Pause, etc ...) haben.

Das ist das Konzept von Informationen versteckt durch Abstraktion . Es ermöglicht die Details Implementierung ohne die Benutzer zu ändern und fördert niedrige Kupplung kennen Code.

Andere Tipps

Die * nichts Abstraktion von Zeichenströmen (Plattendateien, Rohren, Buchsen, ttys, etc.) zu einer einzigen Einheit (das „Alles ist eine Datei“) Modell verfügt über eine breite Palette von Werkzeugen ermöglicht einen weiten Bereich angewandt werden von Datenquellen / Senken in einer Weise, die einfach wäre ohne die Kapselung nicht möglich sein.

Auch das Konzept der Ströme in verschiedenen Sprachen, abstrahiert über Listen, Arrays, Dateien, etc.

Auch Begriffe wie Zahlen (abstrahiert über ganze Zahlen, ein halbes Dutzend Arten von Schwimmern, rationals, etc.) vorstellen, was ein Alptraum dies wäre, wenn Code höherer Ebene die Mantisse Format und so weiter gegeben wurde und links für sich allein gestellt .

Ich weiß, dass es bereits eine akzeptierte Antwort, aber ich wollte es noch eine werfen: OpenGL / DirectX

Keine dieser APIs sind vollständige Implementierungen (obwohl DirectX sicherlich ein bisschen kopflastig in dieser Hinsicht ist), sondern generische Methoden von Befehlen an eine Grafikkarte in Verbindung steht machen.

Die Kartenhersteller sind diejenigen, die die Umsetzung (Treiber) für eine bestimmte Karte zur Verfügung stellen, die in vielen Fällen sehr Hardware-spezifisch ist, aber Sie als Anwender braucht nie darauf, dass ein Benutzer eine GeForce ABC läuft und die andere ein Radeon XYZ, da die genaue Umsetzung ist hinter dem High-Level-API versteckt. Wäre es nicht, würden Sie einen Codepfad in Ihren Spielen für jede Karte auf dem Markt, die Sie wollten unterstützen haben müssen, die von Tag 1. Ein weiteres großes Plus dieses Ansatz völlig unkontrollierbar wäre, ist, dass Nvidia / ATI ein freisetzen kann neuere, effizientere Version ihrer Treiber und automatisch ohne Ihr Zutun profitieren.

Das gleiche Prinzip ist in der Tat für Sound, Netzwerk, Maus, Tastatur ... im Grunde jede Komponente Ihres Computers. Ob die Verkapselung auf Hardware-Ebene oder in einem Software-Treiber geschieht, an einem gewissen Punkt alle Geräte Besonderheiten sind versteckt, damit Sie jede Tastatur zu behandeln, zum Beispiel, als nur eine Tastatur und eine Microsoft Ergonomic Media Explorer Deluxe Revision 2 .

Wenn Sie es sehen, dass die Art und Weise, wird schnell klar, dass ohne irgendeine Form der Verkapselung / Abstraktion Computer, wie wir sie heute kennen, würde einfach nicht funktionieren. Ist das brillant genug für Sie?

Fast jede Java, C # und C ++ Code-Basis in der Welt hat Information Hiding: Es ist so einfach, wie die privaten. Abschnitte der Klassen

Die Außenwelt kann die privaten Mitglieder nicht sehen, so dass Entwickler sie, ohne ändern können über den Rest des Codes zu dir keine Sorgen zu kompilieren.

Was? Sie sind noch nicht überzeugt?

Es ist einfacher, das Gegenteil zu zeigen. Wir verwendeten Code zu schreiben, der keine Kontrolle über hatte die Einzelheiten seiner Durchführung zugreifen konnte. Das machte es manchmal fast unmöglich zu bestimmen, welcher Code eine Variable geändert.

Auch kann man nicht wirklich etwas Abstraktes, wenn jedes Stück Code in der Welt möglicherweise auf die Durchführung spezifischer konkreten Klassen haben abhing könnten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top