Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen ¨ 10. Ubung Abstrakte Datentypen, Freies Programmieren: Quilt Clemens Lang ¨ Ubungen zu AuD 14. Januar 2010 ¨ Cleme...
4 downloads 0 Views 216KB Size
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