Einführung in die Informatik für andere Fachrichtungen Johann Schlichter Institut für Informatik TU München, Munich, Germany April 2013 Vorlesungsunterlagen (Student Script1 ) 1 Script generated by Targeteam; Not for general Distribution Inhaltsverzeichnis 1 2 3 Übersicht 2 1.1 Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Zielsetzung der Vorlesung . . . . . . . . . . . . . . . . . . . . . 3 1.3 Behandelte Themen . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4.1 Begleitende Literatur . . . . . . . . . . . . . . . . . . . . 4 1.4.2 Weiterführende Literatur . . . . . . . . . . . . . . . . . . 4 Einführung 5 2.1 Was ist Informatik? . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Computer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3 Darstellung von Information . . . . . . . . . . . . . . . . . . . . 9 2.3.1 Information und Nachrichten . . . . . . . . . . . . . . . . 9 2.3.2 Bits und Bytes . . . . . . . . . . . . . . . . . . . . . . . 12 Datenbanken und Informationssysteme 14 3.1 Dateisysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.2 Datenbanksysteme . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2.2 Beispiele aus der Praxis . . . . . . . . . . . . . . . . . . 17 3.2.3 Anforderungen an ein DBS . . . . . . . . . . . . . . . . . 17 Datenbankentwurf . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.3.1 Miniwelt . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.3.2 Wie entwirft man eine Datenbank? . . . . . . . . . . . . . 19 3.3.3 Datenmodell . . . . . . . . . . . . . . . . . . . . . . . . 19 3.3 i Schlichter, TU München 3.3.4 3.4 3.5 4 ER-Modell . . . . . . . . . . . . . . . . . . . . . . . . . 20 Relationale Datenbanksysteme . . . . . . . . . . . . . . . . . . . 24 3.4.1 Relationales Modell . . . . . . . . . . . . . . . . . . . . 24 3.4.2 Tabellendarstellung . . . . . . . . . . . . . . . . . . . . . 24 3.4.3 Normalisierung . . . . . . . . . . . . . . . . . . . . . . . 26 3.4.4 Umsetzung des ER-Modells . . . . . . . . . . . . . . . . 30 3.4.5 Sichten . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.4.6 Abfragesprache SQL . . . . . . . . . . . . . . . . . . . . 33 3.4.7 Beispielsysteme . . . . . . . . . . . . . . . . . . . . . . 35 WWW - Informationssystem . . . . . . . . . . . . . . . . . . . . 36 3.5.1 Hypertext . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.5.2 Einführung in HTML . . . . . . . . . . . . . . . . . . . . 37 3.5.3 Cascading Style-Sheets (CSS) . . . . . . . . . . . . . . . 41 Rechnerarchitektur 42 4.1 Aufbau eines Rechners . . . . . . . . . . . . . . . . . . . . . . . 42 4.1.1 Struktureller Aufbau eines Rechners . . . . . . . . . . . . 43 Maschinenbefehle . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.2.1 Befehlsvorrat . . . . . . . . . . . . . . . . . . . . . . . . 46 4.2.2 Beispielprogramm in Maschinensprache (Assembler) . . . 46 Befehlszyklus . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.3.1 Sequentielle Bearbeitung . . . . . . . . . . . . . . . . . . 47 4.3.2 Fließband Bearbeitung (Pipelining) . . . . . . . . . . . . 48 Interndarstellung von Information . . . . . . . . . . . . . . . . . 49 4.4.1 Codierung . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.4.2 Codierung ganzer Zahlen . . . . . . . . . . . . . . . . . . 50 4.4.3 Codierung von Text . . . . . . . . . . . . . . . . . . . . . 54 4.4.4 Codierung von Bildern und Tönen . . . . . . . . . . . . . 55 4.4.5 Komprimierung . . . . . . . . . . . . . . . . . . . . . . . 57 4.2 4.3 4.4 5 INHALTSVERZEICHNIS Systemsoftware 58 5.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 5.1.1 58 Aufgaben des Betriebssystems . . . . . . . . . . . . . . . ii Schlichter, TU München 6 INHALTSVERZEICHNIS 5.1.2 Hardware-Software Struktur . . . . . . . . . . . . . . . . 60 5.1.3 Betriebssysteme versus Benutzeroberflächen . . . . . . . 60 5.1.4 Wesentliche Komponenten eines Betriebssystems . . . . . 61 5.1.5 Aktuelle Betriebssysteme . . . . . . . . . . . . . . . . . . 61 5.2 Dateiverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.3 Prozessorverwaltung / Prozessorzuteilung . . . . . . . . . . . . . 65 5.3.1 Prozesse . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 5.3.2 Prozessorzuteilung . . . . . . . . . . . . . . . . . . . . . 67 5.3.3 Prozess-Unterbrechungen (interrupt) . . . . . . . . . . . . 67 Grundlagen der Programmierung 69 6.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 6.1.1 Sicht des Programmierers . . . . . . . . . . . . . . . . . 70 Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 6.2.1 Spezifikation als Ausgangspunkt für ein Programm . . . . 71 6.2.2 Begriff des Algorithmus . . . . . . . . . . . . . . . . . . 71 6.2.3 Komponenten eines Algorithmus . . . . . . . . . . . . . . 74 6.2.4 Darstellung von Algorithmen . . . . . . . . . . . . . . . 76 6.2.5 Algorithmus und Programm . . . . . . . . . . . . . . . . 77 6.3 Datentypen und Ausdrücke . . . . . . . . . . . . . . . . . . . . . 79 6.4 Programmkonstrukte . . . . . . . . . . . . . . . . . . . . . . . . 81 6.4.1 Zuweisungen . . . . . . . . . . . . . . . . . . . . . . . . 81 6.4.2 Alternativanweisungen . . . . . . . . . . . . . . . . . . . 81 6.4.3 Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . 82 6.5 Objektorientierte Programmierung . . . . . . . . . . . . . . . . . 83 6.6 Modularisierung von Programmen . . . . . . . . . . . . . . . . . 86 6.6.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . 87 6.6.2 Beispiel Zerlegung . . . . . . . . . . . . . . . . . . . . . 88 6.6.3 Strukturierung von Algorithmen . . . . . . . . . . . . . . 90 6.6.4 Module . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 6.6.5 Prozedurales / Objektorientieres Programmieren . . . . . 93 Rekursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 6.2 6.7 iii Schlichter, TU München 7 Datenstrukturen und Algorithmen 7.1 7.2 7.3 7.4 8 9 INHALTSVERZEICHNIS 100 Datenstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 7.1.1 Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 7.1.2 Queue - Warteschlange . . . . . . . . . . . . . . . . . . . 102 7.1.3 Graphen . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Suchverfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 7.2.1 Mengen von Datensätzen . . . . . . . . . . . . . . . . . . 104 7.2.2 Lineare Suche . . . . . . . . . . . . . . . . . . . . . . . . 104 7.2.3 Binäre Suche . . . . . . . . . . . . . . . . . . . . . . . . 104 Sortierverfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 7.3.1 Sortierverfahren - Beispiel Bubble Sort . . . . . . . . . . 105 7.3.2 Sortierverfahren - Beispiel Insert-Sort . . . . . . . . . . . 106 7.3.3 Rekursives Sortierverfahren - Beispiel Quicksort . . . . . 106 7.3.4 Sortierverfahren Animation . . . . . . . . . . . . . . . . 108 Komplexität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 7.4.1 Komplexität von Algorithmen . . . . . . . . . . . . . . . 108 7.4.2 Komplexitätsklassen . . . . . . . . . . . . . . . . . . . . 109 Software-Entwicklung 111 8.1 Programmiersprachen . . . . . . . . . . . . . . . . . . . . . . . . 111 8.2 Software-Engineering . . . . . . . . . . . . . . . . . . . . . . . . 114 8.2.1 Software/Engineering - Definition des Ideals . . . . . . . 114 8.2.2 Komplexität von Software-Projekten . . . . . . . . . . . . 115 8.2.3 Vorgehensmodelle . . . . . . . . . . . . . . . . . . . . . 116 8.2.4 Strukturierte Programmierung . . . . . . . . . . . . . . . 118 8.2.5 Modellierung . . . . . . . . . . . . . . . . . . . . . . . . 118 8.2.6 Modelle für Analyse und Entwurf . . . . . . . . . . . . . 120 Grundlagen von Rechnernetzen 126 9.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 9.2 Übertragungsmedien . . . . . . . . . . . . . . . . . . . . . . . . 130 9.2.1 9.3 Kriterien zur Kategorisierung . . . . . . . . . . . . . . . 130 Lokale Netze (LAN) . . . . . . . . . . . . . . . . . . . . . . . . 131 iv Schlichter, TU München 9.4 9.3.1 LAN - Netztopologien . . . . . . . . . . . . . . . . . . . 131 9.3.2 Zugriffsverfahren des Ethernet - CSMA/CD . . . . . . . . 132 9.3.3 Wireless LAN . . . . . . . . . . . . . . . . . . . . . . . 134 WAN - Wide Area Network . . . . . . . . . . . . . . . . . . . . . 136 9.4.1 9.5 INHALTSVERZEICHNIS Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Referenzmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 9.5.1 TCP/IP Referenzmodell . . . . . . . . . . . . . . . . . . 140 9.5.2 IP-Adresskonzept . . . . . . . . . . . . . . . . . . . . . . 142 9.5.3 Sicherung gegen Fehler . . . . . . . . . . . . . . . . . . . 143 10 Anwendungen von Rechnernetzen 145 10.1 Verteilte Anwendungen . . . . . . . . . . . . . . . . . . . . . . . 145 10.1.1 Entwicklung hin zu verteilten Anwendungen . . . . . . . 145 10.1.2 Verteilte Systeme . . . . . . . . . . . . . . . . . . . . . . 146 10.1.3 Client-Server-Modell . . . . . . . . . . . . . . . . . . . . 146 10.1.4 Beispiel-Services . . . . . . . . . . . . . . . . . . . . . . 148 10.1.5 World Wide Web . . . . . . . . . . . . . . . . . . . . . . 149 10.2 Sicherheit in verteilten Systemen . . . . . . . . . . . . . . . . . . 150 10.2.1 Sicherheitsanforderungen . . . . . . . . . . . . . . . . . 150 10.2.2 Arten von Schadsoftware . . . . . . . . . . . . . . . . . . 151 10.2.3 Verschlüsselung . . . . . . . . . . . . . . . . . . . . . . . 151 10.2.4 Identitätsprüfung . . . . . . . . . . . . . . . . . . . . . . 154 11 Zusammenfassung 156 v Schlichter, TU München INHALTSVERZEICHNIS • Prof. J. Schlichter – Lehrstuhl für Angewandte Informatik / Kooperative Systeme Fakultät für Informatik, TU München E-Mail: [email protected] (URL: mailto:[email protected]) Tel.: 089-289 18654 URL: http://www11.in.tum.de/ 1 Kapitel 1 Übersicht Ziel dieser Vorlesung ist eine inhaltlich abgestimmte Vorstellung der Grundlagen der Informatik sowie deren mögliche Nutzung. Die Vorlesung richtet sich an Nicht-Informatik-Studierende. 1.1 Vorwort Informatik soll praktisch sein • Wie schreibe ich einen Text in Microsoft Word ? • Wie führe ich Berechnungen in Microsoft Excel durch ? • Wie gestalte ich eine Web Seite ? • Wie gestalte ich eine Präsentation ? • Wie verwalte ich meine Daten ? • und vieles andere ..... Wissen über Bedienung ist meist produktabhängig, und hat damit nur beschränkte Lebensdauer. 2 Schlichter, TU München 1.2 1.2. ZIELSETZUNG DER VORLESUNG Zielsetzung der Vorlesung Ziel der Vorlesung ist es nicht: dass Sie Programmieren wie eine Informatiker lernen; dass Sie einen Computer selbst zusammenbauen können; dass sie einen Einführungskurs (Tutorial) in Werkzeuge wie Microsoft Word oder Excel erhalten. Ziel der Vorlesung ist vielmehr, • dass Sie eine Übersicht über die wichtigsten Konzepte der Informatik, auch Programmierkonzepte, bekommen; • dass Sie Informatik-Konzepte kennenlernen, die Sie möglicherweise auf andere Bereiche übertragen können. • dass Sie eine Einführung in wichtige Informatik-Themenbereiche wie Datenbanken, Informationssysteme und Rechnernetze erhalten. 1.3 Behandelte Themen • Datenbanken und Informationssysteme • Grundlagen der Programmierung und Software-Entwicklungstechnik (Software Engineering) • Datenstrukturen, Algorithmen und Codierung von Information • Rechnerarchitektur • Betriebssysteme • Rechnernetze und Verteilte Systeme mit Client-Server-Architekturen 1.4 Literatur Als Basis für die Vorlesung wurden die nachfolgenden Bücher verwendet. 3 Schlichter, TU München 1.4.1 1.4. LITERATUR Begleitende Literatur Begleitend zur Vorlesung können (alternativ) verwendet werden: 1. H.-P. Gumm, M. Sommer: "Einführung in die Informatik", 9. Auflage, Oldenbourg Verlag, 2011 2. Helmut Herold, Bruno Lurz, Jürgen Wohlrab, "Grundlagen der Informatik", Pearson Studium, 2012 (2. Auflage) 1.4.2 Weiterführende Literatur Für Fortgeschrittene zur Vertiefung: • Robert Sedgewick, Kevin Wayne, "Einführung in die Programmierung mit Java", Pearson Studium, 2011 • Andrew S. Tanenbaum, "Moderne Betriebssysteme", Pearson Studium, 2009 • Andrew S. Tanenbaum, "Computernetzwerke", Pearson Studium, 2003 • Andrew S. Tanenbaum, "Computerarchitektur", Pearson Studium, 2005 • Alfons Kemper, Andre Eickler, "Datenbanksysteme - Eine Einführung", Oldenbourg Verlag, 2011 4 Kapitel 2 Einführung Hier werden einige allgemeine Themen aus der Informatik als Grundlage behandelt. • Fragestellungen dieses Kapitels – Übersicht über die verschiedenen Aspekte der Informatik ∗ Mit welchen Bereichen beschäftigt sich Informatik? ∗ Was gehört alles zu einem Computersystem? – Darstellung von Information ∗ Was ist ein Byte? ∗ Information und Nachricht 2.1 Was ist Informatik? Der Begriff Informatik leitet sich vom Begriff "Information" und "Automatik" ab. Bei Informatik geht es grundsätzlich um die Erfassung, Verbreitung, Be-/ Verarbeitung und Speicherung von Information. Dabei werden hauptsächlich technische Lösungen betrachtet, die Teilaufgaben des Gesamtprozesses automatisiert übernehmen oder unterstützen können. • Informatik ist die Wissenschaft, Technik und Anwendung der maschinellen Verarbeitung, Speicherung und Übertragung von Information. • Die Beschäftigung mit der Technik zur Verarbeitung von Informationen (Rechnertechnik, Technik des Programmierens) ist ein wichtiger Teil der 5 Schlichter, TU München 2.1. WAS IST INFORMATIK? Informatik. Zusätzlich spielt aber auch die Beschäftigung mit Information an sich eine Rolle (wo kommen sie her, wie kann man sie darstellen, wie können Menschen motiviert werden sie zu liefern, wie können Menschen damit umgehen). Hier gibt es enge Verbindungen zur Betriebswirtschaftslehre, Psychologie und Soziologie. • Der Begriff ist in den 60er Jahren entstanden. Im Englischen entstand der Begriff "Computer Science". Von der Ausrichtung her konzentriert sich die "Computer Science" mehr auf die Technik, während die "Informatik" zusätzlich grundlegende Fragen im Zusammenhang mit Information und Informationsverarbeitung mit einschließt. • Was arbeitet ein Informatiker? Datenmodell/Ablaufmodell Anforderungen hat Kunde Kredit Verfügt über reales oder geplantes System betreut Konto Angestellter betreut Entwurfsspezifikation Feedback Test externer Nutzer Testdaten Implementierung Der Informatiker beschäftigt sich mit der Konstruktion von informationsverarbeitenden Systemen für allgemeine und spezielle Anwendungen. Dies umfasst die Spezifikation der Anwendungsanforderungen, den Entwurf und die Analyse von Verfahren zur Lösung der gestellten Aufgaben, die Entwicklung von Datenstrukturen und Algorithmen, deren Implementierung in Software und Hardware und den Nachweis dafür, dass das so konstruierte System die gestellten Anforderungen erfüllt. Die Fähigkeit, sich auf wechselnde Aufgabengebiete einstel6 Schlichter, TU München 2.1. WAS IST INFORMATIK? len zu können, ist dabei für Informatiker unerlässlich. • Das Gebiet der Informatik ist sehr breit und wird deshalb in mehrere Teilgebiete untergliedert: Angewandte Informatik Technische Informatik Praktische Informatik Theoretische Informatik – Technische Informatik ∗ Rechnerarchitektur Befasst sich mit der technischen Konstruktion von Computern, also mit physikalischen Komponenten wie Prozessoren, Speicherchips, mit der Konstruktion von Peripheriegeräten und Geräten zur Realisierung von Netzkomponenten, z.B. Router und Modems. ∗ Systemsoftware Hier geht es um die Konzeption und Implementierung von Systemsoftware, d.h. Hardware-naher und Anwendungs-unspezifischer Software; also Software zur Steuerung der technischen Hardware. Beispiele für Systemsoftware sind Betriebssysteme, Netzsoftware, Software zur Steuerung von Verteilten Systemen (Client/Server), Software zur Steuerung der Benutzerschnittstelle. – Praktische Informatik Befasst sich mit der Programmierung ganz allgemein. Beispiele für Themen sind Programmiersprachen, Übersetzerbau, das Vorgehen bei der Softwareentwicklung (Software Engineering). Außerdem beschäftigt sich die Praktische Informatik noch mit Standard-Anwendungsprogrammen oder Middleware wie Datenbank- und Wissensbanksystemen. – Theoretische Informatik Befasst sich mit den theoretischen Grundlagen des Gebietes. Dazu zählen formale Sprachen, Automatentheorie, Semantik und Logik, Komplexitätsabschätzungen von Algorithmen. – Angewandte Informatik Befasst sich mit dem Einsatz von Rechnern in verschiedenen Anwendungsbereichen; die Lösungen können universell einsetzbar sein (z.B. Textverarbei7 Schlichter, TU München 2.2. COMPUTER tungssysteme oder Tabellenkalkulation) oder gezielt für einen Anwendungsbereich entwickelt werden (z.B. Flugbuchungssystem). ∗ Für manche Anwendungsbereiche haben sich spezielle Ausprägungen der Informatik herausgebildet, sogenannte Informatik-Ableger, z.B. Wirtschaftsinformatik, Medizinische Informatik, Bioinformatik, Geoinformatik. ∗ Angewandte Informatik ist häufig interdisziplinär. Neben der Disziplin des Anwendungsbereichs sind meist beteiligt: Betriebswirtschaftslehre, Psychologie, Soziologie. ∗ Beispiele für Anwendungsbereichs-unabhängige Teilbereiche der Angewandten Informatik sind Rechnergestützte Gruppenarbeit (CSCW: Computer Supported Cooperative Work, Groupware) und CommunitySupport/Social Software (Flickr, Youtube, FaceBook). 2.2 Computer Eng mit dem Begriff Informatik verbunden ist der Begriff Computer (oder Rechner). • Computer sind technische Geräte, die umfangreiche Informationen mit hoher Zuverlässigkeit und großer Geschwindigkeit automatisch verarbeiten und sicher aufbewahren können. • Im Gegensatz zu Automaten (wie Kaffeemaschinen) kann die Vorschrift, nach der der Computer arbeiten soll, jeweils neu vorgegeben werden. Solche Vorschriften oder Handlungsanweisungen nennt man Algorithmen. Wenn Algorithmen in einem präzisen Formalismus beschrieben werden, dann bezeichnet man sie als Programme. • Struktur eines Rechner-/Computersystems Ein Rechnersystem umfasst sowohl den eigentlichen Rechner oder Computer (die Hardware) als auch Software. Schnittstelle zwischen Hard- und Software ist die Maschinensprache des im Computer eingesetzten Prozessors (CPU). Die Maschinensprache ist spezifisch für die jeweilige CPU. Ein Maschinenprogramm besteht aus einer Folge von Bits. 8 Schlichter, TU München 2.3. DARSTELLUNG VON INFORMATION Anwendungssoftware ist Software, die Aufgaben des Anwenders mit Hilfe eines Computersystems löst (unter Rückgriff auf Systemsoftware). Beispiele sind Textverarbeitungsprogramme, Tabellenkalkulation, Zeichenprogramme, Datenbanken. Systemsoftware (z.B. Betriebssystem) steuert und kontrolliert den Ablauf auf dem Computersystem und stellt dem Benutzer/Anwendungsprogrammen elementare Dienste zur Verfügung. 2.3 Darstellung von Information Dieser Abschnitt beschäftigt sich mit Information und ihrer Darstellung im Computer 2.3.1 Information und Nachrichten Information tritt in vielen Formen auf. Sie ist immer an eine Repräsentation (Darstellung) gebunden, entweder im Gehirn oder z.B. an Schallwellen oder die Zeichen eines geschriebenen Textes. Die Übertragung zwischen verschiedenen Repräsentationen nennt man auch Codierung. 9 Schlichter, TU München 2.3. DARSTELLUNG VON INFORMATION Information-/Datenverarbeitung Um Information in einem Rechner speichern und verarbeiten zu können, muss eine geeignete Darstellung verwendet werden. • Für den menschlichen Anwender bedeutsame Informationen werden im Rechner als (binäre) Daten repräsentiert. Man spricht deshalb auf der Ebene des Benutzers von Informationsverarbeitung, während auf der Rechnerebene von Datenverarbeitung gesprochen wird. • Daten werden im Rechner als eine Folge von Bits dargestellt. Darstellung von Information Dieselbe Information lässt sich auf verschiedene Arten darstellen, z.B. Sitzverteilung im Bundestag. Die Daten werden im Rechner trotz unterschiedlicher Darstellungen auf identische Weise gespeichert. 10 Schlichter, TU München 2.3. DARSTELLUNG VON INFORMATION Sitze Partei Sitze SPD 298 CDU 198 CSU 47 FDP 43 Grüne 47 PDS 36 350 300 Si tze 250 200 Sitze 150 SPD CDU 100 CSU FDP 50 Gr üne PDS 0 SPD CDU CSU FDP Grüne PDS Die Daten werden zwar auf 3 verschiedene Arten dargestellt, jedoch im Rechner existieren sie nur einmal. Nachrichten Im Kontext der Übertragung spricht man oft von Nachrichten anstelle von Daten. iMac iMac • Eine Nachricht ist eine Folge von Zeichen, oft aus sinnesphysiologischen oder technischen Gründen in Worte unterteilt. • Soll eine Nachricht von einem Sender zu einem Empfänger gelangen, muss 11 Schlichter, TU München 2.3. DARSTELLUNG VON INFORMATION zwischen beiden ein Übertragungskanal bestehen, z.B. eine Verbindung über ein Rechnernetz. • Um übertragbar oder speicherbar zu sein, muss eine Nachricht eine Repräsentation haben, i.a. als Bitfolge. 2.3.2 Bits und Bytes Bits (und Bytes) bilden die Grundlage der Darstellung, die für Information in Rechnern verwendet wird. Damit setzen sich alle Daten aus Bits zusammen. Bits Abkürzung für „Binary digits“. • Ein Bit ist die kleinstmögliche Informationsheit. Ein Bit lässt zwei mögliche Werte auf eine Frage zu, z.B. Ja oder Nein, Wahr oder Falsch, Links oder Rechts. • Oft werden in diesem Zusammenhang die beiden Werte 0 und 1 benutzt. Technisch werden die beiden Werte durch elektrische Ladungen (0 = ungeladen, 1 = geladen), elektrische Spannungen (0 = 0 Volt, 1 = 5 Volt) oder Magnetisierungen dargestellt. • Bitfolgen werden benötigt, falls zur Darstellung mehr als zwei Werte notwendig sind (z.B. die Beantwortung einer Frage enthält mehr als zwei mögliche Antworten, wie "Woher kommt der Wind?" - Süd, West, Ost oder Nord). Bitfolge 000 001 010 011 100 101 110 111 Himmelsrichtung Süd West Nord Ost Südost Nordwest Nordost Südwest • Jedes zusätzliche Bit in einer Folge verdoppelt die Anzahl der möglichen, unterschiedlichen Bitfolgen, d.h. es gibt genau 2N mögliche Bitfolgen der Länge N. 12 Schlichter, TU München 2.3. DARSTELLUNG VON INFORMATION Byte Ein Byte umfasst acht Bit, ist also eine Bitfolge der Länge 8. Diese Größe hat sich im Computerbereich als wichtigste Grundeinheit eingebürgert. • Häufige Abkürzungen für größere Einheiten: – 1 KB = 1024 Bytes = 210 Bytes (Kilo) – 1 MB = 1024 * 1024 Bytes = 220 Bytes (Mega) – 1 GB = 1024 * 1024 * 1024 Bytes = 230 Bytes (Giga) – 1 TB = 1024 * 1024 * 1024 * 1024 Bytes = 240 Bytes (Tera) – 1 PB = 1024 * 1024 * 1024 * 1024 * 1024 Bytes = 250 Bytes (Peta) – 1 EB = 1024 * 1024 * 1024 * 1024 * 1024 * 1024 Bytes = 260 Bytes (Exa) – Als nächste zwei Stufen sind „Zetta“ und „Yotta“ gebräuchlich, allerdings nicht offiziell standardisiert. Hinweis Die Definition über Zweierpotenzen ist eine spezielle im Bereich der Informationstechnik übliche Variante. In anderen Gebieten bezeichnen die Kürzel Zehnerpotenzen in Dreierschritten (103 = 1000 ist ungefähr 1024 = 210) 13 Kapitel 3 Datenbanken und Informationssysteme • Fragestellungen des Abschnitts: – Was unterscheidet Dateisysteme von Datenbanksystemen? – Wie kann die Struktur der Daten in einem Datenbanksystem dargestellt werden? – Was sind relationale Datenbanksysteme? – Was sind die grundlegenden Konstrukte von HTML? 3.1 Dateisysteme Dateisysteme bieten die Möglichkeit, eine Menge von Bytes unter einem symbolischen Namen (Dateinamen) anzusprechen. • Neben lokalen Dateisystemen gibt es immer mehr verteilte Dateisysteme, die es Benutzern von mehreren Rechnern aus (teilweise über Web-Browser) erlauben, auf verteilt gespeicherte Dateien zuzugreifen. Zusatzfunktionen: Volltextsuche, Notifikation bei Änderungen, Workflowunterstützung, Dokumentenmanagementsysteme. • Strukturierte Daten können abgelegt werden, indem sie Datensatz für Datensatz (sequentiell) in die Datei geschrieben werden. Zum Auslesen muss wieder Datensatz für Datensatz gelesen werden. • Probleme mit Dateisystemen 14 Schlichter, TU München 3.2. DATENBANKSYSTEME – Die Interpretation der Inhalte (und der Struktur) bleibt den einzelnen Anwendungen überlassen (Dateiformate). ∗ Das Modell für die Struktur ist fest in die benutzende Anwendung integriert, d.h. die Datenstrukturen und Programme sind voneinander abhängig. Eine Änderung der Datenstruktur zieht meist auch eine Änderung des Programms nach sich. ∗ Schwierigkeiten Dateien zwischen unterschiedlichen Anwendungen auszutauschen. Die Anwendungen müssen jeweils die interne Struktur kennen. ∗ Alle Anwendungen lösen wiederholt die gleichen Aufgaben: Speicherverwaltung, Änderungsdienst, Lesen und Speichern von Daten, Zugriffsschutz. – Neben diesem Hauptproblem mit Dateien ergeben sich besonders bei der Verwaltung großer Mengen strukturierter Daten weitere Probleme. ∗ Zugriff auf und Änderung von Daten ist nur ineffizient implementierbar (wegen Sequentialität der Daten). ∗ Ein gleichzeitiger Zugriff mehrere Benutzer (Prozesse) auf eine Datei ist nicht möglich. ∗ Für das Rücksetzen nach Systemabstürzen stehen nur die Sicherheitskopien der kompletten Datei zur Verfügung. ∗ Datenschutz nur auf die gesamte Datei anwendbar (nicht möglich ist beispielsweise, dass die Sekretärin nur Adressen in den Mitarbeiterdatensätzen sehen darf, nicht aber das Einkommen). 3.2 Datenbanksysteme Wir leben in einer Informationsgesellschaft. Zugriff, Verarbeitung, Ablage und Weitergabe von Information spielen in unserem Leben eine immer größere Rolle. Durch das rasante Anwachsen der angebotenen Informationsmenge wird es u.a. immer schwieriger, die gewünschte Information schnell und zielgerichtet zu beschaffen. Zur Lösung dieses Problems greift man deshalb verstärkt auf Datenbanksysteme zurück. 3.2.1 Allgemeines • Problem der Datenspeicherung und -organisation wird zentral (anwendungsübergreifend) gelöst. 15 Schlichter, TU München 3.2. DATENBANKSYSTEME • Datenbank = Menge von Daten, für die ein globales Modell bzgl. ihrer Struktur festgelegt ist (Datenbankschema oder Datenmodell). • Datenbanksystem (DBS) besteht aus einer Sammlung gespeicherter Daten (Datenbank) sowie der Software, welche Dienste zur Speicherung und zum Zugriff auf strukturierte Daten bereitstellt. – Operationen zum Eintragen, Löschen, Suchen und Verknüpfen von Daten. Wichtig ist die Verwaltung von Daten mit langer Lebensdauer sowie der effiziente Zugriff auf große Mengen von Daten (GBytes, TBytes). – Logischer Aufbau – Datenbankmanagementsystem Das Datenbankmanagementsystem (DBMS) ist die Gesamtheit aller Programme für den Umgang mit den Daten. Es ist verantwortlich für ∗ die sichere und einheitliche Verwaltung persistenter (langlebiger) Daten, ∗ den Datenaustausch zwischen Datenbank und Anwendungsprogrammen, ∗ die Verhinderung von unkontrollierten Zugriffen auf den Datenbestand und 16 Schlichter, TU München 3.2. DATENBANKSYSTEME ∗ die effiziente Zugriffsmöglichkeit auf die in der Regel sehr großen Datenbestände. 3.2.2 Beispiele aus der Praxis • Universitätsdatenbank Die Universitätsdatenbank ist die Sammlung aller für die Abwicklung der an einer Universität anfallenden Verwaltungsaufgaben benötigten Daten. Eine Universität gliedert sich i.a. in mehrere Fachbereiche, denen sowohl die Studenten als auch die Professoren und Mitarbeiter zugeordnet sind. Die Studenten belegen verschiedene Vorlesungen von Professoren und legen bei ihnen Prüfungen ab. Typische Anwendungen sind z.B.: Immatrikulation der Studienanfänger, Rückmeldung der Studenten, Ausfertigen von Studentenausweisen und Studienbescheinigungen, Stundenplanerstellung und Planung der Raumbelegung, Ausstellen von (Vor-)diplomzeugnissen, Exmatrikulation, Statistiken über Hörerzahlen, Raumauslastung, Prüfungsergebnisse, etc. • Datenbank einer Fluggesellschaft Eine Fluggesellschaft fliegt verschiedene Flughäfen an. Auf diesen Flugstrecken werden Flugzeuge bestimmter Typen mit dafür ausgebildetem Personal eingesetzt. Die Piloten haben Flugscheine jeweils nur für einige wenige Flugzeugtypen. Außer den Piloten gibt es noch anderes Bord- sowie Bodenpersonal. Die Flugbuchungen der Passagiere sowie das Anfertigen der Passagierlisten werden ebenfalls automatisiert durchgeführt. Typische Anwendungen sind z.B.: Flugbuchungen von Passagieren, Personaleinsatzplanung, Materialeinsatzplanung, Flugplanerstellung, Überwachung der Wartefristen, Gehaltsabrechnung. 3.2.3 Anforderungen an ein DBS Kontrolle über Daten Alle Daten können/müssen gemeinsam benutzt werden keine verstreuten privaten Daten Entwicklung neuer Anwendungen auf der existierenden Datenbank Querauswertungen aufgrund inhaltlicher Zusammenhänge Erweiterung und Anpassung der Datenbank • Eliminierung der Redundanz, damit Vermeidung von Inkonsistenzen 17 Schlichter, TU München 3.3. DATENBANKENTWURF • Datenbankadministrator hat zentrale Verantwortung für Daten Kontrolle der Datenintegrität • Automatisierte Zugriffskontrollen (Datenschutz). • Erhaltung der logischen Datenintegrität, d.h. Überprüfung der Richtigkeit von Daten. • Notwendigkeit des kontrollierten Mehrbenutzer-Betriebs, d.h. die parallel zugreifenden Benutzer sollen sich nicht gegenseitig in die Quere kommen bzw. gegenseitig behindern (vgl. Synchronisation von Prozessen). Leichte Handhabbarkeit der Daten Darunter fallen das einfache Datenmodell zur Beschreibung der logische Aspekte der Daten (deren Bedeutung und Zusammenhänge), eine leicht erlernbare Sprache zum Zugriff bzw. Speichern von Daten in der Datenbank (z.B. SQL). SQL ("Structured Query Language") ist eine standardisierte Sprache für Datenbanken. Datenunabhängigkeit Darunter versteht man, dass die Anwendungen von der Organisation und Speicherungen der Daten unabhängig sind. 3.3 Datenbankentwurf Daten repräsentieren Informationen über die reale Welt. Sie beschreiben damit entweder konkrete Objekte oder aber Beziehungen zwischen diesen Objekten. Die Daten in einem Datenbanksystem sind folglich das Spiegelbild einer Situation der realen Welt auf dem Rechner. Aufgrund der Vielgestaltigkeit und des Beziehungsgeflechtes ist die reale Welt aber ein komplexes System, das in vielen Fällen nicht vollständig auf einen Rechner abbildbar ist. 18 Schlichter, TU München 3.3.1 3.3. DATENBANKENTWURF Miniwelt In der Regel reicht es, nur einen Ausschnitt der realen Welt, die sogenannte Miniwelt, zu betrachten. Durch Vernachlässigung unnötiger Informationen wird diese Miniwelt abstrahiert (vereinfacht). 3.3.2 Wie entwirft man eine Datenbank? Man geht schrittweise vor 1. Erstellung eines Modells der Daten und der Beziehungen zwischen diesen Daten ⇒ Datenmodell, z.B. ER-Modell 2. Abbildung des Datenmodells auf eine Menge von Tabellen (relationales Modell) 3. Normalisierung: Entfernen aller Redundanzen. Eine Redundanz liegt vor, wenn dieselbe Information an mehreren Stellen eingetragen ist, z.B. die PLZ in verschiedenen Tabellen der Datenbank. Bei einer Änderung der PLZ müssen alle Stellen in der Datenbank geändert werden; bei Vergessen einer Änderungsstelle können Fehler auftreten. 4. Eintragen der Daten in die Tabellen. 5. Realisierung der möglichen Abfragen ⇒ Sichten auf die Daten in den Tabellen. 3.3.3 Datenmodell Die Daten in einem Datenbanksystem bilden ein abstrahiertes Spiegelbild einer Miniwelt. Um die Informationsstruktur dieser Miniwelt darstellen zu können, basieren Datenbanksysteme auf sogenannten Datenmodellen. 19 Schlichter, TU München 3.3. DATENBANKENTWURF Definition: Ein Datenmodell ist ein (oft mathematischer) Formalismus mit einer Notation zur Beschreibung und Definition der Datenobjekte und deren Struktur, einer Menge von Operationen zur Manipulation der Daten. Nicht beschrieben werden Abläufe, Interaktion zwischen Objekten oder zeitliches Verhalten. • Beispiele Entity-Relationship-Modell (ER-Modell), Objektorientiertes Modell, Hierachisches Modell. 3.3.4 ER-Modell Das Entity-Relationship-Modell ist ein Datenmodell, das sich gut zur Darstellung des konzeptuellen Datenbankschemas für relationale Datenbanksysteme eignet. Kardinalität 1 N • Graphisches Hilfsmittel zur semantischen Modellierung eines Anwendungsgebietes, d.h. zum Entwurf einer Datenbank, unabhängig vom konkreten DBS. • Dient vor allem zur Kommunikation zwischen DB-Designer und Auftraggeber. • Grundidee: Reale Welt (Mini-Welt) läßt sich durch Objekte und Beziehungen zwischen Objekten beschreiben (Objekte: Entities, Beziehungen: Relationships). • Gleichartige Entities (Objektinstanzen) werden zu Entity-Typen (vergleichbar Klassen) bzw. Relationships zu Relationship-Typen zusammengefasst. Beispiele: Entity-Typ: "Bibliotheksbenutzer", "Buch", und RelationshipTyp: "entleiht". 20 Schlichter, TU München 3.3. DATENBANKENTWURF • Entities und Relationships können Attribute besitzen, z.B. Attribut "Name" bei Entity "Bibliotheksbenutzer", "Entleihdatum" bei Relationship "entleiht". • Entity-Typ Ein Entity-Typ fasst eine Menge von gleichartigen Objektinstanzen, die durch gleiche Attribute charakterisiert sind, zusammen. entleiht Kundennr: 5 Vorname: Josef Nachname: Mayr Ort: München ...... entleiht Kundennr: 2 Vorname: Ernst Nachname: Schmidt Ort: Dachau ...... Inventarnr: 10 Titel: Informatik Verlag: Springer ...... Inventarnr: 5 Titel: Mathematik Verlag: Vieweg ...... Abstraktion Kunde Kundennr Vorname Nachname Ort ...... entleiht Kundennr Inventarnr Datum Buch Inventarnr Titel Verlag ...... – Schlüssel Wahl eines oder mehrerer Attribute, die eine Entity (Objektinstanz) eindeutig identifiziert, z.B. Kundennr identifiziert eindeutig einen einzelnen Kunden. ⇒ Primärschlüssel. ∗ Ein Primärschlüssel kann aus mehr als einem Attribut bestehen. ∗ Die Entscheidung für einen bestimmten Primärschlüssel geschieht während der Modellierung des Anwendungsbereiches. falls kein Attribut eindeutig ist, wird ein künstliches Attribut eingeführt, z.B. eine fortlaufende Nummer für jeden Eintrag. ∗ Primärschlüssel werden im ER-Modell durch Unterstreichung gekennzeichnet. • Relationship-Typ 21 Schlichter, TU München 3.3. DATENBANKENTWURF Ein Relationship-Typ umfasst die Menge gleichartiger Relationships. Ein Relationship-Typ R stellt die Beziehung zwischen Entity-Typen E1 und E2 her, d.h. R ⊆ E1 * E2. – Ein wichtiges Charakteristikum von 2-stelligen Relationship-Typen ist ihre Kardinalität. Dadurch wird zum Ausdruck gebracht, mit wie vielen Entities ein gegebenes Entity in Beziehung stehen kann. – Man kann verschiedene Kardinalitätsarten unterscheiden 1:1, ein Entity aus E1 kann mit höchstens einem Entity aus E2 über R in Beziehung stehen kann und umgekehrt. n:1, ein Entity aus E1 kann mit höchstens einem Entity aus E2 , aber ein Entity aus E2 mit beliebig vielen Entities aus E1 über R in Beziehung stehen. 1:n, ein Entity aus E1 kann mit beliebig vielen Entities aus E2 , aber ein Entity aus E2 mit höchstens einem Entity aus E1 über R in Beziehung stehen. Beispiel: 1 Kunde kann n Bücher ausleihen; 1 Buch kann nur von einem Kunden ausgeliehen werden. n:m, ein Entity aus E1 kann mit beliebig vielen Entities aus E2 über R in Beziehung stehen und umgekehrt. E1 1:1 E2 E1 1:n E2 E1 n:1 E2 E1 n:m E2 22 Schlichter, TU München 3.3. DATENBANKENTWURF • Erweiterung auf n-stellige Beziehungen Relationship-Typen können nicht nur 2-stellig (binär), sondern auch n-stellig sein. Beispiel für einen 3-stellige Relationship-Typen m Studierende n Vorlesung prüfen Note 1 Professor Darstellung der Funktionalität der Beziehung prüfen: Studierende * Vorlesung ⇒ Professor. Mehrere Studierende können über den Stoff von mehreren Vorlesungen von einem Professor geprüft werden. • Modellierung einer Datenbank findet auf der Ebene von Entity-Typen, Relationship-Typen und Attributen statt. • Generalisierung Generalisierung dient beim Konzeptentwurf zur übersichtlicheren Strukturierung der Entity-Typen Name Uni-Mitglieder is-a MatrNr Studierende Angestellte PersNr is-a Fachgebiet Assistenten 23 Professoren Rang Raum Schlichter, TU München 3.4 3.4. RELATIONALE DATENBANKSYSTEME Relationale Datenbanksysteme Mit Entity-Relationship-Diagrammen läßt sich das logische Modell einer Datenbank darstellen. Wird diese Datenbank in einem DBS implementiert, dann ist dieses logische Modell in ein physikalisches Modell zu transformieren. Ein Beispiel für ein physikalisches Datenbankmodell ist das relationale Datenbankmodell. 3.4.1 Relationales Modell Schema: legt die Struktur der in der Datenbank gespeicherten Daten fest. Darstellung mit Hilfe von Relationen Relation R ⊆ Wertebereich (Attribut 1) * ... * Wertebereich (Attribut n) • Beispiel der Relation Telefonbuch Telefonbuch ⊆ Text * Text * Zahl Darstellung als Schema Telefonbuch: {[Name: Text, Adresse: Text, Telefonnr: Zahl]} • Relationale Darstellung von Entity-Typen: Kunde: {[Kundennr: Zahl, Vorname: Text, Nachname: Text, Ort: Text]} Kundennr ist der Primärschlüssel zur Identifizierung der einzelnen Kunden. • Relationale Darstellung von Relationship-Typen: entleiht: {[Kundennr: Zahl, Inventarnr: Zahl, Datum: Datum]} Kundennr und Inventarnr dient zur Identifizierung eines Entleihvorgangs. 3.4.2 Tabellendarstellung In relationalen Datenbanken "sieht" der Benutzer die Information in Form von Tabellen (Relationen). Jede dieser Tabellen besteht aus Zeilen und Spalten; Spalten repräsentieren die Attribute von Entities. • Die Daten werden in einer Menge von Tabellen gespeichert. Normalerweise eine Tabelle je Entity-Typ und eine Tabelle je Relationship-Typ (bei manchen 1:1 und 1:n Relationships sind Optimierungen möglich, die ohne eine eigene Tabelle auskommen). 24 Schlichter, TU München 3.4. RELATIONALE DATENBANKSYSTEME • Jede Tabelle hat einen Tabellennamen ("Relationenname") sowie Spalten und Zeilen. • Jede Zeile repräsentiert einen zusammengehörigen Datensatz; Zeile wird als Tupel einer Relation aufgefasst; Spalten werden als Attribute bezeichnet. • Jede Tabelle hat einen Primärschlüssel, durch den eine Zeile (Datensatz) eindeutig identifiziert ist. z.B. jeder einzelner Kunde wird durch Kundennr identifiziert. • Die Ordnung der Zeilen ist ohne Bedeutung; durch ihre Reihenfolge wird keine für den Benutzer relevante Information ausgedrückt. • Die Ordnung der Spalten ist ohne Bedeutung, da sie einen eindeutigen Namen (Attributnamen) tragen. • Alle für den Benutzer bedeutungsvolle Informationen sind ausschließlich als Datenwerte in den Tabellen ausgedrückt. • Weisen zwei Tabellen je eine Spalte auf, die das gleiche Attribut beschreiben, kann eine Beziehung zwischen den beiden Tabellen hergestellt werden. Damit können Daten verschiedener Tabellen einander zugeordnet werden. • Beispiel Kundennr Vorname Nachname Ort ...... Kundennr Inventarnr Datum Inventarnr Titel Verlag ...... – Tabelle Kunde Die Tabelle Kunde modelliert den Entity-Typ Kunde, d.h. jede Zeile repräsentiert einen Kunden; Primärschlüssel ist die Kundennr. Kunde: {[Kundennr: Zahl, Vorname: Text, Nachname: Text, PLZ: Zahl, Ort: Text, Straße: Text]} 25 Schlichter, TU München Kundennr 3.4. RELATIONALE DATENBANKSYSTEME Vorname Nachname PLZ Ort Straße – Tabelle Buch Die Tabelle Buch modelliert den Entity-Typ Buch, d.h. jede Zeile repräsentiert ein Buch; Primärschlüssel ist die Inventarnr. – Tabelle Entleihe Die Tabelle Entleihe modelliert den Relationship-Typ "Kunde leiht Buch aus", d.h. jede Zeile repräsentiert ein von einem Kunden ausgeliehenes Buch; Primärschlüssel ist das Paar (Kundennr, Inventarnr). Kundennr. bzw Inventarnr. sind jeweils Verweise auf Zeilen in der Tabelle Kunde bzw. Buch. 3.4.3 Normalisierung Mehrfache Speicherung derselben Information in gleicher oder mehreren Tabellen kann zu Konsistenzproblemen bei Änderungen führen. Name Huber Vorname Franz PLZ 83022 26 Ort Rosenheim Schlichter, TU München 3.4. RELATIONALE DATENBANKSYSTEME dieselbe Information ist mehrfach dargestellt: 83022 ist die PLZ von Rosenheim ⇒ Lösung: Normalisierung Redundanz - Anomalien Unter Redundanz versteht man die überflüssige Mehrfachspeicherung von Daten: verschwendet Speicherplatz kann bei Änderungen zu Inkonsistenzen oder Fehler führen (Anomalien). Nr 1 2 3 Name Huber Huber Meyer Vorname Franz Franz Christa PLZ 83022 83022 86321 Ort Ware Rosenheim Hemd Rosenheim Hose Ganselham Bluse Preis 22,50 78,90 45,30 • Update-Anomalie: bei einer Änderung von Daten werden Datensätze übersehen. Beispiel: Adresse von F. Huber ist mehrfach in Datenbank gespeichert; sie wird jedoch nicht an allen Stellen geändert. • Delete-Anomalie: beim Löschen gehen Informationen verloren, die man später eventuell wieder benötigt. Beispiel: Einträge von Huber werden gelöscht ⇒ Information über die Postleitzahl von Rosenheim geht verloren. • Insert-Anomalie: neue Datensätze lassen sich nicht eintragen, da Teile des Primärschlüssels fehlen. 1. Normalform Eine Tabelle ist in 1. Normalform, falls alle Attribute nur atomare Werte annehmen können. Mengen, Aufzählungen dürfen nichts als Attribute auftreten. 27 Schlichter, TU München 3.4. RELATIONALE DATENBANKSYSTEME Name Vorname Adresse Müller Anna Sudentenstr. 18, 83022 Rosenheim Huber Karl Hauptstr. 4, 86321 Ganselham Normalisierung Name Vorname Straße PLZ Ort Müller Anna Sudentenstr. 18 83022 Rosenheim Huber Karl Haupstr. 4 86321 Ganselham 2. Normalform Funktionale Abhängigkeit von Attributen 1222 Fräulein Smilla Peter Hoeg 01 Gut ja 1222 Fräulein Smilla Peter Hoeg 02 mittel nein 1222 Fräulein Smilla Peter Hoeg 03 schlecht nein Primärschlüssel ist das Paar (TitelNr, ExNr). Mit jedem Exemplar werden Informationen zum Titel erneut eingetragen, z.B. Titelname, Autor. Titelname und Autor sind nur von TitelNr abhängig, nicht jedoch von ExNr. • Umwandlung in 2. Normalform Eine Tabelle befindet sich in 2. Normalform wenn sie sich in 1. Normalform befindet, und 28 Schlichter, TU München 3.4. RELATIONALE DATENBANKSYSTEME jedes Attribut, das nicht zum Schlüssel gehört, nur vom gesamten Schlüssel und nicht bereits von einem Teil des Schlüssels abhängt TitelNr Titelname Autor ExNr Zustand Verliehen 1222 Fräulein Smilla Peter Hoeg 01 Gut ja 1222 Fräulein Smilla Peter Hoeg 02 mittel nein 1222 Fräulein Smilla Peter Hoeg 03 schlecht nein Normalisierung TitelNr Titelname Autor 1222 Fräulein Smilla Peter Hoeg TitelNr ExNr Zustand Verliehen 1222 01 Gut ja 1222 02 mittel nein 1222 03 schlecht nein 3. Normalform Trotz Einhaltung der 2. Normalfall treten noch Redundanzen auf, nämlich transitive funktionale Abhängigkeiten Kundennr → PLZ → Ort Attribut Ort enthält redundante Daten, da bereits PLZ den Wert von Ort eindeutig festlegt Kundennr Name Vorname Straße PLZ Ort 00012 Müller Anna Sudentenstr. 18 83022 Rosenheim 00013 Huber Karl Hauptstr. 8 86321 Ganselham 00014 Meier Kurt Körberweg 11 83022 Rosenheim • Umwandlung in 3. Normalform 29 Schlichter, TU München 3.4. RELATIONALE DATENBANKSYSTEME Eine Tabelle befindet sich in 3. Normalform wenn sie sich in 2. Normalform befindet, und kein Nichtschlüssel-Attribut transitiv abhängig von einem Schlüsselattribut ist Kundennr Name Vorname Straße PLZ Ort 00012 Müller Anna Sudentenstr. 18 83022 Rosenheim 00013 Huber Karl Hauptstr. 8 86321 Ganselham 00014 Meier Kurt Körberweg 11 83022 Rosenheim Normalisierung Kundennr Name Vorname Straße PLZ PLZ Ort 00012 Müller Anna Sudentenstr. 18 83022 83022 Rosenheim 00013 Huber Karl Hauptstr. 8 86321 86321 Ganselham 00014 Meier Kurt Körberweg 11 83022 Zusammenfassung Bei der Normalisierung werden Tabellen so zerlegt, dass keine Redundanzen mehr auftreten 1. Normalform: sämtliche Attributwerte sind atomar, d.h. nicht aus mehreren Elementen zusammengesetzt. 2. Normalform: 1. Normalform und jedes nicht zum Primärschlüssel gehörige Attribut ist von diesem voll funktional abhängig. 3. Normalform: 2. Normalform und es existieren keine transitiven Abhängigkeiten. 3.4.4 Umsetzung des ER-Modells Jeder Entity-Typ wird zu einer eigenen Tabelle die Attribute des Entity-Typs werden zu den Spalten. 30 Schlichter, TU München 3.4. RELATIONALE DATENBANKSYSTEME ein Attribut (oder eine Kombination von Attribute) wird als Primärschlüssel definiert. eine Tabellenzeile repräsentiert eine Instanz des Entity-Typs (Objektinstanz, Entität) Umsetzung von Relationship-Typ: 1:1 Eine 1:1 Beziehung kann (wahlweise) in eine der beiden Tabellen der beteiligten Entity-Typen eingebaut werden. Schlüsselattribut einer Tabelle wird als Attribut in die zweite Tabelle aufgenommen (Fremdschlüssel) Kunde 1 1 belegt Sitzplatz Kundennr Name Vorname Sitznr Lage Kundennr 00012 Müller Anna 15A Fenster 00012 00013 Huber Karl 15B Mitte 00013 00014 Meier Kurt 15C Gang 00014 Fremdschlüssel Umsetzung von Relationship-Typ: 1:n Eine 1:n Beziehung wird direkt umgewandelt das Schlüsselattribut der 1-Seite wird als Fremdschlüssel in die Tabelle der n-Seite aufgenommen. 31 Schlichter, TU München 3.4. RELATIONALE DATENBANKSYSTEME n Kunde 1 wohnt Wohnort Kundennr Name Vorname Straße PLZ PLZ Ort 00012 Müller Anna Sudentenstr. 18 83022 83022 Rosenheim 00013 Huber Karl Hauptstr. 8 86321 86321 Ganselham 00014 Meier Kurt Körberweg 11 83022 Fremdschlüssel Umsetzung von Relationship-Typ: n:m Jede n:m Beziehung muss in einer eigenen Tabelle dargestellt werden aufgebaut aus den Schlüsselattributen der Tabellen der beteiligten EntityTypen n Autor m verfasst Buchtitel Autornr Name Autornr Titelnr Titelnr Buchtitel Jahr 00012 Karl Müller 00012 12340 12340 Informatik 2002 00013 Peter Huber 00013 12340 22300 Physik 1991 00014 Ernst Meier 00013 55521 55521 Geschichte 1978 00014 22300 3.4.5 Sichten Oft benötigt man bei einer Anfrage aber nicht die Daten der ganzen Tabelle, sondern nur einen Ausschnitt daraus. In Sichten oder Views werden Teilmengen der in der Datenbank gespeicherten Information bereitgestellt. 32 Schlichter, TU München 3.4. RELATIONALE DATENBANKSYSTEME Beispiel für eine Sicht: Vorname und Nachname von Kunden, die in München wohnen. Views sind damit nichts anderes als benannte Such-Abfragen (z.B. SQL-Anfragen in MS ACCESS mit Namen). 3.4.6 Abfragesprache SQL "Structured Query Language": Suche und Ändern von Tabelleneinträgen; seit 1989 international genormt; für fast alle relationalen Datenbanken verfügbar; Abfrage liefert als Ergebnis alle gefundenen Lösungen (d.h. mengenorientiert). Elementare Operationen bei Abfragen Bei der Auswertung von Datenbanken will man bestimmte Attributwerte aus bestimmten Datensätzen einer Tabelle oder einer Kombination von Tabellen Beispiele: • Liste der Wohnorte aller Kunden, • alle Kontonummern mit aktuellem Kontostand und Kundennummer • ISBN und Titelname aller Werke eines bestimmten Autors, etc. Relationen n-spaltige Tabellen repräsentieren Relationen, d.h. Relationen sind Mengen, auf denen die Mengenoperationen ausgeführt werden können. • Mengenoperationen dienen als Basis für die Definition von Zugriffsoperationen auf Datenbanken. 33 Schlichter, TU München 3.4. RELATIONALE DATENBANKSYSTEME Attribut a Attribut b Attribut c Selektion Projektion Natürlicher Join a1 a2 a3 b1 b1 b2 Tabelle 1 b1 b2 b3 c1 c2 c3 Tabelle 2 Ausgangstabellen Tabelle a1 a2 a3 b1 b1 b2 c1 c1 c2 Tabelle Ergebnistabelle Tabelle Beide, Tabelle 1 und Tabelle 2 haben das Attribut b. Es werden in beiden Tabellen die Zeilen herausgesucht, wo die Attributwerte für b gleich sind. Diese Zeilen (zusammen mit den zugehörigen Werten für Attribut a und Attribut c) werden in die Ergebnistabelle übernommen. • Selektion: Auswahl von Zeilen einer Tabelle über Prädikate, z.B. allen Zeilen mit Attribut Ort = ’München’. • Projektion: Auswahl der Spalten einer Tabelle, z.B. aus der Tabelle Kunde die Spalte mit den Nachnamen. • Natürlicher Join: Gleichverbund über alle gleichen Attribute und Projektion über die verschiedenen Attribute; Attribute sind durch Übereinstimmungsbedingung gegeben. • Abfragen in der Datenbank lassen sich in die Teilfunktionen Selektion und Projektion zerlegen ⇒ eine Abfrage ist eine Verkettung von Selektion und Projektion. INSERT (Einfügen) INSERT INTO Entleihe VALUES (300, 100, ’01/12/97’) UPDATE (Aktualisierung) UPDATE Kunde SET PLZ = "80330" WHERE Strasse = ’Arcisstrasse’ 34 Schlichter, TU München 3.4. RELATIONALE DATENBANKSYSTEME SELECT (Abfrage) Finde alle Kunden, die in der Arcisstraße in München wohnen: SELECT Vorname, Nachname, Straße FROM Kunde WHERE Ort = ’München’ AND Straße = ’Arcisstraße’ ORDER BY Nachname Aggregatfunktionen und Gruppierung Aggregatfunktionen führen Berechnungen durch und liefern als Ergebnis einen einzelnen Wert SELECT AVG(GebJahr) FROM Mitarbeiter; # liefert das DurchschnittsGeburtsjahr SELECT SUM(GebJahr) FROM Mitarbeiter; # liefert die Summe aller Geburtsjahre SELECT COUNT(GebJahr) FROM Mitarbeiter; # liefert die Anzahl der Mitarbeiter, die Geburtsjahr angegeben haben SELECT MIN(GebJahr) FROM Mitarbeiter; # liefert den jüngsten Mitarbeiter SELECT MAX(GebJahr) FROM Mitarbeiter; # liefert den ältesten Mitarbeiter SELECT AVG(GebJahr) FROM Mitarbeiter WHERE PersNr > 2000; # liefert das Durchschnitts-Geburtsjahr mit Personalnummern höher als 2000 SELECT AbtID, AVG(GebJahr) FROM Mitarbeiter GROUP BY AbtID; # liefert das Durchschnitts-Geburtsjahr in den einzelnen Abteilungen SELECT AbtID, AVG(GebJahr) FROM Mitarbeiter GROUP BY AbtID HAVING COUNT(*) > 1; # liefert das Durchschnitts-Geburtsjahr zu den Abteilungen, die mehr als einen Mitarbeiter haben 3.4.7 Beispielsysteme mySQL (Open Source), Microsoft Access, Microsoft SQL Server, Oracle, DB2 (IBM), Sybase, Informix Microsoft Access MS ACCESS stellt zum Erstellen von Tabellen, Abfragen usw. im Allgemeinen Assistenten zur Verfügung. Trotzdem ist auch das direkte Arbeiten mit SQL möglich! 35 Schlichter, TU München 3.5. WWW - INFORMATIONSSYSTEM • Ansichten in MS Access MS ACCESS unterscheidet bei Tabellen und Anfragen grundsätzlich: – die Datenblattansicht: Anzeige der Instanz einer Basistabelle bzw. der Ergebnistabelle einer Anfrage; erlaubt auch die Eingabe, die Änderung und das Löschen von Daten in einer Basistabelle. – die Entwurfsansicht: interaktives Erzeugen von Tabellen bzw. Anfragen "ohne" SQL. – die SQL-Ansicht: direktes Arbeiten mit SQL. • SQL-Ansicht Die SQL-Ansicht erlaubt die Definition von Tabellen (CREATE TABLE), das Ändern von Tabellen (ALTER TABLE), das Löschen von Tabellen (DROP TABLE), das Einfügen von Daten in Tabellen (INSERT INTO), das Ändern von Daten in Tabellen (UPDATE), das Löschen von Daten in Tabellen (DELETE) und die Erstellung von SQL-Anfragen (SELECT). 3.5 WWW - Informationssystem Das World Wide Web (WWW bzw. Web) ist ein über das Internet abrufbares Informationssystem, basierend auf dem Hypertext-Ansatz. 3.5.1 Hypertext Der Begriff „Hypertext“ beschreibt nichtlineare Texte, die als Netzwerk von Informationseinheiten aufgebaut sind. 36 Schlichter, TU München 3.5. WWW - INFORMATIONSSYSTEM Querverweise zwischen Informationseinheiten (Web-Seiten, Dokumente) werden als links bezeichnet. Arten von Informationsinhalten: Text, Graphik, Bilder, Audio, Video, Animationen. Beschreibung der Inhalte mittels HTML (HyperText Markup Language). Markup: Zusatzinformation wird in den Text selbst eingebettet. <tagname>...text....</tagname> Beispiel: <html>dokumentinhalt</html> HTML ist eine Layoutsprache. 3.5.2 Einführung in HTML HTML dient in erster Linie dazu, textuelle Information zu repräsentieren. Der Text lässt sich strukturieren, i.w. in Paragrafen, Listen und Tabellen. ein ausführliches Tutorial stellt selfhtml (URL: http://de.selfhtml.org/) bereit. HTML Befehle bestehen fast immer aus einem Starttag und einem Entag. 37 Schlichter, TU München 3.5. WWW - INFORMATIONSSYSTEM Beispiel <html> <head> <title>Ziel der Vorlesung</title> </head> <body> <p>Diese Vorlesung gibt eine Einführung in die Informatik. Sie behandelt Themen wie</p> <ul> <li>Algorithmen und Datenstrukturen</li> <li>Programmierung von Softwaresystemen</li> <li>Datenbanken</li> <li>Rechnernetze</li> </ul> </body> </html> Struktur-Tags Struktur-Tags dienen zur Beschreibung der Struktur von HTML-Dokumenten. <html>....</html> umrahmt das gesamte HTML-Dokument. <head>....</head> markiert den Dokumentenkopf. <title>....</title> definiert den Titel des gesamten HTML-Dokuments. <body>....</body> umrahmt den eigentlichen Inhalt des HTML-Dokuments. <p>....</p> kennzeichnet einen Absatz. 6 Stufen von Überschriften: h1 ... h6, z.B. <h1>.....</h1> <hr> spezifiziert eine Trennlinie. Listen Listen erlauben eine echte hierarchische Schachtelung von Paragraphengruppen in beliebiger Tiefe. Eine Liste ist eine Folge von Paragraphengruppen, die selbst wieder Listen enthalten können. • ungeordnete Liste: <ul>; • geordnete Liste: <ol>; • Listenelemente: <li>; 38 Schlichter, TU München 3.5. WWW - INFORMATIONSSYSTEM Tabellen Tabellen erlauben die Anordnung von Paragraphengruppen in einem zweidimensionalen Gitter. <table> ..... </table>: Klammerung der gesamten Tabelle. <tr> ..... </tr>: Klammerung einer Tabellenzeile. <td> ..... </td>: Klammerung einer Tabellenzelle. <th> ..... </th>: Klammerung einer Kopfzelle der Tabelle. Beispiel <table> <tr> <th>Kopfzeile <th>Kopfzeile <th>Kopfzeile </tr> <tr> <td>1.Zeile / <td>1.Zeile / <td>1.Zeile / </tr> <tr> <td>2.Zeile / <td>2.Zeile / <td>2.Zeile / </tr> </table> / 1. Spalte</th> / 2. Spalte</th> / 3. Spalte</th> 1. Spalte</td> 2. Spalte</td> 3. Spalte</td> 1. Spalte</td> 2. Spalte</td> 3. Spalte</td> <table> <th>.. </th> <tr> <td>.. </td> <tr> <td>.. </td> <tr> <th>.. </th> <td>.. </td> <td>.. </td> <th>.. </tr> </th> <td>.. </tr> </td> <td>.. </tr> </td> </table> Attribute in <table> bzw. <td> zur Gestaltung von Tabellen, z.B. <table border="..">: Dicke des sichtbaren Rahmens. <table cellpadding="..">: Abstand des Zelleninhalts vom Rand der Tabellenzelle. 39 Schlichter, TU München 3.5. WWW - INFORMATIONSSYSTEM <table width="..">: bestimmt die Breite der gesamten Tabelle. <td align=".." valign="..">: horizontale und vertikale Ausrichtung des Inhalts innerhalb einer Zelle. Grafiken In HTML-Dokumente können Grafiken eingebunden werden, wobei verschiedene Formate unterstützt werdeb, z.B. GIF, JPEG, PNG, BMP, etc Grafiken werden in Dateien gespeichert. Einbindung durch das <img> Tag. <img src="luftbild.jpg" alt="Luftbild"> Attribute zur Gestaltung der Grafik durch den Browser <img src=".." width=".." height="..">: Breite und Höhe der Grafik. <img src=".." border="..">: Dicke des Rahmens für die Grafik. Hyperlinks Sie sind das wesentliche Element, um Querverweise zwischen HTMLDokumenten zu definieren. Hyperlinks werden im Text eingebettet. • Markieren des Verweisziels <a name="nameziel">Text</a> und hier weiterer Text • Verweise innerhalb des gleichen Dokuments <a href="#nameziel">Text des Hyperlinks</a> und hier weiterer Text • Verweise auf andere lokale Dokumente <a href="Dateiname#nameziel">Text des Hyperlinks</a> und hier weiterer Text • Verweise auf andere nicht lokale Dokumente <a href="http://servername/pfad#nameziel">Text des Hyperlinks</a> und hier weiterer Text 40 Schlichter, TU München 3.5.3 3.5. WWW - INFORMATIONSSYSTEM Cascading Style-Sheets (CSS) Mit Style-Sheets kann man die Formateigenschaften von HTML-Tags festlegen. interpretieren durch den Browser zum Formatieren und Positionieren von HTML-Elementen auf dem Nutzerrechner. Einbettung von CSS-Formaten in die Web-Seite oder als separate Datei, die von Web-Seite referenziert wird. Eigenschaften werden mit Hilfe von Regeln spezifiziert, eine Regel besteht aus Selektor, der Eigenschaft sowie dem ihr zugewiesenen Wert. • Beispiel BODY { font-size: 20px; font-family: Helvetica; margin-left: 0.5em} TD { font-family: inherit; font-size: 20px; vertical-align: top; } P { font-family: Helvetica; font-size: 20px; margin-bottom: 0.5em; margin-top: 0em; } H1 { font-family: Helvetica; font-size: 24px; } H2, H3, H4, H5, H6 { font-family: Helvetica; font-size: 20px; margin-bottom: 0.5em; margin-top: 0.5em; } 41 Kapitel 4 Rechnerarchitektur In diesem Abschnitt werden die Hardware-nahen Komponenten eines Rechners behandelt. Dabei geht es insbesondere um den Aufbau eines Rechners aus einzelnen Komponenten und dem Aufbau der einzelnen Rechnerkomponenten sowie um die Möglichkeiten der Steuerung des Ablaufs, z.B. den Befehlszyklus und den beispielhaften Aufbau einer Maschinensprache. • Fragestellungen des Abschnitts: – Aus welchen (Hardware-)Elementen setzt sich ein Rechner zusammen? – Wie kommunizieren die einzelnen Komponenten eines Rechners? – Wie sieht die Schnittstelle zwischen Hardware und Software aus (d.h. Maschinenbefehle)? – Wie werden Zahlen, Text, Bilder, und Töne intern dargestellt? 4.1 Aufbau eines Rechners Die Hardware eines Computersystems besteht aus dem Rechner und einer Menge von Peripheriegeräten, z.B. Tastatur, Maus, Bildschirm, Drucker, Scanner. Bezüglich der Rechner gibt es entsprechend ihrer Funktionalität und Leistungsfähigkeit sehr unterschiedliche Klassen, z.B. PDA ("personal digital assistant", Palm V), Notebook/Laptop, Schreibtisch PC, Server, Großrechner und Höchstleistungsrechner. Beispiel eines Supercomputers 42 Schlichter, TU München 4.1.1 4.1. AUFBAU EINES RECHNERS Struktureller Aufbau eines Rechners Tastatur Monitor Festplatte Netzkarte Netz Geräte bus Prozessor (CPU) Register Arbeitsspeicher (RAM) Ein/AusgabeController Datenbus Prozessor bus Adressbus Steuerbus Komponenten eines Rechners • Im Prozessor finden die Rechen- und Umformvorgänge statt. Gleichzeitig steuert und kontrolliert der Prozessor den Ablauf des Rechenvorgangs, und damit den Ablauf der Programme. – Ein Prozessor kann aus mehreren Kernen bestehen. Jeder Prozessorkern führt Rechen- und Umformvorgänge aus. Üblich sind heute Dual-CoreProzessoren (Doppelkernprozessoren) und Quad-Core-Prozessoren. 43 Schlichter, TU München 4.1. AUFBAU EINES RECHNERS – Register sind spezielle Speicherzellen im Prozessor zur Speicherung von Operanden und Zwischenergebnissen. Register sind sehr schnell, jedoch teuer. • Der Arbeitsspeicher (ASP; "main memory") ist eine Reihung von adressierbaren Speicherzellen der Größe 8 Bit zur Ablage von Programmen und binären Daten. Jede Speicherzelle kann über seine Adresse (eindeutiger Identifikator), nämlich die Nummer der Speicherzelle, direkt angesprochen werden. • Ein/Ausgabe-Controller sind Komponenten, die Nachrichten auf dem Gerätebus für Ein/Ausgabe-Geräte umsetzen und deren Eingaben den anderen Komponenten zur Verfügung stellen. Über den Gerätebus werden Graphikkarten, Netzwerkkarten etc angeschlossen. • Den Ablauf der Informationsverarbeitungsvorgänge im Rechner steuern Programme. Busse zur Kommunikation Die Komponenten eines Rechners kommunizieren über Prozessorbus und Gerätebus miteinander. Prozessorbus: schnelle Übertragung Gerätebus (z.B. PCI): etwas langsamer, da Geräte langsamer als CPU oder Arbeitsspeicher. • Der Prozessorbus unterteilt sich in – Adressbus: zur Übergabe einer Adresse (32 oder 64 Bit) – Datenbus: zur Übermittlung von Daten (32 oder 64 Bit) – Steuerbus: mehrere Steuerleitungen Kommunikation zwischen Arbeitsspeicher und CPU CPU und Arbeitsspeicher arbeiten nicht synchron im gleichen Takt. Deshalb muss der Vorgang des Datenaustausches zwischen Arbeitsspeicher und CPU koordiniert werden. • Beispiel: Übertragung von Daten aus dem Arbeitsspeicher zum Prozessor (CPU). 44 Schlichter, TU München 4.2. MASCHINENBEFEHLE 1. CPU legt die ASP-Adresse des gewünschten Datenelements auf den Adressbus. 2. CPU legt das Signal "Lesen" auf eine bestimmte Leitung im Steuerbus. 3. CPU legt das Signal "Adresse gültig" auf eine bestimmte Leitung im Steuerbus. 4. ASP ist passiv, "hört" aber auf Adress- und Steuerbus mit. 5. ASP erkennt, dass eine Adresse gültig ist und prüft, ob er mit dieser Adresse gemeint ist. Falls ja, führe Schritte 6-12 aus. 6. ASP prüft das Transportrichtungssignal im Steuerbus (es erkennt das Signal "Lesen"). 7. ASP sucht die adressierte Speicherzelle und holt die Daten. 8. ASP legt die (adressierten) Daten auf den Datenbus. 9. ASP legt das Signal "Daten bereit" auf eine bestimmte Leitung im Steuerbus. 10. CPU hat gewartet, bis das Signal "Daten bereit" erscheint und übernimmt Daten vom Bus in das Zielregister. 11. CPU legt das Signal "Daten übernommen" auf eine bestimmte Leitung im Steuerbus. 12. ASP deaktiviert daraufhin den Datenbus und das Signal "Daten bereit". 13. Sobald das Signal "Daten bereit" vom ASP weggenommen wird, deaktiviert die CPU die von ihm verwendeten Adress- und Steuerleitungen. • Ein solcher Ablauf aus Aktions- und Kommunikationsschritten zwischen Kommunikationspartnern heißt ein Protokoll. Das Protokoll definiert die Syntax, Semantik und die Reihenfolge der auszutauschenden Information. • Der oben geschilderte Ablauf heißt Busprotokoll. 4.2 Maschinenbefehle Einfache Kommandos, die die CPU ausführen kann; Setzen sich zusammen aus Operationsteil und Operandenteil (Adressteil). Der Operandenteil bestimmt die Daten, auf denen die Operation ausgeführt werden soll. 45 Schlichter, TU München 4.2.1 4.2. MASCHINENBEFEHLE Befehlsvorrat • Transportbefehle z.B. LOAD, STORE. LOAD: Transportieren von Daten vom Arbeitsspeicher in ein Register; STORE spezifiziert den umgekehrten Weg. • Arithmetische und logische Befehle z.B. ADD (Addition), SUB (Subtraktion), AND (logische und-Operation), OR (logische oder-Operation), CMP (Compare - Vergleichen von zwei Werten) • Schiebebefehle z.B. SH (Shift links, rechts), ROT (Schieben im Kreis) • Sprungbefehle z.B. JMP (Jump), JGT (Jump Greater Than) - (bedingte) Änderung der Ablaufreihenfolge • Sonderbefehle Behandlung von Unterbrechungen (z.B. Alarm bei Division durch 0), Änderungen des Maschinenstatus, Rückmeldungen von E/A Geräten, Laden von Prozessbeschreibungen, Synchronisationsbefehle bei Speicherzugriff etc. 4.2.2 Beispielprogramm in Maschinensprache (Assembler) Darstellung in Maschinensprache 0100 0102 0104 0106 0108 010a 010c 010e 0110 0112 0114 0116 0118 011a LOAD 0118 -- lade Inhalt der Speicherzelle 118 in CPU STORE 0116 LOAD 0114 JUMPZERO 011a SUB 0118 STORE 0114 LOAD 0116 ADD 0116 STORE 0116 JUMP 0104 #2 -- Wert von x, d.h. die Zahl 2 #0 #1 -- Wert von y, d.h. die Zahl 1 STOP 46 Schlichter, TU München 4.3. BEFEHLSZYKLUS Die erste Zahl (in Hexadezimal), z.B. 0100, gibt die Adresse der Speicherzelle an, in dem der Befehl (in diesem Fall LOAD 0118) abgespeichert ist. LOAD 0118 bedeutet: lade den Inhalt der Speicherzelle 0118 in die CPU. Darstellung in Hochsprache y = 1; while (x!=0) { x = x - 1; y = y + y; } • Das Programmstück berechnet y = 2x. "!=" bedeutet hier die Ungleichheit, z.B. ist im Programmbeispiel "x ungleich 0". "=" ist kein mathematisches Symbol, sondern bezeichnet hier die Zuweisung eines Wertes an eine Variable. 4.3 Befehlszyklus Für die Ausführung eines Maschinenbefehls durchläuft die CPU immer wieder ein festes Schema von Schritten, das der Bereitstellung des Befehls, dem Bereitstellen seiner Operanden, seiner Entschlüsselung und schließlich seiner Ausführung dient. Dieses Schema wird Befehlszyklus genannt. 4.3.1 Sequentielle Bearbeitung 47 Schlichter, TU München 4.3. BEFEHLSZYKLUS Falls gerade kein Programm zur Ausführung ansteht, wird der Leerlaufprozess mit dem Maschinenbefehl NOP ("No Operation") ausgeführt. 4.3.2 Fließband Bearbeitung (Pipelining) Eine Pipeline ist ein Fließband, auf dem sich die als nächstes abzuarbeitenden Maschinenbefehle befinden. Jeder Befehl besteht aus einer Reihe von Phasen. Während noch die letzten Phasen der vorderen Befehle in der Pipeline abgearbeitet werden, kann bereits mit den ersten Phasen der hinteren Befehle begonnen werden, d.h. es ergibt sich eine quasi-parallele Ausführung mehrerer Maschinenbefehle. 48 Schlichter, TU München 4.4. INTERNDARSTELLUNG VON INFORMATION Pipelining Animation Link zu Information 4.4 4.4.1 Interndarstellung von Information Codierung Codierung ist allgemein die Zuordnung (oder Abbildung) der Werte eines Zeichenvorrats auf Werte eines anderen Zeichenvorrats. • Beispiele von Codierungen In der Praxis gibt es eine Reihe von Codierungen, mit denen wir tagtäglich zu tun haben. Barcode QR-Code – Barcode (Strichcode): befindet sich auf fast jedem Artikel. wird nicht intern vom Rechner verwendet, kann jedoch vom Rechner dekodiert werden. – QR-Code ("Quick Response"): entwickelt von Denso Wave (1994) quadratische Matrix aus schwarzen und weißen Punkten, die die kodierten Daten binär darstellen. ∗ Viele Smartphones verfügen über eine eingebaute Kamera und eine Software, die das Interpretieren von QR-Codes ermöglicht. • Zeichen: Ausprägung (Form, Wert) eines Signals; häufig spricht man auch von Symbolen, z.B. Buchstaben. • Zeichenvorrat: Menge der Zeichen (d.h. Formen, Werte), die ein bestimmtes Signal annehmen kann. 49 Schlichter, TU München 4.4. INTERNDARSTELLUNG VON INFORMATION • Codierung erfolgt für bestimmten Zweck: – Speicherung – Übertragung – Komprimierung, z.B. von Bildern oder Video – Verschlüsselung – Veranschaulichung • Eine Codierung ist z.B. notwendig, da die für den Menschen verständliche Information auf eine für den Rechner verständliche oder speicherbare Darstellung abgebildet werden muss. Hier Zuordnung von Symbolen, die für den Menschen Sinn machen, zu Bitfolgen. • Die einer Codierung zugrundeliegende Abbildung muss berechenbar, eindeutig und (in der Regel) umkehrbar sein. 4.4.2 Codierung ganzer Zahlen Ganze Zahlen werden auf Basis des Binärsystems codiert. So wie im Dezimalsystem jede Ziffer die Anzahl einer Zehnerpotenz (1, 10, 100, 1000, ...) angibt, gibt im Binärsystem jede Ziffer die Anzahl einer Zweierpotenz (1, 2, 4, 8, 16, 32, ...) an. Während im Zehnersystem zehn Ziffern erforderlich sind, reichen im Binärsystem zwei Ziffern (0, 1) aus (genannt „Bit“, von „binary digit“). Beispiel Dezimalsystem: 148 = 1 * 102 + 4 * 101 + 8 * 100 Binärsystem: 1010 = 1 * 23 + 0 * 22 + 1 * 21 + 0 * 20(= 10 im Dezimalsystem) Formel für Wert einer Binärsystem-Zahl W = n−1 X bi × 2n−1−i i=0 mit den Binärziffern bi ∈ {0, 1} und n ist die Anzahl der verwendeten Bits (d.h. eine n-stellige Zahl). Beachte, es wird die Folge b0 b1 ... bn-1 betrachtet. Beispiel eine ganze Zahl sei als 8 bit lange Zahl zur Basis 2 dargestellt W (000011012 ) = 0×27 +...+0×24 +1×23 +1×22 +0×21 +1×20 = 8+4+1 = 1310 50 Schlichter, TU München 4.4. INTERNDARSTELLUNG VON INFORMATION Verfahren zur Umwandlung Umwandlung einer Dezimalzahl w in eine Dualzahl z dividiere w durch 2: Ergebnis w1 und Rest r0 dividiere w1 durch 2: Ergebnis w2 und Rest r1 fahre fort, bis das Ergebnis der Division 0 und Rest rk ist. Die Dualzahl ist z = rk rk−1 ...r1 r0 • Beispiel Dezimalzahl w = 23 23 : 2 = 11 mit Rest 1 11 : 2 = 5 mit Rest 1 5 : 2 = 2 mit Rest 1 2 : 2 = 1 mit Rest 0 1 : 2 = 0 mit Rest 1 Die Dualzahl lautet: z = 00010111 (in 8-Bit Darstellung) Feste Ziffernanzahl Typischerweise werden Zahlen durch eine Bitfolge fester Länge codiert (ggf. mit führenden Nullen auffüllen). Die Anzahl der Bits ist meist ebenfalls eine Zweierpotenz, z.B. 4 Bit, 16 Bit, 32 Bit oder 64 Bit. In aktuellen Rechnerarchitekturen werden für die Darstellung einer ganzen Zahl entweder 32 oder 64 Bit verwendet. Bei Verwendung von n Bit sind die Zahlenwerte 0 bis 2n-1 codierbar. Negative Zahlen Positive ganze Zahlen werden immer durch ihre Darstellung im Binärsystem codiert. Für die Codierung negativer ganzer Zahlen gibt es mehrere Möglichkeiten. • Vorzeichen-Darstellung Das erste Bit der Zahlencodierung wird als Vorzeichenbit interpretiert (0 entspricht +, 1 entspricht -) die restlichen Bits codieren den Absolutwert der Zahl im Binärsystem. Damit sind Zahlen von -(2n-1-1) bis 2n-1-1 möglich. Es 51 Schlichter, TU München 4.4. INTERNDARSTELLUNG VON INFORMATION gibt jedoch zwei Nullen, d.h. eine positive (000...00) und eine negative Null (100...00). Beispiel Für n = 4 sind die Zahlen von -7 bis +7 codierbar: 0 = 0000 1 = 0001 2 = 0010 3 = 0011 4 = 0100 5 = 0101 6 = 0110 7 = 0111 -0 = 1000 -1 = 1001 -2 = 1010 -3 = 1011 -4 = 1100 -5 = 1101 -6 = 1110 -7 = 1111 • Zweierkomplement-Darstellung Beim Zweierkomplement existiert eine negative Zahl mehr als die Anzahl der positiven Zahlen; Zweierkomplement hat den Vorteil der einfachen Umsetzung der Grundrechenarten Addition und Subtraktion. – Beispiel für 4 bit Darstellung Zweierkomplement-Darstellung mit 4 bit für eine ganze Zahl 52 Schlichter, TU München 4.4. INTERNDARSTELLUNG VON INFORMATION W+ = 3 X bi × 23−i (positive Zahl) i=1 3 W− = −2 + 3 X bi × 23−i (negative Zahl) i=1 mit bi ∈ {0, 1} positive Zahl: erstes Bit ist 0 negative Zahl: erstes Bit ist 1 – Formel für Wert einer Zweierkomplement-Zahl n−1 W = −b0 × 2 + n−1 X bi × 2n−1−i i=1 mit bi ∈ {0, 1}. n ist hier die Anzahl der Bitstellen. ∗ Beispiel Wert der Zahl W: -1 Binärdarstellung mit 4 Bit: 1111 W = −23 + 22 + 21 + 20 = −8 + 7 = −1 – Rechnen mit Zweierkomplement-Zahlen Negativbildung und Grundrechenarten sind einfach durchführbar. ∗ Negativbildung einer Zahl Die Berechnung der negativen Zahldarstellung aus der entsprechenden positiven Zahldarstellung erfolgt durch die Komplementbildung (Bits werden invertiert), anschließend wird 1 addiert. Dies ergibt die Zweierkomplement Darstellung der zur positiven Zahl zugehörigen negativen Zahl. Beispiel Zweierkomplement-Codierung mit 8 Bit für -14: 14 = 00001110 Komplement: 11110001 1 addiert: 11110010 ∗ Addition von zwei Zahlen Stellenweise mit Übertrag, analog zum Dezimalsystem. 53 Schlichter, TU München 4.4. INTERNDARSTELLUNG VON INFORMATION ∗ Differenzbildung von zwei Zahlen Realisierbar durch Addition mit negativer Zahl. Beispiel Berechnung 17 - 14: dezimal dual 17 00010001 +(-14) 11110010 =3 00000011 4.4.3 Codierung von Text Alphanumerische Daten - ISO-ASCII 8-bit-Code Darstellung von alphanumerischen Zeichen (Buchstaben A-z, 0,..,9 und Sonderzeichen) in einer 8-Bit Folge, d.h. Codierung eines Zeichens durch eine (Binär)zahl zwischen 0 und 255. • ISO = International Standards Organisation • ASCII = American Standard Code for Information Interchange • Kleinbuchstaben sind in alphabetischer Reihenfolge durchnummeriert (97 122) • Großbuchstaben sind in alphabetischer Reihenfolge durchnummeriert (65 - 90) • Ziffern 0 bis 9 sind in aufsteigender Reihenfolge dargestellt (48 - 57) • Darstellung von Sonderzeichen, z.B. CR (Carriage Return = Absatzende), LF (Linefeed = Neuzeile) • Zu den entsprechenden Zeichen des ASCII Codes wird der jeweilige Zahlenwert zur Basis 10 angegeben. Zeichen a A b B 0 ? CR Dezimal 97 65 98 66 48 63 13 Binärdarstellung 01100001 01000001 01100010 01000010 00110000 00111111 00001101 54 Schlichter, TU München 4.4. INTERNDARSTELLUNG VON INFORMATION Einige Systeme arbeiten bei der Netzübertragung noch mit 7-bit ASCII Code. Dieser enthält viele spezielle, sprachspezifische Zeichen wie ü, ä oder ö nicht. Diese Zeichen müssen daher in eine 7-bit Darstellung konvertiert werden (Verwendung eines „Escape-Zeichens“ zur Einleitung von zusätzlichen Zeichen). Unicode Ein neuer Standard (Unicode) codiert jedes Zeichen mit zwei Bytes. Damit sind 65536 verschiedene Zeichen möglich. Unicode verwendet diese Menge um Zeichen aus allen vorkommenden Alphabeten gemeinsam zu codieren. 4.4.4 Codierung von Bildern und Tönen Komplexe Informationen wie Bilder und Töne erfordern geeignete Vorgehensweisen bei der Codierung. Graphiken Man unterscheidet bei Graphiken zwischen Rastergrafik (Bilder) und Vektorgrafik Eigenschaft Dokument besteht aus Rastergrafik Folge von Pixeln Eignung Platzbedarf DIN A4, 16 Mio Farben, 600dpi Formate Fotos ca 95 MB BMP, GIF, JPG, PNG Vektorgrafik Menge von geometrischen Objekten Zeichnungen je nach Umfang ca 10 KB - 1 MB WMF, VSD, CDR Rastergrafik - Bilder Problem: Information gleichmäßig über Fläche verteilt. • Auflösung des Bildes in Rasterpunkte. Bei Bildern für Bildschirmdarstellung je nach Auflösungsgrad 60 bis 360 Bildelemente (pixel) pro Zoll (1 Zoll (inch) = 2,54cm). • Darstellung der Eigenschaften eines Pixels (Grauwert, Farbe, Helligkeit) durch eine Bitfolge (normalerweise ein oder zwei Byte). 55 Schlichter, TU München 4.4. INTERNDARSTELLUNG VON INFORMATION • Darstellung von Farbinformation mittels RGB (rot-grün-blau) oder anderen Codierungen. • VGA: 640 * 480 * (8 bit pro Pixel / 8 bit pro Byte) = 307200 Byte • SVGA: 1024 * 768 * (8 bit pro Pixel / 8 bit pro Byte) = 786432 Byte • Graphics Interchange Format (GIF): häufig vorkommende Folgen von Bytes werden in Tabelle eingetragen; im Bild Verweis auf Tabelleneintrag. The rain in Spain falls mainly on the plain, while the rain in the Amazon just falls ⇒ 85 Zeichen Abkürzungen: W = the, X = ain, Y = on, Z = falls W rX in SpX Z mXly Y W plX, while W rX in W AmazY just Z ⇒ 57 Zeichen • Joint Photographic Expert Group (JPG): Farben des Bildes werden analysiert; weglassen von Information, die für menschliches Auge nicht wichtig erscheint (Achtung: Verlust von Information). Töne Information gleichmäßig über Zeitdauer verteilt. 111 110 101 100 011 010 001 000 101 111 111 111 110 • Diskretisierung und Digitalisierung, je nach erforderlicher Qualität in 100, 1000 und mehr Werte pro Sekunde. Also Unterteilung der Amplitude in Bereiche, denen jeweils eine Bitfolge zugeordnet wird. • Darstellung der Eigenschaften des Tonelements durch ein oder zwei Byte • Sprache wird beim Telefon 8000 mal pro Sekunde (8kHz) abgetastet. 56 Schlichter, TU München 4.4.5 4.4. INTERNDARSTELLUNG VON INFORMATION Komprimierung Kompression von Daten (vor allem bei Bildern und Tönen) um Speicher- und Übertragungskosten zu reduzieren. • Verlustfreie Kompression Ausnutzung von Mustern und Redundanzen in den Daten; Ausnutzung der Häufigkeit von Symbolen durch Änderung der Codierung. • Verlustbehaftete Kompression Ausnutzung von Medien- und Wahrnehmungseigenschaften, z.B. bei MP3 die Nutzung von psychoakustischen Eigenschaften und des Hörverhaltens von Menschen. 57 Kapitel 5 Systemsoftware Ohne Programme ist die Hardware nicht arbeitsfähig. Bei den Programmen werden zwei Klassen unterschieden: Systemprogramme und Anwendungsprogramme. Die Systemprogramme, insbesondere das Betriebssystem, stellen dem Benutzer und Anwendungsprogrammen elementare Dienste zur Verfügung. • Fragestellungen des Abschnitts: – Was sind die Aufgaben eines Betriebssystems? – Welche Dienste bietet ein Betriebssystem zur Arbeit mit Massenspeichern (Festplatte)? – Was sind Prozesse (im Gegensatz zu Programmen)? – Wie wird der Arbeitsspeicher verwaltet? 5.1 Einführung Betriebssysteme verwalten (knappe) Ressourcen eines Rechners und schirmen Anwendungsprogramme von den genauen Eigenschaften der Hardware ab. Beispiele dafür sind die Ausführung mehrerer Programme mit einem Prozessor (CPU), die Zuweisung von Speicher an die Programme und die transparente Verwaltung verschiedener Drucker und Massenspeicher (z.B. Festplatten). 5.1.1 Aufgaben des Betriebssystems Sichten 1. Top-Down-Sicht 58 Schlichter, TU München 5.1. EINFÜHRUNG Abschirmung von der Komplexität und den genauen Eigenschaften der Hardware. Das Betriebssystem ist eine virtuelle Maschine, die für den Anwendungsprogrammierer einfacher zu programmieren ist als die darunter liegende Hardware. 2. Bottom-Up-Sicht Das Betriebssystem ist ein ’Betriebsmittelverwalter’. Es steuert alle internen Abläufe (Prozesse) im Rechner, stellt Dienste für den Mehrbenutzerbetrieb zur Verfügung und koordiniert die Betriebsmittel des Rechners (Arbeitsspeicher, Platte, Terminal, Drucker, ...). Aufgaben 1. Startet und beendet Rechnerbetrieb 2. Lädt Programme, startet und beendet sie 3. Verwaltet Arbeitsspeicher für gleichzeitige Nutzung durch mehrere Programme 4. Steuert Prozessorzuteilung im Falle eines Mehrprogrammbetriebs 5. Stellt Grunddienste für Transport von Daten zwischen Arbeitsspeicher und E/A-Geräten 6. Verwaltet Dateien auf externem Speicher 7. Prüft Zugangsberechtigung von Benutzern 8. Sammelt Daten für Nutzungsabrechnung und Leistungsoptimierung Beispielabläufe • Der Benutzer schreibt einen Text in einem Textverarbeitungsprogramm, hört zur selben Zeit Musik (über den Computer) und druckt eine Tabelle aus einer Tabellenkalkulation aus. Am Rechnersystem werden zur selben Zeit mehrere Geräte genutzt und der Anwender erwartet, dass alles einwandfrei funktioniert. Die Steuerung aller Abläufe ist eine der Aufgaben des Betriebssystems. • Nun möchte der Anwender den Text ausdrucken, obwohl der Ausdruck der Tabelle noch nicht beendet ist. Das Betriebssystem muss hier sicherstellen, dass erst die Tabelle zu Ende gedruckt wird, und dann der Text. 59 Schlichter, TU München 5.1.2 5.1. EINFÜHRUNG Hardware-Software Struktur Benutzer/Anwender Anwendungssoftware graphische Benutzerschnittstelle Dienstprogramme Betriebssystemkern Hardware • Das Betriebssystem besteht aus folgenden Komponenten – Dienstprogramme: machen Betriebssystemfunktionen und -Parameter dem Benutzer direkt zugänglich, z.B. Zugriff auf die aktuelle Systemkonfiguration. – Hardware-unabhängiger Teil – Hardware-abhängiger Teil mit Treiberprogrammen (z.B. Druckertreiber, Graphikkartentreiber) – (Graphische Benutzerschnittstelle: stellt Anwendungsprogrammen und Dienstprogrammen des Betriebssystems Dienste zur Interaktion mit dem Benutzer zur Verfügung) - nicht Teil des engeren Betriebssystems. • Das Betriebssystem ist üblicherweise auf der Festplatte gespeichert. Zum Laden des Betriebssystems von der Festplatte muss ein Basis Ein/Ausgabesystem (BIOS = "Basic I/O System") existieren, um die Festplatte anzusprechen. Das BIOS wird auf einem eigenen Chip, und nicht auf der Festplatte gespeichert. 5.1.3 Betriebssysteme versus Benutzeroberflächen Abgrenzung zwischen Betriebssystemen und (graphischen) Benutzeroberflächen 60 Schlichter, TU München 5.1. EINFÜHRUNG Betriebssystem • ist ein Programm, das dem Benutzer und Anwendungsprogrammen elementare Dienste zur Verfügung stellt • abstrakte Schnittstelle zur Hardware (d.h. Betriebssystem abstrahiert die Eigenschaften der Hardware) • Verwaltung der Ressourcen des Rechners (Arbeitsspeicher, Zugriff auf E/AGeräte, Prozessor) Graphische Benutzeroberfläche / Fenstersystem • Bereitstellung einer komfortablen Schnittstelle zur Bedienung von Anwendungsprogrammen und zum Aufruf von Betriebssystemdiensten (Dienste, welche die Anwendungsprogramme und Dienstprogramme des Betriebssystems nutzen können) • Bildliche Umsetzung von Betriebssystemdiensten (z.B. Mülleimer, Verschieben mit der Maus) • Desktop-Metapher (Nachbildung eines Schreibtisches) 5.1.4 Wesentliche Komponenten eines Betriebssystems • Dateiverwaltung (externer Speicher): Transparente Verfügbarmachung von externen Speichermedien; auf Festplatte werden Informationen in Dateien gespeichert. • Prozessverwaltung: Aufteilung des Prozessors auf mehrere gleichzeitig laufende Aufgaben. • Speicherverwaltung (interner Speicher): Aufteilung des Arbeitsspeichers auf mehrere gleichzeitig laufende Aufgaben (Programme). • Ein/Ausgabegeräte-Verwaltung: Abstraktion der Geräteeigenschaften und Behandlung konkurrierender Zugriffe. 5.1.5 Aktuelle Betriebssysteme • DOS / Windows für Arbeitsplatzrechner/Clients und Arbeitsgruppen-Server, MacOS 61 Schlichter, TU München 5.2. DATEIVERWALTUNG • Unix (Linux, Solaris, HPUX, Irix, ...) für Server (insbes. Web-Server) und Arbeitsplatzrechner • MVS (IBM) für Großrechner/Server • BS2000 (Siemens) für Großrechner/Server • PalmOS, Windows Mobile für PDAs (Handhelds) 5.2 Dateiverwaltung Ein Beispiel für die Aufgaben des Betriebssystems ist die Verfügbarmachung von externen Speichermedien für die laufenden Programme. Damit die Anwendungsprogrammierer und Benutzer nicht mit Sektoren usw. umgehen müssen, werden die Speichermedien in Dateien organisiert. • Dateien haben einen Namen, einen Inhalt und eine Menge von Attributen (z.B. Zugriffsrechte, Länge, Erzeugungs-/Modifikationszeit) • Datei-Inhalt Der Inhalt einer Datei ist eine Folge von Bytes, die von einem Programm interpretiert werden, z.B. als Text, als Zahlen, als Bild oder als Folge von Maschinenbefehlen. Die Art der Interpretation hängt vom jeweiligen Programm ab. • Operationen mit Dateien Typische Operationen mit Dateien sind: Lesen, Schreiben, Ändern (Editieren), Kopieren, Ändern des Dateinamens, Ändern der Dateiattribute. • Dateisysteme 1. erlauben das Ansprechen von Dateien durch logische Namen (anstatt durch physikalische Adressen auf der Festplatte). 2. erlauben Verwaltung von Dateien (create, delete, open, close, read, write, append, copy, move) 3. gruppieren Dateien in Verzeichnissen (Directories); hierarchisches (baumartiges) Dateisystem, z.B. Windows 62 Schlichter, TU München 5.2. DATEIVERWALTUNG 4. erlauben Spezifikation und Durchsetzung von Zugriffsschutz (z.B. Einrichtung von Benutzergruppen) 5. Informationen zu Dateien Dateien werden verschiedene Informationen zugeordnet, z.B. Name, Größe, Typ Name Größe progamme RN.zip Dateiordner 954 KB Recycler CColorSD S H R A Typ WinZip File Dateiordner 1 KB Datei Geändert am 03.07.00 13:31 24.04.00 10:01 28.11.99 11:29 30.10.00 18:33 Attribute A HS HA Systemdatei versteckte Datei (Hidden) schreibgeschützte Datei zu archivierende Datei • Physikalische Datei-Speicherung Eine Datei wird als eine Folge von Blöcken gespeichert. Jeder Block besteht wiederum aus einer Folge von Bytes. Die Größe der Blöcke ist abhängig von dem jeweiligen Datei-/Betriebssystem, z.B. 1 KB, 16 KB, oder 32 KB. 63 Schlichter, TU München 5.2. DATEIVERWALTUNG – Es werden immer ganze Blöcke zur Dateispeicherung verwendet, auch wenn der Platz vom Dateiinhalt nicht komplett benötigt wird. Beispielsweise benötigt auch eine Datei mit nur einem Byte als Inhalt immer einen ganzen Block ⇒ Verschwendung von Speicherplatz; der nicht benötigte Teil des Blockes kann von keiner anderen Datei verwendet werden. 01000110100101001110101111011000110101001011010111 gesamte Platte Partition 1 primärer und sekundärer Bootsektor Partition 2 Partition 3 Wurzelverzeichnis FAT Dateiallokationstabelle Datenblöcke – Die read-Zugriffsmethode des Betriebssystems liefert dem aufrufenden Programm logische Sätze beliebiger Länge. Zwischen Datei- und Arbeitsspeicher werden aber immer nur Blöcke übertragen. – Partitionen verhalten sich wie eigene Festplatten. – Bei Festplatten werden Blöcke in den Sektoren gespeichert. – File Allocation Table (FAT) Ein zentraler Bereich der Festplatte wird benutzt um die Zuordnung von Dateien zu Blöcken und den Zustand von Blöcken (belegt oder nicht belegt) zu speichern. Bei Windows ist dies z.B. der FAT (File Allocation Table), bei Unix der Superblock eines Filesystems. ∗ Eine FAT-Zelle entspricht jeweils einem Block, der einer Datei zugeordnet ist. In einer FAT-Zelle steht entweder die Nummer der nächsten FATZelle (d.h. des nächsten Dateiblocks) oder eine negative Zahl. Letzteres bedeutet, dass es keinen nachfolgenden Dateiblock gibt, die aktuelle FATZelle entspricht dem letzten Dateiblock. 64 Schlichter, TU München 5.3. PROZESSORVERWALTUNG / PROZESSORZUTEILUNG ∗ Unterschiedliche Varianten: FAT16: ca. 216 verschiedene Blöcke. FAT32: ca. 228 verschiedene Blöcke. NTFS (New Technology File System) ist ein alternatives Filesystem für Windows. 5.3 Prozessorverwaltung / Prozessorzuteilung Aufgabe der Prozessverwaltung ist die Koordination mehrerer gleichzeitig laufender Programme. 5.3.1 Prozesse Ein Prozess ("process, task") ist ein Ablauf eines Programms, der von dem Betriebssystem verwaltet wird. Der Ablauf ist bestimmt durch die Befehle und Daten des Programms. Eigenschaften • "Programm in Ausführung" (Folge von Maschinenbefehlen eines Programms das gerade durch den Prozessor (CPU) ausgeführt wird). • Prozess hat einen Zustand und wird durch einen Kontext beschrieben (Prozesskontrollblock). 65 Schlichter, TU München 5.3. PROZESSORVERWALTUNG / PROZESSORZUTEILUNG • Verwaltungseinheit des Betriebssystems. • Operiert in einem "eigenen" Teil des Arbeitsspeichers (Prozessadressraum). • Konkurriert mit anderen Prozessen um Betriebsmittel (z.B. Arbeitsspeicher, Prozessor, Zugriff auf Festplatte). • Kommuniziert mit anderen Prozessen über Nachrichten. • Unterscheidung zwischen – Benutzerprozessen: vom Benutzer gestartete Programme. – Systemprozessen: erbringen System-Dienste des Betriebsystems, beispielsweise Drucken. Zustände eines Prozesses Im Zustand "laufend" ist dem Prozess die CPU zugeteilt, d.h. er kann Befehle ausführen. Der Zustand "wartend" tritt ein, wenn der Prozess auf das Ende der E/A-Übertragung wartet, d.h. während dieser Zeit kann ein anderer Prozess rechnen. laufend (running) zuteilen (dispatch) entziehen (interrupt) bereit (ready) erzeugen (create) melden (wake up) anhalten (block) wartend (waiting) • Nur das "Anhalten" liegt in der Zuständigkeit der Prozesse selbst. Die anderen Übergänge werden von Betriebssystemkomponenten bewirkt (Dispatcher, Scheduler). • Das Betriebssystem verwaltet Listen der Prozesse im Zustand "bereit" oder "wartend". 66 Schlichter, TU München 5.3. PROZESSORVERWALTUNG / PROZESSORZUTEILUNG • In jedem Zustand kann der Prozess gelöscht, und damit aus dem System entfernt werden. 5.3.2 Prozessorzuteilung Laufenden Prozessen ist der Prozessor (CPU) als exklusives Betriebsmittel zugeteilt. Bei einem Zeitmultiplexverfahren erhält der Prozess für eine gewisse Zeit den Prozessor zur Ausführung. Nach Ablauf der Zeitscheibe wird dem Prozess der Prozessor wieder entzogen. Er wird in die Warteschlange der rechenbereiten Prozesse eingereiht. Swap In Swap Out Suspendierte Prozesse Warteschlange(n) rechenbereiter Prozesse starten E/A CPU zuteilen (dispatch) E/A-Warteschlangen • In die E/A-Warteschlangen werden alle diejenigen Prozesse eingereiht, die momentan auf Ein-/Ausgabe warten, d.h. bis das E/A-Gerät fertig ist. Während dieser Zeit können die Prozesse nicht rechnen und würden die CPU blockieren, falls sie die CPU zugeteilt bekommen würden. Damit alle Prozesse einen vernünftigen Anteil an der CPU-Nutzung und am Arbeitsspeicher bekommen, müssen langrechnende Prozesse gelegentlich suspendiert werden, damit auch andere Prozesse eine Chance bekommen => Auslagern von Prozesse auf die Festplatte (Swap-In und Swap-Out) 5.3.3 Prozess-Unterbrechungen (interrupt) Unterbrechungen dienen dazu, die Prozessausführung aufgrund von Ereignissen zu stoppen und gegebenenfalls nach Durchführung einer Ereignisbehandlung fortzusetzen. Beispiele: Rückmeldung eines E/A-Gerätes, Auftreten eines Alarms (z.B. Division durch 0), Ende einer Zeitscheibe (Taktgeber). 67 Schlichter, TU München 5.3. PROZESSORVERWALTUNG / PROZESSORZUTEILUNG • Unterbrechungen werden durch Hardware generiert (nur im Sonderfall abhängig von laufendem Prozess, z.B. Division durch 0). • Ablauf der Unterbrechungsbehandlung 1. Während Prozess A rechnet, tritt eine Unterbrechung auf. 2. Der Prozessor setzt seine Programmausführung im Betriebssystem fort (Unterbrechungsbehandlung) 3. Der Zustand von Prozess A wird in den Prozess-Kontrollblock gespeichert 4. Die Unterbrechungsbehandlung wird ausgeführt (falls nötig) 5. Ein neuer (rechenbereiter) Prozess B wird ausgewählt (vom Scheduler) 6. Der Zustand von Prozess B wird geladen (Dispatcher) 7. Die Bearbeitung von Prozess B wird fortgesetzt (Sprung in den Programmcode von B) • Unterbrechungsverarbeitung Der Interrupt-Handler (Unterbrechungsbehandlungsroutine) identifiziert den Typ der Unterbrechung und wählt Programm zur Behandlung aus. 68 Kapitel 6 Grundlagen der Programmierung In diesem Kapitel wird kurz in die „Kunst des Programmierens“ eingeführt. Dazu werden die grundlegenden Aspekte hinsichtlich Datenstrukturen, Programmkonstrukte, objekt-orientierte Programmierung sowie Strukturierung von Programmen behandelt. • Fragestellungen des Abschnitts: – Was ist ein Algorithmus? – Welche elementaren Datenstrukturen gibt es? – Was sind die grundlegenden Konstrukte einer Programmiersprache? – Was ist unter Objekt-orientierter Programmierung zu verstehen? – Was versteht man unter Modularisierung und Rekursion? 6.1 Einführung Unter „Programmierung“ versteht man den Vorgang, in dem Anweisungen für den Computer erstellt werden. Diese Anweisungen werden in Sprachen geschrieben, welche Menschen verstehen können und werden für den Computer in Maschinensprache übersetzt (z.B. C) oder vom Computer mit Hilfe eines speziellen Interpreterprogramms interpretiert (z.B. Javascript, Makros bei Word/Excel). Programm = Daten + Algorithmus Algorithmus legt die Operationen fest, die auf den Daten ausgeführt werden. 69 Schlichter, TU München 6.1.1 6.1. EINFÜHRUNG Sicht des Programmierers Aus der Sicht eines Programmierers ergibt sich folgender Ablauf: Ablauf der Programmentwicklung Übersetzen Maschinenprogramm Quellprogramm Erstellen Interpretieren Objekt code Starten Spezifikation Prozess Ausgaben Eingaben • Quellprogramm Das Quellprogramm ist die Ausgangsform des Programms, z.B. in der Programmiersprache C, Java oder Basic. • Übersetzen (Compiler) Mit Hilfe des Compilers (Übersetzungsprogramm) wird aus dem Quellprogramm ausführbarer Objektcode erzeugt, das „Maschinenprogramm“. • Objektcode - Maschinenprogramm Objektcode ist die Interndarstellung des Programms, die für den Computer verständlich ist, d.h. das ausführbare Programm (Maschinenprogramm). Mit einem sogenannten "Linker" kann der Objektcode aus mehreren Einzelteilen zusammengesetzt werden: Ausgangspunkt ist dann ein Quellprogramm, das in mehreren unterschiedlichen Dateien abgespeichert ist. • Starten Damit das Maschinenprogramm ausgeführt wird, muss es gestartet werden. Das gleiche Programm kann mehrmals gestartet werden, um unterschiedliche Eingaben zu verarbeiten. 70 Schlichter, TU München 6.2. ALGORITHMUS • Prozess Als „Prozess“ wird die Ausführung eines Objektcodes bezeichnet; hier werden durch das Betriebssystem zusätzliche Daten dynamisch erzeugt, die für die Ausführung notwendig sind. • Interpretieren (Interpreter) Ein Interpreter analysiert das Quellprogramm und führt die Anweisungen gleich aus, ohne eine separate Datei mit dem Maschinenprogramm zu erzeugen; deutlich langsamere Ausführungszeit des Programms im Vergleich zu einem übersetzten Programm. 6.2 Algorithmus Bevor man anfängt ein Programm, also eine Vorschrift zur Lösung einer Aufgabe, zu schreiben, muss man zuerst das zu lösende Problem genau beschreiben, d.h. spezifizieren. 6.2.1 Spezifikation als Ausgangspunkt für ein Programm Eine Spezifikation ist eine vollständige, detaillierte und unzweideutige Problembeschreibung. • vollständig: alle relevanten Informationen sind berücksichtigt. • detailliert: alle Hilfsmittel und Grundaktionen sind aufgelistet, die zur Lösung zugelassen sind. • unzweideutig: klare Kriterien sind festgelegt, die bestimmen, wann eine Lösung akzeptabel ist. 6.2.2 Begriff des Algorithmus Nach der Spezifikation eines Problems geht es anschließend darum, einen Lösungsweg zu entwerfen. Da die Lösung i.a. von einem Rechner ausgeführt werden soll, muss jeder Schritt exakt vorgeschrieben werden. Dies erfolgt mit Hilfe eines Algorithmus. • Der Algorithmus ist eine der ältesten Beschreibungstechniken für Abläufe; benannt nach dem Mathematiker Al-Khwarizmi (ca. 780-850), der am Hofe des Kalifen von Bagdad wirkte. 71 Schlichter, TU München 6.2. ALGORITHMUS • Informelle Charakterisierung eines Algorithmus Ein Algorithmus ist eine detaillierte und explizite Vorschrift zur schrittweisen Lösung eines Problems, d.h. eine Vorschrift zur Lösung einer Aufgabe, wobei die Vorschrift – präzise formuliert, – in endlicher Form dargestellt und – effektiv ausführbar ist. Die Aufgabe kann aus vielen Anwendungsgebieten stammen, z.B. Berechnung numerischer Werte, Text- und Bildverarbeitung, Handhabung von Objekten (Robotik), Zuteilung von Ressourcen, Steuerung von Geräten. • Formale Definition (nach H. Kübe): Ein Algorithmus ist eine in der Beschreibung und Ausführung endliche, deterministische und effektive Vorschrift zur Lösung eines Problems, die effizient sein sollte. – Hierin bedeuten: ∗ endlich in Beschreibung: der Algorithmus kann mit endlich viel Text komplett aufgeschrieben werden. ∗ endlich in Ausführung: nach einer endlichen Zeit wird der Algorithmus beendet. ∗ deterministisch: eindeutige Bestimmung des nächsten Schrittes. ∗ effektiv: eindeutige Ausführbarkeit der Einzelschritte. ∗ effizient: möglichst geringer Verbrauch an Ressourcen (z.B. Arbeitsspeicher). – Ein Algorithmus heißt terminierend, wenn seine Ausführung für jede mögliche Eingabe nach einer endlichen Anzahl von Schritten endet. determiniert, wenn er für eine bestimmte Eingabe bei allen Abläufen immer dieselbe Ausgabe liefert – Beispiel Personalführung Eingabe: Liste aller Mitarbeiter 72 Schlichter, TU München 6.2. ALGORITHMUS wiederhole solange die Liste nicht leer ist wiederhole für alle Mitarbeiter führe willkürlich einen der folgenden Einzelschritte aus: belobige den Mitarbeiter tadle den Mitarbeiter entlasse den Mitarbeiter (entferne ihn aus der Liste) Ende Willkür Ende Wiederhole Ende Wiederhole Ausgabe: Ursprüngliche Liste aller (auch ehemaliger) Mitarbeiter mit Lobund Tadelvorgängen. Algorithmus ist nichtdeterministisch, nichtterminierend, nichtdeterminiert. • Formulierung eines Algorithmus – Sprache Die Formulierung kann in natürlicher oder formaler Sprache vorliegen – Ausführung Die Ausführung kann durch Menschen oder eine Maschine erfolgen. Die Ausführung ist effektiv, wenn sie aus einer Folge von elementaren Bearbeitungsschritten besteht, die für den beabsichtigten Ausführenden zur Verfügung stehen. – Beispiele für Algorithmen ∗ Nicht maschinell ausführbares Beispiel Bestimme das Alter der ältesten Person im Raum 1. 2. 3. 4. Gehe zur ersten Person Frage Person nach dem Alter Merke das Alter Solange noch nicht alle Personen gefragt, wiederhole Schritte 4.a bis 4.c a) gehe zur nächsten Person b) frage nach dem Alter c) wenn das Alter größer als das gemerkte Alter, dann merke Dir das neue Alter 5. Älteste Person ist "gemerktes Alter" alt ∗ Maschinell ausführbares Beispiel Bestimme die größte Zahl aus einer Menge von Zahlen 1. Lies die erste Zahl 2. Initialisiere Platzhalter/Variable z mit der gelesenen Zahl 73 Schlichter, TU München 6.2. ALGORITHMUS 3. Lies die nächste Zahl 4. Wenn diese Zahl größer z, dann setze z auf diese Zahl 5. Wenn noch Zahlen vorhanden, dann gehe zu Schritt 3 6. Gib den Wert von z aus Dabei ist vorausgesetzt, dass die Menge der Zahlen so in der Maschine organisiert ist, dass die Maschine den Zugriff auf die „erste“ Zahl und auf die jeweils „nächste“ Zahl ausführen kann, z.B. als Liste. 6.2.3 Komponenten eines Algorithmus Welche Bestandteile treten in einem Algorithmus auf, werden also benutzt um die Vorschrift zu formulieren? Objekte und Anweisungen In ihrer allgemeinsten Form bestehen Algorithmen aus folgenden Bestandteilen: • Objekte und • Anweisungen, die Operationen an Objekten realisieren. Beispiele Objekte sind z.B. Zahlen, Adressen, Textdokumente. Operationen sind z.B. Addition, Suche, Ausdrucken, Rechtschreibprüfung. Die Operationen bewirken, dass die Objekte von einem ursprünglichen Zustand (Anfangs- oder Eingangszustand) über eventuell notwendige Zwischenzustände in einen Endzustand gebracht werden. (EVA-Prinzip: Eingabe -> Verarbeitung -> Ausgabe) Abstraktion Bei der Beschreibung der Objekte und Operationen ist Abstraktion wichtig. Das bedeutet den Übergang von konkreten Gegebenheiten in eine allgemein gültige Strukturierung der Algorithmen: • Die Abbildung der realen Objekte auf Daten und der Operationen auf einen vorgegebenen Vorrat von Anweisungen und Kontrollstrukturen (z.B. Abbildung einer Menge von Zahlen auf eine Liste mit den Operationen Einfügen, Löschen, Sortieren und Suchen). 74 Schlichter, TU München 6.2. ALGORITHMUS Abstraktion bedeutet: man konzentriert sich auf das Wesentliche; unwesentliche Anteile werden weggelassen. Struktur eines Algorithmus Jeder Algorithmus kann soweit in detaillierte Einzelschritte zerlegt (verfeinert) werden, bis er nur noch aus folgenden Grundstrukturen für die Operationen besteht: • elementarer Einzelschritt: nicht weiter zerlegbare Verarbeitung, z.B. "schalte rotes Licht ein". • Sequenz: Folge von Einzelschritten (Anweisungen); Einzelschritte können zu Blöcken zusammengefasst werden. Beispiel schalte rotes Licht ein; warte eine Minute; schalte gelbes Licht ein; • Alternative: über eine Bedingung gesteuerte Verzweigung, falls Bedingung dann ja-Fall sonst nein-Fall Beispiel falls b ungleich 0 dann berechne a/b und gib Ergebnis aus; sonst melde Fehler • Auswahl (Selektion): Verallgemeinerung der Alternative, • Iteration: Wiederholung einer Menge von Einzelschritten. wiederhole i = 1, .., n verarbeite aktuelles Konto Ki; – Beispiel: Berechnung Zinseszinsen Zu Beginn des Jahres 2000 werde ein Kapital von 10000 Euro zu einem Zinssatz von 3,75 % angelegt. Wie groß ist das Kapital am Ende des Jahres 2005 ? 75 Schlichter, TU München 6.2. ALGORITHMUS Gewinn in 2000 Mit diesen Strukturen können alle Algorithmen beschrieben werden. Blöcke Operationen können zu Blöcken zusammengefasst werden. Damit ist strukturiertes oder systematisches Programmieren möglich. Der gesamte Block wird als komplexe Anweisung verstanden und als Einheit in seiner Umgebung betrachtet, wobei Blöcke auch ineinander geschachtelt werden können. Blockbildung ist eine Vorstufe zur Modularisierung. Für jeden einzelnen Block ist nur ein Eingang und nur ein Ausgang notwendig. Die Klammerung von Operationen kann über spezielle Schlüsselwörter oder auch durch Klammern erfolgen, z.B. {} in C oder Java. 6.2.4 Darstellung von Algorithmen Es gibt eine Reihe unterschiedlicher Darstellungsmethoden für Algorithmen: informelle textuelle Beschreibung, programmiersprachliche Beschreibung, graphische Beschreibung, z.B. Flussdiagramme oder Nassi-Shneiderman. Flussdiagramm Beispiel: Größter gemeinsamer Teiler von M und N (Euklid’scher Algorithmus) 76 Schlichter, TU München 6.2. ALGORITHMUS x und y sind Variablen/Platzhalter. Animation größter gemeinsamer Teiler Link zu Information Programmiersprachliche Darstellung x = M; y = N; while (x != y) if (x > y) x = x - y; else y = y - x; z = x; "x != y" bedeutet hier die Bedingung "x ungleich y". 6.2.5 Algorithmus und Programm Programme sind spezielle Darstellungsformen für Algorithmen. 77 Schlichter, TU München 6.2. ALGORITHMUS Zusammenhang Der Zusammenhang zwischen einem Algorithmus und einem Programm läßt sich folgendermaßen beschreiben: • Ein Programm ist die Formulierung eines Algorithmus in einer Sprache, die der Computer verstehen und abarbeiten kann. • Aus der Sicht der „Maschine“ ist ein Programm eine abgeschlossene (also endliche) Folge von ausführbaren Anweisungen. • Damit ist eine Automatisierung des Algorithmus möglich. • Programmiersprachen sind ein Hilfsmittel zur Abbildung der Daten- und Kontrollstrukturen des Algorithmus in die Sprachkonstrukte des betreffenden Computers (Maschinensprache, Arbeitsspeicher). • Ausführbare Programme sind die Abbildung der Daten- und Kontrollstrukturen in die Interndarstellung des betreffenden Computers. Man spricht hier von Objektcode. Als Interndarstellung wird die Maschinensprache eines Rechners verwendet; die Maschinensprache ist abhängig von dem jeweiligen Hersteller des Prozessors. Zeitlicher Zusammenhang zwischen Algorithmus und Programm Spezifizieren Algorithmisieren Problem Programmieren Algorithmus Quellprogramm Mensch Ausgaben Eingaben Maschine Maschinenprogramm Prozess 78 Schlichter, TU München 6.3 6.3. DATENTYPEN UND AUSDRÜCKE Datentypen und Ausdrücke In diesem und dem folgenden Abschnitt betrachten wir die Grundkonstrukte, die in allen Programmiersprachen Verwendung finden. • Informationen werden auf einem Rechner durch Daten repräsentiert. Die Umsetzung von Daten in Information wird als Interpretation bezeichnet. • Allgemeine Eigenschaften von Daten 1. Es existieren Basisdaten wie Zeichen, Wahrheitswerte (true, false), Zahlen (natürliche Zahlen, ganze Zahlen, Gleitkommazahlen). 2. Daten können angeordnet und miteinander in Beziehung gesetzt werden (z.B. hierarchische Datenstrukturen, Listen). 3. Algorithmen hängen in starkem Maße von der gewählten Datenstruktur (d.h. dem Datentyp und die unterstützten Operationen) ab. Durch geeignete Datenstrukturen können Algorithmen übersichtlicher und effizienter werden. • Elementare Datentypen Ein Datentyp ist die Zusammenfassung von Werten gleicher Art zu einer Klasse, z.B. alle ganzen Zahlen, alle Gleitkommazahlen, alle Zeichen. – Basis-Datentypen Die Verwendung der Schlüsselwörter ("keywords") sind abhängig von der jeweiligen Programmiersprache. ∗ ∗ ∗ ∗ ∗ int: Ausschnitt der ganzen Zahlen (im Rechner darstellbare ganze Zahlen) float: Menge der Gleitkommazahlen double: Menge der Gleitkommazahlen mit doppelter Genauigkeit char: Menge der Zeichen boolean: Werte true und false – Datentyp Verbund (struct) Ein Verbund entsteht durch die Zusammenfassung mehrerer zusammengehöriger Datenwerte zu einem komplexen Datenwert. ∗ Beispiel In der folgenden Tabelle bildet jede Zeile einen komplexen Datenwert vom Datentyp „Person“ Vorname Fritz Hans Name Müller Albers Adresse Hauptstr. 7 Bahnhofstr. 4 79 Alter 38 63 Schlichter, TU München 6.3. DATENTYPEN UND AUSDRÜCKE ∗ Programmiersprachliche Darstellung Beispiel gemäß der Programmiersprache C struct person { char vorname[30]; char name[30]; char adresse[100]; int alter; } Beispiel der Nutzung: struct person p; /* Deklaration der Person p */ p.vorname = "Fritz"; /* Vorname von Person p */ p.name = "Müller"; /* Name von Person p */ ∗ in Java: Zusammenfassung von zusammengehörigen Datenwerten zu Objekten, d.h. jede Tabellenzeile entspricht einem Objekt. ∗ Im Gegensatz zu (Verbund-)Datentypen versteht man unter einer Datenstruktur den Datentyp zusammen mit der Menge von Operationen, die auf den Werten dieses Datentyps erlaubt sind. Beispiele für solche Operationen sind Addition und Substraktion bei ganzen Zahlen sowie Einfügen und Löschen bei Listen. • Ausdrücke Ausdrücke dienen dazu, Werte von Datentypen zu berechnen. Sie können aus Konstanten, Variablen und Operationszeichen aufgebaut werden. – Variable Das Konzept der „Variable“ findet sich in den meisten Programmiersprachen. Es wurde aus der Mathematik übernommen und dahingehend abgewandelt, dass eine Variable nacheinander unterschiedliche Werte repräsentieren kann. ∗ Eine Variable ist eine mit Namen versehene Speicherzelle für Datenwerte; Variable können gelesen und geschrieben werden. Im letzten Fall spricht man auch von Zuweisen eines Wertes an eine Variable. ∗ Jeder Bezeichner (Name) einer Variablen muss i.a. vor seiner ersten Benutzung deklariert werden. Dabei wird festgelegt, dass der Name für eine Variable verwendet wird und meist wird der Variablen dabei ein Datentyp zugeordnet. Beispiele für Ausdrücke 2 + 15 * (10 - 6) a + b wobei a und b Variable sind. 80 Schlichter, TU München 6.4 6.4. PROGRAMMKONSTRUKTE Programmkonstrukte Ein Programm besteht aus einer Menge von Anweisungen, die entweder Werte an Variable zuweisen oder den Kontrollfluss steuern. Der Kontrollfluss bestimmt die Folge der Anweisungen, die bei einer Programmausführung ausgeführt werden. 6.4.1 Zuweisungen In einer Zuweisung wird einer Variablen ein neuer Wert zugeordnet. Ein ggf. vorhandener alter Wert wird dabei gelöscht („überschrieben“). • Eine Variable entspricht einem Bereich im Arbeitsspeicher, der über einen symbolischen Namen angesprochen werden kann (Speicherzelle). Variablen können Daten beliebiger Datentypen speichern. Eine einzelne Variable ist aber in vielen Programmiersprachen auf Daten eines Datentyps festgelegt. • Beispiele i = 2; i = i + 2; /* Wert von i wird um 2 erhöht und wieder an i zugewiesen */ x = x * (y + 1); Zuweisungen werden folgendermaßen bearbeitet: Zunächst wird die rechte Seite der Zuweisung ausgewertet. Das Ergebnis wird anschließend der linken Seite als Wert zugeordnet. Die linke Seite ist eine Variable und kein arithmetischer Ausdruck. 6.4.2 Alternativanweisungen Die Alternativanweisung erlaubt die Auswahl von Alternativen abhängig von einer Bedingung. Die Alternativen sind selbst wieder Anweisungen. • Beispiel 1 if (a > b) z = a; /* Zuweisung an die Variable z */ else z = b; • Beispiel 2 (Schachteln von Alternativen) if (a > b) z = a; else if (a < b) z = b; else z = 0; 81 Schlichter, TU München 6.4. PROGRAMMKONSTRUKTE • Neben einfachen Alternativanweisungen gibt es in den meisten Programmiersprachen noch das verallgemeinerte Konstrukt der Auswahl (switch, case). 6.4.3 Schleifen Eine Schleife beschreibt die wiederholte Ausführung einer Anweisungsfolge. Dabei wird zusätzlich festgelegt, wann die Wiederholung beendet werden soll. • Beispiel 1 N = 10 sum = 0 for (i = 0; i < N; i=i+1) sum = sum + i; – Bestandteile einer for-Schleife Anfangswert der Laufvariable i, z.B. i =0 Endwert der Laufvariable i, z.B. i < N Inkrementierung (Hochzählen) der Laufvariable i nach jedem Schleifendurchlauf, z.B. i = i + 1 Anweisungen, die bei jedem Schleifendurchlauf ausgeführt werden, z.B. sum = sum + i • Beispiel 2 sum = 1 while (i > 0) { sum = sum * i; i = i - 1; } • Beispiel 3 Einfache unendliche Schleife while (true) { ...... } • Neben der while-Schleife gibt es in manchen Programmiersprachen noch andere Konstrukte, wie z.B. do-while/repeat-until, die die Bedingungen erst am Ende der zu wiederholenden Anweisung überprüfen. 82 Schlichter, TU München 6.5 6.5. OBJEKTORIENTIERTE PROGRAMMIERUNG Objektorientierte Programmierung Bei der objektorientierten Programmierung (z.B. Sprache Java) wird ein Softwaresystem durch eine Menge von Objekten realisiert, im Gegensatz zur prozeduralen Programmierung (z.B. Sprache C), wo die Anweisungen im Vordergrund stehen. • Im objektorientierten Programmieren stehen die Daten im Vordergrund. Daten werden in Objekten zusammengefasst ("Verkapselung"). Die Funktionen können lokal zu den Objekten definiert werden. • Die Funktionen werden Methoden genannt. • Objekt - Klasse Ein Objekt ist ein Exemplar (Instanz) eines Gegenstandes oder Begriffs der Modellwelt; ein Objekt ist möglichst stark an Gegenstand oder Begriff der realen Welt angelehnt. – Objekt Ein Objekt hat 1. eine Identität, z.B. vom Benutzer vergebene Namen. 2. einen Zustand, definiert durch Attribute und die zugehörigen Attributwerte ("Instanzvariable", private Daten). 3. ein Verhalten, spezifiziert durch eine Menge von Operationen (Methoden), die auf den Attributen agieren und Operationen anderer Objekte aufrufen können; 4. Beziehungen zu anderen Objekten. Notation für den Zugriff auf die Objektdaten Objektname.Attributname = Attributwert – Klasse Objekte mit gleichen Attributen (nicht Attributwerten) und gleichem Verhalten werden zu Klassen zusammengefasst. Ein Objekt "weiß", zu welcher Klasse es gehört. In der Klasse wird festgelegt: Die Algorithmen für das Verhalten (Methoden) und welche Attribute die Objekte haben. ∗ Beispiel: Klasse Person, zu der die Objekte Schmidt, Mayer, Müller gehören. 83 Schlichter, TU München 6.5. OBJEKTORIENTIERTE PROGRAMMIERUNG ∗ Beispiel: Klassendefinition public class circle { double x, y; // Koordinaten der Kreismitte double r; //Radius des Kreises // Konstruktor für die Erzeugung von Objekten: public circle (double xcoord, double ycoord, double radius) {x = xcoord; y = ycoord; r = radius;} // Methoden, die Umfang und die Fläche // als Ergebnis liefern: public double circumference(){return 2 * 3.14159 * r;} public double area(){return 3.14159 * r * r;} } double bezeichnet eine Variable mit doppelter Genauigkeit. ∗ Schutzmechanismen Kontrolle des Zugriffs auf Daten und Methoden von außen public: Zugriff von außen möglich. private: Zugriff nur von innerhalb der Klasse möglich. • Erzeugen eines Objekts Nach der Spezifikation einer Klasse können beliebig viele Objekte für diese Klasse erzeugt werden => Erzeugen einer Objektinstanz. Jedes Objekt hat seine eigenen privaten Daten (Attributwerte), während die Methoden gemeinsam benutzt werden. – Beispiel circle kreis1, kreis2; // Vereinbarung zweier Variable double flaeche, umfang; kreis1 = new circle(2.0,2.0,1.0); // Erzeugen des Objekts kreis1 // Mittelpunkt: (2,2), Radius: 1.0 // Abfragen der Fläche von kreis1: flaeche = kreis1.area(); // Erzeugen des zweiten Kreises kreis2 = new circle(4.0, -1.0, 10.0); // Abfragen des Umfangs von kreis2: umfang = kreis2.circumference() .............. 84 Schlichter, TU München 6.5. OBJEKTORIENTIERTE PROGRAMMIERUNG • Vererbung Vererbung ist ein Werkzeug zum Organisieren und Konstruieren von Klassen, wobei existierende Klassen wiederverwendet werden können. – Definition - Vererbung Seien K und Ki, i = 1,..,n Klassen; Vererbung ist eine Beziehung zwischen K und den Ki, wobei Struktur und Verhalten von K durch Struktur und Verhalten der Ki bestimmt wird; K "erbt" von den Klassen Ki; ∗ Vererbung definiert eine Beziehung zwischen Klassen; K heißt Unterklasse (Subklasse) von Ki; Ki nennt man Oberklasse (Superklasse) von K; ∗ Vererbung bewirkt, dass Unterklassen über alle Eigenschaften (Attribute, Operationen und Beziehungen) der Oberklasse verfügen; Vererbung kann über mehrere Stufen einer Hierarchie hinweg erfolgen. Vererbung bezieht sich auf Attribute und Methoden; Klasse Klasse Klasse Fahrzeug Auto BMW erbt von Fahrzeug erbt von Auto ∗ Unterscheidung zwischen Einfachvererbung und Mehrfachvererbung ◦ Einfachvererbung: eine Klasse hat nur eine direkte Oberklasse, d.h. n=1. 85 Schlichter, TU München 6.6. MODULARISIERUNG VON PROGRAMMEN ◦ Mehrfachvererbung: eine Klasse hat mehrere direkte Oberklassen – Beispiel public class GraphicCircle extends circle { // Es werden automatisch die Variablen und Methoden // der Klasse circle geerbt; // nur die neuen Informationen müssen hier // aufgeführt werden: // Die Farben für Rand und Füllfläche. color o, f; public GraphicCircle (double xcoord, double ycoord, double radius, color outline, color fill) {super(xcoord,ycoord,radius); o = outline; f = fill;} public void draw(Window dw) {dw.drawCircle(x, y, r, o, f;} } Objekt Werte für x, y, r, o und f Klasse GraphicCircle Beschreibung Klasse circle Beschreibung o, f draw x, y, r circumference area Die Beschreibung der Klasse "circle" (Oberklasse) spezifiziert die privaten Daten "x, y, r"; die Klasse "GraphicCircle" (Unterklasse) spezifiziert die privaten Daten "o, f". 6.6 Modularisierung von Programmen Die wichtigste Technik für den systematischen Aufbau von Programmen ist die Modularisierung. Dabei wird das Programm in mehrere eigenständige Einheiten, die Module zerlegt. 86 Schlichter, TU München 6.6.1 6.6. MODULARISIERUNG VON PROGRAMMEN Allgemeines Entwurf von Algorithmen Beim Entwurf von Algorithmen ist folgende generelle Vorgehensweise sinnvoll: • Spezifikation der Problemstellung • Bestimmung der Definitionsbereiche und der Datentypen • Suche nach / Vergleich mit bekannten Algorithmen, eventuell Erweiterung oder Anpassung der bekannten Algorithmen • Zerlegung des Problems in Teilprobleme ("divide and conquer"-Vorgehensweise); auf jeder Zerlegungsebene Verwendung von – Sequenz von Schritten – Fallunterscheidung (Alternativen) – Iteration von Schritten (Schleifen) • Wiederhole diese Vorgehensweise für jedes Teilproblem Schrittweises Verfeinern von Algorithmen In vielen Fällen ist es schwierig, direkt und adhoc vorzugehen, da der Umfang des Problems sehr groß ist und damit auch Lösungen sehr schwierig zu spezifizieren sind. Bei komplexen Problemen ist es oft auch nicht klar, welche zusätzlichen Aspekte mitberücksichtigt werden müssen. • Problem: Unüberschaubarkeit bei komplexen Aufgaben • Lösung: Zuerst in größeren, gröberen Einheiten denken, dann diese zerlegen • Beispiel: Entwicklung eines Autos 87 Schlichter, TU München 6.6. MODULARISIERUNG VON PROGRAMMEN • Übertragung dieses Ansatzes auf die Zerlegung von Algorithmen in kleinere und überschaubarere Einheiten. Algorithmen-Zerlegung Teilproblem 1 Modul2a komplexes Problem komplexer Algorithmus Teilproblem 2 Modul2b Programmzeile 1 Programmzeile 2 Programmzeile 3 Teil-Algorithmus 2 Modul2c Teilproblem n 6.6.2 Beispiel Zerlegung Aufgabenstellung: Ermittle zu einem gegebenen Datum nach dem 1.1.1900 (gegeben als Tag im Monat, Monat im Jahr und Jahr AD) den Wochentag. • Aufteilung der Aufgabe in mehrere Teilaufgaben – Der 31.12.1899 war ein Sonntag – Ermittle die Zahl der Tage zwischen dem 31.12.1899 und dem gegebenen Datum (Modul) 88 Schlichter, TU München 6.6. MODULARISIERUNG VON PROGRAMMEN – Dividiere diese Zahl durch 7 und ermittle den Rest der Division – Wenn der Rest 0 ist, dann ist das Datum ein Sonntag, bei Rest 1 ein Montag, bei Rest 2 ein Dienstag, ... • Teilaufgabe 1: Zahl der Tage seit dem 31.12.1899 Teilaufgabe wird als Modul mit folgendem Ablauf realisiert: – Setze Zähler auf 0 – Addiere für jedes Jahr (vor dem aktuellen Jahr) seit 1900 die Zahl 365 zum Zähler, wenn Jahr ein Schaltjahr ist, dann addiere zusätzlich 1 – Addiere für jeden vollendeten Monat im aktuellen Jahr die Zahl der Tage im Monat zum Zähler, wenn Monat Februar und Jahr Schaltjahr, dann addiere zusätzlich 1 – Addiere die Zahl der vollendeten oder angebrochenen Tage im aktuellen Monat zum Zähler • Teilaufgabe 2: Ermittlung ob Schaltjahr (Modul) Teilaufgabe wird als Modul mit folgendem Ablauf realisiert: – Wenn nicht durch 4 teilbar, dann nein. – Wenn nicht durch 100 teilbar, dann ja. – Wenn nicht durch 400 teilbar, dann nein, sonst ja. • Aufrufabhängigkeiten der Teilaufgaben ermittle Wochentag zu Datum D ermittle Zahl der Tage seit 31.12.1899 bis D ist betrachtetes Jahr ein Schaltjahr betrachte jedes Jahr von 1899 bis D • Beispiel für den 24.12.2000 – Zähler = 0 – Gehe von 1900 bis 1999 und addiere jeweils 365 oder 366; Ergebnis ist 36524. 89 Schlichter, TU München 6.6. MODULARISIERUNG VON PROGRAMMEN – Gehe von Januar bis November und addiere 31, 28+1, 31, 30, 31, 30, 31, 31, 30, 31, 30 = 335 – Addiere 24 – Zähler = 36883 – 36883/7 = 5269 – Rest der Division ist 0, also ist der 24.12.2000 ein Sonntag 6.6.3 Strukturierung von Algorithmen Zweck der Strukturierung • Vereinfachung/Verkürzung der Darstellung eines Algorithmus und dadurch höhere Lesbarkeit • Ermöglichung der Wiederverwendung von Teilen des Algorithmus in anderen Kontexten • Beispielaufgabe Zeichnen von zwei konzentrischen Quadraten – Plotterfunktionen Gegeben sind folgende Plotter-Grundfunktionen: ∗ ∗ ∗ ∗ ∗ Bewege (x): bewege Zeichenstift um Länge x in aktuelle Zeichenrichtung Links (x): drehe Zeichenrichtung um x Grad nach links Rechts (x): drehe Zeichenrichtung um x Grad nach rechts Stift heben Stift senken – Teilaufgaben Es existieren die folgenden beiden Teilaufgaben (wobei der Zeichenstift am Start in der Mitte des inneren Quadrats ist). 90 Schlichter, TU München 6.6. MODULARISIERUNG VON PROGRAMMEN ∗ Position auf A; Quadrat 10 cm zeichnen ∗ Position auf B; Quadrat 20 cm zeichnen – Definition eines Moduls Kopf public Quadratzeichnen(Größe) Rumpf Stift senken wiederhole 4-mal Bewege (Größe) Links (90) Stift heben ∗ Der Name des Moduls ist "Quadratzeichnen". ∗ Größe ist hier ein formaler Platzhalter; man bezeichnet ihn als formalen Parameter. Er spezifiziert in unserem Fall die Länge einer Quadratkante. Bei der Nutzung des Moduls muss dem formalen Parameter ein aktueller Wert zugewiesen werden. – Nutzung des Moduls (Hauptprogramm) Links (45) Bewege (10cm*1/2* sqrt(2)) Links (135) Quadratzeichnen (10cm) Rechts (135) Bewege ((20cm-10cm)*1/2*sqrt(2)) Links (135) Quadratzeichnen (20cm) Rechts (180) 91 Schlichter, TU München 6.6. MODULARISIERUNG VON PROGRAMMEN "sqrt(2)" berechnet die Wurzel von 2. 6.6.4 Module In vielen Programmiersprachen (z.B. C, C++, Java) existieren Funktionen (Prozeduren) als Mittel zur Strukturierung von Programmen. Form Jede Funktion hat die Form: ergebnistyp funktionsname (parameterliste) { Deklarationen der lokalen Variablen; Anweisungen } • Beispiel in Java (Kopf einer Methode) public int zahl_tage (int tag, int monat, int jahr) • Beispiel in Visual Basic (VBA) public Function zahl_tage (tag As Integer, monat As Integer, jahr As Integer) As Long 92 Schlichter, TU München 6.6. MODULARISIERUNG VON PROGRAMMEN Hauptprogramm bestehend aus Teilmodulen Hauptprogramm Anwendermodule main() { /* berechne Gehalt */ ... get_name() { ... readFromFile() ... } get_name() ... berechne_netto() { ... abzuege() ... } berechne_brutto() ... berechnet_netto() ... abzuege() { ... } gib_aus() ... } (Betriebs-)Systemmodule .... 6.6.5 Prozedurales / Objektorientieres Programmieren Häufig wird zwischen prozeduraler Programmierung und objektorientierter Programmierung unterschieden. 93 Schlichter, TU München 6.6. MODULARISIERUNG VON PROGRAMMEN Prozedurales Programmieren Objektorientiertes Programmieren Anweisungen des Programms Daten Anweisungen zu den Daten Objekte Daten Daten Daten Anweisungen zu den Daten Anweisungen zu den Daten Anweisungen in einem großen Block (getrennt von den Daten) Anweisungen jeweils bei den zugehörigen Daten • Prozedurales Programmieren Computer bekommt eine Sequenz von Anweisungen, die er ausführt, dann wartet er auf nächste Eingabe. Drei Basiselemente: Sequenz, Auswahl (if-thenelse), Iteration. Trennung von Daten und Anweisungen. • Objektorientiertes Programmieren Nicht Mengen von Anweisungen, sondern Objekte. Ein Objekt hat Attribute, Methoden und Ereignisbehandlung. Zusammenfassung von (zusammengehörigen) Daten und Anweisungen. Methoden entsprechen Funktionen; sie nutzen und verändern die Attribute des Objektes. Ereignisse werden bei der Ausführung von Methoden ausgelöst. Beispiel eines Ereignisses ist die Division durch 0. 94 Schlichter, TU München 6.7 6.7. REKURSION Rekursion Unter Rekursion versteht man eine spezielle Form der Modularisierung, bei der das zu definierende Modul auch in der Definition selbst benutzt wird. • Bei bestimmten Algorithmen und Datenstrukturen ist mit Rekursion eine „natürlichere“ Darstellung möglich. • Beispiel Summe Die Summe einer Folge von aufeinanderfolgenden Zahlen kann iterativ und rekursiv berechnet werden. Summe (n) = iterativ: 1 + 2 + .... + (n-1) + n rekursiv: Summe(n-1) + n – Iterative Berechnung int summe = 0; for (int i = 1; i < n+1; i++) summe = summe + i; – Rekursive Berechnung If (n == 0) summe = 0; else summe = summe(n-1) + n; • Der Programmierer muss dafür sorgen, dass eine rekursive Schachtelung von Aufrufen gegen ein definiertes Ende läuft. if (n > 0) summe = summe(n-1) + n; else summe = 0; /* definiertes Ende, wenn n <= 0 */ • Beispiel ’Fibonacci-Zahlen’ Bei den Fibonacci-Zahlen ist bereits die übliche mathematische Problemstellung rekursiv formuliert. Eine direkte Umsetzung als rekursiver Algorithmus bietet sich daher an. – Definition fib(n) = fib(n-1) + fib(n-2) für n>2 fib(1) = fib(2) = 1 Wertebereich: n >= 1, mit n natürliche Zahl 95 Schlichter, TU München 6.7. REKURSION – Algorithmus Modul fib(n) Falls n kleiner 3 dann Ergebnis = 1 sonst Ergebnis = fib(n-1) + fib(n-2) – Implementierung in Java static int fib(int n) { if (n < 3) return 1; else return fib(n-1) + fib(n-2); } Alternative Implementierung static int fib(int n) { return (n < 3) ? 1 : fib(n-1) + fib(n-2); } – Ausführungslauf, z.B. fib(4) fib(4) - fib(3) -- fib(2) = 1 -- fib(1) = 1 - fib(3) = 2 - fib(2) = 1 fib(4) = 3 • Beispiel ’Größter gemeinsamer Teiler’ Gegeben seien zwei Zahlen a, b mit a>0 und b>0. Gesucht ist der größte gemeinsame Teiler ggT(a, b) der beiden Zahlen. Berechnung mit dem Algorithmus nach Euklid. – Idee 96 Schlichter, TU München 6.7. REKURSION Wenn a < b, dann ist der ggT(a,b) der gleiche wie ggT(a,b-a): Wenn die Zahl x die Zahlen a und b teilt, dann auch b-a. Und wenn es einen größeren Teiler von a und b gäbe, würde er auch b-a teilen. – Algorithmus Modul ggT(a ,b) Falls a = b, dann Ergebnis = a falls a < b dann Ergebnis = ggT(a, b-a) falls a > b dann Ergebnis = ggT(a-b, b) • Beispiel ’Türme von Hanoi’ Gegeben sind drei senkrechte Stäbe und n Scheiben verschiedener Größe. Die Aufgabe lautet: Übertrage Turm von Scheiben von einem Stab auf einen anderen, wobei stets nur eine Scheibe bewegt wird und nie eine größere Scheibe auf einer kleineren liegt. a (Ziel) b (Quelle) c (Zwischenlager) – Rekursive Lösung für n Scheiben übertrage n Scheiben von b nach a: übertrage n-1 Scheiben von b nach c (d.h. in das Zwischenlager) letzte Scheibe von b nach a übertrage n-1 Scheiben von c nach a (d.h. vom Zwischenlager zum Ziel) ∗ Algorithmus Die Definition von solveTvH beinhaltet einen Aufruf von solveTvH (mit anderen Parametern) 97 Schlichter, TU München 6.7. REKURSION Modul solveTvH(n, Quelle, Ziel, Zw) /* Zw ist das Zwischenlager */ Falls n = 1 dann bewege Scheibe von Quelle nach Ziel sonst solveTvH(n-1, Quelle, Zw, Ziel); bewege Scheibe von Quelle nach Ziel; solveTvH(n-1, Zw, Ziel, Quelle); /* ... */ bezeichnet einen Kommentar, und keine ausführbaren Anweisungen. – Aufrufschachtelung für n=3 Aufruf solveTvH (3, b, a, c) führt zu den nachfolgenden Rekursionen: ∗ 3bac ( 2bca ( 1bac (b → a); b → c; 1acb (a → c) ); b → a; 2cab ( 1cba (c → b); c → a; 1bac (b → a) ) ) ◦ 3bac entspricht dem Aufruf solveTvH (3, b, a, c) ◦ b → a entspricht: bewege Scheibe von b nach a 98 Schlichter, TU München 6.7. REKURSION – Zahl der Schritte: 2n-1; n ist die Anzahl der zu bewegenden Scheiben. – Anwendung in der Praxis Das Lagerhaltungssystem des Hamburger Container-Hafens ermittelt, welche Portalkräne gerade frei, welche Positionen im Container-Lager noch nicht belegt sind und ermittelt daraus den optimalen Platz, wobei der Ansatz von "Türme von Hanoi" Verwendung findet: Kein Container darf auf einer anderen Kiste abgestellt werden, die zu einem früheren Zeitpunkt als er selbst wieder abgeholt wird, zum Weitertransport per Bahn, LKW oder wieder per Schiff. Animation Türme von Hanoi Link zu Information 99 Kapitel 7 Datenstrukturen und Algorithmen In diesem Kapitel werden einige Klassen von Algorithmen vorgestellt, insbesondere Suchverfahren und Sortierverfahren. • Fragestellungen des Abschnitts: – Welche Möglichkeiten gibt es, Datenmengen im System darzustellen? – Welche Möglichkeiten gibt es, in Datenmengen zu suchen? – Welche Möglichkeiten gibt es, Datenmengen zu sortieren? – Was versteht man unter der Komplexität eines Algorithmus? 7.1 Datenstrukturen Informationen werden im Rechner als Daten gespeichert. Eine Menge von Daten eines bestimmten Typs zusammen mit den auf der Menge ausführbaren Zugriffsoperationen nennt man eine Datenstruktur. Zum Beispiel bilden die Menge der natürlichen Zahlen zusammen mit den Grundrechenoperationen (Addition, Subtraktion, ...) eine Datenstruktur. Datenstrukturen sind bei der Programmierung ein wichtiges Hilfsmittel, die Daten für die maschinelle Verarbeitung geeignet zu organisieren. 7.1.1 Listen Eine Liste ist eine Folge von Elementen, die eine Reihenfolge haben (d.h. jedes Element hat einen Vorgänger und Nachfolger). 100 Schlichter, TU München 7.1. DATENSTRUKTUREN Anker Graf Listenanfang Maier Referenz Müller Referenz Anker definiert Verweis auf 1. Element. Referenz definiert Verweis auf nächstes Element. Beispiele • Wort: Liste von Zeichen. • Personaldaten: Liste von Datensätzen, wobei jeder Datensatz eine Person beschreibt. Operationen auf Listen Erzeugen einer Liste, Einfügen eines Listenelements, Suchen eines Listenelements mit bestimmten Eigenschaften, Löschen eines Listenelements. Reihungen (Array) Eine Reihung ist eine Liste mit bekannter (fester) Zahl von Elementen, wobei jedes Element eine Nummer hat. Die Nummer der Elemente bestimmt die Reihenfolge. Alle Elemente sind vom gleichen Typ. Eine Reihung kann als eine 1-spaltige Tabelle aufgefasst werden. • Reihungen sind sehr einfache und nützliche Formen von Listen, daher gibt es in vielen Programmiersprachen vorgegebene Sprachmittel zum Umgang mit Reihungen. • Deklaration durch: boolean buffer[500] 101 Schlichter, TU München 7.1. DATENSTRUKTUREN Allgemeine Listen • einfach verkettete Listen jedes Listenelement beinhaltet neben dem Inhalt auch eine Referenz auf das nächste Listenelement. • doppelt verkettete Listen jedes Listenelement beinhaltet neben dem Inhalt auch eine Referenz auf das nächste und das vorhergehende Listenelement. – Beispiel class elem { elem previous; char content; elem next; } 7.1.2 Queue - Warteschlange Eine weitere grundlegende Datenstruktur sind Queues, die mit Warteschlangen vergleichbar sind (FIFO-Prinzip, first-in-first-out). put(): fügt ein Element am Ende der Warteschlange hinzu get(): entnimmt ein Element am Anfang der Warteschlange und liefert es zurück put() 3 get() 3 8 2 5 3 8 2 5 5 Realisierung als verkettete Liste oder als Array (falls maximale Größe bekannt). 7.1.3 Graphen Ein Graph ist ein Modell für Beschreibung von Objekten, die in Beziehung zueinander stehen. Er besteht aus der Menge K von Knoten (Ecken bzw. Punkten) und der Menge V von Verbindungen (Kanten), die die Knoten verbinden. Die 102 Schlichter, TU München 7.2. SUCHVERFAHREN Knoten haben Namen und können Träger von Werten sein. Ein Graph G wird durch das Paar (K, V) beschrieben, d.h. G = (K, V). • gerichteter Graph jede Kante im Graph hat eine Richtung, d.h. sie führt von einem Knoten zum selben (Schleife) oder zu einem anderen Knoten. • Weg Ein Weg in einem Graphen ist eine Folge x = K1, K2, ... Kn = y, wobei jeweils zwischen den K1 nach K2, K2 nach K3, ... eine Kante besteht. • Beispiel Straßenkarte wird durch einen Graph dargestellt: Knoten = Städte Kanten = Straßen zwischen den Städten Nutzung des Graphen zur Bestimmung des kürzesten Weges zwischen 2 Städten. • Baum spezieller Graph mit den folgenden Eigenschaften Wurzel: ausgezeichneter Knoten, der den Ursprung des Baums kennzeichnet. keine Zyklen. jeder Knoten (außer der Wurzel) hat genau einen Vorgänger. Animation Graph Algorithmen Link zu Information 7.2 Suchverfahren Ausgangspunkt ist eine Menge von Datensätzen. Es wird nach einem Datensatz mit einer bestimmten Eigenschaft gesucht. 103 Schlichter, TU München 7.2.1 7.2. SUCHVERFAHREN Mengen von Datensätzen Eine Menge von gleichartigen Datensätzen wird üblicherweise in einer Reihung oder einer Liste gespeichert. Bei den folgenden Such- und Sortierverfahren gehen wir immer davon aus, dass die Daten in einer Reihung gespeichert sind. 7.2.2 Lineare Suche Die Reihung mit den Datenelementen wird der Reihe nach durchsucht, bis das gewünschte Element gefunden ist. • Beispiel: Suche nach dem Wert 100 int zahlen[10]; for (i=0; i<10; i++) if (zahlen[i] == 100) break; • Im schlimmsten Fall muss die gesamte Reihung durchsucht werden. Bei großen Datenmengen ist diese Vorgehensweise ungünstig und aufwendig. 7.2.3 Binäre Suche Voraussetzung ist eine Ordnung auf den Datenelementen. Die Elemente werden entsprechend ihrer Ordnung (z.B. entsprechend dem Wert von Zahlen) in einer Reihung gespeichert, d.h. sie müssen aufsteigend oder absteigend geordnet sein. • Sei int A[n] eine Reihung mit n Elementen, das aufsteigend sortiert ist. • Gesucht wird ein Element mit dem Wert x; gesucht wird x im Bereich A[0] bis A[n-1]. 0 ... n-1 sind die Nummern der Reihungselemente. 1. wähle m zwischen 0 und n-1; man wird m ungefähr in der Mitte zwischen 0 und n-1 wählen. 2. wenn A[m] == x, dann sind wir fertig, gib m als Ergebnis aus. 3. wenn x < A[m], dann suche weiter im Bereich A[0] bis A[m-1]; 4. wenn x > A[m], dann suche weiter im Bereich A[m+1] bis A[n-1] • Eine Verdopplung der Anzahl der Listenelemente führt bei binärer Suche zu einem zusätzlichen Vergleich, während es bei linearer Suche im schlimmsten Fall zu einer Verdopplung des Aufwandes führen kann. 104 Schlichter, TU München 7.3. SORTIERVERFAHREN Suchverfahren Animation Link zu Information 7.3 Sortierverfahren Ziel ist es, eine Datenmenge entsprechend einem vorgegebenen Ordnungskriterium zu sortieren. 7.3.1 Sortierverfahren - Beispiel Bubble Sort Sortieren durch Vertauschen von Elementpaaren. Jeweils benachbarte Elemente werden vertauscht, wenn sie nicht wie gewünscht geordnet sind. Dabei steigt das relativ größte Element wie eine Blase (bubble) im Wasser auf. • Vollständiges Sortieren mittels mehrerer Durchgänge. Bei n Elementen maximal n Durchgänge bis keine Vertauschungen mehr notwendig sind. • Beispiel: alphabetisches Sortieren einer Menge von Namen 1. Sortierdurchgang mit jeweils paarweisen Vergleich Jochen Jochen Karin Karin Franz Franz Franz Karin Bernd Bernd Karin Karin Sepp Sepp Jim Jim Sepp Maria Maria Sepp Bernd Sepp Jim Maria 105 Schlichter, TU München 7.3. SORTIERVERFAHREN Original nach 1 nach 2 nach 3 Jochen Karin Franz Bernd Sepp Jim Maria Jochen Franz Bernd Karin Jim Maria Sepp Franz Bernd Jochen Jim Karin Maria Sepp Bernd Franz Jim Jochen Karin Maria Sepp 7.3.2 nach 4 Schritten Bernd Franz Jim Jochen Karin Maria Sepp Sortierverfahren - Beispiel Insert-Sort Einzelnes Einsortieren von Datenelementen in die bereits sortierte Teilreihung nächstes Element sortiert unsortiert x x wird hier eingefügt • Insert-Sort hat geringe Laufzeit, wenn Reihung teilweise vorsortiert. • Im Durchschnitt n2/4 Vergleiche und Vertauschungen. 7.3.3 Rekursives Sortierverfahren - Beispiel Quicksort • Prinzip 106 Schlichter, TU München 7.3. SORTIERVERFAHREN Teilen der Reihung in 2 Teilreihungen, Sortieren der beiden Teilreihungen (mit demselben Verfahren, also rekursiv) und Wiedervereinigen der sortierten Teilreihungen. Algorithmus 1. wähle ein Element aus der Reihung aus, das sogenannte Pivot-element 2. teile das Feld in zwei Teilreihungen, in denen nur Elemente enthalten sind, die größer bzw. kleiner dem gewählten Element sind (d.h. kopiere die Elemente so, dass in vorderen Teil der Reihung (1. Teilreihung) alle Elemente kleiner dem gewählten Element, im hinteren Teil der Reihung (2. Teilreihung) alle Elemente größer dem gewählten Element sind) 3. sortiere die erste Teilreihung. Hier wird rekursiv derselbe Algorithmus aufgerufen, jedoch nun auf der Teilreihung. 4. sortiere die zweite Teilreihung. Hier wird rekursiv derselbe Algorithmus aufgerufen, jedoch nun auf der Teilreihung. 5. vereinige die beiden Teilreihungen. • Beispiel Karin Jim Bernd Bernd Bernd Franz Franz Franz Franz Franz Bernd Bernd Jim Jim Jim Jochen Jochen Jochen Jochen Jochen Sepp Sepp Sepp Karin Karin Jim Karin Karin Sepp Maria Maria Maria Maria Maria Sepp • Quicksort läuft schneller und effizienter ab als Bubblesort (weniger Vergleiche und Vertauschungen). 107 Schlichter, TU München 7.3.4 7.4. KOMPLEXITÄT Sortierverfahren Animation Link zu Information 7.4 Komplexität Nicht alle berechenbaren Algorithmen lassen sich mit "vertretbarem" Aufwand durchführen (Grenze der Durchführbarkeit, Praktikabilität). Bei der algorithmischen Lösung eines gegebenen Problems ist deshalb auch die Effizienz des zu entwickelnden Verfahrens von großer Wichtigkeit. 7.4.1 Komplexität von Algorithmen • Ein Algorithmus ist umso effizienter, je geringer der Aufwand zu seiner Abarbeitung ist. • Aufwand bezieht sich auf bestimmte Ressourcen, z.B. Rechenzeit, Speicherplatz, Anzahl der Geräte • Nach der Ressource richten sich die verschiedenen Komplexitätsmaße. Am wichtigsten sind dabei Zeitkomplexität, und Speicherplatzkomplexität, d.h. wieviel Zeit und wieviel Speicherplatz wird benötigt. • Zu unterscheiden ist die Komplexität eines Algorithmus von der Komplexität eines Problems. Problem bezieht sich hier auf das Ziel, das man erreichen will. Da es für dasselbe Problem viele Algorithmen gibt, setzt man Komplexität des Problems gleich mit Komplexität des besten bekannten Algorithmus. • Das Komplexitätsmaß für einen Algorithmus ist immer eine Funktion abhängig von der Größe der Eingabewerte (mit geeigneter Definition dieser Größe). Damit wird der Aufwand der Verarbeitung relativ zur Menge der zu verarbeitenden Information gemessen. Dies ist ein geeignetes Maß für den durch den Algorithmus bestimmten Aufwand. – Beispiel Das Komplexitätsmaß des Sortierens einer Liste ist beispielsweise abhängig von der Anzahl der zu sortierenden Elemente. Das Komplexitätsmaß des Brechens einer Verschlüsselung ist üblicherweise von der Länge des Schlüssels abhängig. 108 Schlichter, TU München 7.4. KOMPLEXITÄT • Algorithmen bewertet man relativ zu ihrer Komplexität. 7.4.2 Komplexitätsklassen Komplexitätsklassen drücken eine relative Größenordnung (abzüglich konstantem Faktor) aus, und zwar in Abhängigkeit von Zahl n der Wertelemente. Die Zahl n ist dabei durch den jeweiligen Kontext bestimmt, z.B. n ist die Anzahl der Eingabeelemente, oder n ist die Anzahl der zu untersuchenden Datenelemente. • O steht hier für Ordnung: z.B. Wachstum der Laufzeit für einzelne Komplexitätsklassen, und zwar in Abhängigkeit der Anzahl n der Eingabedaten. • Definition Sei f: N → N eine Funktion. Die Komplexitätsklasse O(f) ist definiert durch: O(f) := { t: N → N | ∃ c > 0, m ≥ 0: ∀ n > m: 0 ≤ t(n) ≤ c*f(n) } O-Notation dient dazu, das asymptotische Wachstum einer Funktion abzuschätzen. – Sei t(n) die Funktion zur Bestimmung der Laufzeit des Programms. – mit wachsendem n gewinnt die höchste Potenz von n in t(n) an Bedeutung. • Übliche Komplexitätsklassen Hauptsächlich verwendete Komplexitätsklassen – konstant O(1) – logarithmisch O(log n) – linear O(n) O(n) ⇒ Komplexität ist z.B. 3n + 10; – überlinear O(n log n) – quadratisch O(n2) – polynomial O(nk), k > 2 – exponentiell O(kn), k >= 2 Grafische Darstellung 109 Schlichter, TU München 7.4. KOMPLEXITÄT n 3 2 2 2 • Nicht-polynomiale (oder Nicht-deterministisch-polynomiale) Probleme gelten als "harte" Probleme, da man sie nur in kleinen Bereichen lösen kann. 110 Kapitel 8 Software-Entwicklung Dieses Kapitel behandelt grundlegende Aspekte für „den Entwurf und die Realisierung“ von Softwaresystemen. Dazu werden verschiedene Modelle für das Vorgehen bei der Software-Entwicklung sowie Modelle für die Analyse der Ausgangssituation und den Entwurf des Soll-Systems vorgestellt. • Fragestellungen des Abschnitts: – Welche Kategorien von Programmiersprachen gibt es ? interpretierte und übersetzte Sprachen – Wie kann man bei der Konzeption und der Realisierung eines SoftwareProgramms geeignet vorgehen? Modellierung der verschiedenen Aspekte, z.B. Daten, Abläufe und Interaktion mit dem Benutzer. 8.1 Programmiersprachen Auf der untersten Ebene verarbeitet ein Rechner Instruktionen, die in einer Maschinensprache spezifiziert sind. Zum besseren Umgang mit Maschinensprachen wurden bereits frühzeitig sogenannte Assemblersprachen eingesetzt. Diese sind jedoch sehr Hardware-nahe, und machen es schwierig komplexe Programme zu schreiben . Deshalb wurden sogenannte höhere Programmiersprachen, z.B. C oder Java bereitgestellt, die die Programmierung erleichtern sollen. • Programme, die in einer höheren Programmiersprache erstellt wurden, müssen in ein entsprechendes Programm einer Maschinensprache transformiert werden. 111 Schlichter, TU München 8.1. PROGRAMMIERSPRACHEN • Interpretierer und Übersetzer – Ein Interpretierer (Interpreter) ist ein Programmiersystem, das Anweisungen schrittweise zergliedert, daraus zustandsähnliche Aktionen ableitet und sofort ausführt (es wird jeweils nur eine Programmanweisung betrachtet, und nicht das gesamte Programm; für jede Anweisung wird dann ein Maschinensprache-Unterprogramm des Interpretierers aufgerufen, das der Realisierung der Anweisung entspricht). – Neben Interpretierern gibt es noch sogenannte Übersetzer oder Compiler, welche die Anweisungen eines Programms in einem Durchlauf analysieren und komplett in Maschinensprache umwandeln. – Vorteile von Interpretierern ∗ Interpretierer sind einfacher zu realisieren als Übersetzer (Compiler) ∗ Ermöglicht Quellprogramm-bezogenes, inkrementelles Testen – Nachteile von Interpretierern ∗ Ineffizient bei einfachen, häufig benutzten Funktionen ∗ Fehler, die sonst Übersetzer findet, werden erst zur Laufzeit entdeckt – Beispiele für Interpretierer(sprachen) ∗ Basic ∗ Kommandosprachen von Betriebssystemen, z.B. Shell in DOS Eingabefenster ∗ Skriptsprachen (z.B. JavaScript) • Scriptsprachen Scriptsprachen ermöglichen dem Endanwender, innerhalb einer Applikation (z.B. Textsystem) zu programmieren. – Ziele von Scriptprogrammen ∗ Anpassen der Applikation an eigene Umgebung ∗ Definition von Macros zur Erleichterung der Eingabe. ∗ zur automatische Aktualisierung, z.B. von Feldern in einer Tabellenkalkulation ∗ zur Einbettung von Funktionen in Web-Seiten – Funktionen/Programme erstellt mit Hilfe von Scriptsprachen werden nicht übersetzt, sondern nach dem Programmaufruf direkt ausgeführt, d.h. der Programmcode wird Zeile für Zeile gelesen und ausgeführt; Verwendung von Interpretierer. 112 Schlichter, TU München 8.1. PROGRAMMIERSPRACHEN – Tabellenkalkulation Dokumente einer Tabellenkalkulation heißen Rechenblätter. Sie bestehen aus Zellen, die in endlich vielen Zeilen und Spalten organisiert sind. Zellen enthalten Daten verschiedener Sorten (Zahl, Währung, Datum, Text, ...) Formeln, die aus vordefinierten Funktionen zusammengesetzt sind (Summe, Mittelwert, Runden, ...) ∗ variable Daten werden mit Hilfe von Verweisen auf andere Zellen in Formeln eingegeben, z.B. Summe(A1:A4), Summe(A1;B1;C1) ∗ nur Funktionen mit einer Datenausgabeleitung, d.h. es gibt keinen Datenspeicher ⇒ nicht jeder Algorithmus kann in einer Tabellenkalkulation dargestellt werden. ∗ Auswertung von Formeln bei Zellenänderung. ∗ Programmierung von Kommandobuttons, Textfelder und Dialogboxen. • Auswahl einer Programmiersprache Im Prinzip sind alle Programmiersprachen gleichwertig, d.h. sie erlauben die Formulierung aller Algorithmen. In der Praxis gibt es aber Unterschiede, die bei der Entscheidung für die Verwendung einer Programmiersprache in einem Entwicklungsprojekt helfen. – Empfehlungen 113 Schlichter, TU München 8.2. SOFTWARE-ENGINEERING wenn ... ... dann einfache Programme, Anwendungserweiterungen Basic, Visual Basic, Python, Perl Datenbank-Anwendung Programmlogik und komplexe C, C++ , Java Datenbank-Anwendung und einfache Programm- SQL, Reportgenerator logik Technisch-wissenschaftliche Anwendung und C, C++, Java (Datenbank oder komplexe E/A-Strukturen) und Portabilität (System-Software oder PC-Anwendung) und Por- C, C++, Java tabilität Künstliche Intelligenz-Anwendung Prolog, LISP Internet-Anwendung und Portabilität Java, PHP, Python 8.2 Software-Engineering Softwareerstellung als Ingenieurdisziplin. 8.2.1 Software/Engineering - Definition des Ideals Die Aufstellung und Befolgung guter Ingenieur-Grundsätze und ManagementPraktiken, sowie die Entwicklung und Anwendung zweckdienlicher Methoden und Werkzeuge, mit dem Ziel, mit vorhersagbaren Mitteln, System- und SoftwareProdukte zu erstellen, die hohe, explizit vorgegebene Qualitätsansprüche erfüllen (nach A. Marco & J. Buxton, 1987) 114 Schlichter, TU München 8.2.2 8.2. SOFTWARE-ENGINEERING Komplexität von Software-Projekten Maße für den Umfang von Software • Zahl der Quelltextzeilen der Programme, aus denen das Softwareprodukt besteht (LOC = Lines of Code). • Zeit, die benötigt wird, um eine Programm zu erstellen (Messung in BearbeiterJahre (BJ)). Klassifikation von Software-Projekten Projektklasse sehr klein klein mittel groß sehr groß Quelltext-Zeilen (LOC) 1 - 1.000 1.000 - 10.000 10.000 - 100.000 100.000 - 1 Mio. 1 Mio - ... Bearbeitungsaufwand (BJ) 0 - 0,2 0,2 - 2 2 - 20 20 - 200 200 - ... Beispiele Projektklasse Quelltext-Zeilen (LOC) Windows XP ca. 40 Millionen Windows Vista ca. 50 Millionen Windows 7 ca. 45 Millionen Linux Kernel 2.6 ca 5.2 Millionen Mac OS X 10 ca. 85 Millionen Nutzung von LOC, um Programmierfortschritt zu messen, ist umstritten:„Measuring programming progress by lines of code is like measuring aircraft building progress by weight (Bill Gates).“ Hauptanforderungen bei der Softwareentwicklung • Entwicklung zuverlässiger (fehlerfreier) Software, d.h. Software verhält sich - relativ zu vorgegebenen Toleranzwerten für Abweichungen - gemäß den Anforderungen 115 Schlichter, TU München 8.2. SOFTWARE-ENGINEERING • Entwicklung so, dass Software später problemlos geändert werden kann (z.B. wenn Fehler entdeckt werden, neue Anforderungen gestellt werden, eine andere Hardwareumgebung gewählt wird, ...). Durch die Änderung sollen nicht mehr Fehler produziert werden, als behoben werden. 8.2.3 Vorgehensmodelle Eine zentrale Frage beim Software Engineering betrifft das Vorgehen im Projekt, das erstens eine Fortschrittskontrolle erlaubt und zweitens die Zusammenarbeit mehrere Entwickler und der Entwickler mit dem Management und dem Kunden erlaubt und unterstützt. Code and fix-Verfahren Unsystematische Vorgehensweise in der Frühzeit der Programmiertechnik: Die Programmentwicklung begann mit dem Schreiben von Code und endete mit dem langwierigen und mühseligen Austesten und Zusammenfügen der Programmbausteine. Wasserfall-Modelle Einteilung des Entwicklungsprozesses in sequentiell aufeinander folgende Phasen. Für jede Phase sind Ausgangspunkt und Vorgaben, durchzuführende Tätigkeiten und Ergebnisse genau festgelegt. • Problemanalyse und Anforderungsdefinition • System Definition: fachlicher Entwurf des Datenmodells und des Anwendungsmodells (Funktionen) • Systementwurf: Festlegung der Struktur der zu entwickelnden Software • Implementierung: Programmierung und Modultest • System-Integration und Systemtest • Installation, Betrieb und Weiterentwicklung • Graphische Darstellung 116 Schlichter, TU München 8.2. SOFTWARE-ENGINEERING – jede Projektphase endet mit einem Validierungsprozess, in dem die Ergebnisse der Phase überprüft werden. Das Wasserfallmodell geht von einem sequentiellen Prozess aus; ein Rücksprung ist nur dann erlaubt, wenn sich die Ergebnisse der vorhergehenden Phase als fehlerhaft erweisen. Fatal ist es jedoch, wenn erst beim Systemtest festgestellt wird, dass die Systemdefinition fehlerhaft ist. Prototyping und Spiralmodelle Systematische Abfolge von aufeinander aufbauenden Prototyp-Entwicklungen. Lineare Abfolge der Phasen Analyse, Design und Realisierung jeweils mit den Aktivitäten Zielbestimmung, Bewertung der Alternativen, Prototypentwicklung, Verifikation. 117 Schlichter, TU München 8.2.4 8.2. SOFTWARE-ENGINEERING Strukturierte Programmierung Top-Down-Entwurf: Mit Hilfe einer schrittweisen Verfeinerung wird ein komplexes, nicht überschaubares Problem in mehrere Teilprobleme zerlegt. Dies wird rekursiv fortgesetzt, bis man überschaubare Teilprobleme hat. Eigenschaften Top-Down-Entwurf ist generelle Vorgehensweise beim Entwurf von Softwaresystemen; man spricht auch gelegentlich von "divide-and-conquer" • betrachtet zunächst das gesamte Programm global als eine Funktion (Operation), die nach und nach in Teilfunktionen aufgeteilt (verfeinert) wird; • das Problem wird solange zerlegt, bis es beherrschbar wird; • späte Festlegung der Datendarstellung. Vorteile • man löst Schnittstellenprobleme zuerst, d.h. Festlegung der Parameter von Funktionen/Methoden. • vermeidet dadurch, dass gleichzeitig an verschiedenen Stellen eventuell widersprechende Schnittstellendefinitionen gemacht werden. • erzwingt klärende Strukturierung des Programms (erleichtert Wartung und Änderung). 8.2.5 Modellierung Die Erstellung von geeigneten Modellen vor der Realisierung des Softwaresystems ist ein zentraler Aspekt der Softwareentwicklung Wozu Modellierung? Softwarefehler oder Fehlplanungen 1992: Rettungsleitstelle in London fällt 2-mal komplett aus: Schaden ca. 9 Mio Euro, mehrere Todesfälle 118 Schlichter, TU München 8.2. SOFTWARE-ENGINEERING 1993: Das Taurus-Projekt an der Londoner Börse (automatische Transaktionsabwicklung) wird nach 5 Jahren Laufzeit wieder eingestellt; Verlust 450 Mio Pfund 1996: Ariane 5 muss wegen plötzlichen Neigens 39sec nach dem Start gesprengt werden. Verlust der Sonnensatelliten (850 Mio DM). 2002: Ariane 5 gerät außer Kontrolle und muss in 96 km Höhe mitsamt zweier Satelliten gesprengt werden (600 Mio. Euro) 2003: Toll Collect konnte wegen Unterschätzung der Komplexität der notwendigen Software nicht wie geplant in Betrieb gehen; Verlust mehr als 1 Milliarde Euro. Modellierung zwingt zu sauberer Planung des Systems. • Modellierung vor Programmierung Modellierung dient zur Strukturierung komplexer Systeme Modelle strukturieren Systeme unabhängig von speziellen (zufälligen) Rahmenbedingungen der Implementierungsplattform durch Abstraktion Konzentration auf relevanten Teile; Ausblenden von Details intuitive Darstellung ermöglicht Lösung komplexer Probleme kompakte Beschreibung des Systems; 5 - 10 Diagramme statt 20 Seiten Text Übersichtlichkeit und Verständlichkeit erleichtern Realisierung, Wartung und Kommunikation über das System. Was ist Modellierung in der Informatik Definition: Ein Modell ist eine abstrahierte Beschreibung eines realen oder geplanten Systems, welche die für eine bestimmte Zielsetzung wesentlichen Eigenschaften des Systems wiedergibt. Informatische Modellierung besteht aus Abgrenzen: Identifikation der Grenzen. Abstrahieren: Weglassen von nicht oder wenig bedeutsamen Details, Sonderfällen, speziellen Ausprägungen. Idealisieren: Korrigieren kleiner Abweichungen von idealen Eigenschaften in Richtung einer leichteren Beschreibung. Beschreiben: Anwendung spezieller Techniken zur Darstellung der wesentlichen Eigenschaften des Systems. 119 Schlichter, TU München 8.2. SOFTWARE-ENGINEERING • Beispiel: Bankwesen Aufgabe: Gesucht sind die Adressen und Betreuer von Kunden, deren Kredit den Betrag von 10.000 Euro übersteigt. – Abgrenzen: EDV Ausstattung, Werbeaktionen werden ignoriert Betrachtung der Vorgänge zwischen Kunden und Betreuer – Abstrahieren: Erscheinungsbild, Alter des Betreuers sind nicht relevant wichtig sind seine Abteilung, seine Kunden – Beschreiben: durch Diagramm Kunde hat_offen verfügt_über Konto Kredit betreut betreut Angestellter gehört_zu Abteilung leitet – Realisierung: mit Hilfe von Tabellen in einer Datenbank; Abruf von Information SELECT Kunde.Name FROM Kunde, Kredit WHERE (Kredit.Betrag > 10000 AND Kredit.Kundennr = Kunde.Nummer) 8.2.6 Modelle für Analyse und Entwurf Für die Analyse des Problems, das gelöst werden soll, und den Entwurf des Softwaresystems (vor der Programmierung) existieren eine Reihe unterschiedlicher Modelle. Prozessmodell Das Prozessmodell spezifiziert die Aktionen und den Datenfluss zwischen den Aktionen. Es ergibt sich ein Datenflussdiagramm. 120 Schlichter, TU München 8.2. SOFTWARE-ENGINEERING Datenflussdiagramm beschreibt den Fluss der Daten, nicht den Kontrollfluss; daher keine Programmkonstrukte wie Alternative oder Iteration im Diagramm. • Beispiel Datenfluss Datenmodell Das Datenmodell bestimmt die im System auftretenden Entitäten (Entities), z.B. Kunde, Auftrag, Artikel; im Modell (siehe auch → ER-Modell (siehe Seite 20) im Abschnitt Datenbanken) werden nur die Entity-typen (Datenarten) festgehalten, nicht jedoch die Instanzen (d.h. nicht jeder real auftretender Kunde mit Namen). Entitäten sind fassbar. Zusammen mit den Entity-typen werden die Beziehungen (Relationship-typen) zwischen ihnen dargestellt. • Beispiel Kunden-/Auftragsverwaltung 121 Schlichter, TU München 8.2. SOFTWARE-ENGINEERING • Spezifikation der Beziehungen zwischen den Entitäten – 1 : 1 Beziehung: eine Entität vom Typ A ist genau mit einer Entität vom Typ B verbunden und umgekehrt, z.B. ein Studierender hat genau eine Matrikelnummer. – 1 : n Beziehung: eine Entität vom Typ A ist mit mehreren Entitäten vom Typ B verbunden, aber nicht umgekehrt, z.B. ein Kunde kann mehrere Aufträge erteilen, aber ein Auftrag kommt immer von einem Kunden. – n : m Beziehung: jede Entität vom Typ A ist mit mehreren Entitäten vom Typ B verbunden und umgekehrt, z.B. n Studierende können auf m verschiedene Dokumente im Internet zugreifen. Dynamisches Modell Das dynamische Modell spezifiziert die Zustandsübergänge in dem Softwaresystem; sie spiegeln Veränderungen des Programmzustandes wider. Zustandsübergänge werden durch das Eintreten von Ereignissen ausgelöst, z.B. Eingang eines neuen Auftrags. • Beispiel Auftragseingang 122 Schlichter, TU München 8.2. SOFTWARE-ENGINEERING "kein Auftrag", "zu bestätigen" und "zu liefern" sind Zustände, während "Auftragseingang", "Bestätigung" und "Lieferung" Ereignisse repräsentieren. • Beispiel Getränkeautomat Strom ein Aus Warte zustand Strom aus Abbruchtaste /Geld zurück Ausgabe /Restgeld zurück, Getränkausgabe Getränk gewählt 50ct, 1€ 2€ Limo, Cola Abbruchtaste /Geld zurück Geld erhalten [Eingabe >= 1,50€] 50ct, 1€, 2€ [Eingabe < 1,50€] Limo, Cola wählen "Aus", "Wartezustand", "Geld erhalten" und "Getränk gewählt" sind Zustände 123 Schlichter, TU München 8.2. SOFTWARE-ENGINEERING des Getränkeautomaten. Abstraktion: Übergänge finden (im Vergleich zur Dauer der Zustände) in unendlich kurzer Zeit statt. UML UML (Unified Modeling Language) ist eine moderne Sprache und Notation, um objektorientierte Systeme zu beschreiben. Ansatz für eine modellbasierte Software-Entwicklung. UML unterstützt eine Reihe von unterschiedlichen Diagrammen zur Modellierung der verschiedenen Aspekte des Systems. • Diagrammtypen – Klassendiagram: spezifiert die Objektklassen (Entitätstypen) und deren hierarchischen Zusammenhänge. z.B. Auto ist eine Unterklasse von Fahrzeug. – statisches Beziehungsdiagramm: modelliert die statischen Beziehungen zwischen Objekten. Assoziation: gleichrangige Beziehung zwischen Objekten, z.B. einem Menschen und einer Menge von Büchern, die er liest. Aggregation: Zusammensetzung eines Objektes aus einer Menge von Einzelteilen, z.B. eine Stadt hat eine Menge Häuser. – Zustandsdiagramm: modelliert die Zustände von Objekten und wie sie von einem Zustand in den nächsten übergehen. – Anwendungsfalldiagramm (Use Case): zeigt den Zusammenhang zwischen Anwendungsfällen und den daran beteiligten Akteuren. z.B. eine Arztpraxis hätte die Akteure Arzt, Arzthelfern und Patient sowie die Anwendungsfälle: Patient anmelden, Diagnose stellen und Abrechnung. – Sequenzdiagramm modelliert den zeitlichen Ablauf und die nachrichtenbasierte Kommunikation zwischen ausgewählten Objekten. 124 Schlichter, TU München 8.2. SOFTWARE-ENGINEERING Gesundheitskarte Sende Patientenakte Fordere Praxisgebühr Bezahle Praxisgebühr Quittung 125 Kapitel 9 Grundlagen von Rechnernetzen • Fragestellungen des Abschnitts: – Welche Übertragungsmedien gibt es? – Was ist das Internet? Wie ist es aufgebaut? – Wie werden Rechner im Internet addressiert? – Wie sieht das Kommunikationsreferenzmodell für das Internet aus? 9.1 Einführung • Computersysteme sind in der Regel vernetzt, d.h. sie können mit anderen Computersystemen Daten austauschen. • Zur Vernetzung müssen einzelne Computersysteme physikalisch durch Kabel oder Funk miteinander verbunden werden. Die Kabel- und Funkstrecken werden in ihrer Gesamtheit als Netz bezeichnet. • Intranet und Internet – Intranet verbindet Computersysteme eines Unternehmens – Internet verbindet weltweit Intranets oder einzelne Computersysteme • Internet - Übersicht 126 Schlichter, TU München 9.1. EINFÜHRUNG logische Verbindung für Datenpakete Lokales Netz (Ethernet) physische Verbindung (ISDN, ADSL) Virtuelles Netz (Netz der Netze) Router Lokales Netz (Ethernet) Router – Kommunikation zwischen Rechnern (Router) über verschiedene Teilstrecken (Teilnetze) – Internet = Netz der Netze • Internet - Entwicklung – Arpanet (1969) ∗ Als Möglichkeit zum Zugriff auf einige wenige entfernte Rechner entwickelt (telnet) ∗ Tolerant gegenüber Ausfällen, deshalb Übertragung über mehrere Wege (paketorientierte Datenübertragung) ∗ Anfangs nur einige Universitäten, Forschungsinstitute und Militäreinrichtungen – NSFnet, nationale Netze (1980er Jahre) ∗ Trennung von Forschungs- und Militärnetz ∗ Entstehung regionaler, nationaler Netze für spezielle Nutzergruppen (z.B. EARN, DFN) ∗ Übergänge zwischen den Teilnetzen schwierig und nur beschränkt möglich – Internet (1990er Jahre) ∗ Zusammenschluss von vielen lokalen, nationalen, internationalen Rechnernetzen zum Internet = "Netz von Netzen" ∗ nahtloser, transparenter Übergang zwischen den Teilnetzen; Kommunikation der Rechner mittels eines einheitlichen Protokolls (TCP/IP) 127 Schlichter, TU München 9.1. EINFÜHRUNG ∗ lokale Verwaltung der Teilnetze ∗ Kommerzialisierung – Entwicklung in Zahlen Arpanet NSFnet 1969 1984 ein Netz wenige Netze Internet 1990 3000 Netze Internet Internet 1998 2007 80 000 Netze Internet 2010 10 Rechner einige 100 Rechner 200 000 Rechner 40 Mio Rechner ca. 1,4 Milliarden Nutzer ca. 2 Milliarden Nutzer – Zugriff auf Daten - Früher / Heute .... c:\> ftp 131.159.24.16 ftp:> cd docum/kworld ftp:> get datei1.gif ftp:> bye c:\> showgif datei1.gif • Internet - Technologie Unter Internet-Technologie versteht man hauptsächlich Standards (Protokolle), die es ermöglichen, dass Komponenten verschiedener Hersteller miteinander kommunizieren können. Darunter fallen sowohl Komponenten für den Netzbetrieb als auch Anwendungen, zur Realisierung der Dienste für den Endbenutzer. – Basisdienste ∗ E-Mail 128 Schlichter, TU München ∗ ∗ ∗ ∗ 9.1. EINFÜHRUNG ◦ elektronische Briefpost, die im Netz hierarchieweise verteilt wird; Verteilerlisten, Antwortmodus ◦ Adressen: [email protected] File Transfer Datei-Transfer zwischen verschiedenen Rechnern; "anonymous ftp" Newsgruppen Diskussionsforen, für die man sich als Teilnehmer einschreibt; moderierte und unmoderierte Foren Telnet Log-in in entfernte Systeme WWW (World-Wide-Web) ◦ Konzept zur Vernetzung von Information und zum einheitlichen Zugriff auf Information im Internet; Information kann sich transparent für den Benutzer über mehrere Rechner und mehrere Kontinente hinweg erstrecken; Zugriff über Browser; sehr einfache Bedienung. ◦ Unterscheidung zwischen Benutzer-Software (Browser) und Informationsserver. ◦ Information als formatierter Text mit Referenzen zu anderen Informationen. ◦ Strukturierung der Informationsmenge durch Verweisketten. ◦ Einheitliche Lokalisierung von Information. ◦ Web Browser wird immer mehr zur Benutzerschnittstelle für Anwendungen. Internet aus Nutzersicht 129 Schlichter, TU München 9.2. ÜBERTRAGUNGSMEDIEN ∗ Social Software Software Systeme im Internet, die der menschlichen Kommunikation, Interaktion und Zusammenarbeit dienen; basiert auf Web 2.0 Technologien. Beispiele: Wikis wie Wikipedia Weblogs (Blogs), Netz-Logbuch für Jederman Community Systeme zum Veröffentlichen von eigenen Daten, z.B. Flickr (URL: http://www.flickr.com/) für Fotos, Youtube (URL: http://www.youtube.com/) für Videos Plattformen zum Aufbauen von Beziehungsnetzwerken, z.B. Xing, Facebook. 9.2 9.2.1 Übertragungsmedien Kriterien zur Kategorisierung Einteilung der Übertragungsstrecken 130 Schlichter, TU München 9.3. LOKALE NETZE (LAN) Übertragungsraten Die Leistungsfähigkeit einer Verbindung in Rechnernetzen gibt man üblicherweise in Form einer Übertragungsrate an. Übertragungsraten werden in Bit pro Sekunde angegeben, d.h. pro Sekunde können über die Verbindung die genannte Zahl von Bits übertragen werden. Klassifizierung der Netze nach Datenrate und Entfernung • LAN ("Local Area Network", lokales Netz) dient zur Verbindung von Rechnern (PC’s etc) über kurze Entfernungen (Gebäude); Datenraten ab 100Mb/s und höher. • WAN ("Wide Area Network", Weitverkehrsnetz) dient zur Verbindung von Rechnern oder lokalen Netzen über weite Entfernungen; Verwendung von Punkt-zu-Punkt Verbindungen. • MAN ("Metropolitan Area Network", Stadtverkehrsnetz) werden oft als Brücke zwischen WAN und LAN verwendet; sie überbrücken Entfernungen bis zu einigen 100km. 9.3 Lokale Netze (LAN) Kommanikation im lokalen Netzbereich entweder über ein Festnetz (elektrisches oder optisches Kabel), oder drahtlos (WLAN, Bluetooth) erfolgen. 9.3.1 LAN - Netztopologien Bustopologie 131 Schlichter, TU München 9.3. LOKALE NETZE (LAN) Ethernet basiert auf Broadcast Verbindung; • Beispiel: Ethernet Hub-Topologie Der Bus der Bustopologie ist im Hub zusammengefasst, d.h. kollabierter Bus ⇒ sternförmige Verkabelung. • Hub bekommt zunehmend Vermittlungsfunktionalität (intelligente Hubs). • Beispiel: Fast Ethernet; ähnliches Zugriffsverfahren wie bei Bus. 9.3.2 Zugriffsverfahren des Ethernet - CSMA/CD Ausgangspunkt ist ein Übertragungsmedium, das von allen angeschlossenen Komponenten gemeinsam und in Konkurrenz benutzt wird. Übertragungsmedium wird jeweils exklusiv von einer Komponente zur Übertragung genutzt. 132 Schlichter, TU München 9.3. LOKALE NETZE (LAN) • Abkürzungen: CS = Carrier Sense: vor dem Senden Lauschen auf der Leitung; MA = Multiple Access: mehrere Rechner haben Zugriff; CD = Collision Detect: Mithören während der Sendung, um Kollisionen zu entdecken. • Ablauf des Zugriffsverfahrens Station sendebereit (1) Kanal abhören Warten (7) max Anzahl der Versuche ja belegt (3) (6) frei (2) (4) Daten senden & Kanal abhören Kollision Störsignal senden Fehlermeldung an höhere Schicht (5) keine Kollision 1. Sendewillige Station (Rechner) überwacht Übertragungsmedium (Bus) 2. Übertragungsmedium frei, dann kann Übertragung beginnen 3. Während der Übertragung wird Kanal simultan abgehört; falls gesendete Information und abgehörte Information unterschiedlich, dann wurde eine Kollision festgestellt, d.h. ein anderer Rechner hat auch mit der Übertragung begonnen. Von jedem Rechner führen 2 Leitungen zum Bus: eine Sendeleitung zum Senden von Daten und eine Empfangsleitung zum 133 Schlichter, TU München 9.3. LOKALE NETZE (LAN) Empfangen von Daten. Ein Rechner kann gleichzeitig Daten senden und empfangen. 4. Bei Kollision Senden eines Störsignals 5. Warten gemäß Backoff Strategie; Berechnung der Wartezeit abhängig von der Anzahl der Wiederholungen und von Zufallszahlen, d.h. Auswahl von Zufallszahlen aus [0,1], [0,2], [0,4], [0,8],.. Animation CSMA/CD Link zu Information 9.3.3 Wireless LAN verwenden i.a. eine modifizierte Form von CSMA/CD ⇒ CSMA/CA (Carrier Sense Multiple Access / Collision Avoidance). alle Rechner eines bestimmten drahtlosen LAN senden auf der gleichen Funkfrequenz (z.B. 2,4 Ghz Bereich). Basisstation Festnetz Computer 2 Computer 4 Computer 1 Computer 3 Ablauf des Verfahrens, falls Computer 1 an Computer 2 senden möchte. • Computer 1 überprüft, ob gerade ein anderer Rechner sendet. • falls nein sendet Computer 1 eine Steuernachricht an Computer 2, in dem er seinen Übertragungswunsch kundtut. • Computer 2 antwortet mit einer Steuernachricht an Computer 1, in dem er seine Bereitschaft kundtut. bei Erkennen einer Steuernachricht warten alle anderen Rechner bis die Übertragung der Nachricht von Computer 1 abgeschlossen ist. 134 Schlichter, TU München 9.3. LOKALE NETZE (LAN) • Computer 1 sendet seine Nachricht an Computer 2. Vernetzung von Automobilen Vernetzung von fahrenden Fahrzeugen auf Basis der WLAN Technologie. jedes Fahrzeug im erreichbaren Bereich empfängt Nachricht und propagiert sie möglicherweise weiter Ausbreitung von Nachrichten jedes Fahrzeug fungiert als Router. Es gibt keine zentrale Stelle ⇒ mobiles Adhoc Netz. Anwendungen • Sicherheitsinformation: Ölfleck auf Straße in 500 m, Gefahrenstelle. • Stauinformation, Parkplatzinformation, Sperrung von Straßen, etc. • Kommunikation auch mit festen Stationen möglich, z.B. Museum sendet Information zu spezieller Ausstellung. • Unterscheidung zwischen Car-2-Car, Car-2-Infrastructure, und Car-2-Home • wichtig ist die Festlegung von Standards, damit auch Fahrzeuge unterschiedlicher Hersteller miteinander kommunizieren können. 135 Schlichter, TU München 9.4 9.4. WAN - WIDE AREA NETWORK WAN - Wide Area Network Über Weitverkehrsnetze (WAN) werden die lokalen Netze miteinander verbunden. ein lokales Netz wird von einer Organisation verwaltet. WANs werden i.a. nicht von einer einzelnen Organisation verwaltet. 9.4.1 Internet Internet ist ein Verbund von Rechnernetzen auf der Basis der TCP/IP-Technologie. Netzstruktur des Internet Ethernet Gateway Hub Router Router Backbone Backbones sind Hochgeschwindigkeitsnetze zur Verbindung von Teilnetzen; sie sind meist redundant ausgelegt, um Ausfälle zu tolerieren. Router im Internet sind vergleichbar mit den Vermittlungsanlagen des Telefonnetzes. Zugangsstruktur des Internet 136 Schlichter, TU München 9.4. WAN - WIDE AREA NETWORK Neben der Internetkonnektivität kann ein ISP noch weitere Dienste bereitstellen, u.a.: Speicherplatz für persönliche Web-Seiten (Web-Hosting). ein oder mehrere Email Accounts. Betrieb von speziellen Anwendungsservern für den Nutzer (u.Umständen mit Wartung und Datensicherung). Propagierung von Nachrichten im Internet Zerlegung der gesamten Nachricht in einzelne Pakete, die dann einzeln vom Sender S zum Empfänger E übertragen werden. Auf dem Weg S bis zu E werden die Pakete über mehrere Übertragungsrechner (Router) übertragen. • Pakete können unterschiedliche Wege durch das Internet nehmen, und auch unterschiedlich lange unterwegs sein, d.h. Pakete können in unterschiedlicher Reihenfolge ankommen als sie abgeschickt wurden. Der Empfangsrechner muss die empfangenen Pakete in der korrekten Reihenfolge zusammensetzen, d.h. jedes Paket braucht eine Sequenznummer. • In regelmäßigen Abständen werden Informationen über die angeschlossenen Übertragungsstrecken ausgetauscht, d.h. ist Leitung gestört, ist Leitung überlastet etc. Jeder Router hat eine Tabelle aufgrund der er entscheidet, welchen weiteren Weg ein Paket zum Empfänger nehmen soll. 137 Schlichter, TU München 9.4. WAN - WIDE AREA NETWORK Animation Routing Link zu Information Backbone des Deutschen Wissenschaftsnetzes (DFN) Deutsches Forschungsnetz (DFN (URL: http://www.dfn.de/)); siehe auch das Münchner Wissenschaftsnetz (MWN (URL: http://www.lrz-muenchen.de/services/netz/)) 138 Schlichter, TU München 9.5. REFERENZMODELL Monitoring Werkzeuge Es stehen eine Vielzahl von Werkzeuge zur Verfügung, um beispielsweise die Erreichbarkeit von Servern über das Netz, die Zuordnung von IP-Adressen zu Namen oder den Weg von Nachrichten zu verfolgen. Domaintools: Informationen http://whois.domaintools.com/). über Domains (URL: Verfolgung von Nachrichtenwegen mit traceroute. Erreichbarkeit von Rechnern mit ping. für Werkzeuge siehe auch unter Network-Tools (URL: http://network-tools.com/). 9.5 Referenzmodell Ein Referenzmodell beschreibt den Aufbau und das Zusammenwirken der Netzwerkprotokolle. Beispiele sind ISO/OSI Protokollfamilie TCP/IP Protokollsuite (Referenzmodell des Internet; TCP = Transmission Control Protocol, IP = Internet Protokoll) 139 Schlichter, TU München 9.5.1 9.5. REFERENZMODELL TCP/IP Referenzmodell Das TCP/IP-Referenzmodell ist auf die Internet-Protokolle zugeschnitten. Es ist der de-facto Standard; • Zur Kommunikation zwischen Rechnern über ein Rechnernetz sind Protokolle notwendig. Ein Protokoll besteht aus einer Menge von Datenstrukturen (Nachrichtenaufbau) und Konventionen, wie der Ablauf der Kommunikation stattfindet und wie die Informationen jeweils zu interpretieren sind, z.B. Syntax der Nachrichten, Folge und Bedeutung von Nachrichten. • Zur Reduzierung der Komplexität beim Entwurf eines offenen Rechnernetzes wird das Netz in aufeinander aufbauende Protokoll-Schichten unterteilt. • Prinzipien für Schichtung Zur Gliederung der Kommunikationsaufgaben werden in Netzwerken funktionale Ebenen, so genannte Schichten (layer), unterschieden. – jede Schicht repräsentiert eine Abstraktionsebene – jede Schicht führt eine wohldefinierte Funktion aus – schmale Schnittstellen zwischen Schichten, um Informationsfluss zu minimieren – Funktion einer Schicht ist aufgrund von international spezifizierten Standardprotokollen definiert • Aufbau des Internet-Schichtenmodells 140 Schlichter, TU München 9.5. REFERENZMODELL Prozess P1 Prozess P2 sende E-Mail von P1 nach P2 Anwendung Transport Anwendung sende (lange) Nachricht von E-Mail Programm auf A nach E-Mail Programm auf B Transport Internet sende Pakete Internet Internet Netzzugriff sende Bits Netzzugriff Netzzugriff Rechner A Router Rechner B Gepunktete Pfeile repräsentieren logische Übertragungen. • Bedeutung der Schichten – Netzzugriff: bietet eine Übertragungsmöglichkeit einzelner Dateneinheiten (Bits) unter bestimmten Zeitbedingungen an; Nachrichtenübertragung zwischen zwei benachbarten Rechnern. ∗ Aufgaben: transparente Übertragung von Bitsequenzen, Berücksichtigung der Eigenschaften der Übertragungsmodi (elektrisch, Lichtwelle), Zusammenfassung von Bitsequenzen zu Rahmen (Frames), Fehlererkennung und Fehlerkorrektur auf Rahmenebene – Internet: fehlerfreie Übermittlung eines Pakets von einem Endrechner, über ein Netz von Routern (Vermittlungsrechnern) hinweg, bis hin zum zweiten Endrechner; beinhaltet Routing und Adressierung; fügt Netzwerk-Header hinzu. ∗ Aufgaben: Zusammenschaltung von Teilstrecken zu einer End-zu-End Verbindung, Wegewahl und Vermittlung, Transporteinheit abhängig von der Vermittlungstechnik (bei Paketvermittlung Verwendung von Paketen) – Transport: fehlerfreier Transport von Nachrichten zwischen zwei kommunizierenden Prozessen auf zwei Endrechnern; bildet die anwendungsorientierten Schichten auf die netz-abhängigen Schichten ab; fügt TransportHeader hinzu. 141 Schlichter, TU München 9.5. REFERENZMODELL ∗ Aufgaben: netzunabhängiger Transport von Nachrichten zwischen zwei Endsystemen; passt die vom Anwendungssystem geforderte Übertragungsqualität an die vom darunterliegenden Transportnetz angebotene Übertragungsqualität an ∗ Beispiele: Transmission Control Protocol (TCP: Internet), User Datagram Protocol (UDP: Internet). – Anwendung: es sind verschiedene Applikationsdienst-Elemente festgelegt; deren Auswahl hängt von den ablaufenden Anwendungen ab, z.B. Dateizugriff (FTP), Fernverarbeitung (Telnet), Elektronische Post (SMTP), Name Service, WWW (HTTP). 9.5.2 IP-Adresskonzept Teil des TCP/IP-Referenzmodells ist die Festlegung der Adressierung von Rechnern im Netz. Dazu erhält jedes Computersystem eine eindeutige "Rufnummer", seine IP-Adresse. Eine IP-Adresse besteht aus vier Byte. Diese werden üblicherweise dezimal durch Punkte getrennt geschrieben, z.B. 131.159.24.30 • Die weltweit eindeutige Vergabe von IP-Adressen übernehmen die NICs (Network Information Center). In Deutschland ist das beispielsweise das DENIC (URL: http://www.denic.de/). • Adressklassen IP-Adressen werden in Blöcke zusammengefasst um die Netzverwaltung zu erleichtern. Die Adresse besteht dazu aus Netz-ID und Host-ID. Nur die NetzIDs werden zentral vom Network Information Center vergeben. Die Klasse gibt an, wie groß der Byte-Anteil der Netz-ID ist. 8 bit 0 A B C 0 Netz 7 10 110 D 1110 E 16 11110 24 31 Host-ID Netz-ID Host-ID 14 Netz-ID 21 Host Multicast-Adressen reserviert 142 Subnetze Hosts/pro Netz 126 16.777.214 16.382 65.534 64.547 254 Schlichter, TU München 9.5. REFERENZMODELL – Klasse A: Adressbereich 1.0.0.0 - 127.255.255.255 – Klasse B: Adressbereich 128.0.0.0 - 191.255.255.255 – Klasse C: Adressbereich 192.0.0.0 - 223.255.255.255 – Klasse D: Adressbereich 224.0.0.0 - 239.255.255.255 (verwendet durch Videokonferenzsysteme) ∗ – Klasse E: Adressbereich 240.0.0.0 - 247.255.255.255 • Neben den IP-Adressen können Computersysteme noch einen oder mehrere einfach zu merkende Namen bekommen, wie z.B. www.in.tum.de. Die möglichen letzten Silben (top level domain) sind global festgelegt, die zweitletzte Silbe wird von jeweils zuständigen Stellen vergeben (für die .deDomäne beispielsweise DE-NIC) • Durch den Boom des Internet werden die Adressen bereits knapp; deshalb Erweiterung der IP-Adressen auf 128 Bit (IPv6 Adresskonzept). • Eine Netzverbindung zwischen 2 entfernten Prozessen wird charakterisiert durch: verwendetes Protokoll, z.B. TCP. Adresse des lokalen Prozesses, d.h. IP-Adresse und Portnummer des lokalen Rechners. Adresse des entfernten Prozesses, d.h. IP-Adresse und Portnummer des entfernten Rechners. 9.5.3 Sicherung gegen Fehler Eine Sicherung gegen Fehler wird sowohl bei der Speicherung als auch bei der Übertragung von Daten angewandt. Beispielsweise in der Netzzugriffsschicht des TCP/IP Referenzmodells, welche für die Übertragung zwischen zwei Rechnern zuständig ist. Verwendung eines Paritätsbit Bildung einer binären Quersumme vom Codewort w: qs(w) = Anzahl der "1" im Codewort w, Paritätsbit(w)=0 falls qs(w)=gerade, Paritätsbit(w)=1 falls qs(w)=ungerade. 143 Schlichter, TU München Ziffernsymbol 0 1 2 3 4 5 Parität 0 1 1 0 1 0 9.5. REFERENZMODELL Bitkombination 0000 0001 0010 0011 0100 0101 144 Kapitel 10 Anwendungen von Rechnernetzen • Verteilte Informationsverarbeitung nutzt die Verbindung mehrerer Rechner durch Rechnernetze zum Aufbau komplexer Systeme, die mehr als einen Rechner einbeziehen. Hier gehen wir näher auf Verteilte Anwendungen im Allgemeinen und auf das momentan in diesem Zusammenhang wichtigste Teilgebiet E-Commerce ein. Weiterhin werden Sicherheitsfragen bei Verteilten Anwendungen behandelt. • Fragestellungen des Abschnitts: – Was versteht man unter dem Client/Server-Modell? – Was ist E-Commerce? Welche verteilten Anwendungen spielen hier eine Rolle? – Was versteht man unter Verschlüsselung? Welche grundlegenden Verfahren gibt es? – Was versteht man unter digitalen Signaturen? 10.1 Verteilte Anwendungen Aufteilung einer Anwendung in Komponenten (einzelne Programme auf verschiedenen Rechnern), die miteinander kommunizieren um einen Dienst zu erbringen. 10.1.1 Entwicklung hin zu verteilten Anwendungen Die Zukunft wird eine weiter fortschreitende Vernetzung von heterogenen Rechnern bringen. Anwendungen zur gemeinsamen Nutzung von Ressourcen 145 Schlichter, TU München 10.1. VERTEILTE ANWENDUNGEN (Dateien, Drucker etc.), Kommunikation von Informationen (d.h. besserer Informationsfluss) und zur Koordination von Aktivitäten (Steuerung von Geschäftsvorgängen). 10.1.2 Verteilte Systeme Arten der Verteilung Es gibt mehrere Arten, ein informationsverarbeitendes System zu verteilen. Meist werden mehrere dieser Arten kombiniert. • Hardwarekomponenten Hardwarekomponenten des Systems können auf verschiedene Rechner verteilt sein, möglicherweise weil eine räumliche Verteilung erforderlich ist. • Daten Daten können sowohl auf verschiedene Rechner aufgeteilt (partitioniert) als auch mehrfach gespeichert (repliziert) werden. Die Verteilung ist sowohl bei der Generierung als auch bei der Verarbeitung der Daten innerhalb der Anwendung zu beachten. • Kontrolle/Steuerung Bei verteilter Steuerung stimmen sich die steuernden Komponenten untereinander ab, es ist keine „Zentrale “ vorhanden, die Entscheidungen trifft. Z.B. verteiltes Betriebssystem. • Verarbeitung Z.B. verteilte Ausführung einer Anwendung (in diesem Fall besteht eine Anwendung aus mehreren autonomen Teilkomponenten, die gemeinsam ein Problem/Aufgabe lösen. 10.1.3 Client-Server-Modell Möglichkeit zur Strukturierung von (verteilten) Anwendungen: Server stellen Dienste zur Verfügung, die von (den Servern) vorher unbekannten Clients in Anspruch genommen werden können. 146 Schlichter, TU München 10.1. VERTEILTE ANWENDUNGEN Client und Server Client ruft Operation eines Servers auf; nach Ausführung der Operation wird Ergebnis an den Client übergeben; während der Ausführung der Operation wird der Ablauf des Client meist unterbrochen; leere Antwort ist möglich, falls Operation kein Ergebnis liefert (z.B. Eintrag einer Informationseinheit in eine Datenbank beim Server) • Definition: Client Ein Client ist ein Anwendungsteil, der i.a. eine Anforderung initiiert und den geforderten Dienst von einem Server erhält. – Clients sind meist a-priori beim Server nicht bekannt. • Definition: Server Ein Server ist ein Subsystem, das einen bestimmten Dienst für a-priori unbekannte Clients zur Verfügung stellt. – Client und Server kommunizieren über Nachrichten, wobei beide Systeme auf unterschiedlichen Rechnern ablaufen können, die über ein Netz miteinander verbunden sind. – Antwort dient als Bestätigung, dass die Anforderung durch den Server empfangen wurde. 147 Schlichter, TU München 10.1. VERTEILTE ANWENDUNGEN – Server sind Prozesse, die kontinuierlich eine Schleife folgender Form abarbeiten: while (true) { receive (empfangsport, anforderung) führe anforderung aus und erzeuge antwort send (sendeport, antwort) } 10.1.4 Beispiel-Services Datei-Service Ein Datei-Service (File Service) stellt eine entfernte, zentralisierte Datenspeicherung für Arbeitsplatzrechner zur Verfügung, die über ein Kommunikationsnetz verbunden sind; zentralisiert aus der Benutzer-Perspektive. • Beispiel NFS (Network File System) Clientmaschine Servermaschine Client-Prozess Systemaufruf virtuelles Dateisystem lokal virtuelles Dateisystem entfernt Unix NFS Client Dateisystem NFS Netz NFS Server Unix Dateisystem Protokoll Namens-Service Der Namens-Service (Directory-Service) stellt eine entfernte, zentralisierte Namensverwaltung zur Verfügung. Namen beziehen sich auf Objekte; Beispiele für Objekte sind Dateien, andere Server, Services, Drucker, aber auch Benutzer 148 Schlichter, TU München 10.1. VERTEILTE ANWENDUNGEN Zeit-Service Stellt eine synchronisierte Systemzeit für alle Rechner im Kommunikationsnetz zur Verfügung. 10.1.5 World Wide Web Das World Wilde Web ist organisiert nach der Client/Server Architektur. • Zieladresse wird mit Hilfe einer URL angegeben – Beispiel: http://www11.in.tum.de:80/lehre/vorlesungen/ – http:// gibt das Kommunikationsprotokoll für den Zugriff auf Web-Seiten an. – www11.in.tum.de gibt den Web-Server an. – lehre/vorlesungen/ gibt ein Verzeichnis/Dokument innerhalb des WebServers an. – Standardport des Web-Servers: 80. • Weitere Kommunikationsprotokolle – https:// Kommunikationsprotokoll für den gesicherten Zugriff auf WebSeiten. – file:// Zugriff auf Dateien am lokalen Rechner. – ftp:// Zugriff auf Dateien an einem entfernten Rechner; Nutzung des Filetransfer Dienstes. – mailto: verschicken von Emails an die angegebene Adresse. • Methoden des http Protokolls – GET: anfordern einer Ressource (z.B. eine Web-Seite), die mittels einer URL spezifiziert ist. 149 Schlichter, TU München 10.2. SICHERHEIT IN VERTEILTEN SYSTEMEN – PUT: dient dazu eine Ressource (z. B. eine Web-Seite) unter Angabe der Ziel-URL auf einen Webserver hochzuladen. – POST: schickt unbegrenzte, je nach physikalischer Ausstattung des eingesetzten Servers, Mengen an Daten zur weiteren Verarbeitung zum Server. • Anbindung einer Datenbank Mit Hilfe von Informationen aus Datenbanken können Inhalte von Web-Seiten dynamisch gestaltet werden; dazu Abruf der DB-Information über Servlets und spezielle Schnittstellen, z.B. Java DB Connectivity (JDBC). Servlet - Engine Servlet Web Browser Web Server Java Database Connectivity (JDBC) Datenbank 10.2 Sicherheit in verteilten Systemen Ein wichtiger Aspekt eines Rechnersystems besteht darin, dass Daten nicht von Unbefugten abgefragt werden können. Bei nicht-vernetzten Systemen läßt sich dies durch eine Sicherung des physikalischen Zugangs zu den Rechnern und einfache Passwortsysteme garantieren. Bei verteilten Systemen werden zusätzliche Dienste benötigt. 10.2.1 Sicherheitsanforderungen • Garantierung der Identität eines Absenders (Identitätsprüfung, Authentifizierung). Dies ist besonders wichtig für e-Commerce Anwendungen, z.B. wer hat die Ware bestellt? 150 Schlichter, TU München 10.2. SICHERHEIT IN VERTEILTEN SYSTEMEN • Verhinderung von Mithören (Verschlüsselung). Ein Beispiel dafür ist die Verschlüsselung von Kontoinformation bei der Übertragung zur Bank. • Sicherstellung der Integrität (Unverfälschtheit) von Nachrichten (Hash-Werte). • Verhinderung des Wiedereinspielens von Nachrichten (Integritätssicherung und Zeitstempel). 10.2.2 Arten von Schadsoftware Schadsoftware ("Malware") sind Programme, die Aktionen ausführen, die unerwünscht und meist schädlich sind. • Computerviren: sich selbst verbreitende Programme, die sich in anderen Programmen einschleusen. • Computerwurm: vervielfältigt sich selbst, wenn die Software, in die es eingebettet ist, ausgeführt wird. • Trojanisches Pferd: Software, die vortäuscht eine nützliche Anwendung zu sein, und somit dazu verführt, sie auszuführen. • SPAM: unerwünschte Nachrichten, die dem Empfänger unverlangt zugestellt werden. • Spyware: forscht den Rechner und das Verhalten des jeweiligen Nutzers ohne dessen Wissen aus und sendet die Daten an den Hersteller der Spyware. • Phishing: Versuche, um an geheime Daten eines Nutzers zu gelangen. • Adware: bei normaler Installation oder beim Herunterladen nützlicher Software wird Reklamesoftware installiert. • Dialer: bauen heimlich im Hintergrund über das Telefonnetz eine Wählverbindung zu teueren 0190 bzw. 0900-Nummern auf. 10.2.3 Verschlüsselung Verschlüsselung bedeutet, dass man Daten für die Übertragung oder Speicherung so codiert, dass sie nur vom beabsichtigten Empfänger wieder in "Klartext" zurückcodiert werden können. Für alle eventuellen "Mithörer" bleiben die Daten eine uninterpretierbare Bitfolge. 151 Schlichter, TU München 10.2. SICHERHEIT IN VERTEILTEN SYSTEMEN • Web-Adresse: https://...... ⇒ Daten werden verschlüsselt zwischen Web Browser und Web Server übertragen (z.B. für Online Bestellungen bei Amazon). • Es gibt zwei grundlegende Verfahrensklassen für die Verschlüsselung von Daten: symmetrische Verschlüsselung und asymmetrische Verschlüsselung. • Symmetrische Verschlüsselung Beide Partner (Sender und Empfänger) kennen einen geheimen Schlüssel, der zum Ver- und zum Entschlüsseln verwendet wird. Eine Kenntnis des Schlüssels erlaubt Zugriff auf die Daten. Schlüssel S Klartext Schlüssel S Chiffre Chiffre Sender Klartext Empfänger – Austausch des geheimen Schlüssels über einen anderen, sicheren Kommunikationskanal (z.B. persönlich, Brief) – Für jede mögliche Verbindung wird ein eigener Schlüssel benötigt (Falls derselbe Schlüssel für Nachrichten an B und C benutzt wird, könnte C Nachrichten an B lesen). – Beispiele: DES, Tripple DES, IDEA Erweiterte Caesar-Chiffre – Verschlüsselungsanweisung: Ersetze jeden Buchstaben im Originaltext durch den Buchstaben, der n Stellen im Alphabet weiter hinten (rechts) steht. – Entschlüsselungsanweisung: Ersetze jeden Buchstaben im verschlüsselten Text durch den Buchstaben, der n Stellen im Alphabet weiter vorne (links) steht. – Schlüssel: n (natürliche Zahl zwischen 0 und 26) – Beispiel ∗ Originaltext: "VENI VIDI VICI", Schlüssel = 3 ∗ verschlüsselter Text: "YHQL YLGL YLFL" 152 Schlichter, TU München 10.2. SICHERHEIT IN VERTEILTEN SYSTEMEN – Cäsar-Scheibe • Asymmetrische Kryptosysteme Zum Ver- und Entschlüsseln wird ein Schlüsselpaar (priv, pub) verwendet. Es existiert ein personenbezogener privater Schlüssel priv und ein öffentlicher Schlüssel pub, der allgemein zugänglich und jedem bekannt sein darf. Alle Nachrichten, die mit einem Schlüssel codiert (chiffriert) worden sind, können mit dem jeweils anderen Schlüssel wieder decodiert (dechiffriert) werden. Schlüssel S(Empf,pub) Klartext Schlüssel S(Empf, priv) Chiffre Chiffre Sender Klartext Empfänger – Für sicheren Datenaustausch wird die Nachricht mit dem öffentlichen Schlüssel des Empfängers S(Empf, pub) verschlüsselt. Dann hat nur der Empfänger selbst mit seinem privaten Schlüssel S(Empf, priv) Zugang zum Inhalt. – Geheimer Schlüssel darf nicht aus dem öffentlichen Schlüssel ableitbar sein. – Je länger der Schlüssel desto sicherer ist das System (Angriffsmöglichkeit durch Ausprobieren aller möglichen Schlüssel). 153 Schlichter, TU München 10.2. SICHERHEIT IN VERTEILTEN SYSTEMEN – Beispiel: RSA (Schlüssellänge für Home: 256 Bit, Standard: 512 Bit, Militär: 1024 Bit) – Verschlüsselung mit asymmetrischen Verfahren ist üblicherweise langsamer als mit symmetrischen Verfahren (RSA etwa um den Faktor 1000 langsamer als DES). Deshalb werden die Verfahren in der Praxis oft kombiniert. – Nutzung des asymmetrischen Kryptoverfahrens zum Austausch des geheimen Schlüssels. 10.2.4 Identitätsprüfung • Allgemeine Möglichkeiten – Prüfe etwas, das die Person weiß (z.B. Passwort) – Prüfe etwas, das die Person besitzt (z.B. Ausweis, Chipkarte) – Prüfe eine physikalische Charakteristik der Person (z.B. Fingerabdruck) – Prüfe Ergebnis einer unbewussten Aktion der Person (z.B. Unterschrift) • Grundproblem bei digitaler Übermittlung von Passworten oder anderen Identitätsbeweisen in verteilten Systemen ist die Kopierbarkeit. Mögliche Lösungen sind: – Verschlüsselte Übermittlung des Passworts (immer noch kopierbar ...) • Eine andere Möglichkeit ist die "digitale Unterschrift". • Digitale Unterschrift Durch Senden eines, mit dem privaten Schlüssel verschlüsseltem Datums kann man sich eindeutig ausweisen (eine Entschlüsselung ist nur mit dem öffentlichen Schlüssel der Person möglich). – Digitale Unterschrift = Name oder das Paar [Name, Zeitstempel] mit privatem Schlüssel verschlüsselt – Probleme mit sicherem Austausch von öffentlichen Schlüsseln. – Zertifikate Lösung für das Austauschproblem: Zertifikate 154 Schlichter, TU München 10.2. SICHERHEIT IN VERTEILTEN SYSTEMEN iMac iMac pub priv pub ∗ Zertifikat: öffentlicher Schlüssel Spubwird mit dem privaten Schlüssel TCpriv einer vertrauenswürdigen Stelle (Trust-Center) verschlüsselt. ∗ Zertifikat wird mit digitaler Unterschrift des Trust Centers geschickt. ∗ Vorteil: Empfänger muss nur den öffentlichen Schlüssel des Trust-Centers haben. 155 Kapitel 11 Zusammenfassung Diese Lehrveranstaltung gab eine umfassende Einführung in die verschiedenen Aspekte, Methoden und Technologien der Informatik, insbesondere • Datenbanken und Informationssysteme • Datenstrukturen, Algorithmen und Codierung von Information • Grundlagen der Programmierung und Software-Entwicklungstechnik (Software Engineering) • Rechnerarchitektur, Betriebssysteme • Rechnernetze und Verteilte Systeme mit Client-Server-Architekturen 156