Abstraktion VS Information Versteckt VS Kapselung

167

Können Sie mir sagen, was der Unterschied zwischen Abstraktion und Informationen ist, die sich in der Softwareentwicklung verstecken ?

Ich bin verwirrt. Die Abstraktion verbirgt die Detailimplementierung und das Ausblenden von Informationen abstrahiert ganze Details von etwas.

Update: Ich habe eine gute Antwort auf diese drei Konzepte gefunden. In der separaten Antwort unten finden Sie einige Zitate, die von dort stammen .

Popopome
quelle
"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." ;; Denken Sie daran, dass die Kapselung durch das Verstecken von Informationen erreicht wird.
Wulfgarpro
Zitierknick gebrochen
Rishi Dua

Antworten:

152

Gehe zur Quelle! Grady Booch sagt (in Objektorientierte Analyse und Design, Seite 49, zweite Ausgabe):

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.

Mit anderen Worten: Abstraktion = das Objekt von außen; Kapselung (erreicht durch Verstecken von Informationen) = das Objekt intern,

Beispiel: In .NET Framework stellt die System.Text.StringBuilderKlasse eine Abstraktion über einen Zeichenfolgenpuffer bereit. Mit dieser Pufferabstraktion können Sie mit dem Puffer arbeiten, ohne Rücksicht auf seine Implementierung. Auf diese Weise können Sie Zeichenfolgen an den Puffer anhängen, ohne zu berücksichtigen, wie der StringBuilderinterne Benutzer Dinge wie den Zeiger auf den Puffer und die Speicherverwaltung verfolgt, wenn der Puffer voll ist (was bei der Kapselung über das Ausblenden von Informationen der Fall ist).

rp

rp.
quelle
5
Würden Sie sagen, dass sich Abstraktion und Kapselung ebenso ergänzen wie Kapselung und Verstecken von Informationen? Sicher, die Kapselung wird durch das Verstecken von Informationen erreicht, aber ... ist die Kapselung nicht der Mechanismus, durch den das Verstecken von Informationen realisiert wird?
Wulfgarpro
Ein weiteres Beispiel aus der
Praxis
Könnten Sie mir bitte sagen, ob es richtig wäre zu sagen, dass Abstraktion am besten aus der Perspektive des Client-Codes verstanden wird, während die Kapselung am besten aus der Perspektive des Service-Codes (dh der gekapselten Klasse selbst) verstanden wird?
user1338998
Beispiel für die obige Definition in der realen Welt wird hier erklärt: stackoverflow.com/a/635755/3181500
user3181500
83

Das OP aktualisierte seine Frage mit mehreren Zitaten, die er gefunden hatte, und zwar in einem Artikel von Edward V. Berard mit dem Titel "Abstraktion, Verkapselung und Verstecken von Informationen" . Ich veröffentliche eine leicht erweiterte und neu formatierte Version des OP-Updates erneut, da dies eine eigenständige Antwort sein sollte.

(Alle Zitate stammen aus dem oben genannten Artikel.)

Abstraktion:

"Ein Punkt der Verwirrung in Bezug auf die Abstraktion ist ihre Verwendung sowohl als Prozess als auch als Entität. Abstraktion als Prozess bezeichnet das Extrahieren der wesentlichen Details eines Elements oder einer Gruppe von Elementen, während die unwesentlichen Details ignoriert werden. Abstraktion als Entität bezeichnet ein Modell, eine Ansicht oder eine andere fokussierte Darstellung für ein tatsächliches Objekt. "

Verstecken von Informationen:

"Seine Schnittstelle oder Definition wurde gewählt, um so wenig wie möglich über sein Innenleben zu verraten." - [Parnas, 1972b]

"Abstraktion kann […] als Technik verwendet werden, um zu identifizieren, welche Informationen verborgen werden sollen."

"Verwirrung kann auftreten, wenn Menschen nicht zwischen dem Verstecken von Informationen und einer Technik (z. B. Abstraktion) unterscheiden, mit deren Hilfe ermittelt werden kann, welche Informationen verborgen werden sollen."

Verkapselung:

"Es […] bezieht sich auf den Bau einer Kapsel, im Falle einer konzeptionellen Barriere, um eine Sammlung von Dingen." - [Wirfs-Brock et al., 1990]

"Als Prozess bedeutet Kapselung das Einschließen eines oder mehrerer Elemente in einen […] Container. Die Kapselung als Einheit bezieht sich auf ein Paket oder ein Gehäuse, das ein oder mehrere Elemente enthält (enthält, umschließt)."

