it-swarm.com.de

Einkapselung vs. Abstraktion?

Hier sind die kurzen Definitionen von Kapselung und Abstraktion.

Abstraktion:

Der Abstraktionsprozess in Java wird verwendet, um bestimmte Details und .__ zu verbergen. Zeigt nur die wesentlichen Merkmale des Objekts. Mit anderen Worten, Es befasst sich mit der Außenansicht eines Objekts (Interface). Das einzige gute Beispiel, das ich für verschiedene Websites sehe, ist Schnittstelle.

Verkapselung:

Im Grunde geht es darum, den Zustand eines Objekts mit Hilfe von .__ zu verbergen. Modifikatoren wie privat, öffentlich, geschützt usw. setzen wir den Staat durch Öffentliche Methoden nur bei Bedarf.

Was wir mit Modifikatoren wie private, public erreichen, verbirgt auch unnötige Details vor der äußeren Welt, die nichts weiter sind als ein Abstraktionskonzept

Die Erklärung von oben scheint also zu sein, dass die Einkapselung ein Teil der Abstraktion ist, oder wir können sagen, dass es sich um eine Teilmenge der Abstraktion handelt. Aber warum wird dann der Begriff der Einkapselung erfunden, wenn wir ihn nur mit Abstraktion behandeln könnten? Ich bin sicher, dass es einen großen Unterschied geben sollte, der sie unterscheidet, aber das meiste Material auf net sagt fast dasselbe für beide.

Diese Frage wurde zwar auch früher in diesem Forum aufgeworfen, aber ich poste sie erneut mit konkreten Zweifeln. In einigen Antworten heißt es auch, dass Abstraktion ein Konzept ist und die Einkapselung die Implementierung ist. Aber ich kaufe das nicht - Wenn es wahr ist, kann ich denken, dass diese zwei verschiedenen Konzepte dazu dienen, uns zu verwirren.

Update: - Nach 5 Jahren habe ich mir meine eigene Antwort ausgedacht, die auf den Antworten in diesem und den folgenden Antworten basiert

  1. Unterschied zwischen Abstraktion und Einkapselung?
  2. Einkapselung vs. Abstraktionsbeispiel aus der realen Welt
124
M Sach

Encapsulation ist eine Strategie, die als Teil der Abstraktion verwendet wird. Einkapselung bezieht sich auf den Zustand von Objekten - Objekte kapseln ihren Zustand ein und verbergen ihn nach außen. Externe Benutzer der Klasse interagieren über ihre Methoden mit der Klasse, können jedoch nicht direkt auf den Klassenstatus zugreifen. Die Klasse abstracts entfernt also die Implementierungsdetails, die sich auf ihren Zustand beziehen.

Abstraktion ist ein allgemeinerer Begriff, er kann auch (ua) durch Unterklassen erreicht werden. Zum Beispiel ist die Schnittstelle List in der Standardbibliothek eine Abstraktion für eine Folge von Elementen, die nach ihrer Position indiziert sind, konkrete Beispiele für eine List sind eine ArrayList oder eine LinkedList. Code, der mit einer List interagiert, abstrahiert darüber, welche Art von Liste verwendet wird.

Abstraktion ist oft nicht möglich, ohne den zugrundeliegenden Zustand durch Einkapselung zu verbergen. Wenn eine Klasse ihren internen Zustand freigibt, kann sie ihre inneren Funktionen nicht ändern und kann daher nicht abstrahiert werden.

93
Martin Probst

Abstraktion ist das Konzept, etwas einfacher zu beschreiben, dh die Details zu abstrahieren, um sich auf das Wesentliche zu konzentrieren (Dies ist auch in der abstrakten Kunst zu sehen, wo sich der Künstler auf die Bausteine ​​von Bilder wie Farbe oder Formen). Dieselbe Idee wird in OOP übersetzt, indem eine Vererbungshierarchie verwendet wird, in der sich abstraktere Begriffe oben befinden und konkretere Ideen unten auf ihren Abstraktionen aufbauen. Auf der abstraktesten Ebene gibt es keinerlei Implementierungsdetails und möglicherweise nur sehr wenige Gemeinsamkeiten, die mit abnehmender Abstraktion hinzugefügt werden.

