Einführung in die Informatik von Prof. Dr. Heinz-Peter Gumm und Prof. Dr. Manfred Sommer, Philipps-Universität Marburg 4., überarbeitete Auflage Unter Mitwirkung von Prof. Dr. Wolfgang Hesse und Prof. Dr. Bernhard Seeger, Philipps-Universität Marburg Technische Universität Darmstadt FACHBEREICH INFORMATIK B I B L I O T H E K Invsnter-Nr.: Sachgebiets:. Standort: Oldenbourg Verlag München Wien Inhaltsverzeichnis Vorwort zur vierten Auflage 1 Vorwort zur dritten Auflage 2 Kapitel 1 Einführung 1.1 Was ist „Informatik"! 1.2 ; 21 21 Technische Informatik Praktische Informatik Theoretische Informatik Angewandte Informatik 21 22 22 23 Information und Daten Bits Bitfolgen Hexziffern Bytes und Worte Dateien Datei- und Speichergrößen Längen- und Zeiteinheiten 24 24 25 26 27 28 28 29 1.3 Informationsdarstellung Text ASCII-Code ASCII-Erweiterungen Unicode Zeichenketten Logische Werte Programme Graphiken und Bilder Zahlendarstellungen Binärdarstellung Das Oktalsystem und das Hexadezimalsystem 30 30 30 31 32 32 33 33 33 34 34 35 Inhaltsverzeichnis Umwandlung in das Binär-, Oktaloder Hexadezimalsystem Arithmetische Operationen Darstellung ganzer Zahlen Die Zweierkomplementdarstellung Standardformate für die Darstellung ganzer Zahlen Gebrochene Zahlen Gleitpunktzahlen: Reelle Zahlen Real-Zahlenbereiche in Programmiersprachen Daten - Informationen 36 38 39 40 42 43 44 46 47 1.4 Hardware Personal Computer, Workstations und Mainframes Aufbau von Computersystemen Der Rechner von außen Das Innenleben Ein modernes Motherboard Die Aufgabe der CPU Die Organisation des Hauptspeichers Speichermedien Magnetplatten Disketten Festplattenlaufwerke Optische Laufwerke Vergleich von Speichermedien Bildschirme Text- und Graphikmodus 48 48 49 50 51 55 57 58 60 61 62 63 65 67 67 68 1.5 Von der Hardware zum Betriebssystem Schnittstellen und Treiber BIOS Die Aufgaben des Betriebssystems Dateiverwaltung DOS, Windows und Linux Graphische Bediensysteme 68 70 71 72 73 76 76 1.6 Anwendungsprogramme Textverarbeitung Zeichen und Schriftarten Formatierung Desktop Publishing Textbeschreibungssprachen Tabellenkalkulation: spread sheets Der Rechner als Fenster zur Welt Wie geht es weiter ? 78 79 79 80 82 82 85 87 88 Kapitel 2 Grundlagen der Programmierung Programme und Sprachen Vom Programm zur Maschine Virtuelle Maschinen Interpreter Programmieren und Testen Programmierumgebungen BASIC Pascal Java Prolog 91 91 92 93 95 95 96 97 97 98 99 2.1 Spezifikationen, Algorithmen, Programme Spezifikationen Algorithmen Algorithmen als Lösung von Spezifikationen Terminierung Elementare Aktionen Elementare Aktionen in Programmiersprachen Vom Algorithmus zum Programm 100 100 103 105 106 107 107 108 2.2 Daten und Datenstrukturen Der Begriff der Datenstruktur Die Analogie zwischen Taschenrechner und Datenstruktur Der Datentyp Boolean Der Datentyp Natürliche Zahl Der Datentyp Integer Rationale Zahlen Die Datenstruktur Real Mehrsortige Datenstrukturen Zeichen Einfache und zusammengesetzte Typen - Strings Strings in Turbo-Pascal und in Java Benutzerdefinierte Datenstrukturen Informationsverarbeitung und Datenverarbeitung Variablen und Speicher Wohlgeformte Ausdrücke Auswertung von Ausdrücken Verkürzte Auswertung Seiteneffekte Deklarationen Typfehler Initialisierung 110 110 Der Kern imperativer Sprachen Zuweisungen Kontrollstrukturen 128 129 130 ; 2.3 110 112 113 14 115 116 116 117 119 120 120 122 123 124 125 125 126 126 127 128 Inhaltsverzeichnis Drei Kontrollstrukturen genügen Die Sequentielle Komposition Die Alternativanweisung Die WHILE-Schleife 131 131 133 134 2.4 Formale Beschreibung von Programmiersprachen Lexikalische Regeln Syntaktische Regeln Semantische Regeln 136 136 137 139 2.5 Erweiterung der Kernsprache Bedingte Anweisung Fallunterscheidung Schleifen Allgemeinere Schleifenkonstrukte Die FOR-Schleife in Pascal Die for-Schleife in Java 140 140 142 144 145 146 147 2.6 Unterprogramme Prozedurale Abstraktion Funktionale Abstraktion Funktionale und prozedurale Abstraktion in C und Java Top-Down-Entwurf Kommunikation zwischen Hauptund Unterprogramm Variablenparameter Prozeduren als Funktionsersatz Schachtelung von Unterprogrammen Blockstrukturierung in C und Java 148 149 150 151 151 155 156 157 158 159 2.7 Rekursive Funktionen und Prozeduren 160 Rekursive Prozeduren 162 Die Türme von Hanoi 162 Spielstrategien als rekursive Prädikate - Backtracking 164 Wechselseitige Rekursion 165 Induktion - Rekursion 166 Allgemeine Rekursion 167 Endrekursion 168 Lineare Rekursion 169 Eine Programmtransformation 171 2.8 Konstruktion neuer Datentypen Mengenkonstruktionen Typdefinition Aufzählungstypen Teilbereichstypen Arraytypen Anwendung : Strings 172 173 174 174 174 175 176 2.9 Aggregation Disjunkte Vereinigungen Mengentypen Dateien und Ströme Dateiprotokoll Induktiv definierte Typen Pointer-Datentypen Dynamische Datenstrukturen mittels Pointern Induktive Definitionen in Java 176 177 179 179 180 182 183 184 186 Verifikation Vermeidung von Fehlern Zwischenbehauptungen Partielle Korrektheit Zerlegung durch Zwischenbehauptungen Zuweisungsregel Rückwärtsbeweis If-Then-Else-Regel Abschwächungsregel und einarmige Alternative Invarianten und While-Regel Starke und schwache Invarianten Programm-Verifizierer Repeat-Schleife For-Schleife Terminierung Beweis eines Programmschemas 186 187 188 189 190 191 192 194 195 196 198 200 201 202 203 204 2.10 Programmieren im Großen Modulares Programmieren Obj ektörientiertes Programmieren (OOP) Datenkapselung Vererbung Rückschau Kapitel 3 204 205 207 208 209 210 Einführung in die Programmiersprache Java 213 Geschichte von Java 214 3.1 Die lexikalischen Elemente von Java Kommentare Bezeichner Schlüsselwörter Literale Ganzzahlige Literale Gleitpunkt-Literale Literale für Zeichen und Zeichenketten 214 215 216 216 217 217 217 217 3.2 Datentypen und Methoden Variablen 218 219 10 Inhaltsverzeichnis Default-Werte Referenz-Datentypen Arrays Methoden Klassen Objekte und Referenzen Attribute Overloading Konstruktoren 219 219 219 221 222 223 223 225 226 3.3 Java-Programme bestehen aus Klassen Übersetzungseinheiten Programme Packages Standard-Packages 227 228 228 229 231 3.4 Ausdrücke und Anweisungen Arithmetische Operationen Vergleichsoperationen Boolesche Operationen Bitweise Operationen Zuweisungsausdrücke Anweisungsausdrücke Sonstige Operationen Operator Präzedenz Einfache Anweisungen Blöcke return-Anweisung Alternativ-Anweisungen switch-Anweisung Schleifen for-Anweisung break- und continue-Anweisungen 232 232 232 233 233 234 235 235 236 237 237 238 238 239 240 240 241 3.5 Klassen und Objekte Vererbung LateBinding Finale Komponenten Konstanten Zugriffsrechte von Feldern und Methoden Attribute von Klassen Abstrakte Klassen Rekursiv definierte Klassen 242 243 246 247 247 248 248 248 250 3.6 Ausnahmebehandlung 251 3.7 Schnittstellen (Interfaces) und Threads Schnittstellen Threads 255 255 256 11 3.8 Graphische Benutzeroberflächen mit Java (AWT) Ein erstes Fenster Ereignisse Beispiel für eine Ereignisbehandlung Bedienknöpfe Graphikausgabe in Fenstern Maus-Ereignisse Paint Weitere Bedienelemente von Programmen und Fenstern 259 260 261 262 264 265 266 268 Algorithmen und Datenstrukturen 271 4.1 Suchalgorithmen Lineare Suche Binäre Suche Lineare Suche vs. binäre Suche 271 272 273 275 4.2 Komplexität von Algorithmen 275 4.3 Sortierverfahren Konventionen BubbleSort SelectionSort InsertionSort Laufzeitvergleiche der einfachen Sortieralgorithmen ShellSort CombSort HeapSort QuickSort MergeSort DistributionSort Laufzeit der schnellen Sortieralgorithmen Externes Sortieren 4.4 Abstrakte Datenstrukturen Datenstruktur = Menge + Operationen Die axiomatische Methode 301 302 302 4.5 Stacks Stackoperationen Implementierung durch ein Array Implementierung durch eine Liste Auswertung von Postfix-Ausdrücken Entrekursivierung 303 304 305 306 307 308 4.6 Queues Implementierung durch ein „zirkuläres" Array Implementierung durch eine zirkuläre Liste 308 309 310 Kapitel 4 270 277 277 280 283 284 ..286 288 289 290 290 293 295 299 301 12 Inhaltsverzeichnis 4.7 Listen Einfach verkettete Listen Doppelt verkettete Listen Geordnete Listen und Skip-Listen Adaptive Listen 310 310 313 313 314 4.8 Bäume Binärbäume Baumtraversierungen Baumtiefe Binäre Suchbäume Balancierte Bäume AVL-Bäume , 2-3-4-Bäume A B-Bäume Vollständige Bäume Heaps Heapsort Priority-Queues Bäume mit variabler Anzahl von Teilbäumen 315 315 317 320 320 324 326 327 329 330 331 334 334 335 4.9 Graphen Definition und Beispiele Wege und Zusammenhang Repräsentationen von Graphen Traversierungen Tiefensuche Breitensuche Transitive Hülle Kürzeste Wege Das Travelling-Salesman-Problem (TSP) 336 336 337 338 341 341 343 344 345 347 4.10 Zeichenketten Array-Implementierung Nullterminierte Strings Java-Strings Grundoperationen Suchen in Zeichenketten Der Boyer-Moore-Algorithmus Kapitel 5 Rechnerarchitektur 5.1 Vom Transistor zum Chip , Chips Chipherstellung Kleinste Chip-Strukturen Chipfläche und Anzahl der Transistoren Weitere Chip-Parameter 351 351 351 352 352 353 354 357 357 358 359 360 361 361 13 Speicherbausteine Logikbausteine Schaltungsentwurf 362 362 363 5.2 Boolesche Algebra Boolesche Schaltungen Serien-parallele Schaltglieder Serien-parallel-Terme Schaltfunktionen Gleichungen Boolesche Schaltungen Dualität Realisierung von Schaltfunktionen Konjunktive Normalform Aussagenlogik Mengenalgebra Digitale Logik Gatter mit mehreren Ausgängen Logik-Gitter Programmierbare Gitterbausteine Rückgekoppelte Schaltungen Anwendungen von Flip-Flops Technische Schwierigkeiten Die Konstruktion der Hardwarekomponenten Schalter, Codierer, Decodierer Speicherzelle Die Arithmetisch-Logische Einheit 364 364 365 366 367 368 371 372 372 374 375 376 376 382 383 386 386 388 390 391 391 391 395 5.3 Von den Schaltgliedern zur CPU Busse ..' Der Zugang zum Hauptspeicher Der Mikrobefehlsspeicher - das ROM Berechnete Sprünge Der Adreßrechner Beispiel eines Mikroprogramms Maschinenbefehle Der Maschinenspracheinterpretierer Argumente 399 400 403 405 406 408 409 410 411 413 5.4 Assemblerprogrammierung Maschinensprache und Assembler Allzweckregister und Spezialregister Flag-Register Arithmetische Flags Größenvergleiche Logische Operationen Sprünge Erstellen und Testen von Assemblerprogrammen 413 414 417 417 418 420 421 422 424 14 Inhaltsverzeichnis Multiplikation und Division Shift-Operationen Speicherorganisation unter DOS Vorteile eines Assemblers Indizierte Adressierung Das Stacksegment Segmentmodelle DOS und BIOS INT 21h LOOP-Befehle Stack-Befehle Unterprogramme Nahe und ferne Prozeduren Seiteneffekte Parameterübergabe Makros String-Operationen 425 426 427 429 430 430 430 431 432 433 434 434 436 436 437 438 439 5.5 RISC-Architekturen CISC Von CISC zu RISC RISC-Prozessoren Pipelining Superskalare Architekturen Cache-Speicher Leistungsvergleich Konkrete RISC-Architekturen 441 441 442 443 444 445 446 446 447 5.6 Die Architektur der Intel-PC-Mikroprozessorfamilie Register Adressierung Die Segmentierungseinheit Adreßübersetzung Datenstrukturen und Befehle des Pentium MMX-Befehle 3-DNow Betriebsarten des Pentium Ausblick 449 451 452 452 454 454 455 455 455 456 Betriebssysteme 457 Kapitel 6 6.1 Betriebsarten Endbenutzer-Betriebssysteme Dienstleistungs-Betriebssysteme 458 459 460 6.2 Verwaltung der Ressourcen Dateien Prozesse 461 461 463 15 Bestandteile eines Prozesses Threads Prozeßverwaltung Speicherverwaltung 6.3 Das Betriebssystem UNIX Linux Das UNIX-Dateisystem Dateinamen Dateiattribute Pfade Special files Externe Dateisysteme UNIX-Shells UNIX-Kommandos Optionen Softlinks Standard-Input/Standard-Output Dateibearbeitung Reguläre Ausdrücke UNIX-Prozesse Pipes Wozupipes? Prozeßwechsel Prozeß-Steuerung Multitasking UNIX-Shell-Programmierung DieC-Shell Datei-Muster Kommando-Verknüpfungen Variablen Shell-Scripts Ausführung von Shell-Scripts UNIX-Kommandos/Shell-Kommandos UNIX als Mehrbenutzersystem Electronic Mail Verbindung zu nahen Rechnern Weltweiter Rechnerzugang UNIX-Tools Editoren C und C++ Scanner und Parser Projektbearbeitung 6.4 X-WINDOWS Der Window-Manager Der Terminal-Emulator 464 465 465 467 471 471 472 473 474 474 475 476 476 477 478 479 479 480 482 483 483 484 486 486 488 489 490 490 491 :...491 493 493 494 495 496 497 497 498 499 501 501 504 505 506 507 16 Inhaltsverzeichnis Graphische Oberflächen 507 6.5 MS-DOS Das MS-DOS-Dateisystem DOS-Kommandos Batch-Dateien Hauptspeicherverwaltung in MS-DOS Speicherbelegung Speichererweiterungen 508 509 510 511 511 512 512 6.6 Windows Speichersegmentierung Dynamic Link Libraries Object Linking andEmbedding Windows NT und Windows2000 Windows 95 und Windows 98 513 514 514 514 515 517 6.7 Alternative PC-Betriebssysteme 518 Kapitel 7 Rechner netze 521 7.1 Rechner-Verbindungen Ausdehnung von Netzen Physikalische Verbindung Protokolle Codierungen Das OSI-Modell 521 522 522 524 524 525 7.2 Datenübertragung mit Telephonleitungen ISDN T-ATM T-ADSL 528 529 531 531 7.3 Netztopologien Sternnetze Busnetze Ringnetze Netze von Netzen 532 532 533 534 535 7.4 Zugriffsverfahren Wettkampfverfahren: CSMA-CD Berechtigungsmarken-Verfahren (Token-Ringe) Vergleich der Zugriffsverfahren 536 536 538 539 7.5 Netztechnologien Ethernet FDDI ATM 540 540 540 541 7.6 Das Internet TCP/IP 542 543 17 Adressierung Die Dienste im Internet E-Mail News FTP und Archie Telnet Gopher Das World Wide Web HTML Die Struktur eines HTML-Dokumentes Querverweise: Links Tabellen und Frames Formulare Style Sheets Weitere Möglichkeiten von HTML JavaScript -Applets Die Struktur eines Applets Der Lebenszyklus eines Applet Interaktionen XML Kapitel 8 Compilerbau 543 545 545 546 547 548 548 549 551 553 554 555 556 557 557 558 560 561 562 562 564 569 8.1 Programmiersprachen Entwicklungsgeschichte SpezialSprachen 570 571 575 8.2 Programmierung eines Compilers Phasen des Compilers Die Programmierung des Scanners 575 576 579 8.3 Syntaxanalyse Grammatiken Erweiterte Backus-Naur Form (EBNF) Der Aufruf des Parsers Fehlerbehandlung Die Symboltabelle Datenstrukturen Ausdrucksbäume 581 582 586 588 588 589 590 590 8.4 Codegenerierung (Synthese) 592 18 Inhaltsverzeichnis Kapitel 9 Kapitel 10 Datenbanksysteme 595 9.1 Datenbanken und Datenbanksysteme 595 9.2 Datenmodelle Entity/Relationship-Modell Das Relationale Datenbankmodell Relationen Die relationale Algebra Erweiterungen des relationalen Datenmodells Die Abbildung eines E/R-Datenmodells in ein relationales Modell 597 597 599 600 601 602 9.3 Die Anfragesprache SQL Datendefinition Einfache Anfragen Gruppierung und Aggregate Verknüpfung verschiedener Relationen Einfügen, Ändern und Löschen von Datensätzen 603 603 605 606 606 607 9.4 Anwendungsprogrammierung in Java Das SQL-Paket in Java Aufbau einer Verbindung Anfragen Mehrbenutzerbetrieb 608 608 609 609 610 9.5 Zusammenfassung 611 Graphikprogrammierung 613 602 10.1 Hardware Auflösungen Farben 613 614 615 10.2 Graphikroutinen für Rastergraphik 616 Bresenham-Algorithmus 617 10.3 Einfache Programmierbeispiele 618 10.4 Mandelbrot- und Julia-Mengen 620 10.5 Turtle-Graphik und L- Systeme L-Systeme Ausblick 10.6 3-D-Graphikprogrammierung Sichtbarkeit Beleuchtungsmodelle Ray-Tracing Die Grundidee des Ray-Tracing Die Radiosity Methode Ausblick 623 626 630 630 631 632 634 635 635 636 19 Kapitel 11 Software-Entwicklung 11.1 Methoden und Werkzeuge für Projekte 639 641 11.2 Vorgehensmodelle 643 Code and fix-Verfahren 643 Wasserfall-Modelle 643 Transformations-Modelle 646 Nichtsequentielle Vorgehensmodelle 647 Prototyping und Spiralmodelle 648 Modelle zur inkrementellen Systementwicklung 649 Evolutionäre Entwicklungsmodelle 650 Modelle zur objektorientierten Systementwicklung ....650 11.3 Traditionelle Methoden zur Programmentwicklung 652 Strukturierte Programmierung 652 Schrittweise Verfeinerung, Top-down-Entwurf, HIPO 653 Jackson-Methode 654 11.4 Heute verbreitete Software-Entwicklungsmethoden Geheimnisprinzip, Daten-Abstraktion und Modularisierung Strukturierte Analyse- und Entwurfstechniken Entity/Relationship-Modellierung Systematische Test-, Reviewund Inspektionsverfahren 655 655 656 657 659 11.5 Objektorientierte Software-Entwicklungsmethoden 660 Prinzipien der Objektorientierung 660 Objektorientierter Entwurf 661 Objektorientierte Analyse 662 Standardisierung der objektorientierten Modellierung 662 Software-Architekturen, Muster, Programmgerüste ....665 11.6 Projekt-Management Projekt-Initialisierung und -Planung Projektsteuerung und -koordination Projektabschluß und -bericht 666 666 667 667 11.7 Software-Qualitätssicherung Qualitätsnormen und Zertifizierung 668 669 20 Inhaltsverzeichnis 11.8 Werkzeuge und Programmierumgebungen Klassifizierung von Werkzeugen Werkzeuge zur Analyse und Modellierung Werkzeuge für Spezifikation und Entwurf Programmier-Werkzeuge Verifikatoren Test- und Fehlerbehebungs-Werkzeuge Weitere Werkzeuge zur Qualitätssicherung Tätigkeitsübergreif ende Werkzeuge Entwicklungs-Umgebungen Literatur 671 671 672 673 674 675 676 677 677 678 681 Einführende Bücher 681 Lehrbücher der Informatik 681 Bücher zum Thema Programmieren in Pascal 682 Bücher zum Thema Programmieren in Java 683 Bücher zum Thema Algorithmen und Datenstrukturen 683 Bücher zum Thema Rechnerarchitektur 684 Bücher zum Thema Betriebssysteme 685 Bücher zum Thema Rechnernetze und Internet 685 Bücher zum Thema Compilerbau 686 Bücher zum Thema Datenbanken 687 Bücher zum Thema Graphikprogrammierung 687 Bücher zum Thema Software-Entwicklung 688 Bücher zum mathematischen Hintergrund 689 Stichwortverzeichnis 691