Abstraktion: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Zeile 2: Zeile 2:


== Beschreibung ==
== Beschreibung ==
Der Begriff '''Abstraktion''' wird in der [[Informatik]] sehr häufig eingesetzt und beschreibt die Trennung zwischen ''Konzept'' und ''Umsetzung''.
Der Begriff '''Abstraktion''' wird in der [[Informatik]] sehr häufig eingesetzt und beschreibt die Trennung zwischen ''Konzept'' und ''Umsetzung''
* Strukturen werden dabei über ihre Bedeutung definiert, während die detaillierten Informationen über die Funktionsweise verborgen bleiben.
* Strukturen werden dabei über ihre Bedeutung definiert, während die detaillierten Informationen über die Funktionsweise verborgen bleiben
* Abstraktion zielt darauf ab, die Details der Implementierung nicht zu berücksichtigen und daraus ein allgemeines Schema zur Lösung des Problems abzuleiten.
* Abstraktion zielt darauf ab, die Details der Implementierung nicht zu berücksichtigen und daraus ein allgemeines Schema zur Lösung des Problems abzuleiten
* Ein Computerprogramm kann so unterschiedliche Abstraktionsebenen aufweisen, wobei auf jeder Ebene ein anderer Grad des Informationsgehaltes dem Programmierer preisgegeben wird.
* Ein Computerprogramm kann so unterschiedliche Abstraktionsebenen aufweisen, wobei auf jeder Ebene ein anderer Grad des Informationsgehaltes dem Programmierer preisgegeben wird
* Eine Abstraktion auf niedriger Stufe beinhaltet Details zur [[Hardware]], auf der das Programm läuft.
* Eine Abstraktion auf niedriger Stufe beinhaltet Details zur [[Hardware]], auf der das Programm läuft
* Höher liegende Abstraktionsebenen beschäftigen sich dagegen mit der [[Geschäftslogik]] der Software.
* Höher liegende Abstraktionsebenen beschäftigen sich dagegen mit der [[Geschäftslogik]] der Software


Abstraktion beschäftigt sich also genau mit dem Detailgrad eines Objektes, der gerade im Kontext der aktuellen Perspektive benötigt wird, und kann auf die Daten sowie die Steuerung eines Programmes angewendet werden:
Abstraktion beschäftigt sich also genau mit dem Detailgrad eines Objektes, der gerade im Kontext der aktuellen Perspektive benötigt wird, und kann auf die Daten sowie die Steuerung eines Programmes angewendet werden:
* Die '''Abstraktion der Steuerung''' umfasst den Einsatz von [[Unterprogramm]]en und Konzepten wie [[Kontrollfluss]].
* Die '''Abstraktion der Steuerung''' umfasst den Einsatz von [[Unterprogramm]]en und Konzepten wie [[Kontrollfluss]]
* '''Datenabstraktion''' erlaubt die sinnvolle Verarbeitung von Datenbits, zum Beispiel als [[Datentypen]].
* '''Datenabstraktion''' erlaubt die sinnvolle Verarbeitung von Datenbits, zum Beispiel als [[Datentypen]]


Eine generelle Empfehlung, Abstraktion immer dann einzusetzen, wenn diese versucht, Duplikationen zu vermeiden, wird als '''Abstraktionsprinzip''' bezeichnet.
Eine generelle Empfehlung, Abstraktion immer dann einzusetzen, wenn diese versucht, Duplikationen zu vermeiden, wird als '''Abstraktionsprinzip''' bezeichnet
* Auch die Anforderung an Programmiersprachen, Mechanismen für diese Empfehlung zur Verfügung zu stellen, wird so genannt.
* Auch die Anforderung an Programmiersprachen, Mechanismen für diese Empfehlung zur Verfügung zu stellen, wird so genannt


== Grundprinzip ==
== Grundprinzip ==
Abstraktion ermöglicht es, das Wesentliche unter einem bestimmten Gesichtspunkt aus einer Menge von Individuen (Dinge, Beobachtungen …) herauszuheben und abzuleiten, und ist somit ein zentrales Mittel für das Erstellen und Verstehen von Modellen.
Abstraktion ermöglicht es, das Wesentliche unter einem bestimmten Gesichtspunkt aus einer Menge von Individuen (Dinge, Beobachtungen …) herauszuheben und abzuleiten, und ist somit ein zentrales Mittel für das Erstellen und Verstehen von Modellen


