4.1 Programmierparadigmen
Unter einem Programmierparadigma versteht man ein Sprachkonzept, welches als Muster prägend für die Programme einer bestimmten Gruppe oder Sprache ist. Gängige Programmierparadigmen sind
-
funktional / applikativ
-
imperativ
-
objektorientiert
-
logikbasiert
-
deklarativ
-
visuell / datenflussorientiert
-
funktionale oder applikative Sprachen betrachten ein Programm als mathematische Funktion f, die eine Eingabe I in eine Ausgabe O überführt: O = f(I). Variablen sind Platzhalter im Sinne der Mathematik (Parameter).
Ausführung = Berechnung des Wertes mittels Termersetzung.
Beispiele: Lisp, SML, Haskell, ...
SML:
LISP:
-
imperative Sprachen unterstützen das ablauforientierte Programmieren. Werte werden sog. Variablen (= Speicherplätzen) zugewiesen. Diese können ihren Zustand ändern, d.h. im Laufe der Zeit verschiedene Werte annehmen (vgl. von-Neumann-Konzept).
Ausführung = Folge von Variablenzuweisungen.
Beispiele: Algol, C, Delphi, ...
-
objektorientierte Sprachen sind imperativ, legen aber ein anderes, in Objekten strukturiertes Speichermodell zugrunde. Objekte können eigene lokale Daten und Methoden speichern, voneinander erben und miteinander kommunizieren.
Ausführung = Interaktion von Agenten.
Beispiele: Smalltalk, C++, Java
-
logikbasierte Sprachen betrachten ein Programm als (mathematisch-) logischen Term t, dessen Auflösung (im Erfolgsfall) zu gegebenen Eingabewerten I passende Ausgabewerte O liefert: t(I,O) true.
Ausführung = Lösen eines logischen Problems.
Beispiel: Prolog
-
deklarative Sprachen betrachten ein Programm als eine Menge von Datendefinitionen (Deklarationen) und darauf bezogenen Abfragen.
Ausführung = Suche in einem Datenbestand.
Beispiel: SQL
-
datenflussorientierte Sprachen stellen ein Programm dar, indem sie den Fluss der Signale oder Datenströme durch Operatoren (Addierer, Integratoren) beschreiben
Ausführung = Transformation von Datenströmen
Beispiel: Simulink, Microsoft Visual Programming Language (VPL)
4.2 Historie und Klassifikation von Programmiersprachen
Zur obigen Grafik gibt es viele Varianten und Alternativen, je nach Vorliebe des Diagramm-Erstellers.
Programmiersprachen lassen sich klassifizieren nach
-
Anwendungsgebiet: Ingenieurwissenschaften (Fortran), kommerzieller Bereich (Cobol), künstliche Intelligenz (Prolog, Lisp), Systemsoftware (Assembler, C), Steuerungssoftware (C, Ada, Simulink), Robotik (C, NQC, VPL), Internet / Arbeitsplatzsoftware (Java, C++), Datenbanken (SQL), …
-
Spezialsprachen („DSL, domain specific languages“): SPSS (Statistik); TeX/LaTeX, PostScript (Textverarbeitung); Lex, Yacc (Compilerbau); Z, B, CSP (Programmspezifikation); UML, SimuLink (Modellierung)
-
Verbreitungsgrad: (derzeit )industrierelevante, überlieferte und akademische Sprachen
-
Historischer Entwicklung: „Stammbaum“ der Programmiersprachen, siehe oben
-
Programmiersprachengeneration: Abstraktionsgrad;
-
1. Generation: Maschinensprachen
-
2. Generation: Assemblersprachen (x86-MASM, ASEM-51)
-
3. Generation: Algorithmische Sprachen (Algol, Delphi, …)
-
4. Generation: Anwendungsnahe Sprachen (VBA, SQL, …)
-
5. Generation: Problemorientierte Sprachen, KI-Sprachen (Prolog, Haskell, …)
-
Programmierparadigmen (siehe Kapitel 4.1)
-
Verfügbaren Sprachelementen
-
Kontrollfluss, Datentypen
-
Rekursion oder iterative Konstrukte
-
Sequentielle oder parallele Ausführung
-
Interpretiert oder compiliert
-
Realzeitfähig oder nicht realzeitfähig
-
Streng typisiert, schwach typisiert oder untypisiert
-
Statisch oder dynamisch typisiert
-
Textuell oder graphisch
-
…
Das Balkendiagramm zeigt die in deutschen Softwarehäusern überwiegend verwendeten Sprachen, zitiert nach (Bothe, Quelle: Softwaretechnik-Trends Mai 1998). Mehrfachnennungen waren bei der Befragung möglich.
Die „babylonische Sprachvielfalt“ der verschiedenen Programmiersprachen verursacht Kosten: Portabilitätsprobleme, Schulungsmaßnahmen, Programmierfehler. Daher gab es immer wieder Versuche, Sprachen zu vereinheitlichen (ADA, ANSI-C, …). Trotzdem kam es in der Forschung immer wieder zu neuen Ideen, neuen Konzepten und in der Folge zu neuen Programmiersprachen. Daher wird es auf absehbare Zeit viele verschiedene Sprachen und Dialekte geben. Für Informatiker ist es deshalb wichtig, die verschiedenen Konzepte zu kennen und sich schnell in neue Sprachen einarbeiten zu können.
Dostları ilə paylaş: |