abstraction

Abstraktion ist ein Informatikkonzept, bei dem eine Implementierung von ihrer Schnittstelle getrennt ist.
7
Antworten

Was ist der Unterschied zwischen der abstrakten Klasse und der reinen abstrakten Klasse in C ++?

Ich habe meine Hauptfrage im Titel gestellt. Ich wiederhole es nicht. (TROCKEN: D) Bearbeiten: Beispiel:    Iteratoren sind reine Abstraktionen: Alles, was sich wie ein   Iterator ist ein Iterator. Was heißt das?     
06.03.2013, 17:09
5
Antworten

Ein brillantes Beispiel für eine effektive Kapselung durch Informationsverbergung?

" Abstraktion und Kapselung sind komplementäre Konzepte: Abstraktion konzentriert sich auf das beobachtbare Verhalten eines Objekts ... Kapselung konzentriert sich auf die Implementierung, die dies verursacht Verhalten ... Die Kapselung wird...
11.03.2009, 18:15
4
Antworten

Wie erkennt man, dass der Code überstrapaziert ist?

Was sollten die Maßnahmen sein, die verwendet werden sollten, um zu identifizieren, dass Code über abstrahiert und sehr schwer zu verstehen ist und was getan werden sollte, um Abstraktion zu reduzieren?     
15.09.2010, 07:47
4
Antworten

Gibt es noch andere Beispiele für DSL in Powershell?

PowerBoots ist ein sehr nützliches Beispiel für DSL, das Skriptblöcke zum Erstellen von GUIs ausnutzt: %Vor% Ich weiß, dass diese Frage ohne Angabe einer Ziel Domäne sehr allgemein erscheint. Also werde ich es genauer machen: Kennen...
03.05.2011, 18:47
3
Antworten

Was sind Abstraktionen? ___ qstntxt ___

Ich habe Stroustrups "Die C ++ Programmiersprache" gelesen und erwähnt sehr oft "Abstraktionen":

  

Viele der flexibelsten, effizientesten und nützlichsten Abstraktionen beinhalten die Parametrisierung von Typen (Klassen) und Algorithmen (Funktionen) mit anderen Typen und Algorithmen

und

  

C ++ ist eine Sprache für die Entwicklung und Verwendung eleganter und effizienter Abstraktionen.

Hängt das in irgendeiner Weise mit abstrakten Klassen in C ++ zusammen? Oder mit Polymorphie, Vererbung oder Templates?

Könnte jemand bitte ein Beispiel geben?

    
___ answer18142662 ___

In der generischen Programmierung haben Abstraktionen eine genaue Bedeutung und werden "Konzepte" genannt. Ein Konzept ist wie folgt definiert :

Ein Konzept besteht aus einer Reihe von Anforderungen, die aus gültigen Ausdrücken, zugehörigen Typen, Invarianten und Komplexitätsgarantien bestehen. Ein Typ, der die Anforderungen erfüllt, soll das Konzept modellieren. Ein Konzept kann die Anforderungen eines anderen Konzepts erweitern, das als Verfeinerung bezeichnet wird.

  • Gültige Ausdrücke sind C ++ - Ausdrücke, die erfolgreich kompiliert werden müssen, damit die an dem Ausdruck beteiligten Objekte als Modelle des Konzepts betrachtet werden können.
  • Zugehörige Typen sind Typen, die mit dem Modellierungstyp verknüpft sind, da sie an einem oder mehreren gültigen Ausdrücken teilnehmen. Auf normalerweise zugeordnete Typen kann entweder über typedefs zugegriffen werden, die in einer Klassendefinition für den Modellierungstyp verschachtelt sind, oder auf sie wird über eine Merkmalsklasse zugegriffen.
  • Invarianten sind Laufzeiteigenschaften der Objekte, die immer "true" sein müssen, dh die Funktionen, an denen die Objekte beteiligt sind, müssen diese Eigenschaften beibehalten. Die Invarianten haben oft die Form von Vorbedingungen und Nachbedingungen.
  • Komplexitätsgarantien sind maximale Grenzen für die Dauer der Ausführung eines gültigen Ausdrucks oder für die Verwendung verschiedener Ressourcen. Die in der C ++ - Standardbibliothek verwendeten Konzepte sind auf der SGI STL-Site dokumentiert .