Es unterstützt den Programmierer dabei, die Komplexität eines Problems zu reduzieren, indem es Details ignoriert.
Es unterstützt den Programmierer dabei, die Komplexität eines Problems zu reduzieren, indem es Details ignoriert
* Die Fähigkeit, abstrakt zu denken und diese umzusetzen, ist somit eine der wichtigsten Grundlagen für das Programmieren.
* Die Fähigkeit, abstrakt zu denken und diese umzusetzen, ist somit eine der wichtigsten Grundlagen für das Programmieren
* Abstraktion kann in ihrer Bedeutung nicht hoch genug eingeschätzt werden.
* Abstraktion kann in ihrer Bedeutung nicht hoch genug eingeschätzt werden


Eine zentrale Form der Abstraktion ist die Abstraktion von Sprache.
Eine zentrale Form der Abstraktion ist die Abstraktion von Sprache
* So werden etwa [[Konstruierte Sprache|künstliche Sprachen]] konstruiert, die es ermöglichen, spezifische Aspekte von Systemen zum Ausdruck zu bringen. [[Modellierungssprache]]n können im Kontext einer Softwaresystem-Planung helfen. [[Maschinensprache]]n können von Computern direkt verarbeitet werden.
* So werden etwa [[Konstruierte Sprache|künstliche Sprachen]] konstruiert, die es ermöglichen, spezifische Aspekte von Systemen zum Ausdruck zu bringen. [[Modellierungssprache]]n können im Kontext einer Softwaresystem-Planung helfen. [[Maschinensprache]]n können von Computern direkt verarbeitet werden
* Dieser Abstraktionsprozess kann auch beim Generationswechsel der [[Programmiersprache]]n beobachtet werden.
* Dieser Abstraktionsprozess kann auch beim Generationswechsel der [[Programmiersprache]]n beobachtet werden


Auch innerhalb einer Programmiersprache obliegt es dem Programmierer, neue Abstraktionsebenen zu schaffen.
Auch innerhalb einer Programmiersprache obliegt es dem Programmierer, neue Abstraktionsebenen zu schaffen
* Die Erstellung von [[Unterprogramm|Subroutinen]], Modulen und Softwarekomponenten wären Beispiele dazu.
* Die Erstellung von [[Unterprogramm|Subroutinen]], Modulen und Softwarekomponenten wären Beispiele dazu
* Andere Abstraktionsformen wie [[Entwurfsmuster]] und [[Softwarearchitektur]]en bleiben vor der Programmiersprache verborgen und beziehen sich auf das Design des Systems.
* Andere Abstraktionsformen wie [[Entwurfsmuster]] und [[Softwarearchitektur]]en bleiben vor der Programmiersprache verborgen und beziehen sich auf das Design des Systems