Zum Beispiel könnte am Anfang eine Schnittstelle mit einer einzelnen Methode stehen, dann stellt die nächste Ebene mehrere abstrakte Klassen bereit, die möglicherweise einige Details über die oberste Ebene ausfüllen oder nicht, jedoch durch Hinzufügen ihrer eigenen abstrakten Methoden Verzweigungen Dann sind für jede dieser abstrakten Klassen konkrete Klassen, die Implementierungen aller übrigen Methoden bereitstellen.

Encapsulation ist eine Technik. Es kann oder kann nicht zur Unterstützung der Abstraktion dienen, aber es geht sicherlich um das Verstecken von Informationen und/oder die Organisation von Informationen. Es erfordert, dass Daten und Funktionen auf eine bestimmte Art und Weise gruppiert werden. Natürlich erfordert good OOP Praxis, dass sie nach Abstraktion gruppiert werden. Es gibt jedoch andere Verwendungszwecke, die nur die Wartbarkeit usw. unterstützen.

113
Robert

einkapselung ist ein Teil der Abstraktion oder wir können sagen, es ist eine Teilmenge von Abstraktion

Sie sind verschiedene Konzepte. 

  • Abstraktion ist der Prozess, bei dem alle nicht benötigten/unwichtigen Attribute eines Objekts entfernt werden und nur die für Ihre Domäne am besten geeigneten Eigenschaften von _ beibehalten werden. 

    Z.B. für eine Person: Sie entscheiden sich dafür, den Vor- und Nachnamen und die SSN zu behalten. Alter, Größe, Gewicht usw. werden als irrelevant ignoriert. 

    Abstraktion ist der Ausgangspunkt für Ihr Design.

  • Die Kapselung ist der nächste Schritt, in dem Operationen erkannt werden, die für die -Attribute geeignet sind, die Sie während des Abstraktionsprozesses beibehalten haben. Es ist die Verbindung der Daten mit der Operation, die auf sie einwirkt.
    I.e. Daten und Methoden werden gebündelt.
29
Cratylus

Kapselung ist versteckt unnötig Daten in einer Kapsel oder Einheit

Abstraktion ist zeigt wesentlich Merkmal eines Objekts

Encapsulation wird verwendet, um sein Mitglied außerhalb der Klasse und der Schnittstelle außerhalb zu verbergen. Die in c # angegebenen Zugriffsmodifizierer sind wie public, private, protected etc .. _. Beispiel:

Class Learn
{
  private int a;         // by making it private we are hiding it from other
  private void show()   //class to access it
  {
   console.writeline(a);
  }
}

Hier haben wir Daten in einer Einheit oder Kapsel verpackt, d. H. Klasse.

Die Abstraktion ist genau das Gegenteil von Encapsulation.

Die Abstraktion wird verwendet, um dem Benutzer wichtige und relevante Daten anzuzeigen. Das beste Beispiel aus der realen Welt. In einem Mobiltelefon werden die verschiedenen Arten von Funktionen angezeigt, z ist Abstraktion, weil Sie nur relevante Informationen anstelle des internen Engineerings sehen.

 abstract class MobilePhone
    {
        public void Calling();       //put necessary or essential data
        public void SendSMS();       //calling n sms are main in mobile
    }

    public class BlackBerry : MobilePhone   // inherited main feature
    {
        public void FMRadio();            //added new
        public void MP3();
        public void Camera();
        public void Recording();

    }
24
varsha

Abstraktion ist ein sehr allgemeiner Begriff, und Abstraktion in Software ist nicht auf objektorientierte Sprachen beschränkt. Eine Wörterbuchdefinition: "Der Vorgang, etwas als eine generelle Eigenschaft oder Eigenschaft zu betrachten, abgesehen von konkreten Realitäten, bestimmten Objekten oder tatsächlichen Instanzen".

Die Assembler-Sprache kann als Abstraktion des Maschinencodes betrachtet werden - Assembly drückt die wesentlichen Details und die Struktur des Maschinencodes aus, befreit Sie jedoch nicht von den verwendeten Opcodes, dem Layout des Codes im Speicher und Sprüngen die richtige Adresse usw.