Die Implementierung eines Konzepts in echten Code kann auf verschiedene Arten erfolgen. Der klassische OOP-Ansatz besteht darin, eine abstrakte Basisklasse zu schreiben, die die gültigen Ausdrücke und zugehörigen Typen bereitstellt. Die konkret abgeleiteten Klassen liefern dann die Invarianten und die Komplexitätsgarantien. Bei Vorlagen sind die gültigen Ausdrücke impliziter und werden erst nach der Instanziierung überprüft. Template-Implementierungskonzepte sind eine Form von Enttippung : wenn es aussieht wie eine Ente, Quacksalber wie eine Ente, ....

Der C ++ 0x-Entwicklungsprozess hat sich sehr viel Mühe gegeben Konzepte direkt in Code umsetzbar machen, aber nicht in C ++ integriert 11 Standard . Allerdings ein Konzepte Lite Version wird wahrscheinlich in den nächsten C ++ 14 Standard erscheinen.

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ answer18141913 ___
  

Abstraktion ( n ) - die Qualität des Umgangs mit Ideen anstelle von Ereignissen

     

- Quelle: Oxford English Dictionary

Stroustrup bezieht sich nicht auf abstrakte Klassen oder andere spezifische Ideen in der Programmierung. Vielmehr bezieht er sich auf das Wort Abstraktion selbst.

Abstraktionen sind mentale Helfer. Sie helfen uns, eher in "Theorie" als in direkter Anwendung zu denken. Mathematik ist die Kunst der Abstraktion. Programmieren ist die Kunst der angewandten Abstraktionen.

Abstraktionen helfen uns, mentale Modelle wie Hierarchien zu bilden, die uns helfen, über Dinge nachzudenken. Polymorphismus ist aufgrund von Abstraktionen möglich. Schauen wir uns ein Beispiel an.

Beispiel

Ich habe einen Oleksiy Dobrodum. Ich bezeichne es als Oleksiy Dobrodum, ich behandle es wie ein Oleksiy Dobrodum, alles was es jemals geben wird, ist ein Oleksiy Dobrodum. Alles, was ich mit diesem Oleksiy Dobrodum mache, ist speziell dafür. Wir sind jetzt auf der ersten Abstraktionsebene oder am spezifischsten, wenn wir mit diesem Oleksiy Dobrodum arbeiten.

Kürzlich habe ich eine Zach Latta erworben, also habe ich jetzt einen Oleksiy Dobrodum und einen Zach Latta.

Ich könnte sie sowohl einzeln als auch als Oleksiy Dobrodum und als Zach Latta bezeichnen, aber das würde schnell überflüssig werden und sich als nicht flexibel erweisen. Stattdessen können wir einfach Oleksiy Dobrodum und Zach Latta zusammenfassen und sie Menschen nennen. Wir haben jetzt Abstraktionslevel 2 erreicht. Anstatt mit jeder Person einzeln umzugehen, können wir sie als Menschen bezeichnen. Auf diese Weise haben wir die "Implementierung" oder die spezifischen Details jeder Person abstrahiert und haben begonnen, uns auf die Ideen zu konzentrieren, daher denken wir jetzt abstrakt.

Natürlich können wir das weiter abstrahieren, aber hoffentlich fangen Sie an, die Idee hinter Abstraktionen zu verstehen. Der Schlüssel dazu ist, dass eine Abstraktion die Details (oder die Implementierung) versteckt . Indem wir die Details in unserer menschlichen Abstraktion verbergen, erlauben wir uns, in Allgemeinheiten zu sprechen. Wir werden kurz darüber sprechen, wie dies beim Programmieren im nächsten Abschnitt zutrifft.

Anwenden von Abstraktionen

Nachdem wir nun kurz angesprochen haben, was eine Abstraktion ist, wenden wir sie an. Polymorphismus ist aufgrund von Abstraktionen möglich. Befolgen Sie das Modell des vorherigen Beispiels, sagen wir, dass wir die folgenden zwei Klassen haben:

%Vor%

Wenn ich mit einer Instanz von %code% interagieren möchte, muss ich mich speziell auf sie beziehen. Dasselbe gilt für %code% Instanzen.

