Sprachparadigma

Eine weitere Unterteilung findet sich durch das jeweilig verwendete Programmierparadigma (Programmiermuster). Folgende Muster heben sich hervor:

Maschinensprachen

entsprechend der Maschinensprache, die als Sprache der ersten Generation definiert ist.

Assemblersprachen

entsprechend der Assemblersprachen, die in der zweiten Generation definiert ist.

Im Vergleich zur direkten Maschinensprache können Assemblersprachen über eine geringfügige Abstraktion, sowie über Makrofunktionalität verfügen.

Erfahrene Assemblerprogrammierer können in Verbindung mit einem guten Makro-Assembler ebenso schnell Software entwickeln, wie Entwickler in anderen Sprachen.

SIGA (‚Script Interpreter for Graphic-Adventures’) ist in der letzten Version ein Beispiel für eine solche Umsetzung, die in Maschinensprache selbst nicht möglich gewesen wäre. Das Skript zur Steuerung des Spiels wurde durch ein include erweitert, und mit OMA (‚Optimizing Macro Assembler’) assembliert. Als Resultat kam ein ausführbares Programm heraus, das den Spielablauf enthielt. Alle Skript-Befehle wurden im Includefile als Assemblermakros erklärt. Somit konnte das Assemblerprogramm um anwendungsspezifische „Befehle“ erweitert werden. Die Berechnung von Ausdrücken ist über Makros leider nicht möglich gewesen.

Prozedurale Sprachen (imperative Sprachen)

Prozedurale Sprachen führen Anweisungen direkt hintereinander aus und beschreiben so eine eindeutige Prozedur, die unveränderlich durchgeführt wird. Das bedeutet, dass die Befehlsreihenfolge innerhalb einer Prozedur nicht ausgetauscht werden kann, sondern nur durch Verzweigungen beeinflusst werden muss. Sie werden auch imperative (lat. befehlend, bindend) Sprachen genannt. Bekannte Vertreter sind (unter vielen anderen) C und Pascal.

Datenstrukturierte Sprachen

Sprachen, die Ihren Programmablauf durch Listen von Befehlen oder andere Datenstrukturen organisieren, zählen zu dieser Kategorie. Im Gegensatz zu den prozeduralen Sprachen besteht die Möglichkeit die Anweisungsreihenfolge dynamisch zur Laufzeit zu verändern. Vertreter dieses Sprachmusters sind LISP (über Listen) oder Forth (über Stacks).

Objektorientierte Sprachen

Werden Daten und dazugehörende Methoden zusammen in einem Datentyp gekapselt und beherrscht die Sprache virtuelle Methoden, so spricht man von objektorientierten Sprachen. Dabei werden zwischen den Objekten Nachrichten ausgetauscht, so dass sich die einzelnen Objekte untereinander beeinflussen können.
Dabei wird keine Aussage über die Organisation des Programmablaufs getroffen, der Ablauf ergibt sich durch Aktionen und Reaktionen der Objekte.

Nachrichten zwischen den Objekten können wirklich als Signale verstanden und dann auch über ein Netzwerk gesendet werden. In der Regel laufen die Programme auf einem einzigen Rechner, so dass eine effektive Implementierung diesen Nachrichtenaustausch als Funktionsaufrufe implementiert.

Objektorientierung ist damit eine Eigenschaft z.B. einer prozeduralen Sprache. Hier lassen sich C++, Java, Python, Smalltalk und Eiffel als Beispiele aufzählen. Simula gilt als erste Sprache mit objektorientiertem Ansatz.

Funktionale Sprachen

In funktionale Sprachen werden alle Programmteile als Ausdruck formuliert, ähnlich einer mathematischen Funktion. In rein funktionale Sprachen existieren keine durch den Programmierer veränderlichen Variablen wie in imperativen Programmiersprachen. Sie werden, ähnlich wie in Prolog, einmalig angenommen und anschließend nicht mehr verändert. Im Gegensatz zu imperativen Sprachen arbeiten funktionale Sprachen nicht Befehl für Befehl ab, sondern übergeben dem Hauptbefehl die Funktionen( mit deren Argumenten ), die die Argumente des Hauptbefehls darstellen. Funktionale Sprachen fallen durch die verschachtelten Argumente gerne durch bemerkenswert viele Klammern auf.