"Wenn die Kapselung 'dasselbe ist wie das Verstecken von Informationen', könnte man das Argument vorbringen, dass 'alles, was gekapselt wurde, auch versteckt wurde'. Das ist offensichtlich nicht wahr. "

Fazit:

"Abstraktion, Verstecken von Informationen und Kapselung sind sehr unterschiedliche, aber eng verwandte 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. 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. "

stakx
quelle
praktisch eine großartige Erklärung. Es wäre großartig, konkrete Beispiele in Java zu liefern. Es scheint mir, dass Setter / Getter in Java die Implementierung verbergen und somit erreichen Information Hiding(oder das Ausblenden der Implementierung), während ein Generikum classKapselung und Abstraktion durch privateZugriff erreicht
abarik
57

Abstraction versteckt die Implementierungsdetails, indem eine Ebene über der Grundfunktionalität bereitgestellt wird.

Information Hidingversteckt die Daten, die von dieser Implementierung betroffen sind. Verwendung von privateund publicfällt darunter. Zum Beispiel das Ausblenden der Variablen der Klassen.

Encapsulationfügt nur alle ähnlichen Daten und Funktionen in eine Gruppe ein, z. B. Classbeim Programmieren; Packetin der Vernetzung.

Durch die Verwendung von Klassen implementieren wir alle drei Konzepte - Abstraction, Information HidingundEncapsulation

Shashwat
quelle
33

Bitte komplizieren Sie keine einfachen Konzepte.

Verkapselung : Das Zusammenfassen von Daten und Methoden in einer einzigen Einheit ist Kapselung (z. B. Klasse).

Abstraktion : Es handelt sich um eine Darstellung nur der wesentlichen Dinge ohne Hintergrunddetails. (zB Schnittstelle)

ZB BEISPIELE UND WEITERE INFOS GOTO:

http://thecodekey.com/C_VB_Codes/Encapsulation.aspx

http://thecodekey.com/C_VB_Codes/Abstraction.aspx

Genehmigte Definitionen hier

PS: Ich erinnere mich auch an die Definition aus einem Buch namens C ++ von Sumita Arora, das wir in der 11. Klasse gelesen haben;)

Rashy
quelle
6

Die Bedeutung der Abstraktion, die das Oxford English Dictionary (OED) der hier beabsichtigten Bedeutung am nächsten kommt, ist "Der Akt der Trennung im Denken". Eine bessere Definition könnte sein: "Darstellung der wesentlichen Merkmale von etwas ohne Hintergrund oder unwesentliche Details."

Das Ausblenden von Informationen ist das Prinzip, dass Benutzer einer Softwarekomponente (z. B. einer Klasse) nur die wesentlichen Details zum Initialisieren und Zugreifen auf die Komponente kennen müssen und nicht die Details der Implementierung kennen müssen.

Bearbeiten : Ich denke, dass Abstraktion der Prozess der Entscheidung ist, welche Teile der Implementierung versteckt werden sollen .

Es ist also keine Abstraktion VERSUS Informationen versteckt. Es sind Informationen, die die VIA-Abstraktion verbergen.

jammen
quelle
4

Abstraktion

Abstraktion ist ein Akt der Darstellung von wesentlichen Details ohne Berücksichtigung der Hintergrunddetails. Eine abstrakte Klasse hat nur Methodensignaturen und die implementierende Klasse kann eine eigene Implementierung haben. Auf diese Weise werden die komplexen Details vor dem Benutzer verborgen. Die Abstraktion konzentriert sich auf die Außenansicht. Mit anderen Worten, Abstraktion ist die Trennung von Schnittstellen von der tatsächlichen Implementierung.

Verkapselung

Die Kapselung erklärt das Binden der Datenelemente und Methoden in eine Einheit. Das Verstecken von Informationen ist der Hauptzweck der Kapselung. Die Kapselung wird durch die Verwendung von Zugriffsspezifizierern wie privat, öffentlich und geschützt erreicht. Klassenmitgliedsvariablen werden privat gemacht, sodass sie nicht direkt für die Außenwelt zugänglich sind. Die Kapselung konzentriert sich auf die innere Ansicht. Mit anderen Worten, Kapselung ist eine Technik, mit der die Informationen in einem Objekt vor dem anderen Objekt geschützt werden.

Harleen
quelle
3

Abstraktion verbirgt Details der Implementierung, wie Sie es ausdrücken.

Sie abstrahieren etwas so hoch, dass Sie nur etwas sehr Einfaches tun müssen, um eine Aktion auszuführen.

