Was, um Himmels willen, ist ein Paradigma?

Etwas sehr Einfaches. Ein Muster, ein Modell. Beim Programmieren ist es das Prinzip, nach dem eine Programmiersprache oder Programmiertechnik aufgebaut ist. Die Programmierparadigmen sorgen in jeder Programmiersprache mehr oder weniger dafür, dass die Basiskriterien Lesbarkeit des Codes, Redundanzfreiheit, Modularität und Nebenwirkungsfreiheit eingehalten werden. Sie schaffen dies dadurch, dass sie die Einhaltung der Regeln vereinfachen, nahe legen, fast erzwingen oder im besten Fall automatisch realisieren. In zwei Hauptrichtungen lassen sich die Paradigmen der Programmierung klassifizieren: Imperative Paradigmen und deklarative Paradigmen.

Imperative Programmierparadigmen

In allen imperativen Programmiersprachen versteht man ein Programm als lineare Folge von Befehlen, die der Rechner in der definierten Reihenfolge abarbeitet. Durch den Mikrocode wird auf der Prozessorebene angegeben, wie der Rechner mit welchen Daten verfahren soll. Dazu dienen die Befehle. Sie manipulieren den Zustand der Speicherbereiche, die Daten zur Verarbeitung oder Ausgabe vorhalten. Diese Daten sind meist in Variablen gespeichert, so dass sie sich im Programmablauf verändern können. Durch die Reihenfolge der Befehle ist die zeitliche Abfolge im Programm vorgegeben. Um reagierende Programme zu realisieren, gibt es Sprungbefehle, die jene einmal festgelegte Abfolge der Befehle dynamisch verändern.

Nach imperativem Paradigma wird ein Lösungsweg vorgegeben: Welche einzelnen Schritte müssen nacheinander ablaufen, wie sind Variablen zu verändern, damit am Ende das gewünschte Ergebnis herauskommt. Im Vordergrund steht also die Frage „Wie?“

Den imperativen Programmierparadigmen folgen wiederum unterschiedliche Programmsprachenformen:

  • Strukturierte Programmierung
    Ein Programmierparadigma, das sich etliche Programmiersprachen zu eigen gemacht haben. Strukturierte Programmierung verlangt, sich auf der untersten Ebene auf lediglich drei Kontrollstrukturen zu beschränken:
    • Sequenz = hintereinander auszuführende Programmanweisungen
    • Auswahl = Verzweigung
    • Wiederholung = Schleifen

    Strukturierte Programmierung beinhaltet den ersten Ansatz einer prozeduralen Programmierung, indem es eine baumartige Zerlegung in Teilprogramme oder Prozeduren verlangt. Als wesentliche Verbesserung gegenüber früheren imperativen Paradigmen gilt die Konsequenz, dass Sprunganweisungen vermieden oder eingeschränkt und standardisiert werden. Die muntere Fehlerquelle des „GOTO“ wird dadurch weitgehend umgangen.

    Der strukturierten Programmierung folgen diese Sprachen:
    – Ada
    – Algol
    – C
    – Pascal
    – Fortran (ab 77)
    Generative Programmierung, aspektorientierte und objektorientierte Programmierung bauen auf der strukturierten auf.

  • Prozedurale Programmierung
    Dahinter steckt das Prinzip, Programme in kleinere Teilaufgaben zu zerlegen und diese als eigenständige Prozeduren einzusetzen. Die prozedurale Programmierung zielt darauf ab, Quelltexte wieder verwendbar zu machen. Der Vorteil: universell einsetzbare Prozeduren müssen nur einmal programmiert werden, man kann sie komplett in weitere Programme einsetzen. Darüber hinaus bringt die Zerlegung, dass die so verkleinerten Probleme auch einfacher zu lösen sind.
    Typische Sprachen:
    – Fortran
    – COBOL
    – ALGOL
    – C
    – Pascal

  • Modulare Programmierung
    Der erste Versuch, der wachsenden Größe von Softwareprojekten Herr zu werden. In der modularen Programmierung wird der prozedurale Ansatz erweitert, indem Prozeduren zusammen mit Daten in logische Einheiten gefasst werden. Die Software wird also in größere funktionale Einheiten zerlegt, die für sich geplant, programmiert und getestet werden können. Derartige Unterprogramme nennen sich dann Module. Sie müssen schließlich nur noch logisch miteinander verknüpft werden, und schon ist die Software einsatzbereit. Typische Sprachen:
    – Ada
    – Component Pascal
    – Modula-2
    – Oberon

  • Objektorientierte Programmierung
    Grundidee dieses Programmierparadigmas ist, Daten und Funktionen möglichst eng in einem Objekt zusammen zu fassen und nach außen hin zu kapseln. Implementierungsdetails werden bewusst verborgen, so dass Methoden fremder Objekte diese Daten nicht versehentlich manipulieren können. Der Zugriff auf die interne Datenstruktur eines Objekts erfolgt über definierte Schnittstellen.

    Objektorientierte Programmierung ist heute das am weitesten verbreitete Prinzip. Die Objektorientierung wird in den einzelnen Programmiersprachen jedoch sehr unterschiedlich streng befolgt. Typische Sprachen:
    – Smalltalk
    – Ada 95
    – Java
    – C++
    – C#
    – Python
    – Perl
    – PHP
    – Ruby

