1 Programmiersprachen 1.1 1 Meilensteine imperativer Programmiersprachen (teilweise objektorientiert) 1960 1970 Fortran Cobol PL/I Algol 60 Algol W Simula 67 Pascal C 1980 1990 2000 Smalltalk Modula Ada C++ Eiffel Java C# Algol 68 1.1 Grundelemente imperativer Algorithmen Zur Erinnerung: Funktionales Programm = Funktionsdefinition f x ... = ..... , Variable, formale Argumente i.a. abgestützt auf weitere g , h , ... Programmausführung = Auswertung eines Ausdrucks f a ... Werte (Ausdrücke), tatsächliche Arg. 1.1 3 Imperatives Programm = Folge von Anweisungen A1; A2; ... (imperare (lat.) = befehlen) Programmausführung = Ausführung der Anweisungen, bewirkt Effekte durch Änderung von Zuständen von Variablen (u.a.) Achtung! Anderer Variablenbegriff als bei der funktionalen Programmierung: Variable = Behälter, enthält einen Wert, der durch einen anderen Wert ersetzt werden kann 1.1 4 1.1.1 Klassischer Algorithmusbegriff abstrahiert von Rechner-Hardware und Programmiersprachen, ist imperativ! Algorithmus (algorithm) (nach Al-Khwarizmi, arab. Mathematiker, 9. Jhdt.) ist Verfahren zur Lösung einer Klasse gleichartiger Probleme, bestehend aus Einzelschritten, mit folgenden Eigenschaften: Jeder Einzelschritt ist für die ausführende Instanz unmittelbar verständlich und ausführbar. Das Verfahren ist endlich beschreibbar. [ Die Ausführung benötigt eine endliche Zeit („terminiert“).] (kurz: 1.1 „ein allgemeines, eindeutiges, endliches Verfahren“) 5 genauer: sequentieller Algorithmus (sequential algorithm): bei der Ausführung striktes Nacheinander der Einzelschritte nichtsequentieller Algorithmus (concurrent algorithm): Ausführungsreihenfolge der Einzelschritte bleibt teilweise offen deterministischer Algorithmus (deterministic algorithm): bei der Ausführung ist der jeweils nächste Schritt und sein Effekt eindeutig festgelegt (ist stets sequentiell) nichtdeterministischer/stochastischer Algorithmus: sonst 1.1 6 Klassisches Beispiel: Euklidischer Algorithmus (nach Euklid, griech. Mathematiker, ******) zur Bestimmung des größten gemeinsamen Teilers zweier natürlicher Zahlen Aber z.B. auch: - Kochrezepte, - Strickmusteranleitungen, - u.ä. ☛ Natürlicher Bezug zur Funktionsweise von Rechnern, die schrittweise Maschinenbefehle (Instruktionen) ausführen. 1.1 7 1.1.2 Einfache und zusammengesetzte Datentypen Programme operieren auf Daten. Ein Datenwert - kurz Wert (value) - hat einen bestimmten Datentyp - kurz Typ (type) - z.B. „Zahl“, „Zeichenfolge“, ... Einfache Typen/Werte (simple, unstructured types/values): Wert ist unteilbar, kann allenfalls als Ganzes kopiert werden. Beispiele: Zahl, Zeichen. Zusammengesetzte Typen/Werte (composite, structured types/values): Wert ist aus mehreren, einzeln manipulierbaren Teilwerten zusammengesetzt, die wiederum einfach oder zusammengesetzt sein können: rekursives Bauprinzip, erlaubt beliebig komplexe Typen. Beispiele: Zahlenpaar, Zahlenmenge, Zeichenfolge. 1.1 8 1.1.3 Einfache und zusammengesetzte Ausdrücke Zu den Elementen eines Programmtextes gehören u.a. Wertbezeichner (denotation, literal), z.B. 4711 Variablenname (variable identifier/name), z.B. counter Konstantenname (constant identifier/name), z.B. PI ... (weitere) Sammelbegriff für diese ist: Einfacher Ausdruck (simple expression) 1.1 9 Zusammengesetzter Ausdruck (composite expression) besteht aus ☛ Operator, z.B. + , ☛ Operanden, das sind einfache oder zusammengesetzte Ausdrücke, ☛ evtl. Klammern. Beispiele: arithmetischer Ausdruck: bedingter Zeichenausdruck: Achtung: (x+y)·sin(a) WENN klein DANN ‘c‘ SONST ‘C‘ Auswertung eines Ausdrucks liefert einen Wert eines bestimmten Typs (oben „Zahl“ bzw. „Zeichen“). Auswertung kann zusätzlich Effekt(e) bewirken ! 1.1 10 (Zentraler Begriff der imperativen Programmierung:) Variable (variable) (1) ist Behälter für einen Wert (2) ist benannt, (3) ist getypt; (4) der enthaltene Wert ist ersetzbar. ( Konstante (constant) desgl. ohne (4) ) Ersetzung des Werts einer Variablen durch einen neuen Wert heißt Zuweisung (oder „Überschreiben“) Beispiel: SETZE x AUF pi (alter x-Wert geht verloren) 1.1 11 1.1.4 Einfache und zusammengesetzte Anweisungen Anweisung (statement) - wird ausgeführt, - bewirkt einen Effekt - (liefert keinen Wert!) Einfache Anweisungen (simple/primitive statements): ☛ ☛ ☛ ☛ 1.1 Zuweisung, Aufruf, Sprung, ... 12 Zusammengesetzte Anweisung besteht aus (composite statement, control structure) [Achtung schlechte Übersetzung:„Kontrollstruktur“] ☛ Ausdrücken, ☛ einfachen oder zusammengesetzten Anweisungen, ☛ Beschreibung der Art der Zusammensetzung. (z.B. Fallunterscheidung, Wiederholung, ...) Beispiel Fallunterscheidung: WENN a<0, DANN SETZE sign AUF -1, WENN a=0, DANN SETZE sign AUF 0, WENN a>0, DANN SETZE sign AUF +1. 1.1 13