Die API Ihres Betriebssystems ist eine Abstraktion der zugrunde liegenden Maschine. Ihr Compiler bietet eine Abstraktionsebene, die Sie vor den Details der Assembly-Sprache abschirmt. Der in Ihr Betriebssystem integrierte TCP/IP-Stack reduziert die Details der Übertragung von Bits über ein Netzwerk. Wenn Sie den ganzen Weg zum Roh-Silizium gehen, haben die Leute, die Ihre CPU entworfen haben, Schaltpläne verwendet, die in Form von "Dioden" und "Transistoren" geschrieben wurden. Dabei handelt es sich um Abstraktionen der Elektronen durch Halbleiterkristalle.

In der Software ist alles eine Abstraktion. Wir erstellen Programme, die einen Aspekt der Realität simulieren oder modellieren, aber unsere Modelle abstrahieren notwendigerweise immer einige Details des "Realen". Wir bauen Schicht auf Schicht auf Abstraktionsebene, denn nur so können wir etwas erreichen. (Stellen Sie sich vor, Sie versuchen, einen Sudoku-Löser herzustellen, und Sie mussten ihn nur mit Halbleiterkristallen entwerfen. "OK, ich brauche hier ein Stück N-Typ-Silizium ...")

Im Vergleich dazu ist "Einkapselung" ein sehr spezifischer und begrenzter Begriff. Einige andere Antworten auf diese Frage haben bereits gute Definitionen dafür gegeben.

14
Alex D

Ich beantworte meine eigene Frage nach 5 Jahren, da ich der Meinung bin, dass sie noch mehr Details benötigt

Abstraktion:

Technische Definition: - Abstraktion ist ein Konzept, um unnötige Details (komplex oder einfach) auszublenden und nur die wesentlichen Merkmale des Objekts zu zeigen. Es gibt keine Implementierung. Hier ist nur ein Konzept

Was es praktisch bedeutet: - Wenn ich sage, mein Unternehmen braucht ein Medium/Gerät, damit sich die Mitarbeiter mit dem Kunden verbinden können. Dies ist die reinste Form der Enthaltsamkeit (wie interfacein Java), da dieses Gerät/Medium Telefon, Internet oder Skype oder persönlich oder per E-Mail usw. sein kann. Ich werde mich nicht mit dem Gerät/Medium beschäftigen

Selbst wenn ich sage, mein Unternehmen benötigt ein Medium/Gerät, damit Mitarbeiter sich per Telefonanruf mit Kunden verbinden können. Dann spreche ich auch abstrakt, aber auf etwas niedrigerem Niveau, da Gerät/Medium Telefon oder Skype oder etwas anderes sein kann

Wenn ich jetzt sage, mein Unternehmen braucht ein Telefon, damit Mitarbeiter sich per Telefonanruf mit Kunden verbinden können. Dann spreche ich auch abstrakt, aber auf etwas niedrigerem Niveau, da das Telefon von __ jeder Firma wie iPhone, Samsung oder Nokia etc

Encapsulation: - Im Grunde geht es darum, den Zustand (die Information) eines Objekts mit Hilfe von Modifizierern wie private, public, protected usw. zu verbergen. Wir setzen den Staat nur durch öffentliche Methoden aus, wenn dies erforderlich ist.

Was es praktisch bedeutet: - Nun, wenn ich sage, mein Unternehmen braucht ein iPhone, damit Mitarbeiter sich per Sprachanruf mit Kunden verbinden können. Jetzt spreche ich über ein konkretes Objekt (wie iPhone). Auch wenn Ich gehe hier nicht in das Nötigste vom iPhone, aber das iPhone hat einige staatliche/konkrete Informationen/Implementierungen, bei denen das Gerät/Medium nicht vorhanden ist. Wenn ich konkreter Objekte __ sage, bedeutet dies eigentlich jedes Objekt, das mit einer (nicht vollständig wie Java abstrakten Klasse abgeschlossenen) Implementierung/Info verbunden ist. 