Abstraktion versucht, die Komplexität von darunterliegenden Abstraktionsstufen zu verbergen. [[Joel Spolsky]] hat genau diese Bemühungen kritisiert: „Alle nicht-trivialen Abstraktionen sind zu einem bestimmten Grad undicht.“
Abstraktion versucht, die Komplexität von darunterliegenden Abstraktionsstufen zu verbergen. [[Joel Spolsky]] hat genau diese Bemühungen kritisiert: „Alle nicht-trivialen Abstraktionen sind zu einem bestimmten Grad undicht.“
Zeile 36: Zeile 36:
=== Programmiersprachen ===
=== Programmiersprachen ===
Unterschiedliche [[Programmiersprache]]n bieten unterschiedliche Möglichkeiten von Abstraktion, wie zum Beispiel:
Unterschiedliche [[Programmiersprache]]n bieten unterschiedliche Möglichkeiten von Abstraktion, wie zum Beispiel:
* In [[Objektorientierte Programmiersprache|objektorientierten Sprachen]], wie [[C++]], [[Object Pascal]] oder [[Java (Programmiersprache)|Java]], wurde das Konzept der Abstraktion in Form einer eigenen deklarativen Anweisung umgesetzt.
* In [[Objektorientierte Programmiersprache|objektorientierten Sprachen]], wie [[C++]], [[Object Pascal]] oder [[Java (Programmiersprache)|Java]], wurde das Konzept der Abstraktion in Form einer eigenen deklarativen Anweisung umgesetzt
* Nach einer derartigen Deklaration ist es die Aufgabe des Programmierers, eine [[Klasse (Programmierung)|Klasse]] zu implementieren, um eine Instanz eines Objekts davon erzeugen zu können.
* Nach einer derartigen Deklaration ist es die Aufgabe des Programmierers, eine [[Klasse (Programmierung)|Klasse]] zu implementieren, um eine Instanz eines Objekts davon erzeugen zu können
* In der [[Funktionale Programmierung|funktionalen Programmierung]] können beispielsweise durch [[Lambda-Abstraktion]] (aus einem Term wird eine Funktion in einer Variablen gemacht) und [[Funktion höherer Ordnung|Funktionen höherer Ordnungen]] (Parameter von Funktionen sind wiederum Funktionen) Konzepte der ''Abstraktion'' implementiert werden.
* In der [[Funktionale Programmierung|funktionalen Programmierung]] können beispielsweise durch [[Lambda-Abstraktion]] (aus einem Term wird eine Funktion in einer Variablen gemacht) und [[Funktion höherer Ordnung|Funktionen höherer Ordnungen]] (Parameter von Funktionen sind wiederum Funktionen) Konzepte der ''Abstraktion'' implementiert werden
* Moderne Programmiersprachen innerhalb der Sprachfamilie von [[Lisp]], wie [[Clojure]] und [[Common Lisp]], erlauben syntaktische Abstraktion, die es dem Programmierer ermöglicht, Standardformulierungen im Code zu eliminieren, neue Kontrollstrukturen zu implementieren, oder sogar domainspezifische Sprachen zu entwickeln.
* Moderne Programmiersprachen innerhalb der Sprachfamilie von [[Lisp]], wie [[Clojure]] und [[Common Lisp]], erlauben syntaktische Abstraktion, die es dem Programmierer ermöglicht, Standardformulierungen im Code zu eliminieren, neue Kontrollstrukturen zu implementieren, oder sogar domainspezifische Sprachen zu entwickeln
* Diese Konzepte ermöglichen eine Effizienzsteigerung beim Programmieren sowie eine Verbesserung der Code-Verständlichkeit.
* Diese Konzepte ermöglichen eine Effizienzsteigerung beim Programmieren sowie eine Verbesserung der Code-Verständlichkeit


=== Spezifikationssprachen ===
=== Spezifikationssprachen ===
Spezifikationssprachen setzen im Allgemeinen auf unterschiedliche Formen von Abstraktion, da die Spezifikation eines Software-Projektes typischerweise zu einem sehr frühen und somit zu einem viel abstrakteren Zeitpunkt des Projektes erfolgt.
Spezifikationssprachen setzen im Allgemeinen auf unterschiedliche Formen von Abstraktion, da die Spezifikation eines Software-Projektes typischerweise zu einem sehr frühen und somit zu einem viel abstrakteren Zeitpunkt des Projektes erfolgt
* Die [[Unified Modeling Language]] ist eine Spezifizierungssprache, die es beispielsweise erlaubt, ''abstrakte'' Klassen zu definieren.
* Die [[Unified Modeling Language]] ist eine Spezifizierungssprache, die es beispielsweise erlaubt, ''abstrakte'' Klassen zu definieren
* Diese bleiben auch während der gesamten Architektur- und Spezifizierungsphase des Projektes abstrakt.
* Diese bleiben auch während der gesamten Architektur- und Spezifizierungsphase des Projektes abstrakt


