Erlernen von OOP-Konzepten, die besonders daran interessiert sind, Abstraktion und Verkapselung eingehend zu verstehen.
Schaut euch das unten schon an
Abstraktion VS Information Versteckt VS Kapselung
Unterschied zwischen Abstraktion und Kapselung?
Es fiel mir sehr schwer, diese Konzepte ohne ein reales und einfaches Beispiel für einen Klassen- / Code-Ausschnitt zu verstehen.
Einer meiner Kollegen sagte, Abstraktion sei nichts anderes als das Erstellen einer abstrakten Klasse und einer normalen Klasse, die ihre Mitgliedsvariable mit dem Gültigkeitsbereich schützt, heißt Encapsulation.
Gibt es eine einfache Möglichkeit, andere zu verstehen und ihnen zu helfen, zu verstehen, was sie genau sind, anstatt das Folgende zu wiederholen?
Abstraktion und Kapselung sind komplementäre Konzepte: Abstraktion konzentriert sich auf das beobachtbare Verhalten eines Objekts ... Kapselung konzentriert sich auf die Implementierung, die zu diesem Verhalten führt ... Kapselung wird meistens durch Verstecken von Informationen erreicht, dh durch das Verstecken aller die Geheimnisse des Objekts, die nicht zu seinen wesentlichen Eigenschaften beitragen.
Antworten:
Abstraktion ist ein Prozess, bei dem Sie nur "relevante" Daten anzeigen und unnötige Details eines Objekts vor dem Benutzer "verbergen". Betrachten Sie Ihr Mobiltelefon, Sie müssen nur wissen, welche Tasten gedrückt werden müssen, um eine Nachricht zu senden oder einen Anruf zu tätigen. Was passiert, wenn Sie eine Taste drücken, wie Ihre Nachrichten gesendet werden, wie Ihre Anrufe verbunden sind, ist alles von der entfernt Nutzer.
Bei der Kapselung werden Daten und Funktionen zu einer Einheit zusammengefasst, die als Klasse bezeichnet wird. In der Kapselung wird nicht direkt auf die Daten zugegriffen. Der Zugriff erfolgt über die in der Klasse vorhandenen Funktionen. In einfacheren Worten werden Attribute der Klasse privat gehalten und öffentliche Getter- und Setter-Methoden bereitgestellt, um diese Attribute zu manipulieren. Die Kapselung ermöglicht somit das Konzept des Versteckens von Daten.
quelle
abstraction
Durch Abstraktion werden die Informationen ausgeblendet oder dem Kunden nur die erforderlichen Details zur Verfügung gestellt.
zB Auto-Bremsen - Sie wissen nur, dass das Drücken der Pedale das Fahrzeug stoppt, aber Sie müssen nicht wissen, wie es intern funktioniert.
Vorteil der Abstraktion Morgen, wenn sich die Bremsimplementierung von Trommelbremse zu Scheibenbremse ändert, müssen Sie als Client keine Änderungen vornehmen (dh Ihr Code ändert sich nicht).
Die Kapselung bindet die Daten und Verhaltensweisen in einer Einheit zusammen. Es ist auch ein Sprachmechanismus zum Einschränken des Zugriffs auf einige Komponenten (dies kann durch Zugriffsmodifikatoren wie privat, geschützt usw. erreicht werden).
Zum Beispiel hat die Klasse Attribute (dh Daten) und Verhaltensweisen (dh Methoden, die mit diesen Daten arbeiten).
quelle
abstract
Schlüsselwort für eine Methode oder eine Klasse zu definieren. Richtig?setName("john")
wosetName(firstName)
ist eine öffentliche Methode, die enthält,_firstName = firstName
wo_firstName
ist eine private Eigenschaft).Ein Beispiel mit C #
Jeder Höhlenmensch kann ein Feuer machen, da er die IMakeFire -Funktion implementiert . Mit einer Gruppe von Feuerwehrleuten (Liste) bedeutet dies, dass sowohl Caveman als auch PersonWithMatch gültige Optionen sind.
Das bedeutet, dass
Sie können also viele Implementierer mit vielen Details (Eigenschaften) und Verhalten (Methoden) haben, aber in diesem Szenario ist ihre Fähigkeit, Feuer zu machen, wichtig. Das ist Abstraktion.
Da für das Feuern einige Schritte erforderlich sind (GetWood usw.), sind diese nicht sichtbar, da sie ein internes Anliegen der Klasse sind. Der Höhlenmensch hat viele andere öffentliche Verhaltensweisen, die von der Außenwelt genannt werden können. Einige Details werden jedoch immer ausgeblendet, da sie sich auf die interne Arbeit beziehen. Sie sind privat und existieren nur für das Objekt, sie werden niemals ausgesetzt. Dies ist die Kapselung
quelle
Abstraktion ist eine leistungsstarke Methode zur Verwaltung komplexer Systeme. Die Abstraktion wird durch genau definierte Objekte und deren hierarchische Klassifizierung verwaltet.
Zum Beispiel ist ein Auto an sich ein genau definiertes Objekt, das sich aus mehreren anderen kleineren Objekten wie einem Getriebesystem, einem Lenkmechanismus und einem Motor zusammensetzt, die wiederum ihre eigenen Subsysteme haben. Für den Menschen ist das Auto jedoch ein einziges Objekt, das mithilfe seiner Subsysteme verwaltet werden kann, auch wenn ihre inneren Details unbekannt sind. Höflichkeit
Kapselung: Das Zusammenfassen von Datenelement und Methode zu einer einzigen Einheit (dh Klasse) wird als Kapselung bezeichnet.
Die Einkapselung ist wie das Einschließen in eine Kapsel. Das heißt, die zugehörigen Operationen und Daten, die sich auf ein Objekt beziehen, werden in dieses Objekt eingeschlossen.
Die Kapselung ist wie Ihre Tasche, in der Sie Ihren Stift, Ihr Buch usw. aufbewahren können. Dies bedeutet, dass dies die Eigenschaft der Kapselung von Elementen und Funktionen ist.
Kapselung bedeutet, die internen Details eines Objekts zu verbergen, dh wie ein Objekt etwas tut.
Die Kapselung verhindert, dass Clients die Innenansicht sehen, in der das Verhalten der Abstraktion implementiert ist.
Die Kapselung ist eine Technik, mit der die Informationen in einem Objekt vor dem anderen Objekt geschützt werden.
Blenden Sie die Daten aus Sicherheitsgründen aus, z. B. indem Sie die Variablen als privat festlegen, und machen Sie die Eigenschaft verfügbar, um auf die privaten Daten zuzugreifen, die öffentlich wären.
Wenn Sie also auf die Eigenschaft zugreifen, können Sie die Daten validieren und festlegen. Höflichkeit
quelle
Nun, ich werde die Abstraktion anhand eines Beispiels aus der Praxis erklären. Angenommen, Sie haben in Ihrem Haus einen elektrischen Stecker und viele Geräte können an denselben Stecker angeschlossen werden, aber der Stecker hat nie eine Vorstellung davon, an welches Gerät er angeschlossen ist. Mit anderen Worten, die Details der Geräte werden vom Stecker abstrahiert (versteckt).
Überlegen Sie, was passiert, wenn wir ein Gerät ohne Stecker direkt an ein elektrisches Kabel anschließen? Nehmen wir an, Sie schließen eine Glühbirne direkt an ein Kabel an, dann weiß das Kabel, an welches Gerät es angeschlossen ist, und wenn wir die Glühbirne ersetzen müssen, müssen wir die Kabelverbindung von der Glühbirne entfernen, was bedeutet, dass die Glühbirne fest mit dem Kabel verbunden ist. Mit anderen Worten, Glühbirne und Draht kennen die Details, mit denen sie verbunden sind, dh nicht abstrahiert.
In der objektorientierten Welt funktioniert die Abstraktion genauso. Die Klasse, die die Funktion / Eigenschaft anderer Klassen verwendet, muss nicht wissen, welche Klassenfunktion / -eigenschaft sie verwendet, und alles sollte mit einer Schnittstelle / abstrakten Klasse abstrahiert werden.
Lassen Sie mich das gleiche Beispiel codieren. Hier habe ich eine Klasse "ElectricPlug", auf der ein Gerät läuft. Die Klasse "ElectricPlug" hat jedoch keine Ahnung, auf welchem Gerät sie ausgeführt wird. Es kann sich um eine beliebige Klasse handeln, die die Schnittstelle "IDevice" implementiert. Dies bedeutet, dass die Implementierung von "RunDevice" von "ElectricPlug" abstrahiert wird. Hier ist der vollständige Beispielcode:
quelle
Abstraktion ist der Prozess, bei dem Sie unnötige Details von einer Entität "wegwerfen", die Sie in Ihrem Entwurf erfassen / darstellen möchten, und nur die Eigenschaften der Entität beibehalten, die für Ihre Domain relevant sind.
Beispiel: Um ein Auto darzustellen, würden Sie z. B. das Modell und den Preis, den aktuellen Standort und die aktuelle Geschwindigkeit beibehalten und Farbe und Anzahl der Sitze usw. ignorieren.
Kapselung ist die "Bindung" der Eigenschaften und der Operationen, die sie in einer einzelnen Abstraktionseinheit (nämlich einer Klasse) manipulieren.
Das Auto müsste
accelarate
stop
also den Standort und die aktuelle Geschwindigkeit usw. manipulieren.quelle
abstract
Schlüsselwörtern zu tun, denke ich.Kapselung ist das, wonach es sich anhört, eine Box um etwas zu legen, um seinen Inhalt zu schützen. Abstraktion extrahiert die funktionalen Eigenschaften von etwas, sodass Sie Operationen nur mit dem ausführen können, was Sie extrahiert haben, ohne das Innenleben zu kennen.
Wenn wir sagen, dass zwei Substanzen Flüssigkeiten sind, verwenden wir "Flüssigkeit" als Abstraktion über die Eigenschaften der Substanzen, die wir diskutieren möchten. Diese Abstraktion sagt uns, was wir mit den Substanzen tun können, wenn wir bereits Erfahrungen mit Flüssigkeiten gemacht haben.
Abstraktion hat auch nichts mit Erben zu tun. Sie können eine andere Abstraktion wie "Metalle" verwenden, die die Eigenschaften von Substanzen auf andere Weise extrahiert.
Abstraktionen vergessen Details. Wenn Sie also eine bestimmte Abstraktion verwenden, sollten Sie nicht nach Eigenschaften der zugrunde liegenden Substanz fragen, die von der Abstraktion nicht gewährt werden. Wenn Sie beispielsweise Milch und Wasser nehmen und miteinander mischen, fällt es Ihnen schwer, zu fragen, wie viel Milch Sie haben.
Ein Functor ist eine Abstraktion über etwas, das eine Vorstellung von Map hat. Das heißt, Sie können eine Funktion für den inneren Inhalt ausführen, die das innere Bit in etwas anderes umwandelt. Das äußere Etwas bleibt das Gleiche.
Dies ist nützlich, wenn Sie eine Funktion haben, die mit Listen funktioniert, und Sie feststellen, dass Sie nur von der Kartenoberfläche abhängig sind, können Sie sich stattdessen auf Functor verlassen und Ihre Funktion kann dann mit Streams, Versprechungen, Maybes, Tupeln und alles andere, was diese Abstraktion teilt.
Funktionale Sprachen wie Haskell haben einige wirklich große Abstraktionsfähigkeiten, die eine extreme Wiederverwendung von Code praktisch machen.
quelle
Abstraktion ist ein Mittel zum Ausblenden von Details , um eine Schnittstelle zu vereinfachen.
Am Beispiel eines Autos sind alle Steuerelemente in einem Auto Abstraktionen. Auf diese Weise können Sie ein Fahrzeug bedienen, ohne die zugrunde liegenden Details der Lenk-, Beschleunigungs- oder Verzögerungssysteme zu kennen.
Eine gute Abstraktion ist eine Abstraktion, die eine Schnittstelle über mehrere Instanzen eines ähnlichen Problems hinweg allgemein standardisiert. Eine große Abstraktion kann eine Branche verändern.
Das moderne Lenkrad, das Bremspedal und das Gaspedal sind Beispiele für großartige Abstraktionen. Die Autolenkung sah anfangs eher wie eine Fahrradlenkung aus. Und sowohl Bremsen als auch Drosseln wurden von Hand betätigt. Aber die Abstraktionen, die wir heute verwenden, waren so mächtig, dass sie die Branche erfassten.
- -
Die Kapselung ist ein Mittel zum Ausblenden von Details , um sie vor Manipulationen von außen zu schützen.
Die Verkapselung verhindert, dass der Fahrer die Art und Weise, wie das Auto fährt, manipuliert - von der Steifheit der Lenkung, Federung und Bremse bis zu den Eigenschaften von Gas und Getriebe. Die meisten Autos bieten keine Schnittstellen zum Ändern dieser Dinge. Diese Kapselung stellt sicher, dass das Fahrzeug wie vom Hersteller beabsichtigt funktioniert.
Einige Autos bieten eine kleine Anzahl von Fahrmodi - wie Luxus, Sport und Wirtschaftlichkeit -, mit denen der Fahrer mehrere dieser Attribute gleichzeitig ändern kann. Durch die Bereitstellung von Fahrmodi ermöglicht der Hersteller dem Fahrer eine gewisse Kontrolle über das Erlebnis und verhindert gleichzeitig, dass er eine Kombination von Attributen auswählt, die das Fahrzeug weniger angenehm oder unsicher machen würden. Auf diese Weise verbirgt der Hersteller die Details, um unsichere Manipulationen zu vermeiden. Dies ist die Kapselung.
quelle
Abstraktion ist wie mit einem Computer.
Sie haben absolut keine Ahnung, was damit los ist, außer was Sie mit der GUI (grafische Benutzeroberfläche) und externer Hardware (z. B. Bildschirm) sehen. All diese hübschen Farben und so. Sie erhalten nur die Details, die für Sie als generischer Verbraucher relevant sind.
Kapselung ist der eigentliche Vorgang des Versteckens irrelevanter Details .
Sie verwenden Ihren Computer, sehen jedoch nicht, wie seine CPU (Zentraleinheit) aussieht (es sei denn, Sie versuchen, in ihn einzudringen). Es ist hinter all dem Chrom und Kunststoff versteckt (oder eingekapselt).
Im Kontext von OOP-Sprachen (Object-Oriented Programming) haben Sie normalerweise folgende Einstellungen:
Ein Beispiel für "Kapselung" wäre eine METHODE, die der normale Benutzer nicht sehen kann (privat). "Abstraktion" ist der reguläre Benutzer, der die METHODE verwendet, die er (öffentlich) verwenden kann, um die private zu verwenden.
quelle
Datenabstraktion: Der Zugriff auf Datenelemente und Elementfunktionen einer Klasse wird einfach als Datenabstraktion bezeichnet.
Kapselung: Das Binden von Variablen und Funktionen oder 1 kann sagen, dass Datenelemente oder Elementfunktionen in einer Einheit als Datenkapselung bezeichnet werden.
quelle
Die Kapselung kann als Geschenkpapier betrachtet werden, das zum Binden von Daten verwendet wird und als eine Einheit fungiert, die sie vor allen Arten von externem Schmutz schützt (ich meine externe Funktionen).
Abstraktion beinhaltet das Fehlen von Details und die Verwendung einer einfachen Schnittstelle zur Steuerung eines komplexen Systems.
Zum Beispiel können wir eine Glühbirne per Knopfdruck anzünden, ohne uns um die zugrunde liegende Elektrotechnik (Abstraktion) kümmern zu müssen.
Sie können die Glühbirne jedoch nicht auf andere Weise anzünden. (Verkapselung)
quelle
Abstraction
bezieht sich auf Methoden, bei denen keine Implementierungsdetails bekannt sind, was eine Art Verstecken der Implementierung darstellt.Encapsulation
hängt mit der Bindung von Instanzvariablen mit method zusammen, einer Art versteckter Daten.quelle
type
im Implementierer zu ändern , da die Implementiererklasse die Implementierung bereitstellttype
in der abstrakten Klasse definierte Variable festlegen oder ändern ? Warum kann sich die konkrete Klasse nicht ändern, da sie die eigentliche Implementierung liefert?type
ist in der konkreten Klasse nicht vererbbar, da sie privat ist. Sie können jedoch einetype
Variable festlegen , indem Sie diesetType()
Methode aus einer konkreten Klasse aufrufen . Aber wir können keinen Wert setzen, was wir wollen. Wenn wir der Öffentlichkeit Zugrifftype
gewährt hätten, hätten wir keinen eingeschränktentype
Wert, der auf einen bestimmten Bereichswert festgelegt werden könnte. Diese Art von Ansatz / Design ist also Verkapselung.Datenabstraktion : DA filtert einfach das konkrete Element. Durch die Klasse können wir die reine Abstraktion erreichen, weil wir vor dem Erstellen der Klasse nur über betroffene Informationen über die Klasse nachdenken können.
Kapselung : Dies ist ein Mechanismus, mit dem wir unsere Daten von außen schützen.
quelle
Abstraktion bedeutet, dem Benutzer die erforderlichen Informationen anzuzeigen, wobei als Kapselung die unerwünschten Daten vor dem Benutzer (Produkt vor dem Benutzer) ausgeblendet werden.
Kapselung implementiert die Abstraktion.
Abstraktion ist der Prozess, bei dem Encapsulation sie tatsächlich implementiert. Zum Beispiel. Hinzufügen von Benutzerlogik -> Wir müssen den Benutzer validieren, eine DB-Verbindung herstellen und den Benutzer einfügen. Der Benutzer weiß also nicht, dass er zuerst die Validierungsfunktion aufrufen, eine DB-Verbindung herstellen und dann den Wert in die DB einfügen muss. Er ruft nur die AddUser-Funktion auf, die die intern alle Logik mit in aufruft. Dies ist nur Encapsulation (Gruppieren der Funktion und Ausblenden der Methoden).
quelle
Kapselung: Ich denke, das hat viel damit zu tun, wie man Dinge zu einer Einheit zusammenbinden kann, anstatt sich zu verstecken. Wenn Sie etwas verstecken möchten, können Sie.
Abstraktion: Abstraktion hat viel mit dem Verstecken von Dingen zu tun und es kann verschiedene Abstraktionsebenen geben. In der funktionalen Abstraktion könnte man beispielsweise sagen, dass es wichtig ist, Elemente zu einer Liste hinzufügen zu können, aber die Details, wie dies erreicht wird, sind nicht von Interesse und sollten ausgeblendet werden. Bei Verwendung der Datenabstraktion würden wir sagen, dass eine Liste ein Ort ist, an dem wir Informationen speichern können, aber wie die Liste tatsächlich implementiert wird (z. B. als Array oder als eine Reihe verknüpfter Speicherorte), ist unwichtig und sollte ausgeblendet werden.
Referenz
quelle