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.
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.
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.
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.
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.
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)