Durch das Ausblenden von Informationen werden Implementierungsdetails ausgeblendet. Die Programmierung ist schwierig. Sie können eine Menge Dinge erledigen und handhaben. Es kann Variablen geben, die Sie genau verfolgen möchten / müssen. Durch das Ausblenden von Informationen wird sichergestellt, dass niemand versehentlich etwas zerstört, indem er eine Variable oder Methode verwendet, die Sie öffentlich verfügbar gemacht haben.

Diese beiden Konzepte sind in der objektorientierten Programmierung sehr eng miteinander verbunden.

Dan Herbert
quelle
3

Abstraktion - Hierbei handelt es sich um den Prozess der Identifizierung der wesentlichen Merkmale eines Objekts, ohne die irrelevanten und langwierigen Details einzubeziehen.

Verkapselung - Hierbei werden Daten und Funktionen, die diese Daten bearbeiten, in einer einzigen Einheit zusammengefasst.

Abstraktion und Verkapselung sind verwandte, aber komplementäre Konzepte.

  1. Abstraktion ist der Prozess. Die Kapselung ist der Mechanismus, mit dem die Abstraktion implementiert wird.

  2. Die Abstraktion konzentriert sich auf das beobachtbare Verhalten eines Objekts. Die Kapselung konzentriert sich auf die Implementierung, die zu diesem Verhalten führt.

Ausblenden von Informationen - Hierbei werden die Implementierungsdetails eines Objekts ausgeblendet. Es ist ein Ergebnis der Verkapselung.

Aatish Agarwal
quelle
2

Kapselung: Das Zusammenbinden der Datenelemente und Elementfunktionen wird als Kapselung bezeichnet. Die Kapselung erfolgt durch Klasse. Abstraktion: Das Ausblenden der Implementierungsdetails aus der Verwendung oder aus der Ansicht wird als Abstraktion bezeichnet. Beispiel: int x; Wir wissen nicht, wie int intern funktionieren wird. aber wir wissen, dass int funktionieren wird. das ist Abstraktion.

Siva Prasad
quelle
2

Abstraktion: Abstraktion ist das Konzept / die Technik, mit der die Außenansicht eines Objekts ermittelt wird. Nur die erforderliche Schnittstelle verfügbar machen.

Verstecken von Informationen: Es ist eine Ergänzung zur Abstraktion, da durch das Verstecken von Informationen eine Abstraktion erreicht wird. Alles andere als die Außenansicht verstecken.

Kapselung: Bindet Daten und verwandte Funktionen in eine Einheit. Es erleichtert die Abstraktion und das Verstecken von Informationen. Ermöglichen, dass Funktionen wie der Zugriff von Mitgliedern auf das Gerät angewendet werden, um das Ausblenden von Abstraktion und Informationen zu erreichen

Vikram
quelle
2

Siehe Joels Beitrag zum Gesetz der undichten Abstraktionen

JoelOnsoftware

Grundsätzlich gibt Ihnen das Abstrahieren die Freiheit, über Konzepte höherer Ebenen nachzudenken. Eine nicht programmierende Analogie ist, dass die meisten von uns nicht wissen, woher unser Essen kommt oder wie es hergestellt wird, aber die Tatsache, dass wir uns (normalerweise) keine Sorgen machen müssen, macht uns frei, andere Dinge zu tun, wie z Programmierung.

Was das Verstecken von Informationen angeht, stimme ich dem Jaming zu.

Jason Z.
quelle
2

Kurz gesagt

Kapselung : - Verstecken von Informationen

Abstraktion : - Implementierung versteckt

AbstractionSie können sich darauf konzentrieren, what the object doeswährend Kapselung bedeutethow an object works

Rahul Sharma
quelle
1

Mit Abstraktion können Sie einen komplexen Prozess als einfachen Prozess behandeln. Beispielsweise behandelt die Standardabstraktion "Datei" Dateien als zusammenhängendes Array von Bytes. Der Benutzer / Entwickler muss nicht einmal über Cluster- und Fragmentierungsprobleme nachdenken. (Die Abstraktion wird normalerweise als Klassen oder Unterprogramme angezeigt.)

Beim Ausblenden von Informationen geht es darum, Ihre Abstraktionen vor böswilligen / inkompetenten Benutzern zu schützen. Durch die Beschränkung der Kontrolle über einen bestimmten Status (z. B. Festplattenzuweisungen) auf den ursprünglichen Entwickler wird eine enorme Fehlerbehandlung überflüssig. Wenn außer dem Dateisystemtreiber niemand auf die Festplatte schreiben kann, weiß der Dateisystemtreiber genau, was und wo auf die Festplatte geschrieben wurde. (Die übliche Manifestation dieses Konzepts ist privateund protectedSchlüsselwörter in OO-Sprachen.)