%Vor%

Wenn ich eine abstrakte Klasse namens %code% erstelle und beide %code% und %code% davon erben, kann ich die Implementierung beider Klassen abstrahieren und einfach auf beide Instanzen verweisen von ihnen als %code% .

%Vor%

Unser Klassendiagramm sieht jetzt wie folgt aus:

Ich könnte über die Implementierung für immer streiten, aber lassen Sie uns zu unseren wichtigsten Imbissbuden gehen.

Key Takeaways

  • Abstraktionen sind Ideen, keine spezifischen Ereignisse
  • etwas abstrahieren bedeutet, sich von seiner Umsetzung zu entfernen und über große Ideen nachzudenken
  • Abstraktionen können verwendet werden, um Code (und viele andere Dinge) effektiv zu organisieren
  • Objektorientierte Programmierung hängt vollständig von den Abstraktionen ab. Siehe den obigen Aufzählungspunkt.
___ tag123abstraction ___ Abstraktion ist ein Informatikkonzept, bei dem eine Implementierung von ihrer Schnittstelle getrennt ist. ___ answer18142101 ___

Ja, es hängt mit den abstrakten Klassen in C ++ zusammen, und es ist nicht auf diesen Kontext beschränkt, er erklärte generisch, dass C ++ die Abstraktion vollständig unterstützt.

Beispiel: In C ++ können wir die Klassentypen oder Funktionsaufrufe in anderen Typen verwenden. Zum Beispiel kann ein Funktionsaufruf einen Klassentyp / eine Funktion als Parameter haben, sowohl die Funktion als auch a class verweist auf eine Form abstraction- (hier bezieht sich Abstraktion auf das Ausblenden der Definition der Funktion oder einer Klasse vom Benutzer)

    
___

Ich habe Stroustrups "Die C ++ Programmiersprache" gelesen und erwähnt sehr oft "Abstraktionen":    Viele der flexibelsten, effizientesten und nützlichsten Abstraktionen beinhalten die Parametrisierung von Typen (Klassen) und Algorithmen (Fun...
09.08.2013, 07:18
2
Antworten

Funktionale Programmierung und Abhängigkeitsinversion: Wie kann man den Speicher abstrahieren?

Ich versuche eine Lösung mit einer niedrigeren Bibliothek zu erstellen, die wissen muss, dass sie Daten speichern und laden muss, wenn bestimmte Befehle aufgerufen werden. Die Implementierung der Speicher- und Ladefunktionen wird jedoch auf eine...
05.09.2015, 09:47
4
Antworten

Wo gehören alle "Bulk" -Operationen in DDD?

In DDD ist eines der Schlüsselkonzepte das Repository, mit dem Sie Entitäten (oder Aggregatwurzeln) abrufen und dann speichern können, nachdem sie aktualisiert wurden. Nehmen wir an, wir müssen eine "Bulk" -Operation mit Entitäten durchführen...
18.02.2009, 17:45
4
Antworten

Neugierde jenseits von Abstraktionen: Wie wird Bytecode ausgeführt? Wie funktionieren Gerätetreiber?

Alles, was ich auf * nix gesehen habe, ist eine Sammlung von Abstraktionen von der Hardware, aber ich bin neugierig, wie die Hardware funktioniert. Ich habe in Assembly programmiert, aber das ist immernoch nur eine Reihe von Abstraktionen....
23.05.2010, 15:35
1
Antwort

jQuery UI wie ExtJS programmieren

Ich versuche, eine Abstraktionsschicht für die jQuery UI zu entwickeln, die es ermöglicht, Widgets als Objekte zu definieren, die genau (oder ähnlich) wie ExtJS sind. Das ist das Konzept: %Vor% Jetzt kann ich sagen: %Vor% Der erste Schri...
03.02.2013, 07:44
1
Antwort

Meine Klasse ist meistens eine Front für einen Container, sollte ich diese Tatsache enthüllen?

In meinem Design habe ich eine Klasse, die meistens eine Front für std::vector<OtherClass> ist. Sollte ich in meiner Klassenschnittstelle jedem% code% an einen Aufrufer übergeben, einen Verweis auf die gesamte std::iterator übergeben...
08.09.2014, 18:59