== Datenabstraktion ==
== Datenabstraktion ==
Die Datenabstraktion sorgt für eine klare Trennung von ''abstrakten'' Eigenschaften eines [[Datentypen|Datentyps]] und den ''konkreten'' Implementierungsdetails.
Die Datenabstraktion sorgt für eine klare Trennung von ''abstrakten'' Eigenschaften eines [[Datentypen|Datentyps]] und den ''konkreten'' Implementierungsdetails
* Bei den abstrakten Eigenschaften handelt es sich um die nach außen hin sichtbaren Schnittstellen.
* Bei den abstrakten Eigenschaften handelt es sich um die nach außen hin sichtbaren Schnittstellen
* Konkrete Implementierungen bleiben vollständig privat und können im Laufe der Zeit verändert werden.
* Konkrete Implementierungen bleiben vollständig privat und können im Laufe der Zeit verändert werden
* Gründe dazu wären beispielsweise Verbesserungen der Effizienz.
* Gründe dazu wären beispielsweise Verbesserungen der Effizienz
* Dabei ist es wichtig, dass derartige Änderungen keine Auswirkungen auf die Schnittstelle nach außen haben, da diese das abstrakte Verhalten nicht beeinflussen.
* Dabei ist es wichtig, dass derartige Änderungen keine Auswirkungen auf die Schnittstelle nach außen haben, da diese das abstrakte Verhalten nicht beeinflussen


== Abstraktion in der objektorientierten Programmierung ==
== Abstraktion in der objektorientierten Programmierung ==
In der [[Objektorientierte Programmierung|objektorientierten Programmierung]] repräsentieren [[Objekt (Programmierung)|Objekte]] die abstrakten „Akteure“, die Arbeiten verrichten, ihren Zustand verändern und mit anderen Objekten im System kommunizieren können.
In der [[Objektorientierte Programmierung|objektorientierten Programmierung]] repräsentieren [[Objekt (Programmierung)|Objekte]] die abstrakten „Akteure“, die Arbeiten verrichten, ihren Zustand verändern und mit anderen Objekten im System kommunizieren können
* Dabei werden die detaillierten Informationen über den genauen Zustand des Objektes oft verborgen, was auch als [[Datenkapselung (Programmierung)|Information Hiding]] oder ''Kapselung'' bezeichnet wird.
* Dabei werden die detaillierten Informationen über den genauen Zustand des Objektes oft verborgen, was auch als [[Datenkapselung (Programmierung)|Information Hiding]] oder ''Kapselung'' bezeichnet wird
* Hier werden Details verborgen, um das Problem nicht zu komplex zu gestalten.
* Hier werden Details verborgen, um das Problem nicht zu komplex zu gestalten


Eine weitere Form von Abstraktion bei objektorientierter Programmierung findet man auch im Zuge der [[Polymorphie (Programmierung)|Polymorphie]].
Eine weitere Form von Abstraktion bei objektorientierter Programmierung findet man auch im Zuge der [[Polymorphie (Programmierung)|Polymorphie]]
* Diese Vielgestaltigkeit erlaubt es, Objekte unterschiedlicher Typen miteinander auszutauschen.
* Diese Vielgestaltigkeit erlaubt es, Objekte unterschiedlicher Typen miteinander auszutauschen
* Auch die [[Vererbung (Programmierung)|Vererbung]] bei [[Klasse (Programmierung)|Klassen]] und Strukturen ist eine Form von Abstraktion, die es ermöglicht, ein komplexes Gebilde von Relationen abzubilden.
* Auch die [[Vererbung (Programmierung)|Vererbung]] bei [[Klasse (Programmierung)|Klassen]] und Strukturen ist eine Form von Abstraktion, die es ermöglicht, ein komplexes Gebilde von Relationen abzubilden


Verschiedensten objektorientierte Programmiersprachen bieten vergleichbare Konzepte für die Abstraktion an.
Verschiedensten objektorientierte Programmiersprachen bieten vergleichbare Konzepte für die Abstraktion an
* Alle haben dabei das Ziel, die Vielgestaltigkeit in der Objektorientierten Programmierung zu unterstützen.
* Alle haben dabei das Ziel, die Vielgestaltigkeit in der Objektorientierten Programmierung zu unterstützen


