Auch wenn die Terminologie alles andere als standardisiert ist, besteht eine gängige Methode darin, die wichtigsten Programmierparadigmen in Kategorien einzuteilen
- Verfahrens
- Funktional
- Logisch
- Objektorientierter
- Generisch
Sie scheinen bereits zu wissen, wie prozedurale Programmierung ist.
In funktionalen Sprachen werden Funktionen als erstklassige Objekte behandelt. Mit anderen Worten, Sie können eine Funktion als Argument an eine andere Funktion übergeben, oder eine Funktion kann eine andere Funktion zurückgeben. Das Funktionsparadigma basiert auf der Lambda-Rechnung, und Beispiele für Funktionssprachen sind LISP, Scheme und Haskel. Interessanterweise unterstützt JavaScript auch die funktionale Programmierung.
In der logischen Programmierung definieren Sie Prädikate, die Beziehungen zwischen Entitäten beschreiben, z. B. president(Obama, USA)
oder president(Medvedev, Russia)
. Diese Prädikate können sehr kompliziert werden und Variablen enthalten, nicht nur wörtliche Werte. Nachdem Sie alle Prädikate angegeben haben, können Sie Fragen an Ihr System stellen und logisch konsistente Antworten erhalten.
Die große Idee bei der logischen Programmierung besteht darin, dem Computer nicht zu sagen, wie er die Dinge berechnen soll, sondern zu sagen, was die Dinge sind. Beispiel: PROLOG.
Das objektorientierte Paradigma ist in gewisser Weise eine Erweiterung der prozeduralen Programmierung. In der prozeduralen Programmierung haben Sie Ihre Daten, die primitive Typen wie Ganzzahlen und Gleitkommazahlen, zusammengesetzte Typen wie Arrays oder Listen und benutzerdefinierte Typen wie Strukturen sein können. Sie haben auch Ihre Prozeduren, die mit den Daten arbeiten. Im Gegensatz dazu haben Sie in OO Objekte, die sowohl Daten als auch Prozeduren enthalten. Auf diese Weise können Sie schöne Dinge wie Verkapselung, Vererbung und Polymorphismus haben. Beispiele: Smalltalk, C ++, Java, C #.
Die generische Programmierung wurde erstmals 1983 in Ada eingeführt und verbreitete sich nach der Einführung von Vorlagen in C ++. Dies ist die Idee, dass Sie Code schreiben können, ohne die tatsächlichen Datentypen anzugeben, mit denen er arbeitet, und dass der Compiler dies herausfindet. Zum Beispiel statt zu schreiben
void swap(int, int);
void swap(float, float);
....
du würdest schreiben
void swap(T, T);
einmal und lassen Sie den Compiler spezifischen Code generieren, für was T
auch immer sein mag, wann er swap()
tatsächlich im Code verwendet wird.
Die generische Programmierung wird in unterschiedlichem Maße von C ++, Java und C # unterstützt.
Es ist wichtig zu beachten, dass viele Sprachen, wie z. B. C ++, mehrere Paradigmen unterstützen. Es ist auch richtig, dass eine Sprache, von der gesagt wird, dass sie ein bestimmtes Paradigma unterstützt, möglicherweise nicht alle Merkmale des Paradigmas unterstützt. Ganz zu schweigen davon, dass es viele Meinungsverschiedenheiten darüber gibt, welche Funktionen für ein bestimmtes Paradigma erforderlich sind.