Ich versuche die Definition von 'Abstraktion' in OOP zu verstehen.
Ich bin auf einige Hauptdefinitionen gestoßen. Sind sie alle gültig? Ist einer von ihnen falsch? Ich bin verwirrt. (Ich habe die Definition mit meinen eigenen Worten neu geschrieben).
Definition 1:
Abstraktion ist das Konzept, ein Objekt aus der realen Welt zu nehmen und es in Programmierbegriffe umzuwandeln. Wie die Schaffung einer Human
Klasse und es geben int health
, int age
, String name
usw. Eigenschaften und eat()
usw. Methoden.
Definition 2:
Eine allgemeinere Definition. Abstraktion ist ein Konzept, das überall in einem Softwaresystem stattfindet, wo es darum geht , Dinge allgemeiner / einfacher / abstrakter zu machen . Einige Beispiele:
Eine Vererbungshierarchie, in der die höheren Klassen einfacher oder allgemeiner sind und eine allgemeinere und abstraktere Implementierung definieren. Während die unteren Klassen in der Hierarchie konkreter sind und detailliertere Implementierungen definieren.
Verwenden der Kapselung, um die Details der Implementierung einer Klasse vor anderen Klassen zu verbergen, wodurch die Klasse für die äußere Softwarewelt "abstrakter" (einfacher) wird.
Definition 3
Eine andere allgemeine Definition: Abstraktion ist das Konzept, den Fokus von den Details und der konkreten Implementierung von Dingen auf die Arten von Dingen (dh Klassen), die verfügbaren Operationen (dh Methoden) usw. zu verlagern, wodurch die Programmierung einfacher und allgemeiner wird. und abstrakter. (Dies kann überall und in jedem Kontext im Softwaresystem erfolgen). Dies geschieht zum Beispiel beim Einkapseln, weil das Einkapseln bedeutet, die Details der Implementierung zu verbergen und nur die Arten von Dingen und ihre allgemeineren und abstrakteren Definitionen anzuzeigen. Ein Beispiel wäre die Verwendung eines List
Objekts in Java. Dieses Objekt verwendet tatsächlich die Implementierungsdetails eines ArrayList
oder eines LinkedList
, diese Informationen werden jedoch unter Verwendung des allgemeineren Namens abstrahiert List
.
Ist eine dieser Definitionen korrekt? (Ich beziehe mich auf die gängigste und anerkannteste Definition).
quelle
Antworten:
Abstraktion ist eine der drei Säulen der objektorientierten Programmierung (OOP). Es bedeutet wörtlich, eine Entität in einem System oder Kontext aus einer bestimmten Perspektive wahrzunehmen. Wir nehmen unnötige Details heraus und konzentrieren uns nur auf Aspekte, die für den jeweiligen Kontext oder das jeweilige System erforderlich sind.
Hier ist eine gute Erklärung:
Sie als Person haben unterschiedliche Beziehungen in unterschiedlichen Rollen. Wenn Sie in der Schule sind, dann sind Sie ein "Student" . Wenn Sie bei der Arbeit sind, sind Sie ein "Mitarbeiter" . Wenn Sie bei einer staatlichen Einrichtung sind, können Sie als "Bürger" angesehen werden . Es kommt also darauf an, in welchem Kontext wir eine Entität / ein Objekt betrachten. Wenn ich also ein Gehaltsabrechnungssystem modelliere , sehe ich Sie als einen Angestellten (PRN, Vollzeit / Teilzeit, Bezeichnung) . Wenn Sie ein Kurseinschreibungssystem modellieren , berücksichtige ich Ihre Aspekte und Merkmale als Student (Rollennummer, Alter, Geschlecht, eingeschriebener Kurs) . Und wenn ich ein Sozialversicherungsinformationssystem modellieredann schaue ich mir deine Daten als Bürger an (wie Geburtsdatum, Geschlecht, Geburtsland usw.)
Denken Sie daran, dass Abstraktion (Konzentration auf notwendige Details) sich von Verkapselung (Verstecken von Details vor der Außenwelt) unterscheidet. Kapselung bedeutet, die Details des Objekts zu verbergen und eine anständige Schnittstelle für die Entitäten in der Außenwelt bereitzustellen, um mit diesem Objekt oder dieser Entität zu interagieren. Wenn zum Beispiel jemand meinen Namen wissen möchte, kann er nicht direkt auf meine Gehirnzellen zugreifen, um zu erfahren, wie ich heiße. Stattdessen wird diese Person entweder nach meinem Namen fragen. Wenn ein Fahrer ein Fahrzeug beschleunigen möchte, gibt es zu diesem Zweck eine Schnittstelle (Gaspedal, Gang usw.).
Der 1. Def ist nicht sehr klar. Def 2 ist gut, aber es neigt dazu, den Neuling zu verwirren, da es versucht, Abstraktion mit Kapselung und Vererbung zu verknüpfen. Def 3 ist die beste von 3 Definitionen, da es genau definiert, was Abstraktion ist.
quelle
Definition 1 ist definitiv keine Abstraktion. Das beschreibt die Modellierung genauer .
Definitionen 2 und 3 beschreiben dasselbe. Und beide sind ziemlich gute Beschreibungen einer Abstraktion.
quelle
abstract class Shape
lol!Jede dieser Definitionen ist in Ordnung.
Bei der Abstraktion konzentrieren Sie sich nur auf die Details, die für Ihren Zweck wichtig sind.
Im ersten Fall können Sie (derzeit) keine echten Personen in Ihren Code aufnehmen. Sie konzentrieren sich auf bestimmte Details einer Person, die Ihrem Zweck dienen. In einem anderen Programm müssen Sie sich möglicherweise auf andere Details konzentrieren. Dies wären unterschiedliche Abstraktionen einer Person, und jede kann in ihrem Kontext gleichermaßen gültig sein .
Die zweite und dritte Definition setzen diese Idee fort und wenden sie auf Software-Entitäten an.
quelle