Inhaltsverzeichnis (1) WS 1999/2000 Prof. Dr. W. Effelsberg Lehrstuhl für V Universität Mannheim 1. Einführung 1.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 1. Einleitung 1-1 1. Einleitung 1-2
Inhaltsverzeichnis (2) 4. Brückenschlag zur Mathematik 4.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 1. Basis der Vorlesung Literatur zur 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 2 nd edition, Prentice Hall, 1997 (1100 Seiten!) Uwe Schöning: Logik für Informatiker 4. Auflage, Spektrum Akademischer Verlag, 1995 1. Einleitung 1-3 1. Einleitung 1-4
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 automatisierten Verarbeitung mit Hilfe von Digitalrechnern. Sie befaßt sich mit der Struktur, der Wirkungsweise, den Fähigkeiten und den Konstruktionsprinzipien von Informationsverarbeitungssystemen Strukturen, Eigenschaften und Beschreibungsmöglichkeiten von Informationen und von Informationsverarbeitungsprozessen (Datenstrukturen und Algorithmen) Möglichkeiten der Strukturierung, Formalisierung und Mathematisierung von Anwendungen sowie der Modellbildung und Simulation. 1. Einleitung 1-5 1. Einleitung 1-6
Einordnung der Informatik Informationstechnologie Inform atik M ikroelektronik Teilgebiete der Informatik Theoretische Informatik Technische Informatik Praktische Informatik Angewandte Informatik (Hardware) Automatentheorie Rechnerarchitektur Programmiersprachen Wirtschaftsinformatik Formale Sprachen Schaltkreisentwurf Datenstrukturen Ingenieursinformatik Komplexitätstheorie Prozessoren Datenbanken Computerlinguistik usw. Speicher Betriebssysteme naturwiss. Anwendungen pheriphere Geräte Rechnernetze geisteswiss. Anwendungen Kommunikationsgeräte Künstliche Intelligenz juristische Anwendungen usw. usw. usw. 1. Einleitung 1-7 1. Einleitung 1-8
Verwandte Gebiete 1.1 Geschichte der Informatik Naturwissenschaften BWL VWL Andere Ingenieurwissenschaften Recht Sozialwiss. Theologie... Meilensteine aus der Geschichte der Informatik 1.1.1 Geschichte der Ideen Philosophie Sprachen Verwaltung Musik/Kunst Psychologie Sport... Anwendungssysteme Entwicklungssysteme Sprachsysteme System software Betriebssysteme Rechnerarchit./Netze Kernsysteme Prozessoren, E/A Funktionale Einheiten Schaltungen Bauelemente Physikalische Vorgänge Physik M athem atik Chemie Biologie Pädagogik Theoretische und mathematische Grundlagen Baudot 1889 aus Indien und Arabien Ziffern, Stellenwert- Schreibweise (zuvor: römische Zahlen; vergleiche auch: englisches Geld!) G. W. Leibniz 1646-1716 Logischer Kalkül, binäres Zahlensystem, Addiermaschine G. Boole 1847 Algebraisierung der Logik D. Hilbert 1862-1943 Entscheidungsproblem, (finde Algorithmus, der entscheidet, ob gegebene Aussage wahr oder falsch ist) G. Frege 1879 symbolische Sprache zur Beschreibung von Algorithmen Konstruktion von binären Codes K. Gödel 1931 Unvollständigkeitstheorem (es gibt Probleme, zu denen keine algorithmische Lösung existiert) Turing 1937 Turing-Maschine, Berechenbarkeit, Algorithmus- Begriff 1. Einleitung 1-9 1. Einleitung 1-10
J. v. Neumann 1948 universelle, programmgesteuerte Rechenanlage C. E. Shannon 1948 Informationstheorie, Abtast- Theorem R. Hamming 1950 fehlerkorrigierende Codes H. Rutishauser 1951 algorithmische Programmiersprache J. Backus, P. Naur ca. Backus/Naur-Form zur 1958 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ähige programmgesteuerte Rechenanlage (2600 Relais) 1944 H. Aiken Mark I, elektromechanischer Computer (Harvard U.) 1952 H. Aiken Mark II, Relais-Rechner 1. Einleitung 1-11 1. Einleitung 1-12
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 verschiedenfarbigen Kugeln, die in einer Schale gesammelt wurden. 1. Einleitung 1-13 1. Einleitung 1-14
Erste Generation der Computer (Röhren) 1943-46 Eckert, Mauchly ENIAC, U. Pennsylvania, 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, magnetischer Kernspeicher 1947 U. Cambridge Magnettrommel- Speicher 1951 UNIVAC Magnetband-Speicher 1953 IBM 701, Röhrencomputer, Magnettrommel, Magnetband Zweite Generation (Transistoren) 1948 Erfindung des Transistors, Schaltelement mit hoher Schnelligkeit, geringer Leistungsaufnahme, geringer Wärmeabstrahlung, Marktreife 1951 1959 IBM 7090, voll transistorisiert, Magnetkernspeicher 7040 (kleineres Modell) 1964 CDC 6600, Supercomputer mit mehreren Prozessoren, über 3 MIPS 1967 D. Slotnick ILLIAC IV, Parallelrechner mit 256 Prozessoren (SIMD) 1. Einleitung 1-15 1. Einleitung 1-16
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 Instruktionssatz weithin akzeptiert. ca. 1972 Halbleiter-Speicher als ca. 1972 Intel erster Mikroprozessor ca. 1974 DEC PDP 11, Prozessrechnerfamilie 1977 Cray CRAY-1, Vektorrechner mit Pipelining ca. 1978 Xerox PARC hochauflösender Rastergrafik- Bildschirm, Maus ca. 1980 Apple erster PC ca. 1990 3 M PC : 1 Mio Instruktionen/s, 1 Mbyte, 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 Betriebssstemen 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 1. Einleitung 1-17 1. Einleitung 1-18
Geschichte der Software (2) ca. 1978 DEC VAX und VMS 1978 C. A. R. Hoare Communicating Se quential Processes, Programmierung paralleler Prozesse 1978 R. Rivest, Public Key Encryption A. Shamir, L. Adelmann ca. 1980 VisiCalc erste Tabellenkalkulationssoftware 1984 ISO OSI-Referenzmodell für offene Systeme 1982 Xerox PARC OO - Programmierung (Smalltalk) 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! 1987 MIT X Windows 1993 Sun Java 1. Einleitung 1-19 1. Einleitung 1-20
1.1.4 Geschichte typischer Konfigurationen 1950 64 K BATCH-Betriebssystem, Einbenutzerbetrieb Programmierung in Assembler Peripherie: Lochstreifen 1960 64 K (Magnetkerne) BATCH, Multiprogramming, I/O-Kanäle FORTRAN, COBOL Magnettrommel, Magnetplatte, Magnetband Lochkarten 1970 256 K (Halbleiter/Magnetkerne) Virtueller Speicher, Paging Time-Sharing-Betriebssysteme Terminals für Systemprogrammierer 1980 1 MB (Halbleiter) Time-Sharing + TP-Monitor Terminal-Netze über Standleitungen Interaktive Programmentwicklung am Terminal Transaktionsverarbeitung On-Line am Terminal 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 Video, 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. Einleitung 1-21 1. Einleitung 1-22
1.2 Grundstruktur des Computers Diskette Scanner Bildschirm (M aus, Tastatur) Telefon Magnetplattenspeicher Dateneingabegeräte Ausweisle se r Aufbau eine Computersystems Bedienungsbildschirm Zentraleinheit Steuerwerk Rechenwerk Externe Speicher M assenspeicher M agnetbandspeicher Datex- oder Fernsprechle itun g Datenausgabegeräte Diskette Datensichtgerät Sprachausgabe Drucker Zeichenmaschine (P lo tter) Kontrolleinh. kontrolliert Verarbeitung Funktionsweise (1) 4 3 2 1 add 4,3,2 0 Arithm. Einheit enthält Daten und Instruktionen addiert 1. Einleitung 1-23 1. Einleitung 1-24
Funktionsweise (2) Funktionsweise (3) 4 3 2 1 add 4,3,2 0 4 3 2 1 add 4,3,2 0 Kontrolleinh. Kontrolleinheit add 4,3,2 Arithm. Einheit Instruktion auf Adresse 0: add Werte von Adressen 4 und 3 und schreibe Resultat auf Adresse 2 lese nächste Instruktion von Adresse 1 Abgekürzt: add 4,3,2 Arithm. Einheit lese Instruktion von Adresse 0 1. Einleitung 1-25 1. Einleitung 1-26
Funktionsweise (4) Funktionsweise (5) Kontrolleinheit add 4,3,2 5 4 4 3 2 1 add 4,3,2 0 Kontrolleinheit add 4,3,2 5 4 4 3 2 1 add 4,3,2 0 5 Arithm. Einheit schreibe Wert von Adresse 4 in arithm. Einheit Arithm. Einheit 5 4 schreibe Wert von Adresse 3 auf arithm. Einheit 1. Einleitung 1-27 1. Einleitung 1-28
Funktionsweise (6) Funktionsweise (7) 5 4 4 3 2 1 add 4,3,2 0 5 4 4 3 9 2 1 add 4,3,2 0 Kontrolleinheit add 4,3,2 Kontrolleinheit add 4,3,2 addiere Arithm. Einheit 5 + 4 = 9 Arithm. Einheit 5 4 = 9 schreibe Resultat auf Adresse 2 1. Einleitung 1-29 1. Einleitung 1-30
Funktionsweise (8) Software 5 4 4 3 9 2 nächste Ins. 1 add 4,3,2 0 Software ist eine Abfolge von Instruktionen, die von einem Prozessor verarbeitet werden. Beispiele für Instruktionen y = 4 + 3; höhere Programmiersprache add 4,3,2 Assembler 01110101010 Maschinensprache Kontrolleinheit nächste Inst. Arithm. Einheit lese nächste Instruktion von Adresse 0+1 1. Einleitung 1-31 1. Einleitung 1-32
Hardware- und Software-Schnittstellen Hardware- und Software-Beispiele Anwendungssoftware Systemsoftware Hardware Malprogramme, Textverarbeitungsprogramme, Betriebssystem, Compiler, CPU,, Festplatte, Tastatur, Maus, LAN, Anwendungssoftware Editor Web-Browser Java-Programm (eigenes Programm) Systemsoftware Betriebssystem Compiler Datenbank-Managementsystem Netzwerksoftware (Treiber) Hardware CPU Festplatte Ethernet-Karte Tastatur Monitor 1. Einleitung 1-33 1. Einleitung 1-34
Vom Anwendungsproblem zum Programm Vom Algorithmus zum Maschinenprogramm Formuliere das Problem Skizziere die Lösung (z. B. Algorithmus in Pseudo- Code) Schreibe den Algorithmus in einer Programmiersprache auf Kompiliere, binde und starte das Programm Algorithmus Programmierung Programm in a höherer Programmiersprache Übersetzung Programm in in Machine Maschinensprache Language Interpretation durch CPU Ausführung des Programms 1. Einleitung 1-35 1. Einleitung 1-36
Kompilierung vs. Interpretation Typische Java-Umgebung Algorithmus Editor Platte Programm mit Editor erzeugt und auf Platte gespeichert. Kompilierung Source Code Kodierung im Editor Pseudo-Übersetzer Compiler Class Loader Platte Compiler erzeugt Bytecode, der auf Platte gespeichert wird. Class loader: Bytecode in Speicher. Assembler Pseudo Code Platte... Binder + Libraries Object Code ausführbares Programm Interpreteraufruf Bytecode Verifier. stellt sicher, daß Bytecode und nicht die Sicherheitsrestriktionen von Java verletzt. Programmaufruf Programmausführung Interpreter. liest Bytecode und übersetzt ihn in Maschinensprache. 1. Einleitung 1-37 1. Einleitung 1-38