Das folgende Code-Beispiel in Java zeigt ein einfaches Modell von Tieren auf einem Bauernhof.
Das folgende Code-Beispiel in Java zeigt ein einfaches Modell von Tieren auf einem Bauernhof
* Hier werden unterschiedliche Abstraktionsebenen eingeführt.
* Hier werden unterschiedliche Abstraktionsebenen eingeführt
* Die Klasse <code>Tier</code> repräsentiert sowohl den ''Zustand'' eines Tieres als auch die ''Funktionalitäten''.
* Die Klasse <code>Tier</code> repräsentiert sowohl den ''Zustand'' eines Tieres als auch die ''Funktionalitäten''


<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
Zeile 104: Zeile 104:
</syntaxhighlight>
</syntaxhighlight>


Im obigen Beispiel stellt die Klasse ''<code>Tier</code>'' eine Abstraktion dar und wird an Stelle von tatsächlichen Tieren verwendet. ''<code>Lebewesen</code>'', jene Klasse von der <code>Tier</code> abgeleitet ist, ist eine weitere Form der Abstraktion.
Im obigen Beispiel stellt die Klasse ''<code>Tier</code>'' eine Abstraktion dar und wird an Stelle von tatsächlichen Tieren verwendet. ''<code>Lebewesen</code>'', jene Klasse von der <code>Tier</code> abgeleitet ist, ist eine weitere Form der Abstraktion
* In diesem Fall handelt es sich um eine '''Generalisierung''' der Klasse ''<code>Tier</code>''.
* In diesem Fall handelt es sich um eine '''Generalisierung''' der Klasse ''<code>Tier</code>''


Würde man an dieser Stelle eine weitere Unterscheidung der Tiere benötigen – beispielsweise eine Unterscheidung von Tieren, die Milch bzw.&nbsp;keine Milch liefern, kann eine weitere Abstraktionsebene eingezogen werden.
Würde man an dieser Stelle eine weitere Unterscheidung der Tiere benötigen – beispielsweise eine Unterscheidung von Tieren, die Milch bzw.&nbsp;keine Milch liefern, kann eine weitere Abstraktionsebene eingezogen werden


== Abstraktionsebenen ==
== Abstraktionsebenen ==
Die Informatik spricht sehr oft von unterschiedlichen Stufen der Abstraktion (engl. ''levels'' oder ''layers'').
Die Informatik spricht sehr oft von unterschiedlichen Stufen der Abstraktion (engl. ''levels'' oder ''layers'')
* Dabei beschreibt jede Stufe ein Modell derselben Information auf einem anderen Abstraktionsniveau im Kontext der jeweiligen Domain.
* Dabei beschreibt jede Stufe ein Modell derselben Information auf einem anderen Abstraktionsniveau im Kontext der jeweiligen Domain


Jede abstraktere, höhere Stufe liegt auf einer im Vergleich dazu konkreteren, niedrigeren Stufe.
Jede abstraktere, höhere Stufe liegt auf einer im Vergleich dazu konkreteren, niedrigeren Stufe
* So bauen beispielsweise [[Logikgatter|Gatter]] auf [[elektronische Schaltung]]en, [[Binärschnittstelle]]n auf Gatter, [[Maschinensprache]]n auf Binärschnittstellen, [[Programmiersprache]]n auf Maschinensprachen und Applikationen sowie [[Betriebssystem]]e auf Programmiersprachen auf.
* So bauen beispielsweise [[Logikgatter|Gatter]] auf [[elektronische Schaltung]]en, [[Binärschnittstelle]]n auf Gatter, [[Maschinensprache]]n auf Binärschnittstellen, [[Programmiersprache]]n auf Maschinensprachen und Applikationen sowie [[Betriebssystem]]e auf Programmiersprachen auf


=== Datenbanksysteme ===
=== Datenbanksysteme ===
Zeile 122: Zeile 122:


