Programmiersprachen

cflStudents producing Scripts Inhaltsverzeichnis 1 Allgemeines 2

1.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.1.1 Die Vielfalt der Programmiersprachen . . . . . . . . . . . . . . . . . . . . 2 1.1.2 Was ist eine Programmiersprache? . . . . . . . . . . . . . . . . . . . . . . 3 1.1.3 Kriterien zum Sprachentwurf . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.4 Sprachdefinition und Beschreibung . . . . . . . . . . . . . . . . . . . . . . 4 1.1.5 Implementierung von Programmier-Sprachen . . . . . . . . . . . . . . . . 5 1.2 Geschichte der Programmier-Sprachen . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2.1 Die 40'er Jahre: Vorl"aufer . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.2 Die 50'er Jahre: Urv"ater . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.2.3 Die 60'er Jahre: Explosion . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2.4 Die 70'er Jahre: Trend zur Einfachheit . . . . . . . . . . . . . . . . . . . . 9 1.2.5 Die 80'er Jahre: Imperative, Funktionale, OO und Logische Sprachen . . . 10 1.3 Lexikalisches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

1.3.1 Der Zeichenvorrat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.3.2 Bezeichner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.3.3 Leerzeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.3.4 Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.3.5 Kommentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2 Imperative Programmiersprachen 15

2.1 Typen, Werte, Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.1.1 (Einfache) Typen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.1.2 Bezeichner und Deklarationen . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.1.3 Variablen, Konstanten, Zeiger . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.2 Ausdr"ucke und Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

2

INHALTSVERZEICHNIS 3

2.2.1 Arithmetische und logische Ausdr"ucke . . . . . . . . . . . . . . . . . . . . 28 2.2.2 Zuweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.2.3 Anweisungen $ Anweisungslisten . . . . . . . . . . . . . . . . . . . . . . 30 2.2.4 Bedingte Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.2.5 Fallunterscheidung (erstmals AlgolW) . . . . . . . . . . . . . . . . . . . . 31 2.2.6 Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.2.7 Spr"unge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.3 Unterprogramme und Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

2.3.1 Kontrollfluss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.3.2 Parameter"ubergabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.3.3 Weitere Besonderheiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.3.4 Unterprogramme als Werte . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.4 Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

2.4.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.4.2 Versteckte Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

3 Von Modulen zu Klassen 47

3.1 Definition von Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.2 Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

3.2.1 Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.2.2 Vererbung und Typsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.2.3 Typprobleme bei Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.2.4 Klassenmethoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.2.5 Bin"aroperationen: Vergleich . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.2.6 Bin"aroperatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 3.2.7 Schnittstellen in Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3.2.8 Abstrakte Klassen/Methoden . . . . . . . . . . . . . . . . . . . . . . . . . 61 3.2.9 Sichtbarkeit in Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 3.3 Andere 00-Sprachen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

3.3.1 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.3.2 Eiffel: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

INHALTSVERZEICHNIS 1 4 Funktionale Sprachen 67