Unterschied zwischen Verkapselung und Abstraktion

85

Ich hatte heute ein Interview. Ich hatte eine Frage von OOP zum Unterschied zwischen Verkapselung und Abstraktion .

Ich antwortete ihr zu meinem Wissen, dass Encapsulation im Wesentlichen darin besteht, Datenelemente und Elementfunktionen in einer einzigen Einheit namens Klasse zu binden . Während Abstraction im Wesentlichen dazu dient, die Komplexität der Implementierung zu verbergen und den Benutzern einen einfachen Zugriff zu ermöglichen. Ich dachte, sie würde mit meiner Antwort gut zurechtkommen. Aber sie fragte, ob der Zweck von beiden darin besteht, Informationen zu verbergen, was ist dann der tatsächliche Unterschied zwischen diesen beiden? Ich konnte ihr keine Antwort geben.

Bevor ich diese Frage stelle, habe ich andere Threads auf StackOverFlow über den Unterschied zwischen diesen beiden OOP- Konzepten gelesen . Aber ich bin nicht in der Lage, den Interviewer zu überzeugen.

Kann jemand es bitte mit einem einfachsten Beispiel rechtfertigen?

WpfBee
quelle
13
und schließlich hast du den Job bekommen? :)
Adrian Księżarczyk
1
@WPFbee Unglücklich!
Aimal Khan
3
Ich weiß nicht, warum Leute Abstraktion und Verkapselung vergleichen. Warum können wir sie nicht als zwei verschiedene OOP-Konzepte akzeptieren?
Herr ASquare
Mögliches Duplikat des Unterschieds zwischen Abstraktion und Kapselung?
Syed Souban
@ WpfBee Abstraktion hat nichts mit Verstecken zu tun. Überprüfen Sie einfach meine Antwort
S Vinesh

Antworten:

71

Kapselung versteckt Variablen oder eine Implementierung, die in einer Klasse so oft geändert werden kann, um zu verhindern, dass Außenstehende direkt darauf zugreifen. Sie müssen über Getter- und Setter-Methoden darauf zugreifen.

Abstraktion wird verwendet, um etwas zu verbergen, jedoch in höherem Maße (Klasse, Schnittstelle) . Clients, die eine abstrakte Klasse (oder Schnittstelle) verwenden, kümmern sich nicht darum, wer oder was es war, sie müssen nur wissen, was sie kann.

phnkha
quelle
6
Perfekt. Es scheint mir, dass Ihre Antwort nur auf meine Interviewerfrage abzielt. Ich versuche, Ihre Antwort anhand eines praktischen Beispiels zu wiederholen. Bitte lassen Sie mich wissen, wenn dies Ihre Antwort rechtfertigt. Nehmen wir ein Beispiel für das Fernsehen. Kapselung sind die internen Schaltkreise, LEDs usw., die zusammen einen Fernseher ergeben. Abstraktion ist das Ein-Aus, der Ton, die Kanaleinstellung und andere Tasten, die zur Bedienung bereitgestellt werden.
WpfBee
Die Abstraktion von Jungs hat nichts mit dem Ausblenden der Implementierung zu tun ... Abstraktion ist eine Methode, um polymorph mit einer Klasse zu interagieren
Mortalus
1
@ Mortalus - Ich stimme Ihrer ersten Aussage nicht zu "Abstraktion hat nichts mit dem Ausblenden der Implementierung zu tun". Ich denke, wenn wir anfangen, das Abstraktionskonzept zu lernen, wird uns als erstes beigebracht, dass wir die Komplexität der Implementierung verbergen und dem Benutzer eine Schnittstelle zur Verwendung bieten. Weil der Benutzer möglicherweise nicht an der Komplexität der Implementierung interessiert ist. Sie können ein praktisches Beispiel für TV oder AC nehmen. Die andere Sache ist, dass wenn es die Implementierung nicht verbirgt, warum wir eine Methode in einer abstrakten Klasse bereitstellen, die keinen Körper hat. Wir verstecken die Implementierung hier eindeutig.
WpfBee
1
@ Mortalus - Außerdem hast du einen Wiki-Link erwähnt. Die erste Aussage lautet: "In der Informatik ist Abstraktion der Prozess, bei dem Daten und Programme mit einer Darstellung definiert werden, deren Form ihrer Bedeutung (Semantik) ähnelt, während die Implementierungsdetails verborgen bleiben. Die Abstraktion versucht, Details zu reduzieren und herauszufiltern, so dass Der Programmierer kann sich gleichzeitig auf einige Konzepte konzentrieren. " selbst legt nahe, dass Abstraction die Implementierung verbergen soll. Ich bin mit Ihrer 2. Aussage einverstanden, aber nicht mit der 1 ..
WpfBee
1
Ich denke, bei der Kapselung geht es nur mehr darum, eine einzelne Einheit zu bauen. Es geht nicht viel darum, ob Sie sie verstecken oder nicht. Wenn es bei Abstraction mehr darum geht, Dinge zu verstecken, korrigieren Sie bitte, wenn ich falsch liege.
Raj240
22