{| class="wikitable sortable options"
{| class="wikitable sortable options"
| Physische Ebene (physical level) || Diese Abstraktionsebene beschreibt, ''wie'' die Daten im System tatsächlich gespeichert werden.
| Physische Ebene (physical level) || Diese Abstraktionsebene beschreibt, ''wie'' die Daten im System tatsächlich gespeichert werden
* Hier werden komplexe Datenstrukturen im Detail definiert und beschrieben.
* Hier werden komplexe Datenstrukturen im Detail definiert und beschrieben
|-
|-
| Logische Ebene (logical level) || Die nächsthöhere Ebene der Abstraktion beschreibt, ''welche'' Daten in der Datenbank gespeichert werden und welche Beziehungen innerhalb dieser Daten bestehen.
| Logische Ebene (logical level) || Die nächsthöhere Ebene der Abstraktion beschreibt, ''welche'' Daten in der Datenbank gespeichert werden und welche Beziehungen innerhalb dieser Daten bestehen
* Der Benutzer auf der logischen Ebene muss kein Wissen über die physische Ebene besitzen, auch wenn er diese indirekt über die logische Ebene verwendet.
* Der Benutzer auf der logischen Ebene muss kein Wissen über die physische Ebene besitzen, auch wenn er diese indirekt über die logische Ebene verwendet
|-
|-
| View level (view level) || Die höchste Ebene der Abstraktion beschreibt nur Teile der gesamten Datenbank, da viele Benutzer nur einen bestimmten Ausschnitt des Gesamtsystems benötigen und nur Zugriff auf einen kleinen Auszug der Datenbank haben.
| View level (view level) || Die höchste Ebene der Abstraktion beschreibt nur Teile der gesamten Datenbank, da viele Benutzer nur einen bestimmten Ausschnitt des Gesamtsystems benötigen und nur Zugriff auf einen kleinen Auszug der Datenbank haben
* Das System kann so unterschiedlichen Benutzern verschiedene [[Sicht (Datenbank)|Sichten]] anbieten.
* Das System kann so unterschiedlichen Benutzern verschiedene [[Sicht (Datenbank)|Sichten]] anbieten
|}
|}



Version vom 27. Januar 2024, 11:09 Uhr

Abstraktion

Beschreibung

Der Begriff Abstraktion wird in der Informatik sehr häufig eingesetzt und beschreibt die Trennung zwischen Konzept und Umsetzung

  • Strukturen werden dabei über ihre Bedeutung definiert, während die detaillierten Informationen über die Funktionsweise verborgen bleiben
  • Abstraktion zielt darauf ab, die Details der Implementierung nicht zu berücksichtigen und daraus ein allgemeines Schema zur Lösung des Problems abzuleiten
  • Ein Computerprogramm kann so unterschiedliche Abstraktionsebenen aufweisen, wobei auf jeder Ebene ein anderer Grad des Informationsgehaltes dem Programmierer preisgegeben wird
  • Eine Abstraktion auf niedriger Stufe beinhaltet Details zur Hardware, auf der das Programm läuft
  • Höher liegende Abstraktionsebenen beschäftigen sich dagegen mit der Geschäftslogik der Software

Abstraktion beschäftigt sich also genau mit dem Detailgrad eines Objektes, der gerade im Kontext der aktuellen Perspektive benötigt wird, und kann auf die Daten sowie die Steuerung eines Programmes angewendet werden:

  • Die Abstraktion der Steuerung umfasst den Einsatz von Unterprogrammen und Konzepten wie Kontrollfluss
  • Datenabstraktion erlaubt die sinnvolle Verarbeitung von Datenbits, zum Beispiel als Datentypen

Eine generelle Empfehlung, Abstraktion immer dann einzusetzen, wenn diese versucht, Duplikationen zu vermeiden, wird als Abstraktionsprinzip bezeichnet

  • Auch die Anforderung an Programmiersprachen, Mechanismen für diese Empfehlung zur Verfügung zu stellen, wird so genannt

Grundprinzip

Abstraktion ermöglicht es, das Wesentliche unter einem bestimmten Gesichtspunkt aus einer Menge von Individuen (Dinge, Beobachtungen …) herauszuheben und abzuleiten, und ist somit ein zentrales Mittel für das Erstellen und Verstehen von Modellen