Deklarative Programmierparadigmen

Deklarative Programmierung ist eine Idee der jüngeren Programmiergeschichte. Im Gegensatz zu den imperativen Programmierparadigmen fragt man in der deklarativen Programmierung nicht nach dem „Wie“, sondern nach dem „Was“, das berechnet werden soll. Nicht der Lösungsweg wird programmiert, sondern man gibt an, welches Ergebnis erzielt werden soll. Deshalb beruhen deklarative Paradigmen auf rechnerunabhängigen mathematischen Theorien.

Die Vorteile der deklarativen Programmierung:

  • Es gibt keine Nebeneffekte. Denn deklarative Programmierung ist referenziell transparent. Das heißt, der Wert eines Ausdrucks hängt nur von seiner Umgebung und nicht vom Zeitpunkt seiner Auswertung ab. In der Mathematik gilt, dass ein und dieselbe Variable an verschiedenen Stellen ihres Geltungsbereichs immer den gleichen Wert hat. Das gilt auch in der deklarativen Programmierung. Deshalb sind Programme auch in Teilen auswertbar und ermöglichen es, unendliche Datenstrukturen zu bearbeiten.
  • Beweise zur Korrektheit von Ergebnissen oder Programmeigenschaften sind uneingeschränkt durchführbar. Denn deklarative Programmierung arbeitet auf mathematischer Basis (Lambda-Kalkül)
  • Deklarative Programmierung zeigt keine Abhängigkeit von irgendeiner Rechnerarchitektur

Deklarative Programmiersprachen sind trotz dieser Vorteile nicht weit verbreitet. Ihre Akzeptanz leidet unter dem Vorbehalt „Akademikersprache“. Typische Sprachen:
– funktionale Sprachen wie LISP, ML, Miranda, Gofer, Haskell
– logische Sprachen wie Prolog
– funktional-logische Sprachen wie Babel, Escher, Curry, Oz
– mengen-orientierte Abfragesprachen wie SQL

First Class Citizens – FCC

Hier handelt es sich nicht um die oberen Zehntausend einer Großstadt. Im Kontext jeder einzelnen Programmiersprache ist der First Class Citizen die Einheit, die im Vergleich zu anderen Einheiten ohne Beschränkung direkt genutzt werden kann. Abhängig von der Programmiersprache müssen FCCs bestimmte Bedingungen erfüllen, zum Beispiel speicherbar in Variablen oder speicherbar außerhalb laufender Prozesse oder aufbauend in Laufzeit etc. So sind etwa in Java Objekte FCCs, in LISP ist jedes Stück Programm FCC, in Perl sind es Zeichenketten, Arrays und Hashes.

Suchen



gratis-infos-box