Programmierparadigma
Ein Programmierparadigma ist das einer Programmiersprache oder Programmiertechnik zugrundeliegende Prinzip. Das Wort Paradigma kommt aus dem Griechischen und bedeutet Beispiel, Vorbild, Muster oder auch Abgrenzung.
Grundlegend für den Entwurf von Programmiersprachen sind die Paradigmen der imperativen Programmierung und der deklarativen Programmierung. Beim letzteren sind als wichtige Ausprägungen die Paradigmen der funktionalen Programmierung und der logischen Programmierung zu nennen. Alle weiteren Programmierparadigmen sind Verfeinerungen dieser Prinzipien.
Zum Beispiel folgt die Programmiersprache Java dem Paradigma der objektorientierten, die Programmiersprache C++ ermöglicht objektorientierte Programmierung und prozedurale Programmierung, beide Sprachen entsprechen dem Paradigma der imperativen Programmierung und ermöglichen generische Programmierung.
Neben den Programmierparadigmen gibt es noch eine Reihe weiterer Kriterien für die Entwicklung einer möglichst fehlerfreien und wartbaren Software wie z. B. Lesbarkeit des Programmcodes, Redundanzfreiheit, Modularität und Nebenwirkungsfreiheit. Diese müssen grundsätzlich bei jeder Programmierung (unter jedem Paradigma) soweit wie möglich eingehalten werden. Die besondere Leistung der Programmierparadigmen besteht gerade darin, die Einhaltung dieser Basiskriterien zu vereinfachen, nahezulegen oder mehr oder weniger zu erzwingen - im günstigsten Fall automatisch zu realisieren.
Übersicht
Programmierung mit abstrakten Datentypen
Die Programmierung mit abstrakten Datentypen behandelt Daten und Funktionen zur Behandlung dieser Daten als Einheit.
Agentenorientierte Programmierung
Bei der agentenorientierten Programmierung steht der Begriff des autonomen und planenden Agenten im Vordergrund, der selbstständig und in Kooperation mit anderen Agenten Probleme löst.
Aspektorientierte Programmierung
Bei der aspektorientierten Programmierung wird der objektorientierte Begriff der Klasse zum Aspekt erweitert und ermöglicht so orthogonale Programmierung.
Constraintprogrammierung
Bei der Constraintprogrammierung werden sog. Constraints (math. Gleichungen, Bedingungen) definiert. Sie wird als natürliche Weiterentwicklung der logischen Programmierung verstanden. Logische und Constraintprogrammierung werden typischerweise in Kombination eingesetzt.
Datenstromorientierte Programmierung
Es wird von einem kontinuierlichen Datenfluss ausgegangen (meist Audio- oder Videodaten), der (oft in Echtzeit) verändert und ausgegeben wird.
Deklarative Programmierung
Die Idee einer deklarativen Programmierung ist ursprünglich als Gegensatz zur imperativen Programmierung hervorgegangen. Die Grundidee besteht darin, nicht mehr wie beim imperativen Paradigma zu beschreiben, wie etwas zu geschehen hat bzw. was zu tun ist, sondern nur noch welches Ergebnis gewünscht ist. Es sollte also nicht mehr der Lösungsweg programmiert werden, sondern nur noch angegeben werden, welches Ergebnis gewünscht wird. Aus diesem Grundgedanken sind die funktionale Programmierung und die logische Programmierung entstanden.
Funktionale Programmierung
Die Aufgabenstellung und die bekannten Prämissen werden hier als funktionaler Ausdruck formuliert. Das selbstständige Anwenden von Funktionsersetzung und Auswertung seitens des Interpreters oder Compilers lösen dann die Aufgabenstellung. Das Programm kann als Abbildung der Eingabe auf die Ausgabe aufgefasst werden.
Generische Programmierung
In der generischen Programmierung wird versucht die Algorithmen für mehrere Datentypen verwendbar zu gestalten.
Imperative Programmierung
Die Aufgabenstellung wird als lineare bzw. sequentielle Befehlsabfolge formuliert, wobei der Kontrollfluss mit bedingten Sprüngen gesteuert werden kann. Die Befehle manipulieren dabei den Zustand der Speicherbereiche oder Speichermedien, die die zu verarbeitenden und die auszugebenden Daten enthalten. Daher kann man sie auch als Zustandsorientierte Programmierung bezeichnen.
Logische Programmierung
Die Aufgabenstellung und ihre Prämissen werden als logische Aussagen formuliert (vgl. funktionale Programmierung, s.o.). Der Interpreter versucht dann, die gewünschte Lösungsaussage mit Hilfe des Horn-Verfahrens herzuleiten. (Siehe auch Horn-Klauseln) z.B. Prolog
Modulare Programmierung
Bei der modularen Programmierung wird die Software in logische Teilblöcke zerlegt, die einzeln geplant, programmiert und getestet werden können. Praktisch alle Programmierparadigmen verwirklichen implizit oder explizit das Prinzip, neben anderen Prinzipien, des modularen Programmierens. Sie unterscheiden sich gerade darin, nach welchem Grundprinzip (Paradigma) das Gesamtprogramm in Module aufzuteilen ist, wie die Module aufgebaut sind und wie sie miteinander kommunizieren.
Objektorientierte Programmierung
Bei der objektorientierten Programmierung (OOP) wird ein Computerprogramm als eine Menge interagierender Objekte realisiert.
Prozedurale Programmierung
Die Aufgabenstellung wird in kleinere Teilaufgaben, "Prozeduren", zerlegt, die dann einzeln im Kalkül der imperativen Programmierung (s.o.) implementiert werden.
Strukturierte Programmierung
Strukturierte Programmiersprachen zeichnen sich durch den Verzicht oder zumindest die Einschränkung absoluter Sprunganweisungen (Goto) und durch zusätzliche Kontrollstrukturen wie z.B. do...while, while, repeat...until aus.
Subjektorientierte Programmierung
Die Subjektorientierte Programmierung ist eine Erweiterung der objektorientierten Programmierung. Sie soll vor allem die Schwächen der objektorientierten Programmierung bei der Entwicklung großer Anwendungen und der Integration unabhängig entwickelter Anwendungen ausgleichen.
Siehe auch
Weblinks
- Forschungsbericht Multiparadigmen-Programmiersprachen von Martin Grabmüller, Technische Universität Berlin
!