Es unterstützt den Programmierer dabei, die Komplexität eines Problems zu reduzieren, indem es Details ignoriert

  • Die Fähigkeit, abstrakt zu denken und diese umzusetzen, ist somit eine der wichtigsten Grundlagen für das Programmieren
  • Abstraktion kann in ihrer Bedeutung nicht hoch genug eingeschätzt werden

Eine zentrale Form der Abstraktion ist die Abstraktion von Sprache

Auch innerhalb einer Programmiersprache obliegt es dem Programmierer, neue Abstraktionsebenen zu schaffen

  • Die Erstellung von Subroutinen, Modulen und Softwarekomponenten wären Beispiele dazu
  • Andere Abstraktionsformen wie Entwurfsmuster und Softwarearchitekturen bleiben vor der Programmiersprache verborgen und beziehen sich auf das Design des Systems

Abstraktion versucht, die Komplexität von darunterliegenden Abstraktionsstufen zu verbergen. Joel Spolsky hat genau diese Bemühungen kritisiert: „Alle nicht-trivialen Abstraktionen sind zu einem bestimmten Grad undicht.“

Sprachmerkmale

Programmiersprachen

Unterschiedliche Programmiersprachen bieten unterschiedliche Möglichkeiten von Abstraktion, wie zum Beispiel:

  • In objektorientierten Sprachen, wie C++, Object Pascal oder Java, wurde das Konzept der Abstraktion in Form einer eigenen deklarativen Anweisung umgesetzt
  • Nach einer derartigen Deklaration ist es die Aufgabe des Programmierers, eine Klasse zu implementieren, um eine Instanz eines Objekts davon erzeugen zu können
  • In der funktionalen Programmierung können beispielsweise durch Lambda-Abstraktion (aus einem Term wird eine Funktion in einer Variablen gemacht) und Funktionen höherer Ordnungen (Parameter von Funktionen sind wiederum Funktionen) Konzepte der Abstraktion implementiert werden
  • Moderne Programmiersprachen innerhalb der Sprachfamilie von Lisp, wie Clojure und Common Lisp, erlauben syntaktische Abstraktion, die es dem Programmierer ermöglicht, Standardformulierungen im Code zu eliminieren, neue Kontrollstrukturen zu implementieren, oder sogar domainspezifische Sprachen zu entwickeln
  • Diese Konzepte ermöglichen eine Effizienzsteigerung beim Programmieren sowie eine Verbesserung der Code-Verständlichkeit

Spezifikationssprachen

Spezifikationssprachen setzen im Allgemeinen auf unterschiedliche Formen von Abstraktion, da die Spezifikation eines Software-Projektes typischerweise zu einem sehr frühen und somit zu einem viel abstrakteren Zeitpunkt des Projektes erfolgt

  • Die Unified Modeling Language ist eine Spezifizierungssprache, die es beispielsweise erlaubt, abstrakte Klassen zu definieren
  • Diese bleiben auch während der gesamten Architektur- und Spezifizierungsphase des Projektes abstrakt

Datenabstraktion

Die Datenabstraktion sorgt für eine klare Trennung von abstrakten Eigenschaften eines Datentyps und den konkreten Implementierungsdetails

  • Bei den abstrakten Eigenschaften handelt es sich um die nach außen hin sichtbaren Schnittstellen
  • Konkrete Implementierungen bleiben vollständig privat und können im Laufe der Zeit verändert werden
  • Gründe dazu wären beispielsweise Verbesserungen der Effizienz
  • Dabei ist es wichtig, dass derartige Änderungen keine Auswirkungen auf die Schnittstelle nach außen haben, da diese das abstrakte Verhalten nicht beeinflussen

Abstraktion in der objektorientierten Programmierung

In der objektorientierten Programmierung repräsentieren Objekte die abstrakten „Akteure“, die Arbeiten verrichten, ihren Zustand verändern und mit anderen Objekten im System kommunizieren können

  • Dabei werden die detaillierten Informationen über den genauen Zustand des Objektes oft verborgen, was auch als Information Hiding oder Kapselung bezeichnet wird
  • Hier werden Details verborgen, um das Problem nicht zu komplex zu gestalten