Das iPhone verwendete hier also die Einkapselung als Strategie, um seinen Status/Informationen zu verbergen und nur diejenigen offenzulegen, von denen sie glauben, dass sie entlarvt werden sollten. Sowohl bei der Abstraktion als auch bei der Einkapselung werden daher einige unnötige Details verborgen, aber Abstraktion auf der Konzept-Ebene und die Einkapselung tatsächlich auf der Implementierungsebene

Dies ist der Gist, der auf den Antworten in diesem Beitrag und den folgenden basiert

  1. Unterschied zwischen Abstraktion und Einkapselung?
  2. Einkapselung vs. Abstraktionsbeispiel aus der realen Welt
13
M Sach

Encapsulation - der Prozess des Ausblendens von Komponenten der Klasse, um einen direkten Zugriff von außen zu verhindern. Dies wird durch die Verwendung des Modifizierers "private" erreicht, um den direkten Zugriff auf einige Klassenmitglieder (Datenfeld oder Methode) von anderen Klassen oder Objekten zu verhindern, während öffentliche Mitglieder (Interface) Zugriff auf diese privaten Mitglieder erhalten. Dadurch werden die Teilnehmer als menschliche Organe geschützt, die unter der Haut oder einem Schild verborgen/eingeschlossen sind.

Abstraktion - Es muss ein Prinzip OOP geschrieben werden, das besagt, dass in der Klasse nur Komponenten enthalten sein müssen, die für die Programmaufgabe interessant sind. Zum Beispiel: Der Objektschüler hat viele Charaktere als Mensch: Name, Alter, Gewicht, Haarfarbe, Augenfarbe usw. Wenn Sie jedoch in OOP eine Klasse erstellen, um mit Schülern zusammenzuarbeiten, sollten Sie sie nur angeben Die Zeichen, die für die Studentendatenbank von Bedeutung sind: Name, Alter, Spezialität, Stufe, Noten usw. In C++ können Sie eine abstrakte Klasse erstellen, indem Sie den Modifikator "virtual" mit allen Methoden in der Klasse verwenden, die dann erstellt werden Es kann nicht direkt verwendet werden, aber Sie können andere Klassen daraus ableiten und eine Implementierung für seine Mitglieder erstellen, indem Sie je nach Aufgabe erforderliche Mitglieder hinzufügen.

5
Red

So habe ich es verstanden:

In der objektorientierten Programmierung haben wir etwas, das - Klassen heißt. Wofür sind sie? Sie dienen zum Speichern eines Zustands und zum Speichern einiger Methoden zum Ändern dieses Zustands, d. H. Sie sind encapsulating state und seine Methoden.

Es (Klasse) kümmert sich nicht um die Sichtbarkeit seines eigenen oder seines Inhalts. Wenn wir wählen, um den Status oder einige Methoden auszublenden, ist dies Informationen verbergen .

Nehmen wir nun das Szenario einer - Vererbung . Wir haben eine Basisklasse und ein paar abgeleitete (geerbte) Klassen. Also, was macht die Basisklasse hier? Es ist abstrakt ​​einige Dinge aus den abgeleiteten Klassen heraus.

Alle von ihnen sind unterschiedlich, oder? Aber wir mischen sie, um gute objektorientierte Programme zu schreiben. Ich hoffe es hilft :)

4
abhilash

Abstraction delineates eine kontextspezifische, vereinfachte Darstellung von etwas; es ignoriert kontextuell irrelevante Details und enthält kontextuell wichtige Details.

Einkapselungseinschränkungen Zugriff von außen auf die Teile eines Objekts und Bundles Zustand dieses Dinges mit den Prozeduren, die den Zustand verwenden.


Nehmen Sie zum Beispiel Menschen. Im Kontext einer Operation ignoriert eine nützliche Abstraktion den religiösen Glauben einer Person und schließt den Körper der Person ein. Außerdem kapseln Menschen ihre Erinnerungen mit den Denkprozessen, die diese Erinnerungen verwenden. Eine Abstraktion muss nicht gekapselt sein; Beispielsweise verbirgt ein Gemälde einer Person weder ihre Teile, noch bündelt sie Verfahren mit ihrem Zustand. Und die Einkapselung muss nicht mit einer Abstraktion verbunden sein. Zum Beispiel kapseln echte Menschen (nicht abstrakte) ihre Organe mit ihrem Stoffwechsel.