Dieses Bild fasst den Unterschied zwischen beiden ziemlich gut zusammen:

Geben Sie hier die Bildbeschreibung ein

Quelle hier

José Salgado
quelle
12

Abstraktion - ist der Prozess (und das Ergebnis dieses Prozesses) zum Identifizieren der gemeinsamen wesentlichen Merkmale für eine Reihe von Objekten. Man könnte sagen, dass Abstraktion der Prozess der Verallgemeinerung ist: Alle betrachteten Objekte sind in einer Obermenge von Objekten enthalten, die alle bestimmte Eigenschaften besitzen (sich aber in anderer Hinsicht unterscheiden).

Kapselung - ist der Prozess, bei dem Daten und Funktionen, die diese Daten bearbeiten, in einer einzigen Einheit zusammengefasst werden, um die interne Implementierung vor der Außenwelt zu verbergen.

Dies ist eine allgemeine Antwort, die sich nicht auf eine bestimmte Programmiersprache bezieht (wie es die Frage war). Die Antwort lautet also: Abstraktion und Kapselung haben nichts gemeinsam. Ihre Implementierungen können sich jedoch aufeinander beziehen (z. B. in Java: Kapselung - Details sind in einer Klasse verborgen, Abstraktion - Details sind in einer Klasse oder Schnittstelle überhaupt nicht vorhanden).

TT_
quelle
11

Kapselung: Code und Daten in einer Einheit zusammenfassen. Classist ein Beispiel für die Kapselung, da sie die Methode und die Eigenschaft umschließt.

Abstraktion: Interne Details ausblenden und nur Funktionalität anzeigen. Die Abstraktion konzentriert sich darauf, was das Objekt tut, anstatt wie es tut. Es bietet eine allgemeine Ansicht der Klassen.

int number = 5;
string aStringNumber = number.ToString(); 

Hier ist ToString () Abstraktion. Und wie diese Mechanismusvariable numberin Zeichenfolge konvertiert und in initialisiert wird, aStringNumberist die Kapselung.

Nehmen wir ein reales Beispiel für einen Taschenrechner. Die Kapselung besteht aus den internen Schaltkreisen, der Batterie usw., die zusammen einen Taschenrechner bilden. Abstraktion sind die verschiedenen Tasten wie Ein-Aus, Löschen und andere Tasten, die zur Bedienung bereitgestellt werden.

Arif
quelle
7

Abstraktion: Wird normalerweise durchgeführt, um einen polymorphen Zugriff auf eine Reihe von Klassen zu ermöglichen. Eine abstrakte Klasse kann nicht instanziiert werden, daher muss eine andere Klasse daraus abgeleitet werden, um eine konkretere Darstellung zu erstellen.

Ein allgemeines Verwendungsbeispiel für eine abstrakte Klasse kann die Implementierung eines Entwurfsmusters für Vorlagenmethoden sein, bei dem ein abstrakter Injektionspunkt eingeführt wird, damit die konkrete Klasse ihn auf ihre eigene "konkrete" Weise implementieren kann.

siehe: http://en.wikipedia.org/wiki/Abstraction_(computer_science)

Kapselung: Es ist der Prozess, bei dem die Implementierungskomplexität einer bestimmten Klasse vor dem Client verborgen wird, der sie verwenden wird. Beachten Sie, dass der "Client" ein Programm oder Ereignis sein kann, das die Person geschrieben hat.

siehe: http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)

Mortalus
quelle
1
Abstraktion ist verwandt mit abstrakter Klasse?
Vishnu Viswanath
@vishnuviswanath, ja, wir können die Abstraktion mithilfe von abstrakten Klassen und Schnittstellen implementieren.
Invzbl3
3

Es gibt einen großartigen Artikel, der die Unterschiede zwischen Abstraktion, Kapselung und Informationen behandelt, die sich in der Tiefe verstecken: http://www.tonymarston.co.uk/php-mysql/abstraction.txt

Hier ist die Schlussfolgerung aus dem Artikel:

Abstraktion, Verstecken von Informationen und Kapselung sind sehr unterschiedliche, aber eng miteinander verbundene Konzepte. Man könnte argumentieren, dass Abstraktion eine Technik ist, mit der wir identifizieren können, welche spezifischen Informationen sichtbar und welche Informationen verborgen sein sollten. Die Kapselung ist dann die Technik, um die Informationen so zu verpacken, dass verborgen wird, was verborgen werden soll, und sichtbar gemacht wird, was sichtbar sein soll.

Manish Kumar Sharma
quelle
2