Beispiele für funktionale Sprachen sind LISP, Haskell, Opal.

(defun ! (n)
   (cond ((= n 0) 1)                   ; 0! = 1
         ((> n 0) (* n (! (- n 1)))))) ; n! = n * (n - 1)!

Prädikative Sprachen (logische Sprachen)

Prädikative Programmiersprachen basieren auf der Prädikatenlogik. So formuliert man Fakten, die als wahr angenommen werden und Regeln, die formulieren, wie aus den Fakten und Regeln wieder eine wahre Aussage getroffen werden kann. Diese Regeln und Fakten werden als Faktenbasis bezeichnet, aus denen sich Schlussfolgerungen erfragen lassen.

Dazu werden Operatoren benötigt, die in prozeduralen Sprachen eher unüblich sind: über die Quantoren (∀ für „für alle gilt…“, bzw. ∃ für „es existiert (mindestens) ein…“) wird geprüft, ob sich für die fragliche Aussage aus der Faktenbasis folgern lässt. Die Quantoren sind in imperativen Sprachen üblicherweise nicht implementiert, sie müssen durch eigene Suchschleifen durch den Programmierer implementiert werden.

Dieser Sprachentyp wird eignet sich vorrangig für den Spezialfall, den sie abdecken. Sie sind daher in der der allgemeinen Programmierung auch seltener vertreten. Als bekannteste prädikative Sprache gilt Prolog.
Da prädikative Sprachen sich auf logische Aussagen beziehen, werden sie ebenfalls als logische Sprachen bezeichnet oder auch als regelbasierte Sprachen, da sie weitergehende Schlussfolgerungen aus Regeln schließen. Die Bearbeitung von Regeln, die vielleicht weitere Regeln beinhaltet, bedeutet, dass prädikative Sprachen stark rekursiv arbeiten.

Beschreibungssprachen (Spezifikationssprachen)

Einige Sprachen dienen nicht der Kontrolle von Programmabläufen, sondern lediglich um Daten in einer leicht lesbaren Form zu speichern. So wird in HTML das Layout einer Webseite beschrieben, bzw. allgemeinere Daten in XML.
Zu diesen Beschreibungssprachen gehören häufig auch Konfigurationsfiles, um größere Anwendungen zu benutzerdefiniert einzurichten. Beschreibungssprachen werden auch Spezifikations- oder Auszeichnungssprachen genannt.
Sie verfügen über keinerlei Kontrollfluß.

Visuelle Programmiersprachen

Visuelle Programmiersprachen besitzen in allgemeinen eine visuelle Syntax. Hierbei werden Befehle und Konstrukte durch Icons gezeichnet und grafisch in Verbindung gebracht, so dass ein Algorithmus in Diagramform dargestellt und bearbeitet wird. Beispiele hierfür sind LabView und ThingLab.

Dabei handelt es sich vorrangig um eine alternative Darstellungsform des Quellcodes, visuelle Programmiersprachen können ebenfalls einem anderen Paradigma zugeordnet werden.
Eine Programmiersprache wird auch bereits als visuell bezeichnet, wenn sie über visuelle Komponenten verfügt, zum Beispiel Delphi oder Borland C++Builder. Hier besitzt das Programm ein „Form“, also ein Fenster. Dort können nicht nur Buttons untergebracht werden, sondern auch andere Komponenten wie Timer, Datenbankverbindungen oder Datei-Dialoge, die anschließend im Quelltext zusätzlich zur Verfügung stehen.
Sprachen, die visuelle Komponenten besitzen erhalten häufig auch den Zusatz Visual, z.B. VisualBasic oder VisualProlog.