Algorithmen und Datenstrukturen 10. Übung Abstrakte Datentypen, Freies Programmieren: Quilt Clemens Lang Übungen zu AuD 14. Januar 2010 Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 14. Januar 2010 1 / 9
Organisatorisches: Evaluation Die Evaluation Gesetzlich vorgeschriebene Bewertung der Lehrveranstaltungen durch die Studenten Möglichkeit für Kritik und Verbesserungsvorschläge Teilnahmeberechtigung : TAN Unter eva.uni-erlangen.de TechFak TAN-Eingabe-Fenster a Bis 29.01., 0:00 Uhr Bitte evaluieren! a oder gleich mit diesem Direktlink Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 14. Januar 2010 2 / 9
Organisatorisches: Evaluation Die Evaluation Gesetzlich vorgeschriebene Bewertung der Lehrveranstaltungen durch die Studenten Möglichkeit für Kritik und Verbesserungsvorschläge Teilnahmeberechtigung : TAN Unter eva.uni-erlangen.de TechFak TAN-Eingabe-Fenster a Bis 29.01., 0:00 Uhr Bitte evaluieren! a oder gleich mit diesem Direktlink Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 14. Januar 2010 2 / 9
Organisatorisches: Evaluation Die Evaluation Gesetzlich vorgeschriebene Bewertung der Lehrveranstaltungen durch die Studenten Möglichkeit für Kritik und Verbesserungsvorschläge Teilnahmeberechtigung : TAN Unter eva.uni-erlangen.de TechFak TAN-Eingabe-Fenster a Bis 29.01., 0:00 Uhr Bitte evaluieren! a oder gleich mit diesem Direktlink Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 14. Januar 2010 2 / 9
Organisatorisches: Evaluation Die Evaluation Gesetzlich vorgeschriebene Bewertung der Lehrveranstaltungen durch die Studenten Möglichkeit für Kritik und Verbesserungsvorschläge Teilnahmeberechtigung : TAN Unter eva.uni-erlangen.de TechFak TAN-Eingabe-Fenster a Bis 29.01., 0:00 Uhr Bitte evaluieren! a oder gleich mit diesem Direktlink Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 14. Januar 2010 2 / 9
Organisatorisches: Evaluation Die Evaluation Gesetzlich vorgeschriebene Bewertung der Lehrveranstaltungen durch die Studenten Möglichkeit für Kritik und Verbesserungsvorschläge Teilnahmeberechtigung : TAN Unter eva.uni-erlangen.de TechFak TAN-Eingabe-Fenster a Bis 29.01., 0:00 Uhr Bitte evaluieren! a oder gleich mit diesem Direktlink Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 14. Januar 2010 2 / 9
Organisatorisches: Evaluation Die Evaluation Gesetzlich vorgeschriebene Bewertung der Lehrveranstaltungen durch die Studenten Möglichkeit für Kritik und Verbesserungsvorschläge Teilnahmeberechtigung : TAN Unter eva.uni-erlangen.de TechFak TAN-Eingabe-Fenster a Bis 29.01., 0:00 Uhr Bitte evaluieren! a oder gleich mit diesem Direktlink Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 14. Januar 2010 2 / 9
Abstrakte Datentypen (10.1, 10.2) Was ist ein ADT? Ein ADT a beschreibt formal eine Komponente einer Software durch: Signatur Liste von Operationen, die auf die Komponente angewendet werden können Axiome mathematische Ausdrücke, die das Verhalten der Operationen spezifieren Dabei wird zunächst keine Implementierung benutzt. ADTs sind daher unabhängig von Programmiersprachen. a aus dem englischen Abstract Data Type Clemens Lang (Übungen 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ückgibt Projektion Operation, die Infos über ein Datenobjekt zurückgeben (z.b.: Anzahl der Elemente) a Normalform Objekt, das durch eine minimale Zahl von Kostruktoraufrufen dargestellt ist Primärkonstruktoren Menge von Konstruktoren, die nötig ist, um alle möglichen Datenobjekte erzeugen zu können Hilfskonstruktor Konstruktor, der kein Primärkonstruktor ist a auch: Selektion Clemens Lang (Übungen 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ückgibt Projektion Operation, die Infos über ein Datenobjekt zurückgeben (z.b.: Anzahl der Elemente) a Normalform Objekt, das durch eine minimale Zahl von Kostruktoraufrufen dargestellt ist Primärkonstruktoren Menge von Konstruktoren, die nötig ist, um alle möglichen Datenobjekte erzeugen zu können Hilfskonstruktor Konstruktor, der kein Primärkonstruktor ist a auch: Selektion Clemens Lang (Übungen 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ückgibt Projektion Operation, die Infos über ein Datenobjekt zurückgeben (z.b.: Anzahl der Elemente) a Normalform Objekt, das durch eine minimale Zahl von Kostruktoraufrufen dargestellt ist Primärkonstruktoren Menge von Konstruktoren, die nötig ist, um alle möglichen Datenobjekte erzeugen zu können Hilfskonstruktor Konstruktor, der kein Primärkonstruktor ist a auch: Selektion Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 14. Januar 2010 4 / 9
Abstrakte Datentypen: Beispiel (10.1, 10.2) Datentyp Liste Signatur: create: Liste append: Liste int Liste gethead: Liste int Axiome: A1 gethead(append(l, a)) = gethead(l) mit L create() A2 gethead(append(create(), a)) = a Welche Konstruktoren hat die Liste? Welche davon sind Primär-, welche Hilfskonstruktoren? Welche Projektionen/Selektionen hat die Liste? Was tut gethead()? Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 14. Januar 2010 5 / 9
Abstrakte Datentypen: Beispiel (2) (10.1, 10.2) Datentyp Boolean Signatur: true: Boolean false: Boolean not: Boolean Boolean and: Boolean Boolean Boolean or: Boolean Boolean Boolean Axiome: A1: not(false) = true A2: not(true) = false A3: and(false, B) = false A4: and(a, B) = and(b, A) A5: and(true, true) = true A7: or(x, Y) = not(and(not(x), not(y))) Clemens Lang (Übungen zu AuD) 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 ( A2: get(set(a, i, x), j) = x get(a, j) T sei der Typ der Arrayelemente wenn i = j sonst 1. Java-Arrays besitzen eine fixe Länge, die bereits im Konstruktor angegeben wird. Erweitern Sie obigen ADT so, dass der Konstruktor create() eine Länge l bekommt, die immer fix bleibt und auch nicht durch set() verändert wird, die neue Methode length() die im Konstruktor übergebene Länge bestimmt, nur für Indizes zwischen 0 und der Länge minus 1 Werte gespeichert werden (ansonsten werden Einträge ignoriert). Es genügt dabei, Axiom A2 so anzupassen, dass get() nur für passende Indizes Werte zurückliefert. Sie können dazu length() in einer Fallunterscheidung verwenden. Clemens Lang (Übungen 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 ( A2: get(set(a, i, x), j) = x get(a, j) T sei der Typ der Arrayelemente wenn i = j sonst 1. Java-Arrays besitzen eine fixe Länge, die bereits im Konstruktor angegeben wird. Erweitern Sie obigen ADT so, dass der Konstruktor create() eine Länge l bekommt, die immer fix bleibt und auch nicht durch set() verändert wird, die neue Methode length() die im Konstruktor übergebene Länge bestimmt, nur für Indizes zwischen 0 und der Länge minus 1 Werte gespeichert werden (ansonsten werden Einträge ignoriert). Es genügt dabei, Axiom A2 so anzupassen, dass get() nur für passende Indizes Werte zurückliefert. Sie können dazu length() in einer Fallunterscheidung verwenden. Clemens Lang (Übungen 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 ( A2: get(set(a, i, x), j) = x get(a, j) T sei der Typ der Arrayelemente wenn i = j sonst 2. Welche Operationen sind (Primär-)Konstruktoren des ADT? 3. Geben Sie die Normalform und das Datenobjekt für den folgenden Ausdruck an: length( set( set( set( create(3), 2, D ), 0, get( set( create(10), 4, A ), 4 ) ), 1, u ) ) Clemens Lang (Übungen 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 ( A2: get(set(a, i, x), j) = x 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äge eines Arrays mit einem Element x füllt. Um was für eine Operation handelt es sich? Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 14. Januar 2010 7 / 9
Freies Programmieren: Quilt (10.3) Allgemeine Hinweise Everything goes a Die Hinweise sind nicht zum Spaß da b Gewachsenen Code auch mal wegwerfen und besser implementieren ;) Kapselung is was tolles Gönnt euch ein paar Methoden c Was ich nicht nachvollziehen kann, kann ich nicht bepunkten. Also: Kommentieren! a if it works b ich hab aber auch nix dagegen, wenns einer richtig ohne hinbekommt c und evtl. auch Klassen Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 14. Januar 2010 8 / 9
Fragen & Feedback Fragen? Feedback zu Vorlesung und/oder Übung? Mit Materialen von Balthasar Reuter Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 14. Januar 2010 9 / 9