Der Unterschied zwischen beiden besteht darin, dass nur das View Point
Encapsulation-Wort zum Ausblenden von Daten verwendet wird, wenn wir verhindern möchten, dass der Kunde die Innenansicht unserer Logik sieht

Das Abstraktionswort wird zum Ausblenden von Daten verwendet, wenn unser Ziel darin besteht, unserem Kunden eine Außenansicht zu zeigen

Außenansicht bedeutet, dass wir annehmen

BubbleSort(){
//code 
swap(x,y);
}

Hier verwenden wir Swap in Bubble Sort, um unserem Kunden nur zu zeigen, welche Logik wir anwenden. Wenn wir Swap (x, y) hier durch ganzen Code ersetzen, kann er / sie in einer einzelnen Instanz unsere Logik nicht verstehen

Iqbal Haider
quelle
2

Ja, es ist wahr, dass es bei Abstraktion und Verkapselung darum geht, sich zu verstecken.

  • Das Verwenden nur relevanter Details und das Ausblenden unnötiger Daten auf Designebene wird als Abstraktion bezeichnet . (Als würde man nur relevante Eigenschaften für eine Klasse 'Auto' auswählen, um sie abstrakter oder allgemeiner zu gestalten.)

  • Kapselung ist das Ausblenden von Daten auf Implementierungsebene . Zum Beispiel, wie man Daten tatsächlich vor direktem / externem Zugriff verbirgt. Dies erfolgt durch Binden von Daten und Methoden an eine einzelne Entität / Einheit, um einen externen Zugriff zu verhindern. Daher wird die Kapselung auch als Verstecken von Daten auf Implementierungsebene bezeichnet.

CodeFu
quelle
3
Können Sie erklären, wie sich diese Antwort von den 12 anderen vorhandenen Antworten unterscheidet?
Stephen Rauch
2

Verkapselung:

Etwas verstecken, eine Art Medikamentenkapsel. Wir wissen nicht, was in der Kapsel ist, wir nehmen es einfach. Wie bei der Programmierung - wir verstecken nur einen speziellen Code für Methoden oder Eigenschaften und es wird nur eine Ausgabe ausgegeben, genau wie bei der Kapsel. Kurz gesagt, die Kapselung verbirgt Daten.

Abstraktion:

Abstraktion bedeutet, Logik oder Implementierung zu verbergen. Zum Beispiel nehmen wir Tabletten und sehen ihre Farbe und wissen aber nicht, was der Zweck davon ist und wie es mit dem Körper funktioniert.

Zeeshan Haider
quelle
0

Abstraktion

In Java bedeutet Abstraktion, die Informationen in der realen Welt zu verbergen. Es wird der Vertrag zwischen der Partei geschlossen, in dem festgelegt wird, „was wir tun sollen, um den Dienst zu nutzen“.

Beispiel: In der API-Entwicklung wurden der Welt nur abstrahierte Informationen des Dienstes offenbart, eher die tatsächliche Implementierung. Die Schnittstelle in Java kann dazu beitragen, dieses Konzept sehr gut zu erreichen.

Die Schnittstelle bietet einen Vertrag zwischen den Parteien, beispielsweise Hersteller und Verbraucher. Der Hersteller produziert die Waren, ohne den Verbraucher darüber zu informieren, wie das Produkt hergestellt wird. Über die Benutzeroberfläche ließ der Produzent jedoch alle Verbraucher wissen, welches Produkt er kaufen kann. Mit Hilfe der Abstraktion kann der Hersteller das Produkt an seine Verbraucher vermarkten.

Verkapselung:

Die Kapselung ist eine Abstraktionsebene tiefer. Dieselbe Produktfirma versucht, Informationen voneinander zu schützen. Wenn ein Unternehmen beispielsweise Wein und Schokolade herstellt, hilft die Einkapselung dabei, Informationen darüber abzuschirmen, wie jedes Produkt voneinander hergestellt wird.

  1. Wenn ich ein einzelnes Paket für Wein und ein anderes für Schokolade habe und alle Klassen im Paket als Standardzugriffsmodifikator deklariert sind, geben wir die Kapselung auf Paketebene für alle Klassen an.
  2. Wenn wir in einem Paket jede abgelegte Klasse (Mitgliedsfeld) als privat deklarieren und über eine öffentliche Methode für den Zugriff auf diese Felder verfügen, können diese Felder auf diese Weise gekapselt werden
Shaan
quelle
0

Nur noch ein paar Punkte, um die Sache klar zu machen,

Man darf die Datenabstraktion und die abstrakte Klasse nicht verwechseln. Sie sind anders.

Im Allgemeinen sagen wir, dass abstrakte Klasse oder Methode darin besteht, etwas zu verbergen. Aber nein ... das ist falsch. Was bedeutet das Wort abstrakt? Laut Google-Suche bedeutet das englische Wort Abstraktion

