Algorithmen und Programmierung III H. Schweppe FU Berlin Mathematik und Informatik Alle Unterlagen unter: http://www.inf.fu-berlin.de/lehre/WS02/alp3/index.html hs / fub – alp3 - Einführung 1 Algorithmen und Programmieren III Vorlesung: Di. 16 – 18 Do. 12 – 14 Dozent jeweils c.t. etc: H. Schweppe, [email protected] Sprechstunde: Mi. 14-15 und nach Vereinbarung Übungsbetreuung Tutorien: ~ täglich 2 Tutorien, siehe Webs-Seiten -> Eintragen in elektronische Listen Tutor(inn)en: Alex Jäger, Lars Pelz, Meike Johannsen, Reinhardt Karnapke, Jemea Ntuba hs / fub – alp3 - Einführung 2 1 Algorithmen und Programmieren III Alp3-Schein Zulassungsvoraussetzung Vordiplom (neben Alp1- ODER Alp2Schein) Prüfungsleistung Bachelorstudiengang (noch nicht genehmigt) Scheinkriterien Der erfolgreiche Besuch der Lehrveranstaltung Algorithmen und Programmierung III wird benotet bescheinigt, wenn alle der folgenden Kriterien erfüllt sind: 60 % der Punkte der Übungen. von n-1 Übungszetteln 50 % der Punkte der Klausuren (arithm. Mittel der Prozente >= 50) vorauss. Di. 10.12.02, 16.00 und Di. 18.2.03, 16.00 ggf. eine Nachklausur vorauss. 8.4.2003, 16.00 Vorrechnen (mindestens ein Mal) und regelmäßige, aktive Teilnahme an den wöchentlichen Tutorien Bearbeitung hs / fub – alp3 - Einführung 3 Algorithmen und Programmieren III Noten Die Leistungsscheine werden benotet. Die Note errechnet sich aus den erreichten Punkten der beiden Klausuren bzw. der Nachklausur. Für sehr gute Mitarbeit in den Tutorien kann ein Bonus vergeben werden. Übungszettel: nur im Netz Sonstiges Außer den genannten Klausuren gibt es auch bei Vorlage eines ärztlichen Attests keine weitere Prüfung, insbesondere keine "Nach-Nachklausur". Teilnehmer, die Alp3 wiederholen, müssen Übungen abgeben und an Tutorien teilnehmen, um an Klausur teilnehmen zu können. Empfehlung: VD-Prüfung ALP direkt nach diesem Semester! hs / fub – alp3 - Einführung 4 2 Algorithmen und Programmieren III Inhalt 1. Datenabstraktion Abstrakte Datentypen 2. Effiziente Implementierung von Mengen und Relationen mit Datenstrukturen - Listen - Bäume - Hashverfahren - Graphen, ... Objektorientierter Entwurf mit elementarem UML und Implementierung mit Programmiermustern. hs / fub – alp3 - Einführung 5 Algorithmen und Programmieren III Datenabstraktion Spezifikation Datenstrukturen Implementierung Beispiel Menge: abstraktes (mathematisches) Konzept Implementierung durch Bäume oder Felder oder ... Spezifikation: Funktionale Eigenschaften Grundlage der systematischen Entwicklung von Software. Implementierung: neben Realisierung der Funktionen nichtfunktionale Eigenschaften wichtig: Gute Laufzeit, geringer Platzbedarf durch geeignete Wahl einer Datenstruktur hs / fub – alp3 - Einführung 6 3 Literatur M. Goodrich, R. Tamassia: Data Structures and Algorithms in Java John Wiley, 2002 (2. Auflage) , ISBN: 0-471-38367-8, 95 € Moderne Einführung in Datenstrukturen T. Budd: Classic Data Structures in Java, Addison Wesley, 2001, 54 €. T.H. Cormen, C.E. Leiserson, R.L. Rivest: Introduction to Algorithms, MIT Press, 1990 (1. Auflage) oder 2001 (2. Auflage), 58 €, . Wichtiges Buch zu Algorithmen und Datenstrukturen mit Schwerpunkt 'Effiziente Algorithmen' G. Saake, K. Sattler: Algorithmen und Datenstrukturen. Eine Einführung mit Java, dpunkt-Verlag, Heidelberg (ISBN: 3898641228), 2001, 41 € . John Guttag, Barbara Liskov: Program Development in Java: Abstraction, Specification, and Object-Oriented Design, Addison-Wesley (ISBN:0201657686), 2000, 65 € . Eines der wenigen Bücher, die den Bezug zwischen modellierender Spezifikation und Implementierung betonen. S. Thompson: HASKELL - The Craft of Functional Programming, Addison-Wesley, 2. Auflage, 1999. Litratur cont. cont. F. Rabhi, G. Lapalme: Algorithms - A Functional programming Approach, 2. Auflage, Addison Wesley, 1999. B. Preiss: Data Structures and Algorithms with Object-Oriented Design Patterns in Java On-line version of a published book. http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus5/main.html Standish: Data Structures in Java, Addison-Wesley, 1998. Güting: Datenstrukturen und Algorithmen, Teubner, 1992. Methodisch gutes Buch, jedoch Modul-orientiert, also keine Objektorientierung (Sprache: Modula-2) R. Bird: Introduction to Functional Programming using Haskell, Prentice Hall Series in Computer Science, 1998. hs / fub – alp3 - Einführung 8 4 Programmieren.... .... mit Java Im Prinzip reichen javac Editor java Laufzeitumgebung ( >= Java 1.3) Besser (?): Java IDE (Integrated Development Environment) z.B. Netbeans (Sun), Eclipse (IBM), Jbuilder (Borland) siehe Links auf Alp3-Seiten. Nachteil: erheblicher Einarbeitungsaufwand Kein Skript, aber Folien auf Webserver (meist vor VL) hs / fub – alp3 - Einführung 9 1 Einführung 1.1 Softwareentwicklung: Beherrschung von Komplexität Ziel: Kennen lernen / Wiederholen wichtiger Prinzipien der SW-Entwicklung zentrales Thema der praktischen Informatik Windows 2000: 6 Mio Codezeilen (?) mit angeblich 60000 bekannte Fehler in Windows 2000, Rel. 1 Linux Kern: ~ 2.5 Mio LOC (lines of Code), hauptsächlich C http://www.dwheeler.com/sloc/ Ingenieurwissenschaftliche Prinzipien Keep it simple (KIS) Separation of concern http://www.research.ibm.com/hyperspace/ Prinzipien und Methoden für die Softwareentwicklung? hs / fub – alp3 - Einführung 10 5 Methoden der Softwareentwicklung (1) 1.1.1 Zerlegung: "Teile und Herrsche" Wiederholung und Rekursion: Führe Problem auf "einfachere" zurück > > > > > > > > > > > mergeSort :: Ord a => [a] -> [a] mergeSort [] = [] mergeSort [x] = [x] mergeSort xs = merge (mergeSort left ) (mergeSort right) where (left,right)=(take halfLeng xs, drop halfLeng xs) halfLeng = (length xs) `div` 2 merge [] xs = xs merge ys [] = ys merge (y:ys) (x:xs) | y <= x = y:(merge ys (x:xs)) | otherwise = x:(merge (y:ys) xs) hs / fub – alp3 - Einführung 11 Methoden der Softwareentwicklung (2) 1.1.2 Komposition Bottom-up-Konstruktion: aus kleinen, einfachen, korrekten Teilen größere zusammensetzen Number words in a text starting with a vowel (case insensitive) > type Text = [Char] > vowels ::Text -> Int > vowels = length . (filter vowel) . (map caps). (map head) . words' <function> filter map map <function> <predicate> <function> <function> hs / fub – alp3 - Einführung 12 6 Methoden der Softwareentwicklung (2) Komposition Regelhafte Konstruktion von Ausdrücken i) a und b sind Ausdrücke ii) Wenn <A> Ausdruck, dann auch <A>* iii) Wenn <A> und <B> Ausdrücke, dann auch <A><B> und <A>|<B> ab*b = {b, abb, ababb, ...abababababb,...} (a|b)*b = {b, ab, bb, aab, abb, bbb, ....} hs / fub – alp3 - Einführung 13 Methoden der Softwareentwicklung (2) Komposition GUI-Gestaltung hs / fub – alp3 - Einführung 14 7 Methoden der Softwareentwicklung (3) 1.1.3 Generalisierung / Spezialisierung Spezialisierungsebenen Objektorientierung Object Component Button TextComp TextFiel d Labe l TextArea Container Window ScrollPan e hs / fub – alp3 - Einführung 15 Methoden der Softwareentwicklung (4) 1.1.4 Schichtenarchitektur Organisation der Funktionen in Schichten "User Interface" Graphical User Interface Processing Function 1 Common Logic Database Access Text User Interface Processing Function 2 "Business Logic" Logging "Data" hs / fub – alp3 - Einführung 16 8 Methoden der Softwareentwicklung (5) 1.1.5 Muster (patterns) Typische Programmiersituation: Ähnliches Problem bereits häufiger gelöst Beispiel: Reaktion auf eine asynchrone Aktivität (Mauszeiger-Bewegung, Veränderung eines Messwerts, Eintreffen einer Nachricht,...) Vorgehen: Beobachtung entkoppeln; falls Ereignis eintritt, "Subskribenten" benachrichtigen Beobachter-Muster (observer-pattern) hs / fub – alp3 - Einführung 17 Methoden der Softwareentwicklung (5) Muster (patterns) In software development, a pattern (or design pattern) is a written document that describes a general solution to a design problem that recurs repeatedly in many projects. Software designers adapt the pattern solution to their specific project. Patterns use a formal approach to describing a design problem, its proposed solution, and any other factors that might affect the problem or the solution. A successful pattern should have established itself as leading to a good solution in three previous projects or situations. http://whatis.techtarget.com/definitionsSearch/0,,sid9,00.html hs / fub – alp3 - Einführung 18 9 Methoden der Softwareentwicklung (5) Muster (patterns) Beispiel: Adapter-Muster Brauchen wir -> Stecker / Steckdose – Problem # $ ' $% % Haben wir & % % !" !#$% % hs / fub – alp3 - Einführung 19 Methoden der Softwareentwicklung (5) Muster (patterns) Adapter Client (object) «interface» TargetIF Uses 4 1..* 1 interfaceMethod( ) Adaptee ... otherMethod( ) 3 Uses 1 Adapter 1 interfaceMethod( ) hs / fub – alp3 - Einführung 20 10 class WhatIHave { class ProxyAdapter implements WhatIWant { {} WhatIHave whatIHave; public public void h() ProxyAdapter(WhatIHave wih) { {} Adaptee whatIHave = wih; } } interface WhatIWant public void f() { { // Implement behavior using void f(); Interface // methods in WhatIHave: } whatIHave.g(); class WhatIUse { whatIHave.h(); public void op Adapter } (WhatIWant wiw) { } wiw.f(); public void g() Beispiel aus B. Eckel: Thinking in Patterns } Client } Methoden der Softwareentwicklung (6) 1.1.6 Abstraktion Abstraktion durch Parametrisierung: λ x ( x*x) Abstraktion durch Spezifikation P : true alle Zustände x,y ∈ int erlaubt S': y x x } { = y + x; = -x + y; = x * x S Q : (y = Y + X ∧ x = Y*Y ∧ x >= 0 ) Abstraktion S'': { int z = x; x = y * y; y = y + z } Verschiedene Implementierungen erfüllen Spezifikation hs / fub – alp3 - Einführung 22 11 Methoden der Softwareentwicklung(6) Abstraktion Geheimnisprinzip Modell : (Information hiding) Wichtiger Begriff Klient (Auftraggeber) Dienstangebot Abstraktionsbarriere Dienstleister (Auftragnehmer) hs / fub – alp3 - Einführung 23 Methoden der Softwareentwicklung (6) Geheimnisprinzip (2) Was, nicht wie Beispiele wird etwas geleistet! Geldautomat Dienstangebot : Geldanforderung, Geheimzahl, Betrag,... Auszahlung Annahmen über die Dienstleistung, die nicht im Dienstangebot festgeschrieben sind, können zu Fehlern führen, z.B. "Betrag wird online abgebucht" Schlange (queue) Dienstangebot: first-in–first-out – Verhalten Nutzung von Eigenschaften der Implementierung (z.B mit "Feld") schränkt Freiheitsgrad des Dienstleisters ein Schlecht! hs / fub – alp3 - Einführung 24 12 Methoden der Softwareentwicklung (6) Datenabstraktion Beispiel: ganze Zahlen a) Binärdarstellung .....wie üblich b) gepackte Dezimaldarstellung (IBM) 7 3 1 9 9 A Folge von binär codierten Dezimalzahlen (2 pro Byte) mit rechtem Vorzeichen-Halbbyte Arithmetische Operationen wie a) Daten werden durch erlaubte Operationen charakterisiert .... nicht durch ihre Repräsentation (Implementierung) Repräsentation wichtig für nichtfunktionale Eigenschaften (Laufzeiteffizienz, Erweiterbarkeit) -> Abstrakte Datentypen hs / fub – alp3 - Einführung 25 13