Praktische Informatik I
WS 1999/2000
Prof. Dr. W. Effelsberg
Lehrstuhl für Praktische Informatik IV Universität Mannheim
Inhaltsverzeichnis (1)
1. Einführung1.1 Was ist Informatik?
1.2 Geschichte der Informatik 1.3 Grundstruktur des Computers 2. Die Programmiersprache Java
2.1 Was ist Java?
2.2 Erste Beispiele
2.3 Lexikalische Konventionen 2.4 Typen und Werte
2.5 Konstanten und Variable
2.6 Typumwandlungen, Ausdrücke und Operatoren 2.7 Anweisungen
2.8 Felder
3. Entwurf von Algorithmen
3.1 Algorithmen, Progammiersprachen, Programme 3.2 Systematischer Entwurf von Algorithmen
3.3 Schrittweise Verfeinerung
3.4 Ablaufsteuerung (Kontrollstrukturen) 3.5 Modularität
3.6 Rekursion
3.7 Daten und Datenstrukturen
Inhaltsverzeichnis (2)
4. Brückenschlag zur Mathematik4.1 Einführung in die Logik 4.2 Endliche Automaten 4.3 Binärbäume
5. Theorie der Algorithmen 5.1 Berechenbarkeit 5.2 Komplexität
5.3 Korrektheit und Verifikation 6. Alternative Programmierkonzepte
6.1 Ereignisgesteuerte Programmierung 6.2 Programmierung mit Logik
6.3 Funktionale Programmierung
Literatur zur Vorlesung
1. Basis der Vorlesung
Les Goldschlager / Andrew Lister:
Informatik - Eine moderne Einführung
3. Auflage, Hanser-Verlag, München,1990 Martin Schader, Lars Schmidt-Thieme:
Java - Eine Einführung
2. Auflage, Springer-Verlag, Berlin/Heidelberg/New York, 1999
2. Weitere Empfehlungen
Harvey M. Deitel, Paul J. Deitel:
Java: How to program
2nd edition, Prentice Hall, 1997 (1100 Seiten!) Uwe Schöning:
Logik für Informatiker
4. Auflage, Spektrum Akademischer Verlag, 1995
Danksagung
Die Kollegen Hesser, Schader, Schmeck und Ottmann haben mir zur Vorbereitung dieser Vorlesung Folien und andere Unterlagen überlassen. Für ihre Unterstützung möchte ich mich herzlich bedanken.
1 Was ist Informatik?
Informatik ist die Wissenschaft von der systematischen Verarbeitung von Informationen, insbesondere der au- tomatisierten Verarbeitung mit Hilfe von Digitalrechnern.
Sie befaßt sich mit
• der Struktur, der Wirkungsweise, den Fähigkeiten und den Konstruktionsprinzipien von Informations- verarbeitungssystemen
• Strukturen, Eigenschaften und Beschreibungsmög- lichkeiten von Informationen und von Informations- verarbeitungsprozessen (Datenstrukturen und Algo- rithmen)
• Möglichkeiten der Strukturierung, Formalisierung und Mathematisierung von Anwendungen sowie der Modellbildung und Simulation.
Einordnung der Informatik
In fo rm a tio n stec h n o lo g ie
In fo rm atik M ik ro elek tro n ik
Teilgebiete der Informatik
Theoretische Informatik
Technische Informatik (Hardware)
Praktische Informatik
Angewandte Informatik
Automatentheorie Rechner- architektur
Programmier- sprachen
Wirtschafts- informatik Formale Spra-
chen
Schaltkreis- entwurf
Datenstrukturen Ingenieurs- informatik Komplexitäts-
theorie
Prozessoren Datenbanken Computerlinguistik
usw. Speicher Betriebssysteme naturwiss. Anwen- dungen
pheriphere Ge- räte
Rechnernetze geisteswiss. An- wendungen Kommunika-
tionsgeräte
Künstliche Intelli- genz
juristische Anwen- dungen
usw. usw. usw.
Verwandte Gebiete
N a tu r- w isse n - sch aften
B W L V W L
A n d ere In g en ieu r- w iss en - sc ha ften
S p rach en V erw a ltu n g
M u sik /K u n st P sych o lo g ie
S p o rt ...
R ech t
S o zia lw iss.
T h eo lo g ie ...
A n w e nd u n gs system e E n tw ick lu n g ssystem e S p ra ch system e
S ystem s oftw a re B etrieb ss ys tem e R ech n erarc h it./N etze K ern system e
P roz esso ren , E /A Fu n k tio n a le E in h eiten S ch a ltu ng en
B au elem en te
P h ysik alisch e V o rg än g e
P ä da g o gik
P h ysik C h e m ie
B io lo g ie
M ath em a tik P h ilo-
so p h ie
1.1 Geschichte der Informatik
Meilensteine aus der Geschichte der Informatik
1.1.1 Geschichte der Ideen
Theoretische und mathematische Grundlagen aus Indien und Arabien Ziffern, Stellenwert-
Schreibweise (zuvor: römi- sche Zahlen; vergleiche auch: englisches Geld!) G. W. Leibniz 1646 - 1716 Logischer Kalkül, binäres
Zahlensystem, Addierma- schine
G. Boole 1847 Algebraisierung der Logik D. Hilbert 1862 - 1943 Entscheidungsproblem,
(finde Algorithmus, der ent- scheidet, ob gegebene
Aussage wahr oder falsch ist)
G. Frege 1879 symbolische Sprache zur Beschreibung von Algo- rithmen
Baudot 1889 Konstruktion von binären Codes
K. Gödel 1931 Unvollständigkeitstheorem (es gibt Probleme, zu de- nen keine algorithmische Lösung existiert)
Turing 1937 Turing-Maschine, Bere- chenbarkeit, Algorithmus- Begriff
J. v. Neumann 1948 universelle, programmge- steuerte Rechenanlage
C. E. Shannon 1948 Informationstheorie, Abtast- Theorem
R. Hamming 1950 fehlerkorrigierende Codes H. Rutishauser 1951 algorithmische Program-
miersprache J. Backus, P. Naur ca.
1958
Backus/Naur-Form zur Syntaxbeschreibung S. Cook 1971 NP-Vollständigkeit
1.1.2 Geschichte der Hardware
Altertum Rom, Griechenland Automaten (z.
B.wassergetrieben)
Rom Abakus
China "Chinese Abacus"
(Perlenrechner) 1833 Ch. Babbage "Analytical Engine"
1890 H. Hollerith Lochkarten-
Tabelliermaschinen (Volkszählung)
1941 K. Zuse Z3, erste funktionsfähi- ge programmgesteuerte Rechenanlage (2600 Relais)
1944 H. Aiken Mark I, elektromechani- scher Computer (Har- vard U.)
1952 H. Aiken Mark II, Relais-Rechner
Automaten der alten Griechen
Die „automatischen Opferpriester“ wurden schom im 3.
Jahrhundert v. Chr. von Philon aus Byzanz gebaut. Die Anlage arbeite mit pneumatischem Druck.
Automaten der alten Ägypter
Das Taxameter der alten Ägypter arbeite mit verschie- denfarbigen Kugeln, die in einer Schale gesammelt wurden.
Erste Generation der Computer (Röhren)
1943-46 Eckert, Mauchly ENIAC, U. Pennsylva-nia, 18 000 Röhren, Programm verdrahtet über Schalttafeln
1946 John v. Neumann "stored program computer" Daten und Programm im Speicher des Computers
1947 MIT Whirlwind I, magneti-
scher Kernspeicher 1947 U. Cambridge Magnettrommel-
Speicher
1951 UNIVAC Magnetband-Speicher
1953 IBM 701, Röhrencomputer,
Magnettrommel, Ma- gnetband
Zweite Generation (Transistoren)
1948 Erfindung des Transi-
stors, Schaltelement mit hoher Schnelligkeit, ge- ringer Leistungsauf- nahme, geringer Wär- meabstrahlung, Markt- reife 1951
1959 IBM 7090, voll transistori- siert, Magnetkernspei- cher 7040 (kleineres Modell)
1964 CDC 6600, Supercomputer
mit mehreren Prozesso- ren, über 3 MIPS
1967 D. Slotnick ILLIAC IV, Parallelrech- ner mit 256 Prozessoren (SIMD)
Dritte Generation (integrierte Schaltkreise)
1962 MIT, U. Manchester Hardware zur Adre-ßumsetzung, virtueller Speicher, Paging
1964 IBM System /360, byte- und
wortorientiert, Standards für Architektur und In- struktionssatz weithin akzeptiert.
ca. 1972 Halbleiter-Speicher als
Hauptspeicher
ca. 1972 Intel erster Mikroprozessor ca. 1974 DEC PDP 11, Prozessrech-
nerfamilie
1977 Cray CRAY-1, Vektorrechner
mit Pipelining
ca. 1978 Xerox PARC hochauflösender Ra- stergrafik- Bildschirm, Maus
ca. 1980 Apple erster PC
ca. 1990 “3 M PC“: 1 Mio Instruk-
tionen/s, 1 Mbyte Haupt- speicher, 1 Mio Pixel
1.1.3 Geschichte der Software (1)
1954 J. Backus FORTRAN
1960 DoD (USA) COBOL
1960 H. Rutishauser, ALGOL 60 F. L. Bauer
K. Samelson
1966 J. Weizenbaum ELIZA
1968 E. Dijkstra Multiprogramming, Struktur von Be- triebssstemen
1970 E. Codd relationales
Datenbankmodell
1971 N. Wirth Pascal
1974 IBM SNA-Ankündigung
1974 D. M. Ritchie, Unix-Betriebssystem K. Thompson
1975 R. Metcalfe, Ethernet LAN D. Boggs
Geschichte der Software (2)
ca. 1978 DEC VAX und VMS
1978 C. A. R. Hoare Communicating Se quential
Processes, Program- mierung paralleler Prozesse 1978 R. Rivest, Public Key Encryption
A. Shamir, L. Adelmann
ca. 1980 VisiCalc erste Tabellenkalkulati- onssoftware
1984 ISO OSI-Referenzmodell für
offene Systeme
1982 Xerox PARC OO - Programmierung (Smalltalk)
1987 MIT X – Windows
1993 Sun Java
Benutzerfreundliche Anwendungssoftware
• Textverarbeitung, incl. Grafik, Desktop Publishing
• Tabellenkalkulation
• Präsentationssoftware
• Datenbanksysteme
• multifunktionale Pakete (MS Office)
• Internet-Browser
• Spiele
Bedeutung: Benutzung des Computers wird möglich ohne Erlernen einer Programmiersprache!
1.1.4 Geschichte typischer Konfigurationen
1950 Hauptspeicher 64 KBATCH-Betriebssystem, Einbenutzerbetrieb Programmierung in Assembler
Peripherie: Lochstreifen
1960 Hauptspeicher 64 K (Magnetkerne) BATCH, Multiprogramming, I/O-Kanäle FORTRAN, COBOL
Magnettrommel, Magnetplatte, Magnetband Lochkarten
1970 Hauptspeicher 256 K (Halblei- ter/Magnetkerne)
Virtueller Speicher, Paging
Time-Sharing-Betriebssysteme
Terminals für Systemprogrammierer 1980 Hauptspeicher 1 MB (Halbleiter)
Time-Sharing + TP-Monitor
Terminal-Netze über Standleitungen
Interaktive Programmentwicklung am Termi- nal
Transaktionsverarbeitung On-Line am Termi- nal
Magnetplatte, Magnetband
Typische Konfigurationen (2)
1990 Leistungsstarke Arbeitsstationen (PCs) mit 1 MB, 1 MIPS, 1 Mio. Bildpunkte Abteilungsrechner
Zentrale Großrechenzentren
Benutzerfreundliche Programme auf PCs UNIX
PASCAL, C
LAN, WAN mit Paketvermittlung (X.25) Netzarchitekturen der Hersteller
ISO - OSI – Architektur für Rechnernetze 2000 RISC-Workstations und PCs,
PC's mit modernen Betriebssystem und grafischer Benutzeroberfläche,
Client/Server Computing im Netz,
Parallelrechner für Spezialanwendungen, Audio voll integriert, aber noch nicht Vi- deo,
Java, C++, C als Programmiersprachen, das Internet als globales Netz, TCP/IP- Netze auch in den Unternehmen, 100 MBit/s in LANs und WANs (ATM, Gigabit Ethernet)
1.2 Grundstruktur des Computers
Aufbau eine Computersystems
B e d ie n u n g s - b ild sc h irm
Z e n tr a lein h e it
S te u e rw e rk
H a u p tsp e ich e r
R e c h e n w e rk
D a te x - o d e r F e r n s p re c h - le itu n g
D aten aus ga b e- gerä te
D is k e tte
D a ten sich tg e rä t
S p r a c h a u s g a b e
D ru c k e r
Z e ic h e n m a sc h in e (P lo tte r )
E x te rn e S p e ic h e r M a s se n sp eich er
M a g n e tb a n d - s p e ic h e r
M a g n e tp la tte n - sp eich er
D a teneinga b e- g eräte
D is k e tte S c a n n e r B ild s c h ir m (M a u s, T a sta tu r ) T e le fo n A u sw e is- le se r
Funktionsweise (1)
Kontrolleinh.
Arithm. Einheit Hauptspeicher
add 4,3,2 0 1 2 3 4
addiert
enthält Daten und Instruktionen
kontrolliert
Verarbeitung
Funktionsweise (2)
Kontrolleinh.
Arithm. Einheit Hauptspeicher
add 4,3,2 0 1 2 3 4
Instruktion auf Adresse 0:
add
Werte von Adressen4
und3
und schreibe Resultat auf Adresse2
lese nächste Instruktion von Adresse
1 Abgekürzt:
add 4,3,2
Funktionsweise (3)
Kontrolleinheit
Arithm. Einheit Hauptspeicher
add 4,3,2 0 1 2 3 4
add 4,3,2
lese Instruktion von Adresse 0
Funktionsweise (4)
Kontrolleinheit
Arithm. Einheit Hauptspeicher
add 4,3,2 0 1 2
4
3
5
4
add 4,3,2
schreibe Wert von Adresse 4 in arithm. Einheit 5
Funktionsweise (5)
Kontrolleinheit
Arithm. Einheit Hauptspeicher
add 4,3,2 0 1 2
4
3
5
4
add 4,3,2
schreibe Wert von Adresse 3 auf arithm. Einheit
5 4
Funktionsweise (6)
Kontrolleinheit
Arithm. Einheit Hauptspeicher
add 4,3,2 0 1 2
4
3
5
4
add 4,3,2
addiere
5
+
4= 9
Funktionsweise (7)
Kontrolleinheit
Arithm. Einheit Hauptspeicher
add 4,3,2 0 1
9
2
4
3
5
4
add 4,3,2
schreibe Resultat auf Adresse 2
5 4
= 9
Funktionsweise (8)
Kontrolleinheit
Arithm. Einheit Hauptspeicher
add 4,3,2 0
nächste Ins.
1
9
2
4
3
5
4
lese nächste Instruktion von Adresse 0+1 nächste Inst.
Software
Software ist eine Abfolge von Instruktionen, die von ei- nem Prozessor verarbeitet werden.
Beispiele für Instruktionen
y = 4 + 3; höhere Programmiersprache add 4,3,2 Assembler
01110101010 Maschinensprache
Hardware- und Software-Schnittstellen
Anwendungssoftware
Systemsoftware
Hardware
Malprogramme, Textverarbeitungs- programme,
…
Betriebssystem, Compiler,
…
CPU, Hauptspeicher, Festplatte, Tastatur, Maus, LAN,
…
Hardware- und Software-Beispiele
Anwendungssoftware
• Editor
• Web-Browser
• Java-Programm (eigenes Programm) Systemsoftware
• Betriebssystem
• Compiler
• Datenbank-Managementsystem
• Netzwerksoftware (Treiber) Hardware
• CPU
• Hauptspeicher
• Festplatte
• Ethernet-Karte
• Tastatur
• Monitor
Vom Anwendungsproblem zum Programm
• Formuliere das Problem
• Skizziere die Lösung (z. B. Algorithmus in Pseudo- Code)
• Schreibe den Algorithmus in einer Programmierspra- che auf
• Kompiliere, binde und starte das Programm
Vom Algorithmus zum Maschinenprogramm
Algorithmus
Programm in a höherer Programmiersprache
Program in Machine Language
Ausführung des Programms Programm in
Maschinensprache
Programmierung
Übersetzung
Interpretation durch CPU
Kompilierung vs. Interpretation
Algorithmus
Source Code
Assembler
Object Code
ausführbares Programm
Programmausführung
Pseudo Code
Kodierung im Editor
Kompilierung
Binder + Libraries
Programm- aufruf
Interpreter- aufruf
Pseudo-Übersetzer
Typische Java-Umgebung
Editor
Compiler
Bytecode Verifier
Interpreter
Platte
Platte
Class Loader
Platte .
.. Hauptspeicher
.. . Hauptspeicher
.. . Hauptspeicher
Programm mit Editor erzeugt und auf
Platte gespeichert.
Compiler erzeugt
Bytecode, der auf Platte gespeichert wird.
Class loader:
Bytecode in Speicher.
stellt sicher, daß Bytecode und
nicht die Sicherheits- restriktionen von Java verletzt.
liest Bytecode und übersetzt ihn in Maschinensprache.