Verwirrt über die Definition der ' Abstraktion ' in OOP
On Februar 10, 2021 by adminIch 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. Erstellen Sie beispielsweise eine Human
-Klasse und geben Sie sie 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, in dem „Dinge allgemeiner / einfacher / abstrakter machen“ ist beteiligt. Einige Beispiele:
-
Eine Vererbungshierarchie, in der die höheren Klassen einfacher oder allgemeiner sind und eine allgemeinere und abstraktere Implementierung definieren. Wh Die unteren Klassen in der Hierarchie sind konkreter und definieren detailliertere Implementierungen.
-
Verwenden Sie die Kapselung, um die Details der Implementierung einer Klasse vor anderen Klassen zu verbergen, wodurch die Klasse größer wird „abstrakt“ (einfacher) nach außen.
Definition 3
Eine weitere allgemeine Definition: Abstraktion ist das Konzept, den Fokus von den Details und der konkreten Implementierung von Dingen auf die Arten von Dingen zu verlagern (dh Klassen), die verfügbaren Operationen (d. h. Methoden) usw., wodurch die Programmierung einfacher, allgemeiner und abstrakter wird. (Dies kann überall und in jedem Kontext im Softwaresystem erfolgen). Es findet zum Beispiel bei der Kapselung statt, weil Kapselung bedeutet, die Details der Implementierung zu verbergen und nur die Arten von Dingen und ihre allgemeineren und abstrakteren Definitionen anzuzeigen. Ein weiteres 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 List
.
Ist eine dieser Definitionen korrekt? (Ich beziehe mich auf die konventionellste und akzeptierteste Definition).
Kommentare
- Abstraktion definiert eine " Sache " als eine bestimmte Art von Sache (Animal = > Hund), um es noch weiter einzugrenzen (Hund = > Pudel).
Antwort
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 betreffende System erforderlich sind.
Hier einige gute Erklärungen:
Sie als Person haben unterschiedliche Beziehungen in unterschiedlichen Rollen. Wenn Sie in der Schule sind, sind Sie ein „Student“ . Wenn Sie bei der Arbeit sind, sind Sie ein „Mitarbeiter“ . Wenn Sie sich in einer staatlichen Einrichtung befinden, können Sie als „Bürger“ angesehen werden. Es läuft also darauf hinaus, in welchem Kontext wir eine Entität / ein Objekt betrachten. Wenn ich also ein Lohn- und Gehaltsabrechnungssystem modelliere, sehe ich Sie als Mitarbeiter (PRN, Vollzeit / Teilzeit, Bezeichnung) . Wenn ich ein Kursregistrierungssystem modelliere, werde ich Ihre Aspekte und Eigenschaften als Student (Rollennummer, Alter, Geschlecht, eingeschriebener Kurs) . Und wenn ich ein Informationssystem für soziale Sicherheit modelliere, werde ich Ihre Daten als Bürger (wie Geburtsdatum, Geschlecht, Geburtsland usw.)
Denken Sie daran, dass sich die Abstraktion (Konzentration auf notwendige Details) von der Verkapselung (Ausblenden 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.).
Die erste Definition ist nicht sehr klar. Def 2 ist gut, aber es neigt dazu, den Neuling zu verwirren, wenn es versucht, Abstraktion mit Verkapselung und Vererbung zu verbinden. Def 3 ist die beste von 3 Definitionen, da es klar definiert, was Abstraktion genau ist.
Kommentare
- Sie würden also sagen, dass es ' wie eine Verallgemeinerung anstelle einer Spezifikation ist?
- @samyismyhero Genau! Wir suchen nach generischen Attributen und Verhaltensweisen von Objekten für die Abstraktion.
- [Animal = > Dog] ist eine Abstraktion. Sie definieren, welche möglichen Teile ein " Tier " haben muss, um einen " Hund zu erstellen. " (Schwanz, Beine, Fell usw.). Anschließend können Sie die Klasse " Dog " verwenden, um einen Pudel, einen Pitbull usw. zu definieren. Sie also ' deklariert Hunderassen basierend auf der " Dog " -Klasse anstelle einer " Tier. "
Antwort
Definition 1 ist definitiv keine Abstraktion. Dies beschreibt die Modellierung genauer.
Die Definitionen 2 und 3 beschreiben dasselbe. Und beide sind ziemlich gute Beschreibungen einer Abstraktion.
Kommentare
- Das ' dachte ich !
abstract class Shape
lol!
Antwort
Jede dieser Definitionen ist gut.
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.
Schreibe einen Kommentar