Zooba
quelle
1

Um etwas zu abstrahieren, müssen wir das Detail verbergen oder um das Detail von etwas zu verbergen, das wir abstrahieren müssen. Beide können jedoch durch Einkapselung erreicht werden.

Das Verstecken von Informationen ist also ein Ziel, die Abstraktion ein Prozess und die Kapselung eine Technik.

Selo
quelle
Können Sie ein Java-Beispiel dafür bereitstellen?
Chinmay
1

Abstraktion bedeutet einfach die Technik, bei der nur wesentliche Details der Software für den Benutzer sichtbar gemacht werden, um dem Benutzer die Verwendung oder den Betrieb mit Software zu erleichtern. Daher werden Implementierungsdetails dieser Software nicht angezeigt (werden unsichtbar gemacht). Kapselung ist die Technik, bei der ein Paket ein oder mehrere Elemente enthält und daher einige Informationen (insbesondere Programmdetails) sichtbar und andere für den Benutzer nicht sichtbar wurden, sodass die Kapselung durch Ausblenden von Informationen erreicht wird. Zusammenfassend. Abstraktion dient dem beobachtbaren Verhalten (extern) und Kapselung der Unsichtbarkeit (intern), aber diese beiden ergänzen sich wirklich.

MOBITI MAHENGE
quelle
1

Nur weitere Details zu InformationHiding hinzufügen , gefunden Dieser Link ist eine wirklich gute Quelle mit Beispielen

InformationHiding ist die Idee, dass eine Entwurfsentscheidung vor dem Rest des Systems verborgen werden sollte, um eine unbeabsichtigte Kopplung zu verhindern. InformationHiding ist ein Gestaltungsprinzip. InformationHiding sollte darüber informieren, wie Sie Dinge einkapseln , muss es aber natürlich nicht .

Die Kapselung ist eine Programmiersprachenfunktion.

Abhijeet
quelle
1

Sowohl Abstraction als auch Encapsulation sind zwei der vier grundlegenden OOP-Konzepte, mit denen Sie reale Dinge in Objekte modellieren können, um sie in Ihrem Programm und Code zu implementieren. Viele Anfänger werden zwischen Abstraktion und Verkapselung verwechselt, weil sie beide sehr ähnlich aussehen. Wenn Sie jemanden fragen, was Abstraktion ist, wird er sagen, dass es sich um ein OOP-Konzept handelt, das sich auf relevante Informationen konzentriert, indem unnötige Details ausgeblendet werden. Wenn Sie nach der Kapselung fragen, werden viele sagen, dass es sich um ein anderes OOP-Konzept handelt, das Daten vor der Außenwelt verbirgt. Die Definitionen sind nicht falsch, da sowohl Abstraktion als auch Kapselung etwas verbergen, aber der Hauptunterschied liegt in der Absicht.

Durch Abstraktion wird die Komplexität ausgeblendet, indem Sie ein abstrakteres Bild erhalten, eine Art 10.000-Fuß-Ansicht, während durch die Kapselung die interne Arbeit ausgeblendet wird, damit Sie sie später ändern können. Mit anderen Worten, Abstraktion verbirgt Details auf Entwurfsebene, während Encapsulation Details auf Implementierungsebene verbirgt.

Charith Perera
quelle
0

Nachdem ich alle oben genannten Antworten einzeln gelesen habe, kann ich mich nicht davon abhalten, diese zu veröffentlichen

Bei der Abstraktion können Objekte definiert werden, die abstrakte "Akteure" darstellen, die Arbeiten ausführen, über ihren Status berichten und diesen ändern und mit anderen Objekten im System "kommunizieren" können.

Die Kapselung ist jedoch von oben ganz klar ->

Der Begriff Kapselung bezieht sich auf das Ausblenden von Statusdetails, aber die Erweiterung des Konzepts des Datentyps von früheren Programmiersprachen, um das Verhalten am stärksten mit den Daten zu verknüpfen, und die Standardisierung der Art und Weise, wie verschiedene Datentypen interagieren, ist der Beginn der Abstraktion.

Referenz- Wiki

user666
quelle
0

Auch ich war sehr verwirrt über die beiden Konzepte Abstraktion und Verkapselung. Aber als ich den Abstraktionsartikel sah auf myjavatrainer.com sah, wurde mir klar, dass Abstraktion und Verkapselung Äpfel und Orangen sind. Man kann sie nicht wirklich vergleichen, weil beide erforderlich sind.

