Type a search term to find related articles by LIMS subject matter experts gathered from the most trusted and dynamic collaboration tools in the laboratory informatics industry.
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:
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.
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.[1]
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.[2]
Eine zentrale Form der Abstraktion ist die Abstraktion von Sprache. So werden beispielsweise künstliche Sprachen konstruiert, die es ermöglichen, spezifische Aspekte von Systemen zum Ausdruck zu bringen. Modellierungssprachen können im Kontext einer Softwaresystem-Planung helfen. Maschinensprachen können von Computern direkt verarbeitet werden. Dieser Abstraktionsprozess kann auch beim Generationswechsel der Programmiersprachen beobachtet werden.
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.“[3]
Unterschiedliche Programmiersprachen bieten unterschiedliche Möglichkeiten von Abstraktion, wie zum Beispiel:
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.
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.
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.
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.[4]
Jede abstraktere, höhere Stufe liegt auf einer im Vergleich dazu konkreteren, niedrigeren Stufe. So bauen beispielsweise Gatter auf elektronische Schaltungen, Binärschnittstellen auf Gatter, Maschinensprachen auf Binärschnittstellen, Programmiersprachen auf Maschinensprachen und Applikationen sowie Betriebssysteme auf Programmiersprachen auf.
Bei Datenbank-Systemen wird die Komplexität sehr oft durch eine Aufteilung der Applikation in Abstraktionsebenen reduziert: