Algorithmen und Datenstrukturen ¨ 10. Ubung Abstrakte Datentypen, Freies Programmieren: Quilt
Clemens Lang ¨ Ubungen zu AuD
14. Januar 2010
¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
1/9
Organisatorisches: Evaluation
Die Evaluation Gesetzlich vorgeschriebene Bewertung der Lehrveranstaltungen durch die Studenten M¨oglichkeit f¨ ur Kritik und Verbesserungsvorschl¨age Teilnahmeberechtigung“: TAN ” Unter eva.uni-erlangen.de → TechFak → TAN-Eingabe-Fenstera Bis 29.01., 0:00 Uhr Bitte evaluieren! a
oder gleich mit diesem Direktlink
¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
2/9
Organisatorisches: Evaluation
Die Evaluation Gesetzlich vorgeschriebene Bewertung der Lehrveranstaltungen durch die Studenten M¨oglichkeit f¨ ur Kritik und Verbesserungsvorschl¨age Teilnahmeberechtigung“: TAN ” Unter eva.uni-erlangen.de → TechFak → TAN-Eingabe-Fenstera Bis 29.01., 0:00 Uhr Bitte evaluieren! a
oder gleich mit diesem Direktlink
¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
2/9
Organisatorisches: Evaluation
Die Evaluation Gesetzlich vorgeschriebene Bewertung der Lehrveranstaltungen durch die Studenten M¨oglichkeit f¨ ur Kritik und Verbesserungsvorschl¨age Teilnahmeberechtigung“: TAN ” Unter eva.uni-erlangen.de → TechFak → TAN-Eingabe-Fenstera Bis 29.01., 0:00 Uhr Bitte evaluieren! a
oder gleich mit diesem Direktlink
¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
2/9
Organisatorisches: Evaluation
Die Evaluation Gesetzlich vorgeschriebene Bewertung der Lehrveranstaltungen durch die Studenten M¨oglichkeit f¨ ur Kritik und Verbesserungsvorschl¨age Teilnahmeberechtigung“: TAN ” Unter eva.uni-erlangen.de → TechFak → TAN-Eingabe-Fenstera Bis 29.01., 0:00 Uhr Bitte evaluieren! a
oder gleich mit diesem Direktlink
¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
2/9
Organisatorisches: Evaluation
Die Evaluation Gesetzlich vorgeschriebene Bewertung der Lehrveranstaltungen durch die Studenten M¨oglichkeit f¨ ur Kritik und Verbesserungsvorschl¨age Teilnahmeberechtigung“: TAN ” Unter eva.uni-erlangen.de → TechFak → TAN-Eingabe-Fenstera Bis 29.01., 0:00 Uhr Bitte evaluieren! a
oder gleich mit diesem Direktlink
¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
2/9
Organisatorisches: Evaluation
Die Evaluation Gesetzlich vorgeschriebene Bewertung der Lehrveranstaltungen durch die Studenten M¨oglichkeit f¨ ur Kritik und Verbesserungsvorschl¨age Teilnahmeberechtigung“: TAN ” Unter eva.uni-erlangen.de → TechFak → TAN-Eingabe-Fenstera Bis 29.01., 0:00 Uhr Bitte evaluieren! a
oder gleich mit diesem Direktlink
¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
2/9
Abstrakte Datentypen
(10.1, 10.2)
Was ist ein ADT? Ein ADTa beschreibt formal eine Komponente einer Software durch: Signatur Liste von Operationen, die auf die Komponente angewendet werden k¨onnen Axiome mathematische Ausdr¨ ucke, die das Verhalten der Operationen spezifieren Dabei wird zun¨achst keine Implementierung benutzt. ADTs sind daher unabh¨angig von Programmiersprachen. a
aus dem englischen Abstract Data Type
¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
3/9
Abstrakte Datentypen: Begriffe
(10.1, 10.2)
Begriffe Konstruktor Operation, die ein Objekt des beschriebenen Typs zur¨ uckgibt Projektion Operation, die Infos u uckgeben ¨ber ein Datenobjekt zur¨ (z.B.: Anzahl der Elemente)a Normalform Objekt, das durch eine minimale Zahl von Kostruktoraufrufen dargestellt ist Prim¨arkonstruktoren Menge von Konstruktoren, die n¨otig ist, um alle m¨oglichen Datenobjekte erzeugen zu k¨ onnen Hilfskonstruktor Konstruktor, der kein Prim¨arkonstruktor ist a
auch: Selektion
¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
4/9
Abstrakte Datentypen: Begriffe
(10.1, 10.2)
Begriffe Konstruktor Operation, die ein Objekt des beschriebenen Typs zur¨ uckgibt Projektion Operation, die Infos u uckgeben ¨ber ein Datenobjekt zur¨ (z.B.: Anzahl der Elemente)a Normalform Objekt, das durch eine minimale Zahl von Kostruktoraufrufen dargestellt ist Prim¨arkonstruktoren Menge von Konstruktoren, die n¨otig ist, um alle m¨oglichen Datenobjekte erzeugen zu k¨ onnen Hilfskonstruktor Konstruktor, der kein Prim¨arkonstruktor ist a
auch: Selektion
¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
4/9
Abstrakte Datentypen: Begriffe
(10.1, 10.2)
Begriffe Konstruktor Operation, die ein Objekt des beschriebenen Typs zur¨ uckgibt Projektion Operation, die Infos u uckgeben ¨ber ein Datenobjekt zur¨ (z.B.: Anzahl der Elemente)a Normalform Objekt, das durch eine minimale Zahl von Kostruktoraufrufen dargestellt ist Prim¨arkonstruktoren Menge von Konstruktoren, die n¨otig ist, um alle m¨oglichen Datenobjekte erzeugen zu k¨ onnen Hilfskonstruktor Konstruktor, der kein Prim¨arkonstruktor ist a
auch: Selektion
¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
4/9
Abstrakte Datentypen: Beispiel
(10.1, 10.2)
Datentyp Liste Signatur: create: append: getHead:
Liste × int Liste
→ → →
Liste Liste int
Axiome: A1 getHead(append(L, a)) = getHead(L) mit L 6= create() A2 getHead(append(create(), a)) = a Welche Konstruktoren hat die Liste? Welche davon sind Prim¨ar-, welche Hilfskonstruktoren? Welche Projektionen/Selektionen hat die Liste? Was tut getHead()? ¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
5/9
Abstrakte Datentypen: Beispiel (2)
(10.1, 10.2)
Datentyp Boolean Signatur: true: false: not: Boolean and: Boolean × Boolean or: Boolean × Boolean Axiome: A1: not(false) A2: not(true) A3: and(false, B) A4: and(A, B) A5: and(true, true) A7: or(X, Y) ¨ Clemens Lang (Ubungen zu AuD)
= = = = = =
→ → → → →
Boolean Boolean Boolean Boolean Boolean
true false false and(B, A) true not(and(not(X), not(Y))) Algorithmen und Datenstrukturen
14. Januar 2010
6/9
Abstrakte Datentypen – Beispiel (2)
(10.1, 10.2)
ADT Array Signatur create: → Array set: Array × int × T → Array get: Array × int → T Axiome A1: get(create(), i) = null ( x A2: get(set(A, i, x), j) = get(A, j) T sei der Typ der Arrayelemente
wenn i = j sonst
1. Java-Arrays besitzen eine fixe L¨ ange, die bereits im Konstruktor angegeben wird. Erweitern Sie obigen ADT so, dass der Konstruktor create() eine L¨ ange l bekommt, die immer fix bleibt und auch nicht durch set() ver¨ andert wird, die neue Methode length() die im Konstruktor u ange bestimmt, ¨bergebene L¨ nur f¨ ur Indizes zwischen 0 und der L¨ ange minus 1 Werte gespeichert werden (ansonsten werden Eintr¨ age ignoriert). Es gen¨ ugt dabei, Axiom A2 so anzupassen, dass get() nur f¨ ur passende Indizes Werte zur¨ uckliefert. Sie k¨ onnen dazu length() in einer Fallunterscheidung verwenden. ¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
7/9
Abstrakte Datentypen – Beispiel (2)
(10.1, 10.2)
ADT Array Signatur create: → Array set: Array × int × T → Array get: Array × int → T Axiome A1: get(create(), i) = null ( x A2: get(set(A, i, x), j) = get(A, j) T sei der Typ der Arrayelemente
wenn i = j sonst
1. Java-Arrays besitzen eine fixe L¨ ange, die bereits im Konstruktor angegeben wird. Erweitern Sie obigen ADT so, dass der Konstruktor create() eine L¨ ange l bekommt, die immer fix bleibt und auch nicht durch set() ver¨ andert wird, die neue Methode length() die im Konstruktor u ange bestimmt, ¨bergebene L¨ nur f¨ ur Indizes zwischen 0 und der L¨ ange minus 1 Werte gespeichert werden (ansonsten werden Eintr¨ age ignoriert). Es gen¨ ugt dabei, Axiom A2 so anzupassen, dass get() nur f¨ ur passende Indizes Werte zur¨ uckliefert. Sie k¨ onnen dazu length() in einer Fallunterscheidung verwenden. ¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
7/9
Abstrakte Datentypen – Beispiel (2)
(10.1, 10.2)
ADT Array Signatur create: → Array set: Array × int × T → Array get: Array × int → T Axiome A1: get(create(), i) = null ( x A2: get(set(A, i, x), j) = get(A, j) T sei der Typ der Arrayelemente
wenn i = j sonst
2. Welche Operationen sind (Prim¨ ar-)Konstruktoren des ADT? 3. Geben Sie die Normalform und das Datenobjekt f¨ ur den folgenden Ausdruck an: length( set( set( set( create(3), 2, ’D’ ), 0, get( set( create(10), 4, ’A’ ), 4 ) ), 1, ’u’ ) )
¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
7/9
Abstrakte Datentypen – Beispiel (2)
(10.1, 10.2)
ADT Array Signatur create: → Array set: Array × int × T → Array get: Array × int → T Axiome A1: get(create(), i) = null ( x A2: get(set(A, i, x), j) = get(A, j) T sei der Typ der Arrayelemente
wenn i = j sonst
4. Erweitern Sie den ADT um eine Operation fill, die die ersten i Eintr¨ age eines Arrays mit einem Element x f¨ ullt. Um was f¨ ur eine Operation handelt es sich?
¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
7/9
Freies Programmieren: Quilt
(10.3)
Allgemeine Hinweise Everything goesa Die Hinweise sind nicht zum Spaß dab Gewachsenen Code auch mal wegwerfen und besser implementieren ;) Kapselung is was tolles – G¨ onnt euch ein paar Methodenc Was ich nicht nachvollziehen kann, kann ich nicht bepunkten. Also: Kommentieren! a
if it works ich hab aber auch nix dagegen, wenns einer richtig ohne hinbekommt c und evtl. auch Klassen
b
¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
8/9
Fragen & Feedback
Fragen? ¨ Feedback zu Vorlesung und/oder Ubung?
Mit Materialen von Balthasar Reuter
¨ Clemens Lang (Ubungen zu AuD)
Algorithmen und Datenstrukturen
14. Januar 2010
9/9