Durch Kapselung wird das Objekt erstellt, und durch Abstraktion wird das Objekt in der Außenwelt betrachtet.

Navin Israni
quelle
0

Kapselung: Bindungsdaten und die darauf einwirkenden Methoden. Dies ermöglicht das Ausblenden von Daten vor allen anderen Methoden in anderen Klassen. Beispiel: MyListKlasse , die ein Element hinzufügen, ein Element entfernen, und entfernen Sie alle Gegenstände , die Methoden add, removeund removeAllAkt auf der Liste (eine private Array) , die nicht direkt von außen zugegriffen werden kann.

Abstraktion: versteckt das nicht relevante Verhalten und die Daten. Wie die Elemente tatsächlich gespeichert, hinzugefügt oder gelöscht werden, ist ausgeblendet (abstrahiert). Meine Daten können in einfachen Arrays, ArrayList, LinkedList usw. gespeichert sein. Außerdem ist die Art und Weise, wie die Methoden implementiert werden, von außen verborgen.

Ammar Samater
quelle
0

Kapselung - Erzwingen des kontrollierten Zugriffs auf die internen Daten oder Verhindern des direkten Zugriffs auf Mitglieder.

Abstraktion - Das Ausblenden der Implementierungsdetails bestimmter Methoden wird als Abstraktion bezeichnet

Lassen Sie uns anhand eines Beispiels verstehen: -

class Rectangle
{
private int length;
private int breadth;// see the word private that means they cant be accesed from 
outside world.
 //now to make them accessed indirectly define getters and setters methods
void setLength(int length)
{  
// we are adding this condition to prevent users to make any irrelevent changes 
  that is why we have made length private so that they should be set according to 
   certain restrictions
if(length!=0)
{
 this.length=length
 }
void getLength()
{
 return length;
 }
 // same do for breadth
}

Definieren Sie jetzt für die Abstraktion eine Methode, auf die nur zugegriffen werden kann, und der Benutzer weiß nicht, was der Hauptteil der Methode ist und wie sie funktioniert. Betrachten wir das obige Beispiel. Wir können einen Methodenbereich definieren, der die Fläche des Rechtecks ​​berechnet.

 public int area()
 {
  return length*breadth;
 }

Wenn ein Benutzer die oben beschriebene Methode verwendet, erhält er nur die Fläche und nicht die Art und Weise, wie sie berechnet wird. Wir können ein Beispiel für die println () -Methode betrachten, von der wir nur wissen, dass sie zum Drucken verwendet wird, und wir wissen nicht, wie sie die Daten druckt. Ich habe einen Blog im Detail geschrieben. Unter dem folgenden Link finden Sie weitere Informationen zur Abstraktion und Kapselung

Rohan Sharma
quelle
0

Es ist erwähnenswert, dass diese Begriffe standardisierte IEEE-Definitionen haben, die unter https://pascal.computer.org/ durchsucht werden können. .

Abstraktion

  1. Ansicht eines Objekts, das sich auf die für einen bestimmten Zweck relevanten Informationen konzentriert und den Rest der Informationen ignoriert
  2. Prozess der Formulierung einer Ansicht
  3. Prozess der Unterdrückung irrelevanter Details, um ein vereinfachtes Modell zu erstellen, oder das Ergebnis dieses Prozesses

Informationen verstecken

  1. Durch die Softwareentwicklungstechnik, bei der die Schnittstellen der einzelnen Module so wenig wie möglich über das Innenleben des Moduls und andere Module aussagen, wird verhindert, dass Informationen über das Modul verwendet werden, die nicht in der Schnittstellenspezifikation des Moduls enthalten sind
  2. Aufnahme einer Entwurfs- oder Implementierungsentscheidung in ein einzelnes Modul, so dass die Entscheidung vor anderen Modulen verborgen bleibt

Verkapselung

  1. Softwareentwicklungstechnik, die darin besteht, eine Systemfunktion oder einen Satz von Daten und Operationen für diese Daten innerhalb eines Moduls zu isolieren und genaue Spezifikationen für das Modul bereitzustellen
  2. Konzept, dass der Zugang zu den Namen, Bedeutungen und Werten der Verantwortlichkeiten einer Klasse vollständig vom Zugang zu ihrer Verwirklichung getrennt ist
  3. Idee, dass ein Modul ein Äußeres hat, das sich von seinem Inneren unterscheidet, dass es eine externe Schnittstelle und eine interne Implementierung hat
jaco0646
quelle