Imperative Programmiersprachen

haben Variablen, die den inneren Zustand des Systems repräsentieren und zur Laufzeit veränderbar sind. Der Code ist oftmals länger als bei funktionalen (deklarativen) Sprachen. Imperative Sprachen werden oft mit prozeduralen gleichgesetzt, was nicht richtig ist. Einerseits ist prozedurale Programmierung ohne inneren Zustand möglich, andererseits gibt es imperative Basis-Varianten, die ohne Prozeduren auskommen.

Deklarative (funktionale) Programmiersprachen

beschreiben was zu berechnen ist. Das steht im Gegensatz zu imperativen Sprachen, bei denen die Programmierer genau angeben müssen wie etwas zu berechnen ist. Deklarative Programmiersprachen haben keinen inneren Zustand und eine Änderung von Werten per Zuweisung ist nicht möglich.

Prozedurale Programmiersprachen

Im Vordergrund steht die algorithmische Problemlösung. Befehle werden in der vorgegebenen Reihenfolge, unter Verwendung von Variablen und Gruppen von Funktionen in Prozeduren, ausgeführt.

Objektorientierte Programmiersprachen

bilden heute den Grossteil von Programmiersprachen in der Industrie. Daten und dazugehörige Algorithmen werden in Objekten vereint. Ein Domainen-Modell bildet reale Entitäten durch Klassen ab und manipuliert Daten per Methoden. Vererbung, Komposition Aggregation und Datenkapselung machen die Stärke der objektorientierten Programmierung aus.

Funktionale Programmiersprachen

haben weder Zuweisungen noch Schleifen. Alle Operationen werden durch Funktionen dargestellt. Ein Programm ist eine Zusammensetzung von Funktionen. Ein Funktionsaufruf gibt das Ergebnis, ohne weiteren Seiteneffekte, zurück. Die Deklaration über Funktionen führt zu sehr kurzem Code. Fehler sind leicht zu entdecken.

Typische Vertreter ihrer Klassen

imperativ/prozedural: Basic, Pascal, Fortran, C

imperativ/prozedural und objektorientiert: C++, C# (bis 3.0), Java, Python

imperative/objektorientiert: Smalltalk

imperativ/objektorientiert/funktional: Ruby, Scala, F#

imperativ/prozedural/objektorientiert/funktional: C# (ab 3.0)

deklarativ/funktional: Haskell, Lisp, Scheme, ML, Clojure

(Quelle: IX)