Eine weitere Form von Abstraktion bei objektorientierter Programmierung findet man auch im Zuge der Polymorphie

  • Diese Vielgestaltigkeit erlaubt es, Objekte unterschiedlicher Typen miteinander auszutauschen
  • Auch die Vererbung bei Klassen und Strukturen ist eine Form von Abstraktion, die es ermöglicht, ein komplexes Gebilde von Relationen abzubilden

Verschiedensten objektorientierte Programmiersprachen bieten vergleichbare Konzepte für die Abstraktion an

  • Alle haben dabei das Ziel, die Vielgestaltigkeit in der Objektorientierten Programmierung zu unterstützen

Das folgende Code-Beispiel in Java zeigt ein einfaches Modell von Tieren auf einem Bauernhof

  • Hier werden unterschiedliche Abstraktionsebenen eingeführt
  • Die Klasse Tier repräsentiert sowohl den Zustand eines Tieres als auch die Funktionalitäten
public class Tier extends Lebewesen
{
     private Ort ort;
     private double energieReserven;

     public boolean istHungrig() {
         return energieReserven < 2.5;
     }
     public void essen(Futter futter) {
         // Futter essen
         energieReserven += futter.getKalorien();
     }
     public void aendereOrt(Ort o) {
         //Tier auf anderer Stelle unterbringen
         this.ort = o;
     }
}

Mit dieser Definition können Objekte des Typs Tier erstellt werden und folgende Methoden aufgerufen werden:

schwein = new Tier();
kuh = new Tier();
if (schwein.istHungrig()) {
    schwein.essen(essensreste);
}
if (kuh.istHungrig()) {
    kuh.essen(gras);
}
kuh.aendereOrt(scheune);

Im obigen Beispiel stellt die Klasse Tier eine Abstraktion dar und wird an Stelle von tatsächlichen Tieren verwendet. Lebewesen, jene Klasse von der Tier abgeleitet ist, ist eine weitere Form der Abstraktion

  • In diesem Fall handelt es sich um eine Generalisierung der Klasse Tier

Würde man an dieser Stelle eine weitere Unterscheidung der Tiere benötigen – beispielsweise eine Unterscheidung von Tieren, die Milch bzw. keine Milch liefern, kann eine weitere Abstraktionsebene eingezogen werden

Abstraktionsebenen

Die Informatik spricht sehr oft von unterschiedlichen Stufen der Abstraktion (engl. levels oder layers)

  • Dabei beschreibt jede Stufe ein Modell derselben Information auf einem anderen Abstraktionsniveau im Kontext der jeweiligen Domain

Jede abstraktere, höhere Stufe liegt auf einer im Vergleich dazu konkreteren, niedrigeren Stufe

Datenbanksysteme

Bei Datenbank-Systemen wird die Komplexität durch eine Aufteilung der Applikation in Abstraktionsebenen reduziert:

Abstraktionsebenen eines Datenbank-Systems
Physische Ebene (physical level) Diese Abstraktionsebene beschreibt, wie die Daten im System tatsächlich gespeichert werden
  • Hier werden komplexe Datenstrukturen im Detail definiert und beschrieben
Logische Ebene (logical level) Die nächsthöhere Ebene der Abstraktion beschreibt, welche Daten in der Datenbank gespeichert werden und welche Beziehungen innerhalb dieser Daten bestehen
  • Der Benutzer auf der logischen Ebene muss kein Wissen über die physische Ebene besitzen, auch wenn er diese indirekt über die logische Ebene verwendet
View level (view level) Die höchste Ebene der Abstraktion beschreibt nur Teile der gesamten Datenbank, da viele Benutzer nur einen bestimmten Ausschnitt des Gesamtsystems benötigen und nur Zugriff auf einen kleinen Auszug der Datenbank haben
  • Das System kann so unterschiedlichen Benutzern verschiedene Sichten anbieten


Anhang

Siehe auch


Links

Weblinks
  1. https://de.wikipedia.org/wiki/Abstraktion_(Informatik)
  2. SimArch Beispiel für eine Schichtenarchitektur für verteilte Simulations-Systeme