3
Shaun Luttin

Versuchen wir auf andere Weise zu verstehen.

Was kann passieren, wenn keine Abstraktion vorhanden ist und was passieren kann, wenn die Kapselung nicht vorhanden ist?.

Wenn keine Abstraktion vorhanden ist, können Sie sagen, dass das Objekt weniger verwendet wird. Sie können das Objekt weder identifizieren noch auf dessen Funktionen zugreifen. Nehmen Sie ein Beispiel für ein Fernsehgerät. Wenn Sie keine Option zum Einschalten, zum Ändern des Kanals, zum Erhöhen oder Verringern der Lautstärke usw. haben, was ist dann die Verwendung des Fernsehgeräts und wie verwenden Sie es?

Wenn Encapsulation nicht vorhanden ist oder nicht ordnungsgemäß implementiert wird, können Sie das Objekt missbrauchen. Dort können Daten/Komponenten missbraucht werden. Nehmen Sie dasselbe Beispiel für ein Fernsehgerät. Wenn die Lautstärke des Fernsehgeräts nicht gekapselt wird, kann der Lautstärkeregler missbräuchlich verwendet werden, indem er veranlasst wird, das Limit zu unterschreiten oder zu überschreiten (0-40/50).

1
satya

HINWEIS: Ich teile dies. Es bedeutet nicht, dass hier keine gute Antwort vorliegt, sondern weil ich leicht verstanden habe.

Antworten:

Wenn eine Klasse konzeptualisiert wird, welche Eigenschaften können wir in diesem Kontext haben? Wenn wir eine Klasse Animal im Kontext eines Zoos entwerfen, ist es wichtig, dass wir ein Attribut als animalType haben, um häuslich oder wild zu beschreiben. Dieses Attribut ist möglicherweise nicht sinnvoll, wenn wir die Klasse in einem anderen Kontext entwerfen.

Welche Verhaltensweisen haben wir in der Klasse? Abstraktion wird auch hier angewendet. Was muss man hier haben und was wird eine Überdosis sein? Dann schneiden wir einige Informationen aus der Klasse ab. Dieser Prozess wendet Abstraktion an.

Wenn wir nach Unterschieden zwischen Einkapselung und Abstraktion fragen, würde ich sagen, dass Einkapselung Abstraktion als Begriff verwendet. Ist es also nur eine Einkapselung? Nein, die Abstraktion ist sogar ein Begriff, der als Teil von Vererbung und Polymorphismus verwendet wird.

Go Hier finden Sie weitere Erklärungen zu diesem Thema.

1
Yubaraj

Die Kapselung schützt das interne Verhalten eines Objekts/einer Instanz von einer externen Entität. Daher sollte eine Kontrolle bereitgestellt werden, um zu bestätigen, dass die gelieferten Daten das interne Instanzsystem/Objekt nicht schädigen, um seine Existenz zu überleben.

Ein gutes Beispiel: Divider ist eine Klasse mit zwei Instanzvariablen Dividend und Divisor und der Methode getDividedValue.

Denken Sie bitte, wenn der Divisor auf 0 gesetzt ist, wird das interne System/Verhalten (getDivided) unterbrochen.

Das interne Verhalten des Objekts könnte also durch Auslösen einer Ausnahme durch eine Methode geschützt werden.

1
Ranjit Kumar

in einem einfachen Satz kann ich sagen: Die Essenz der Abstraktion besteht darin, wesentliche Eigenschaften zu extrahieren und dabei unwesentliche Details wegzulassen. Aber warum sollten wir unwichtige Details weglassen? Der Hauptmotivator ist die Verhinderung des Änderungsrisikos. Sie können die Abstraktion als die Kapselung betrachten. Unter Kapselung versteht man jedoch das Einschließen eines oder mehrerer Objekte in einen Container, nicht das Ausblenden von Details. Wenn Sie argumentieren, dass "alles, was gekapselt wurde, auch verborgen war". Das stimmt natürlich nicht. Obwohl Informationen beispielsweise in Datensatzstrukturen und Arrays eingeschlossen werden können, werden diese Informationen normalerweise nicht ausgeblendet (es sei denn, sie werden über einen anderen Mechanismus ausgeblendet).