1 Letzte Aktualisierung: 16. April 2004 Programmierung im Grossen Bertrand Meyer
2 Vorlesung 4: Abstrakte Daten-Typen
Übungen 3 Passe die vorhergehende Spezifikation von Stacks (LIFO, Last-In First-Out so an, dass sie nun Queues beschreibt (FIFO, First-In First-Out. Passe die vorhergehende Spezifikation von Stacks so an, dass sie begrenzte Stacks beschreibt, die eine Maximalgröße capacity haben. Hinweis: put wird eine partielle Funktion.
Formale Stack-Ausdrücke 4 value = item (put (new,,, x6, item (new, x5, x4, x2, x1
Anders ausgedrückt 5 value = item (new,,, x6, item (new, x5, x4, x2, x1 s1 = new s2 = s1,,, x6 s3 = s2 s4 = new s5 = s4, x5, x4 s6 = s5 y1 = item (s6 s7 = s3, y1 s8 = s7, x2 s9 = s8 s10 = s9, x1 s11 = s10 value = item (s11
Ausdrucks-Reduktion 6 value = item (, x1 Stack 1 new,,, x6, item ( new, x5, x4, x2
Ausdrucks-Reduktion 7 value = item (, x1 Stack 1 new,,, x6, item ( new, x5, x4, x2
Ausdrucks-Reduktion 8 value = item (, x1 Stack 1 new,,, x6, item ( new, x5, x4, x2
Ausdrucks-Reduktion 9 value = item (, x1 x6 Stack 1 new,,, x6, item ( new, x5, x4, x2
Ausdrucks-Reduktion 10 value = item (, x1 x6 Stack 1 new,,, x6, item ( new, x5, x4, x2
Ausdrucks-Reduktion 11 value = item (, x1 Stack 1 Stack 2 new,,, x6, item ( new, x5, x4, x2
Ausdrucks-Reduktion 12 value = item (, x1 Stack 1 x5 Stack 2 new,,, x6, item ( new, x5, x4, x2
Ausdrucks-Reduktion 13 value = item (, x1 Stack 1 x4 x5 Stack 2 new,,, x6, item ( new, x5, x4, x2
Ausdrucks-Reduktion 14 value = item (, x1 Stack 1 x4 x5 Stack 2 new,,, x6, item ( new, x5, x4, x2
Ausdrucks-Reduktion 15 value = item (, x1 Stack 1 x5 Stack 2 new,,, x6, item ( new, x5, x4, x2
Ausdrucks-Reduktion 16 value = item (, x1 x5 Stack 1 x5 Stack 2 new,,, x6, item ( new, x5, x4, x2
Ausdrucks-Reduktion value = item (, x1 x2 x5 Stack 1 new,,, x6, item ( new, x5, x4, x2 17
Ausdrucks-Reduktion value = item (, x1 x2 x5 Stack 1 new,,, x6, item ( new, x5, x4, x2 18
Ausdrucks-Reduktion value = item (, x1 x1 x5 Stack 1 new,,, x6, item ( new, x5, x4, x2 19
Ausdrucks-Reduktion value = item (, x1 x1 x5 Stack 1 new,,, x6, item ( new, x5, x4, x2 20
Ausdrucks-Reduktion 21 value = item (, x1 x5 Stack 1 new,,, x6, item ( new, x5, x4, x2
Anders ausgedrückt 22 value = item (new,,, x6, item (new, x5, x4, x2, x1 s1 = new s2 = s1,,, x6 s3 = s2 s4 = new s5 = s4, x5, x4 s6 = s5 y1 = item (s6 s7 = s3, y1 s8 = s7, x2 s9 = s8 s10 = s9, x1 s11 = s10 value = item (s11
Eine operationale Sicht des Ausdrucks 23 x6 x4 y1 s1 (empty s2 s3 s4 (empty x5 s5 x5 s6 x2 x1 x5 x5 x5 s7 (s9, s11 s8 s10 value = item (new,,, x6, item (new, x5, x4, x2, x1
Ausreichende Komplettheit 24 Drei Formen von Funktionen in der Spezifikation eines ADT T: Erzeuger (Creators: OTHER T e.g. new Anfragen (Queries: T... OTHER e.g. item, empty Befehle (Commands: T... T e.g. put, remove Ausreichend komplette Spezifikation: ein Anfrage- Ausdruck der Form: f (... wobei f eine Anfrage ist, kann durch die Anwendung der Axiome in eine Form ohne T gebracht werden.
Stack: Ein Abstrakter Daten-Typ 25 Typen: STACK [G] -- G: Formaler generischer Parameter Funktionen (Operationen: put: STACK [G] G STACK [G] remove: STACK [G] STACK [G] item: STACK [G] G empty: STACK [G] BOOLEAN new: STACK [G]
ADTs und Software Architektur 26 Abstrakte Daten-Typen liefern eine ideale Basis zum modularisieren von Software. Baue jedes Modul als Implementierung eines ADT: Impl. eine Menge an Objekten mit gleicher Schnittstelle Schnittstelle ist definiert durch eine Menge von Operationen (des ADT s functions beschränkt durch abstrakte Eigenschaften (seine axioms und preconditions. Das Modul besteht aus: Eine Darstellung des ADT Eine Implementierung für jede seiner Operationen Möglicherweise zusätzliche Hilfsoperationen
Implementierung eines ADT 27 Drei Komponenten: (E1 Die Spezifikation des ADT: Funktionen, Axiome, Vorbedingungen. (Beispiel: Stacks. (E2 (E3 Die Auswahl einer Repräsentation. (Beispiel: <representation, count>. Eine Menge von Subprogrammen (Routinen und Attributen, die jeweils eine der Funktionen der ADT Spezifikation (E1 mit der gewählten Repräsentation (E2 implementieren. (Beispiel: Routinen put, remove, item, empty, new.
Die Wahl einer Stack Repräsentation 28 (array_up capacity count Push Operation: count := count + 1 representation [count] := x 1 representation
Anwendung beim Information Hiding 29 Öffentlicher Teil: ADT Spezifikation (E1 Geheimer Teil: Auswahl der Repräsentation (E2 Implementierung der Funktionen durch Features (E3
Objekt-Technologie: Erste Definition 30 Objekt-orientierte Software Konstruktion ist die Herangehensweise an das Strukturieren von Systemen, die die Architektur von Software Systemen auf den Typen der Objekte basiert, die sie manipulieren nicht auf der Funktion die sie erreichen.
Objekt-Technologie: Genauere Definition 31 Objekt-orientierte Software Konstruktion ist die Konstruktion von Software Systemen als strukturierte Sammlungen von (möglicherweise partiellen Implementierungen von abstrakten Daten-Typen.
Klassen: Die grundlegende Struktur 32 Zusammenmischung der Begriffe Modul und Typ: Modul = Einheit der Zerlegung: Menge von Dienstleistungen Typ = Beschreibung einer Menge von Laufzeit- Objekten ( Instanzen des Typs Die Verbindung: Die von einer Klasse angebotenen Dienstleistungen, als Modul betrachtet, sind die verfügbaren Operationen auf einer Instanz der Klasse, als Typ betrachtet.
Beziehungen von Klassen 33 Zwei Beziehungen: Kunde Erbe
Allgemeine System-Struktur 34 space_before space_after CHUNK add_space_before add_space_after FEATURES FIGURE word_count justified? PARAGRAPH add_word remove_word justify unjustify QUERIES length font WORD COMMANDS set_font hyphenate_on hyphenate_off Inheritance Client
Eine sehr hinausgeschobene Klasse 35 deferred class COUNTER feature item: INTEGER is -- Counter value up is deferred end -- Increase item by 1. deferred ensure item = old item + 1 end down is -- Decrease item by 1. deferred ensure item = old item 1 end invariant item >= 0 end
36 Ende Vorlesung 4