Algorithmen und Programmierung III

Werbung
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
Herunterladen