"In Gedanken oder als Idee existieren, aber keine physische oder konkrete Existenz haben."

Und das gilt auch für den abstrakten Unterricht. Es verbirgt nicht den Inhalt der Methode, aber der Inhalt der Methode ist bereits leer (ohne physische oder konkrete Existenz), sondern bestimmt, wie eine Methode (in Gedanken oder als Idee vorhanden) oder eine Methode im Calss sein sollte .

Wann verwenden Sie tatsächlich abstrakte Methoden?

  • Wenn sich eine Methode von der Basisklasse in jeder untergeordneten Klasse unterscheidet, die sie erweitert.
  • Sie möchten also sicherstellen, dass die untergeordnete Klasse diese Funktion implementiert hat.
  • Dies stellt auch sicher, dass die Methode, um eine obligatorische Signatur zu haben, n Parameter haben muss.

Also über abstrakte Klasse! - Eine Abstract-Klasse kann nicht nur erweitert instanziiert werden! Aber wieso ?

  • Eine Klasse mit abstrakter Methode muss daran gehindert werden, eine eigene Instanz zu erstellen, da die darin enthaltenen abstrakten Methoden keine sinnvolle Implementierung haben.
  • Sie können eine Klasse sogar abstrakt machen, wenn Sie aus irgendeinem Grund feststellen, dass es weniger bedeutet, eine Instanz Ihrer Klasse zu haben.

Eine abstrakte Klasse hilft uns zu vermeiden, eine neue Instanz davon zu erstellen!

Eine abstrakte Methode in einer Klasse zwingt die untergeordnete Klasse, diese Funktion mit der angegebenen Signatur sicher zu implementieren!

S Vinesh
quelle
0

Lassen Sie es mich anhand des oben diskutierten Beispiels erklären. Bitte beachten Sie den gleichen Fernseher.

Kapselung : Die Einstellungen, die wir mit der Fernbedienung vornehmen können, sind ein gutes Beispiel. Lautstärke erhöhen / verringern, Farbe und Kontrast. Stellen Sie sich hier den Getter und den Setter vor (Die Setter-Funktion prüft, ob der angegebene Wert gültig ist, wenn Ja, sie verarbeitet den Vorgang, wenn nicht, können wir keine Änderungen vornehmen - so wie wir die Lautstärke nicht über Null verringern können, selbst wenn wir die Lautstärke verringern Knopf hundertmal).

Abstraktion : Wir können hier das gleiche Beispiel nehmen, jedoch mit einem höheren Grad / Kontext. Die Lautstärketaste verringert die Lautstärke - und dies sind die Informationen, die wir dem Benutzer zur Verfügung stellen. Dem Benutzer sind weder der Infrarotsender in der Fernbedienung noch der Empfänger im Fernsehgerät und der anschließende Prozess des Parsens des Signals und des Mikroprozessors bekannt Architektur im Fernseher. Einfach ausgedrückt, wird es im Kontext nicht benötigt - Geben Sie einfach an, was erforderlich ist. Man kann die Definition des Lehrbuchs hier leicht in Beziehung setzen, dh die innere Implementierung verbergen und nur angeben, was sie tun wird, anstatt wie sie das tut!

Hoffe es klärt ein bisschen!

Surya
quelle
0

Wenn ich derjenige bin, der sich dem Interview gestellt hat, würde ich sagen, dass Abstraktion und Kapselung in der Endbenutzerperspektive ziemlich gleich sind. Es ist nichts als Informationen, die sich verstecken. Aus Sicht der Softwareentwickler löst Abstraction die Probleme auf Entwurfsebene und Encapsulation das Problem auf Implementierungsebene

Rasika Weragode
quelle
0

Kurz gesagt, Abstractiongeschieht dies auf Klassenebene, indem die Implementierung ausgeblendet und eine Schnittstelle implementiert wird, um mit der Instanz der Klasse interagieren zu können. Wird Encapsulationverwendet, um Informationen zu verbergen; B. die Mitgliedsvariablen privat machen, um den direkten Zugriff zu verbieten, und Getter und Setter für sie bereitstellen, um den korrekten Zugriff anzuzeigen.

Morteza Bandi
quelle
-2

Abstraktion: Was sind die Mindestfunktionen und -variablen, die außerhalb unserer Klasse verfügbar sein sollten?

Kapselung: Wie wird diese Anforderung erreicht, dh wie wird sie implementiert?

Nadim Almas Siddiqui
quelle
Kapselung ist kein Mittel, um Abstraktion zu erreichen. Sie sind 2 leicht unterschiedliche Konzepte, haben aber eine subtile Verbindung.
Varsh
Ich denke, beide sind keine unterschiedlichen Konzepte. Bez u kann eine Kapselung mit abstrakter Klasse erreichen.
K Kishore Kumar Reddy