Abstraktion (Informatik)
Die Essenz der Abstraktion besteht darin, Informationen zu erhalten, die in einem bestimmten Kontext relevant sind, und Informationen zu vergessen, die in diesem Zusammenhang irrelevant sind.
Im Softwareentwicklung und Informatik, Abstraktion ist:
- Der Prozess der Entfernung physischer, räumlicher oder zeitlicher Details[2] oder Attribute in der Untersuchung von Objekten oder Systeme Aufmerksamkeit auf Details von größerer Bedeutung zu konzentrieren;[3] Es ist in der Natur ähnlich wie der Prozess von Verallgemeinerung;
- die Kreation von abstrakt Konzept-Objekte durch Spiegelung gemeinsamer Merkmale oder Attribute verschiedener nicht-abstrakter Objekte oder Studiensysteme[3] - das Ergebnis des Abstraktionsprozesses.
Abstraktion im Allgemeinen, ist ein grundlegendes Konzept in der Informatik und Software-Entwicklung.[4] Der Abstraktionsprozess kann auch als bezeichnet werden Modellieren und ist eng mit den Konzepten von verbunden Theorie und Entwurf.[5] Modelle kann auch als Arten von Abstraktionen pro Verallgemeinerung von Aspekten von als Arten von Abstraktionen angesehen werden Wirklichkeit.
Die Abstraktion in der Informatik ist eng mit dem verwandt mit Abstraktion in Mathematik Aufgrund ihres gemeinsamen Fokus auf den Aufbau von Abstraktionen als Objekte,[2] hängt aber auch mit anderen Begriffen der Abstraktion zusammen, die in anderen Bereichen verwendet werden wie Kunst.[3]
Abstraktionen können sich auch auf reale Objekte und Systeme beziehen, Regeln von Computersysteme oder Regeln von Programmiersprachen die Merkmale der Abstraktion selbst tragen oder verwenden, wie z. B.:
- die Verwendung von Datentypen aufführen Datenabstraktion Nutzung von funktionierenden Darstellungen von zu trennen Datenstrukturen innerhalb Programme;[6]
- das Konzept von Verfahren, Funktionen oder Unterprogramme die eine spezifische Implementierung darstellen Steuerfluss in Programmen;
- Die allgemein als "Abstraktion" bezeichneten Regeln, die verallgemeinert werden Ausdrücke Verwendung freie und gebundene Variablen in den verschiedenen Versionen von Lambda -Kalkül;[7][8]
- die Verwendung von S-Expressionen Als Abstraktion von Datenstrukturen und Programmen in der Lisp -Programmiersprache;[9]
- Der Prozess der Reorganisierung des gemeinsamen Verhaltens von Nichtabstrakt Klassen in "abstrakte Klassen" verwenden Nachlass abstrahieren Unterklassen Wie in der gesehen objektorientierter C ++ und Java Programmiersprachen.
Begründung
Die Berechnung arbeitet hauptsächlich unabhängig von der Betonwelt. Die Hardware implementiert a Berechnungsmodell Das ist mit anderen austauschbar.[10] Die Software ist in strukturiert in Architekturen Damit Menschen die enormen Systeme schaffen, indem sie sich auf einige Probleme nacheinander konzentrieren. Diese Architekturen bestehen aus spezifischen Auswahlmöglichkeiten für Abstraktionen. Greenspuns zehnte Regel ist ein Aphorismus Wie eine solche Architektur sowohl unvermeidlich als auch komplex ist.
Eine zentrale Form der Abstraktion beim Computer ist Sprachabstraktion: Neue künstliche Sprachen werden entwickelt, um spezifische Aspekte eines Systems auszudrücken. Modellierungssprachen Hilfe bei der Planung. Computersprachen kann mit einem Computer verarbeitet werden. Ein Beispiel für diesen Abstraktionsprozess ist die Generationsentwicklung von Programmiersprachen von dem Maschinensprache zum Montagesprache und die hochrangige Sprache. Jede Stufe kann als Sprungbrett für die nächste Stufe verwendet werden. Die Sprachabstraktion geht zum Beispiel in weiter Skriptsprachen und Domänenspezifische Programmiersprachen.
In einer Programmiersprache können der Programmierer neue Abstraktionen erstellen. Diese beinhalten Unterroutinen, Module, Polymorphismus, und Softwarekomponenten. Einige andere Abstraktionen wie z. Software -Designmuster und Architekturstile bleiben für a unsichtbar Übersetzer und arbeiten nur im Design eines Systems.
Einige Abstraktionen versuchen, die Konzeptespanne zu begrenzen, die ein Programmierer kennen muss, indem sie die Abstraktionen, auf denen sie wiederum aufgebaut sind, vollständig versteckt. Der Software -Ingenieur und -Herautor Joel Spolsky hat diese Bemühungen kritisiert, indem er behauptete, dass alle Abstraktionen sind undicht - dass sie die folgenden Details nie vollständig verbergen können;[11] Dies negiert jedoch nicht die Nützlichkeit der Abstraktion.
Einige Abstraktionen sind so konzipiert, dass sie mit anderen Abstraktionen interagieren-beispielsweise kann eine Programmiersprache a enthalten Fremdenfunktionsschnittstelle Für Anrufe zur Sprache auf unterer Ebene.
Abstraktionsmerkmale
Programmiersprachen
Unterschiedliche Programmiersprachen bieten je nach den beabsichtigten Anwendungen für die Sprache unterschiedliche Abstraktionsarten. Zum Beispiel:
- Im objektorientierte Programmiersprachen wie zum Beispiel C ++, Objekt Pascal, oder Java, das Konzept von Abstraktion ist selbst zu einer deklarativen Aussage geworden - verwendet die Syntax
Funktion (Parameter) = 0;
(in C ++) oder der Schlüsselwörterabstrakt
[12] undSchnittstelle
[13] (in Java). Nach einer solchen Erklärung liegt es in der Verantwortung des Programmierers, a zu implementieren Klasse Um die zu instanziieren Objekt der Erklärung. - Funktionale Programmiersprachen häufig abstraktionen im Zusammenhang mit Funktionen aufweisen, wie z. Lambda Abstraktionen (einen Begriff in eine Funktion einer Variablen machen) und Funktionen höherer Ordnung (Parameter sind Funktionen).
- Moderne Mitglieder der LISP -Programmiersprache -Familie wie z. Clojure, Planen und Common Lisp Unterstützung Makrosysteme syntaktische Abstraktion zu ermöglichen. Andere Programmiersprachen wie z. Scala habe auch Makros oder sehr ähnlich Metaprogrammierung Funktionen (zum Beispiel, Haskell hat Vorlage Haskell, und Ocaml hat Metaocaml). Diese können es einem Programmierer ermöglichen, zu beseitigen Boilerplate -Code, abstrakt weg, mühsame Funktionsaufrufsequenzen, neu implementieren Kontrollflussstrukturenund implementieren Domänenspezifische Sprachen (DSLs), die ermöglichen, dass domänenspezifische Konzepte auf präzise und elegante Weise ausgedrückt werden. All dies verbessert bei korrekter Anwendung sowohl die Effizienz des Programmierers als auch die Klarheit des Codes, indem der beabsichtigte Zweck expliziter wird. Eine Folge der syntaktischen Abstraktion ist auch, dass jeder Lisp-Dialekt und in der Tat fast jede Programmiersprache im Prinzip in einem modernen LISP mit signifikant reduzierten (aber immer noch nicht trivialen) Aufwand im Vergleich zu "traditionelleren" -Bemühungen implementiert werden können. Programmiersprachen wie z. Python, C oder Java.
Spezifikationsmethoden
Analysten haben verschiedene Methoden entwickelt, um Softwaresysteme formell zu spezifizieren. Einige bekannte Methoden sind:
- Abstraktes Modellbasierter Methode (VDM, Z);
- Algebraische Techniken (Larch, klar, obj, act eins, casl);
- Prozessbasierte Techniken (Lotos, SDL, Estelle);
- Trace-basierte Techniken (Special, TAM);
- Wissensbasierte Techniken (Refine, Gist).
Spezifikationssprachen
Spezifikationssprachen beruhen im Allgemeinen auf Abstraktionen der einen oder anderen Art, da die Spezifikationen in der Regel früher in einem Projekt (und auf einer abstrakteren Ebene) als eine eventuelle Implementierung definiert werden. Das Uml Die Spezifikationssprache ermöglicht beispielsweise die Definition von abstrakt Klassen, die in einem Wasserfallprojekt während der Architektur- und Spezifikationsphase des Projekts abstrakt bleiben.
Kontrollabstraktion
Programmiersprachen bieten Kontrollabstraktion als einen der Hauptzwecke ihrer Verwendung. Computermaschinen verstehen die Vorgänge auf sehr niedriger Ebene wie das Verschieben einiger Bits von einem Ort des Speichers an einen anderen Ort und das Erstellen der Summe von zwei Sequenzen von Bits. Programmiersprachen ermöglichen dies in höherer Ebene. Betrachten Sie beispielsweise diese in a geschriebene Erklärung Pascal-ähnliche Mode:
A: = (1 + 2) * 5
Für einen Menschen scheint dies eine ziemlich einfache und offensichtliche Berechnung zu sein ("Eins plus zwei sind drei, mal fünf sind fünfzehn"). Die für die Durchführung dieser Bewertung erforderlichen niedrigen Schritte auf niedriger Ebene und die Rückgabe des Wertes "15" und dann diesem Wert der Variablen "A" sind tatsächlich ziemlich subtil und komplex. Die Werte müssen in eine binäre Darstellung (oft eine viel kompliziertere Aufgabe als man denken) umgewandelt werden und die Berechnungen (vom Compiler oder Interpreter) in die Montageanweisungen (erneut weniger intuitiv für den Programmierer: Operationen wie z. Wenn Sie ein binäres Register links verlagern oder die binäre Ergänzung des Inhalts eines Registers zu einem anderen hinzufügen, denken Menschen einfach nicht so, wie Menschen über die abstrakten arithmetischen Operationen von Addition oder Multiplikation denken). Schließlich die Zuweisung des resultierenden Wertes von "15" der mit der Bezeichnung "A" bezeichneten Variablen, so dass "A" später verwendet werden kann, beinhaltet zusätzliche Schritte hinter den Kulissen, um das Etikett einer Variablen und den daraus resultierenden Ort in physischer Stelle zu suchen oder virtuelles Gedächtnis, die binäre Darstellung von "15" an diesem Speicherort usw. gespeichert werden.
Ohne Steuerabstraktion müsste ein Programmierer angeben alle Die Schritte auf Register/Binärebene jedes Mal, wenn sie einfach ein paar Zahlen hinzufügen oder multiplizieren und das Ergebnis einer Variablen zuweisen. Eine solche Duplizierung von Aufwand hat zwei schwerwiegende negative Folgen:
- Es zwingt den Programmierer, jedes Mal, wenn eine ähnliche Operation erforderlich ist
- Es zwingt den Programmierer, für den jeweiligen Hardware- und Anweisungssatz zu programmieren
Strukturierte Programmierung
Die strukturierte Programmierung beinhaltet die Aufteilung komplexer Programmaufgaben in kleinere Stücke mit klarer Strömungskontroll und Schnittstellen zwischen den Komponenten, wobei das Komplexitätspotential für Nebenwirkungen verringert wird.
In einem einfachen Programm kann dies sicherstellen, dass Schleifen einzelne oder offensichtliche Ausstiegspunkte haben und (wenn möglich) einzelne Ausstiegspunkte aus Funktionen und Verfahren haben.
In einem größeren System kann es darum gehen, komplexe Aufgaben in viele verschiedene Module zu zerlegen. Betrachten Sie ein System, das die Lohn- und Gehaltsabrechnung auf Schiffen und in den Landbüros behandelt:
- Die oberste Ebene kann ein Menü mit typischen Endbenutzeroperationen aufweisen.
- Darin können eigenständige ausführbare oder Bibliotheken für Aufgaben wie die Unterzeichnung von Mitarbeitern oder Druckkontrollen liegen.
- In jedem dieser eigenständigen Komponenten können viele verschiedene Quelldateien vorhanden sein, die den Programmcode enthält, um einen Teil des Problems zu behandeln, wobei nur ausgewählte Schnittstellen anderen Teilen des Programms verfügbar sind. Ein Zeichen für das Programm könnte Quellendateien für jeden Dateneingabebildschirm und die Datenbankschnittstelle (die selbst eine eigenständige Bibliothek von Drittanbietern oder ein statisch verknüpfter Satz von Bibliotheksroutinen sein kann).
- Entweder die Datenbank oder die Lohn- und Gehaltsabrechnungsanwendung müssen auch den Prozess des Austauschs von Daten zwischen Schiff und Land einleiten, und diese Datenübertragungsaufgabe enthält häufig viele andere Komponenten.
Diese Schichten erzeugen die Wirkung der Isolierung der Implementierungsdetails einer Komponente und ihrer verschiedenen internen Methoden der anderen. Objektorientierte Programmierung umfasst und erweitert dieses Konzept.
Datenabstraktion
Datenabstraktion erzwingt eine klare Trennung zwischen dem abstrakt Eigenschaften von a Datentyp und die Beton Details seiner Implementierung. Die abstrakten Eigenschaften sind diejenigen, die für den Client -Code sichtbar sind, die den Datentyp verwenden - die Schnittstelle zum Datentyp - während die konkrete Implementierung vollständig privat gehalten wird und sich tatsächlich ändern kann, um beispielsweise die Effizienzverbesserungen im Laufe der Zeit einzubeziehen. Die Idee ist, dass solche Änderungen keinen Einfluss auf den Client -Code haben sollen, da sie keinen Unterschied im abstrakten Verhalten haben.
Zum Beispiel könnte man eine definieren Zusammenfassung Datentyp genannt Nachschlagwerk die einzigartig assoziiert Schlüssel mit Werteund in welchen Werten können durch Angabe ihrer entsprechenden Schlüssel abgerufen werden. Eine solche Suchentabelle kann auf verschiedene Weise implementiert werden: als Hash-tabelle, a Binärer Suchbaum, oder sogar ein einfacher Linear aufführen von (Schlüssel: Wert) Paare. In Bezug auf den Client -Code sind die abstrakten Eigenschaften des Typs jeweils gleich.
Dies alles alles hängt natürlich davon ab, die Details der Schnittstelle in erster Linie zu erhalten, da alle Änderungen erhebliche Auswirkungen auf den Client -Code haben können. Als eine Möglichkeit, dies zu betrachten: Die Schnittstelle bildet a Vertrag über ein vereinbartes Verhalten zwischen Datentyp und Client -Code; Alles, was nicht im Vertrag geschrieben ist, kann sich ohne vorherige Ankündigung ändern.
Manuelle Daten Abstraktion
Während ein Großteil der Datenabstraktion durch Informatik und Automatisierung auftritt, gibt es Zeiten, in denen dieser Prozess manuell und ohne Programmiereingriffe durchgeführt wird. Eine Möglichkeit, wie dies verstanden werden kann Systematische Überprüfung der Literatur. In dieser Methodik werden die Daten von einem oder mehreren Abstractors bei der Durchführung von a abstrahiert Metaanalyse, mit Fehlern durch doppelte Datenabstraktion, gefolgt von einer unabhängigen Überprüfung, bekannt als Entscheidung.[14]
Abstraktion in der objektorientierten Programmierung
Im Objekt orientierte Programmierung Theorie, Abstraktion Beinhaltet die Einrichtung, um Objekte zu definieren, die abstrakte "Akteure" darstellen, die Arbeit ausführen, ihren Zustand melden und verändern und mit anderen Objekten im System "kommunizieren" können. Der Begriff Verkapselung bezieht sich auf das Verstecken von Zustand Details, aber das Konzept von erweitern Datentyp von früheren Programmiersprachen zu assoziieren Verhalten Am stärksten mit den Daten und der Standardisierung der Art und Weise, wie verschiedene Datentypen interagieren, ist der Beginn von Abstraktion. Wenn die Abstraktion in die definierten Operationen verläuft und Objekte verschiedener Typen ersetzt werden können, heißt es Polymorphismus. Wenn es in die entgegengesetzte Richtung in den Typen oder Klassen verläuft und sie strukturiert, um eine komplexe Reihe von Beziehungen zu vereinfachen, heißt es Delegation oder Nachlass.
Verschiedene objektorientierte Programmiersprachen bieten ähnliche Einrichtungen für die Abstraktion, um eine allgemeine Strategie von zu unterstützen Polymorphismus In der objektorientierten Programmierung, die die Substitution eines Typs für einen anderen in derselben oder ähnlichen Rolle umfasst. Obwohl nicht allgemein unterstützt, kann eine Konfiguration, ein Bild oder ein Paket sehr viele vorbestimmen Bindungen bei Kompilierungszeit, Link-Zeit, oder Ladezeit. Dies würde nur ein Minimum an solchen Bindungen für die Änderung bei der Veränderung lassen Laufzeit.
Gemeinsames Lisp -Objektsystem oder SelbstZum Beispiel weniger eine Unterscheidung über die Klasseninstitation und eine stärkere Verwendung der Delegation für Polymorphismus. Einzelne Objekte und Funktionen werden flexibler abstrahierter, um besser zu einem gemeinsamen funktionellen Erbe zu passen Lispeln.
C ++ veranschaulicht ein weiteres Extrem: Es stützt sich stark auf Vorlagen und Überlastung und andere statische Bindungen zur Kompilierungszeit, die wiederum bestimmte Flexibilitätsprobleme aufweisen.
Obwohl diese Beispiele alternative Strategien zur Erreichung der gleichen Abstraktion bieten, verändern sie nicht grundlegend die Notwendigkeit, abstrakte Substantive im Code zu unterstützen - alle Programmierungen beruhen auf der Fähigkeit, Verben als Funktionen, Substantive als Datenstrukturen und entweder als Prozesse abzuwarten.
Betrachten Sie zum Beispiel eine Probe Java Fragment, um einige häufige "Tiere" für landwirtschaftliche Bauern zu repräsentieren, die für eine Abstraktion geeignet sind, um einfache Aspekte ihres Hungers und Fütterung zu modellieren. Es definiert eine Tier
Klasse, um sowohl den Zustand des Tieres als auch seine Funktionen darzustellen:
Öffentlichkeit Klasse Tier erweitert Living { Privatgelände Ort loc; Privatgelände doppelt EnergyReserves; Öffentlichkeit Boolesche ist hungrig() { Rückkehr EnergyReserves < 2.5; } Öffentlichkeit Leere Essen(Essen Lebensmittel) { // Lebensmittel konsumieren EnergyReserves += Lebensmittel.GetCalories(); } Öffentlichkeit Leere ziehen nach(Ort Lage) { // zu einem neuen Standort wechseln Dies.loc = Lage; } }
Mit der obigen Definition könnte man Objekte vom Typ erstellen Tier und rufen Sie ihre Methoden wie diese an:
das Schwein = Neu Tier(); die Kuh = Neu Tier(); wenn (das Schwein.ist hungrig()) { das Schwein.Essen(Tischreste); } wenn (die Kuh.ist hungrig()) { die Kuh.Essen(Gras); } die Kuh.ziehen nach(die Scheune);
Im obigen Beispiel die Klasse Tier
ist eine Abstraktion, die anstelle eines tatsächlichen Tieres verwendet wird, Living
ist eine weitere Abstraktion (in diesem Fall eine Verallgemeinerung) von Tier
.
Wenn man eine differenziertere Hierarchie von Tieren benötigt - um beispielsweise diejenigen zu unterscheiden, die Milch von denen liefern, die am Ende ihres Lebens nichts außer Fleisch liefern - ist das ein Vermittler der Abstraktion, wahrscheinlich Milchanimal (Kühe, Ziegen), wer würde es tun Essen Sie Lebensmittel, die geeignet sind, gute Milch zu geben, und Fleischanimal (Schweine, Ochsen), die Lebensmittel essen würden, um die beste Fleischqualität zu bieten.
Eine solche Abstraktion könnte die Notwendigkeit des Anwendungscodierers entfernen, den Lebensmitteltyp anzugeben, damit sie sich stattdessen auf den Fütterungsplan konzentrieren können. Die beiden Klassen könnten verwandt werden Nachlass oder allein sein, und der Programmierer könnte unterschiedliche Grade von definieren Polymorphismus zwischen den beiden Typen. Diese Einrichtungen variieren in der Regel drastisch zwischen den Sprachen, aber im Allgemeinen kann jeder alles erreichen, was mit einem der anderen möglich ist. Viele Operationsüberladungen, Datentyp nach Datentyp, können bei Kompilierungszeit den gleichen Effekt haben wie ein beliebiger Vererbungsgrad oder andere Mittel zur Erreichung von Polymorphismus. Die Klassennotation ist einfach die Bequemlichkeit eines Codierers.
Objektorientiertes Design
Entscheidungen darüber, was zu abstrakt zu werden und was unter der Kontrolle des Codierers zu halten ist, wird zum Hauptanliegen des objektorientierten Designs und Domänenanalyse- Wirkliche Bestimmung der relevanten Beziehungen in der realen Welt ist die Sorge von Objektorientierte Analyse oder Legacy -Analyse.
Um eine geeignete Abstraktion zu bestimmen, muss man im Allgemeinen viele kleine Entscheidungen über den Umfang (Domänenanalyse) treffen, bestimmen, mit welchen anderen Systemen man zusammenarbeiten muss (Legacy-Analyse) und dann eine detaillierte objektorientierte Analyse durchführen muss, die innerhalb der Projektzeit und des Budgets ausgedrückt wird Einschränkungen als objektorientiertes Design. In unserem einfachen Beispiel ist die Domäne der Barnyard, die lebenden Schweine und Kühe und ihre Essgewohnheiten sind die Legacy -Einschränkungen. Die detaillierte Analyse besteht darin Die Art des Lebensmittels in die Klasse selbst und das Design ist eine einzige einfache Tierklasse, von der Schweine und Kühe mit denselben Funktionen Fälle sind. Eine Entscheidung zur Differenzierung von Milchanimal würde die detaillierte Analyse ändern, aber die Domäne und die Legacy-Analyse wäre unverändert-dh sie steht vollständig unter der Kontrolle des Programmierers und wird als Abstraktion in objektorientiertem Programmieren bezeichnet, was sich von der Abstraktion in Domäne oder Legacy unterscheidet Analyse.
Überlegungen
Beim Diskussion Formale Semantik von Programmiersprachen, Formale Methoden oder Abstrakte Interpretation, Abstraktion bezieht sich auf den Akt der Berücksichtigung einer weniger detaillierten, aber sicheren Definition des beobachteten Programmverhaltens. Zum Beispiel kann man nur das Endergebnis der Programmausführungen beobachten, anstatt alle Zwischenausführungen zu berücksichtigen. Abstraktion wird zu a definiert Beton (präziser) Modell der Ausführung.
Abstraktion kann sein genau oder treu In Bezug auf eine Eigenschaft, wenn man eine Frage zu der Eigenschaft auf dem Beton- oder abstrakten Modell gleich gut beantworten kann. Wenn man beispielsweise wissen möchte, was das Ergebnis der Bewertung eines mathematischen Ausdrucks mit nur Ganzzahlen +, -, ×, wert ist Modulo nDann muss man nur alle Operationsmodulo durchführen n (Eine vertraute Form dieser Abstraktion ist Nines ausstrecken).
Abstraktionen jedoch jedoch nicht unbedingt genau, sollte sein Klang. Das heißt, es sollte möglich sein, solide Antworten von ihnen zu erhalten - auch wenn die Abstraktion einfach ein Ergebnis von ergeben kann Unentscheidbarkeit. Zum Beispiel können Schüler in einer Klasse durch ihr minimales und maximales Alter abstrahiert werden. Wenn man fragt, ob eine bestimmte Person zu dieser Klasse gehört, kann man das Alter dieser Person einfach mit dem minimalen und maximalen Alter vergleichen. Wenn sein Alter außerhalb des Bereichs liegt, kann man sicher antworten, dass die Person nicht zur Klasse gehört; Wenn dies nicht der Fall ist, kann man nur antworten "Ich weiß nicht".
Der in einer Programmiersprache enthaltene Abstraktionsniveau kann ihre Gesamtstrecke beeinflussen Benutzerfreundlichkeit. Das Kognitive Dimensionen Framework umfasst das Konzept von Abstraktionsgradient in einem Formalismus. Dieser Rahmen ermöglicht es dem Designer einer Programmiersprache, die Kompromisse zwischen Abstraktion und anderen Merkmalen des Designs zu untersuchen und wie Änderungen in der Abstraktion die Sprachnutzbarkeit beeinflussen.
Abstraktionen können sich beim Umgang mit Computerprogrammen als nützlich erweisen, da nicht triviale Eigenschaften von Computerprogrammen im Wesentlichen sind unentscheidbar (sehen Reis Satz). Infolgedessen müssen automatische Methoden zur Ableitung von Informationen über das Verhalten von Computerprogrammen entweder die Beendigung fallen (in einigen Gelegenheiten können sie scheitern, abstürzen oder niemals ein Ergebnis ausgeben), solide (sie können falsche Informationen liefern) oder Präzision (Präzision (Präzision) (Präzision (sie können falsche Informationen liefern) (Präzision (sie können falsche Informationen liefern) (Präzision (sie können falsche Informationen liefern) (Präzision (sie können falsche Informationen) liefern (sie liefern niemals ein Ergebnis. Sie können einige Fragen "Ich weiß nicht" beantworten.
Abstraktion ist das Kernkonzept von Abstrakte Interpretation. Modellprüfung Im Allgemeinen findet auf abstrakten Versionen der untersuchten Systeme statt.
Abstraktionsniveaus
Informatik präsentiert üblicherweise Ebenen (oder weniger häufig, Schichten) der Abstraktion, wobei jede Ebene ein anderes Modell der gleichen Informationen und Prozesse darstellt, jedoch mit unterschiedlichen Detailmengen. Jede Ebene verwendet ein Expressionssystem, das einen einzigartigen Satz von Objekten und Zusammensetzungen umfasst, die nur für eine bestimmte Domäne gelten.[15] Jedes relativ abstrakte "höhere" Niveau baut auf einem relativ konkreten, "niedrigeren" Niveau auf, der tendenziell eine zunehmend "körnige" Darstellung bietet. Zum Beispiel bauen Gates auf elektronischen Schaltkreisen, Binärdatoren, Maschinensprache auf binärer, Programmiersprache auf Maschinensprache, Anwendungen und Betriebssystemen auf Programmiersprachen auf. Jede Stufe ist verkörpert, aber nicht durch die darunter liegende Ebene bestimmt, wodurch sie zu einer Beschreibung der Beschreibung ist, die etwas in sich geschlossen ist.
Datenbanksysteme
Da viele Benutzer von Datenbanksystemen mit Computerdatenstrukturen eine ausführliche Vertrautheit fehlen, verbergen Datenbankentwickler häufig die Komplexität in den folgenden Ebenen:
Physische Ebene: Die niedrigste Abstraktionsebene beschreibt wie Ein System speichert tatsächlich Daten. Die physikalische Ebene beschreibt komplexe Datenstrukturen auf niedriger Ebene im Detail.
Logische Ebene: Die nächst höhere Abstraktionsebene beschreibt was Daten Die Datenbank speichert und welche Beziehungen zwischen diesen Daten existieren. Die logische Ebene beschreibt somit eine gesamte Datenbank in Bezug auf eine kleine Anzahl relativ einfacher Strukturen. Obwohl die Implementierung der einfachen Strukturen auf logischer Ebene komplexe Strukturen auf physikalischer Ebene beinhalten kann, muss der Benutzer der logischen Ebene diese Komplexität nicht bewusst sein. Dies wird als bezeichnet als Physikalische Datenunabhängigkeit. Datenbankadministratoren, Wer muss entscheiden, welche Informationen in einer Datenbank aufbewahrt werden sollen, die logische Abstraktionsebene.
View Level: Die höchste Abstraktionsebene beschreibt nur einen Teil der gesamten Datenbank. Obwohl die logische Ebene einfachere Strukturen verwendet, bleibt die Komplexität aufgrund der Vielfalt der in einer großen Datenbank gespeicherten Informationen bestehen. Viele Benutzer eines Datenbanksystems benötigen nicht alle diese Informationen. Stattdessen müssen sie nur auf einen Teil der Datenbank zugreifen. Die Ansichtsstufe der Abstraktion besteht, um ihre Interaktion mit dem System zu vereinfachen. Das System kann viele liefern Ansichten Für die gleiche Datenbank.
Geschichtete Architektur
Die Fähigkeit, a zu liefern Entwurf von verschiedenen Abstraktionsniveaus kann
- Vereinfachen Sie das Design erheblich
- Ermöglichen Sie verschiedene Rollenspieler, auf verschiedenen Abstraktionsebenen effektiv zu arbeiten
- unterstützen die Portabilität von Software -Artefakte (modellbasiert idealerweise)
Systemdesign und Geschäftsprozessdesign kann dies beide verwenden. Etwas Entwurfsprozesse Generieren Sie speziell Designs, die verschiedene Abstraktionsebenen enthalten.
Layered Architecture Partitions Die Bedenken der Anwendung in gestapelte Gruppen (Schichten). Es handelt sich um eine Technik, die zum Entwerfen von Computersoftware, Hardware und Kommunikation verwendet wird, bei der System- oder Netzwerkkomponenten in Schichten isoliert werden, sodass Änderungen in einer Ebene vorgenommen werden können, ohne die anderen zu beeinflussen.
Siehe auch
- Abstraktionsprinzip (Computerprogrammierung)
- Abstraktionsinversion für ein Anti-Muster einer Gefahr bei der Abstraktion
- Zusammenfassung Datentyp Für eine abstrakte Beschreibung eines Datensatzes
- Algorithmus Für eine abstrakte Beschreibung eines Rechenverfahrens
- Bracket -Abstraktion, um einen Begriff in eine Funktion einer Variablen zu machen
- Datenmodellierung Um Daten unabhängig von den Prozessen zu strukturieren, die sie verwenden
- Verkapselung Für Abstraktionen, die Implementierungsdetails verbergen
- Greenspuns zehnte Regel Für einen Aphorismus über einen (dem?) Optimum im Raum der Abstraktionen
- Funktion höherer Ordnung zur Abstraktion, bei der Funktionen andere Funktionen erzeugen oder konsumieren
- Lambda -Abstraktion um einen Begriff in eine Funktion einer Variablen zu machen
- Liste der Abstraktionen (Informatik)
- Raffinesse für das Gegenteil von Abstraktion beim Computer
- Ganzzahl (Informatik)
- Heuristik (Informatik)
Verweise
- ^ Guttag, John V. (18. Januar 2013). Einführung in die Berechnung und Programmierung mit Python (Frühjahr 2013 ed.). Cambridge, Massachusetts: Die MIT -Presse. ISBN 9780262519632.
- ^ a b Colburn, Timothy; Shute, Gary (5. Juni 2007). "Abstraktion in Informatik". Köpfe und Maschinen. 17 (2): 169–184. doi:10.1007/s11023-007-9061-7. ISSN 0924-6495. S2CID 5927969.
- ^ a b c Kramer, Jeff (1. April 2007). "Ist Abstraktion der Schlüssel zum Computer?". Kommunikation der ACM. 50 (4): 36–42. doi:10.1145/1232743.1232745. ISSN 0001-0782. S2CID 12481509.
- ^ Ben-Ari, Mordechai (1. März 1998). "Konstruktivismus in der Bildung von Informatik". ACM Sigcse Bulletin. 30 (1): 257, 257–261. doi:10.1145/274790.274308. ISSN 0097-8418.
- ^ Comer, D. E.; Gries, David; Mulder, Michael C.; Tucker, Allen; Turner, A. Joe; Young, Paul R. /Denning (1. Januar 1989). "Computer als Disziplin". Kommunikation der ACM. 32 (1): 9–23. doi:10.1145/63238.63239. ISSN 0001-0782. S2CID 723103.
- ^ Liskov, Barbara (1. Mai 1988). "Keynote -Adresse - Datenabstraktion und Hierarchie". ACM Sigplan nennt. ACM. 23: 17–34. doi:10.1145/62138.62141. ISBN 0897912667. S2CID 14219043.
- ^ Barendregt, Hendrik Pieter (1984). Der Lambda -Kalkül: seine Syntax und Semantik (Überarbeitete Ausgabe). Amsterdam: Nordholland. ISBN 0444867481. OCLC 10559084.
- ^ Barendregt, Hendrik Pieter (2013). Lambda -Kalkül mit Typen. Dekkers, Wil., Statman, Richard., Alessi, Fabio., Assoziation für symbolische Logik. Cambridge, Großbritannien: Cambridge University Press. ISBN 9780521766142. OCLC 852197712.
- ^ Newell, Allen; Simon, Herbert A. (1. Januar 2007). Informatik als empirische Anfrage: Symbole und Suche. ACM. p. 1975. doi:10.1145/1283920.1283930. ISBN 9781450310499.
- ^ Floridi, Luciano (September 2008). "Die Methode der Abstraktionsniveaus". Köpfe und Maschinen. 18 (3): 303–329. doi:10.1007/s11023-008-9113-7. ISSN 0924-6495.
- ^ Spolsky, Joel. "Das Gesetz der undichten Abstraktionen".
- ^ "Abstrakte Methoden und Klassen". Die Java ™ -Tutorials. Orakel. Abgerufen 4. September 2014.
- ^ "Verwenden einer Schnittstelle als Typ". Die Java ™ -Tutorials. Orakel. Abgerufen 4. September 2014.
- ^ E, Jian -Yu; Saldanha, Ian J.; Canner, Joseph; Schmid, Christopher H.; Le, Jimmy T.; Li, Tianjing (2020). "Die Entscheidung und keine Erfahrung von Datenabstraktionserfahrungen ist wichtig, um Fehler bei der Zusammenfassung von Daten in systematischen Überprüfungen zu verringern". Forschungssynthesemethoden. 11 (3): 354–362. doi:10.1002/jrsm.1396. ISSN 1759-2879. PMID 31955502.
- ^ Luciano Floridi, Levellismus und die Methode der Abstraktion IEG - Forschungsbericht 22.11.04
Weitere Lektüre
- Harold Abelson; Gerald Jay Sussman; Julie Sussman (25. Juli 1996). Struktur und Interpretation von Computerprogrammen (2 ed.). MIT Press. ISBN 978-0-262-01153-2. Archiviert von das Original am 26. Februar 2009. Abgerufen 22. Juni 2012.
- Spolsky, Joel (11. November 2002). "Das Gesetz der undichten Abstraktionen". Joel über Software.
- Abstraktion/Informationen verstecken - CS211 -Kurs, Cornell University.
- Eric S. Roberts (1997). Programmierabstraktionen in C Ein zweiter Kurs in Informatik.
- Palermo, Jeffrey (29. Juli 2008). "Die Zwiebelarchitektur". Jeffrey Palermo.
- Vishkin, Uzi (Januar 2011). "Mit einfacher Abstraktion zum erneuten Erfinden von Computing für Parallelität". Kommunikation der ACM. 54 (1): 75–85. doi:10.1145/1866739.1866757.
Externe Links
- Simarch Beispiel für verteilte Architektur für verteilte Simulationssysteme.