Kapitel 1 - Universität Münster

Werbung
Gliederung
Literatur
Programmierung
Herbert Kuchen
Universität Münster
Mo + Do 14:15 - 15:45, M1
Wintersemester 2010/2011
1
Gliederung
Literatur
Gliederung
I. Einführung
II. Objektorientierte Programmierung (in Java)
III. Deklarative Programmierung (in Haskell/Curry)
IV. Semantik von Programmiersprachen
2
Gliederung
Literatur
Literatur
• Java:
• G. Krüger, T. Stark: Handbuch der Java-Programmierung,
Addison-Wesley, 2009.
• Haskell:
• M. Chakravarty, G. Keller: Einführung in die Programmierung mit
Haskell, Pearson, 2004.
• P. Pepper, P. Hofstedt: Funktionale Programmierung, Springer,
2006.
• R. Bird: Introduction to Functional Programming using Haskell,
Prentice Hall, 1998.
• Semantik:
• G. Winskel: The Formal Semantics of Programming Languages,
MIT Press, 1993.
3
Einführung
Teil I: Einführung
Programmiersprache:
“zur Festlegung der Arbeitsabläufe eines Rechners”
Klassifikation nach Programmierniveau
1) Maschinensprachen (1. Generation)
2) Assemblersprachen (2. Generation)
3) Höhere Programmiersprachen (3. Generation)
4) 4GL-Sprachen (anwendungsbezogen, oft DB-Abfragen integriert)
4
Einführung
von-Neumann-Rechnermodell
Inhalt
Adresse
Programmzähler
0
27
42
1
03
01
2
18
42
...
...
02
...
...
...
00
Programm
Speicher
42
Daten
...
n-1
n
laden
CPU
speichern
Akku/Register
verarbeiten
5
Einführung
Maschinensprachen
Programm:
Folge von elementaren Befehlen bestehend
aus Operationscode und Argument(en)
Befehle für:
• Transport zwischen Speicher und CPU
(Laden, Speichern, . . . )
• arithmetische und logische Befehle
(Addition, Konjunktion, . . . ) auf CPU-Registern
• Sprungbefehle (bedingt/unbedingt, absolut/relativ)
• ...
6
Einführung
Beispiel: Maschinencode
27
|{z}
42
|{z}
03
|{z}
01
|{z}
Zahl 1
inAkku
Inhalt von
addiere zu
laden
Adresse 42
Akku − Inhalt
18
|{z}
42
|{z}
speichere
Adresse 42
...
Akku − Inhalt
beachte: verschiedene “Adressierungsarten” (abh. von Op.-Code)
Eigenschaften:
• sehr niedriges Programmierniveau
• aufwändig, fehleranfällig, schwer modifizierbar
• rechnerabhängig, nicht portierbar
• in Praxis zur Programmierung nicht verwendet
7
Einführung
Assemblersprachen
• wie Maschinensprache, jedoch symbolische Namen
für Op-Codes, Speicherplätze, Sprungmarken, . . .
DEFINE x 42
Beispiel:
LOAD x
ADD 1
STORE x
Eigenschaften:
• sehr niedriges Programmierniveau
• aufwändig, fehleranfällig, rechnerabhängig
• leicht in Maschinensprache übersetzbar
(nur die “versteht” der Rechner; → Assembler)
• nur in Ausnahmefällen zur Programmierung verwendet
8
Einführung
Höhere Programmiersprachen
• heute in Praxis üblich
Klassifikation nach Paradigmen
a) imperative Programmiersprachen
z.B. Pascal, C, Fortran, Modula, Ada, Basic, Algol, Cobol, PL/I, . . .
⊃ objektorientierte PS:
z.B. Java, C++, C#, Eiffel, Smalltalk, Ada95, . . .
• Grundidee: Programm bewirkt Speichertransformation
(→ von-Neumann-Modell)
• oft effizienter
Bsp.: x := x + 1
9
Einführung
Höhere Programmiersprachen (Fortsetzung)
b) deklarative Programmiersprachen
% funktionale PS: z.B. Haskell, Miranda, ML, Lisp, Scheme, Erlang,
...
& logische PS: z.B. Prolog
• Grundidee: ausführbare Spezifikation, “was statt wie”
• höheres Programmierniveau, z.T. weniger effizient
10
Einführung
Ziele der Programmierung
• Korrektheit, Robustheit
• leichte Wartbarkeit, Verständlichkeit, Testbarkeit
durch geeignete Programmierkonzepte, Modularisierung,
Strukturierung,
geeignetes Layout,
sprechende Namen (z.B. Variable “Gehalt” statt “x”),
Kommentare,. . .
• Effizienz
durch geignete Datenstrukturen und Algorithmen(→ Informatik II)
11
Herunterladen