Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 10: Das dynamische Modell und mehr zu Referenzen.

Slides:



Advertisements
Ähnliche Präsentationen
Objektorientierte Programmierung
Advertisements

Programmierung II Prof. Dr. Michael Löwe
Einführung in die Programmierung Zusammenfassung
Unter- und Oberklassen: Beispiel
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
6 Folgen (Teil II - Datenstrukturen und Algorithmen)
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher bekannt: Einfache Variable Feld Vereinbarung Zuweisung Block while-Schleife Bedingte Anweisung (if) Typ.
RelationentheorieObjektorientierte Datenbanken AIFB SS Das ODMG-Objektmodell vs. relationales Modell (1/9) ODMG-Objektmodell Literal_type Atomic_literal.
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
Einführung in die Programmierung
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 13: (Container-)Datenstrukturen.
Einführung in die Programmierung
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 13: (Container-)Datenstrukturen.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 11: Einführung in die Konzepte der Vererbung und Generizität.
Informatik 1 Letzte Übung.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 15: Topologisches Sortieren Teil 1: Problemstellung und.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 9: Abstraktion.
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 10: Das dynamische Modell und mehr zu Referenzen.
Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 7: Referenzen und Zuweisungen.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 4: Die Schnittstelle einer Klasse.
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 6: Objekterzeugung.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 11: Einführung in die Konzepte der Vererbung und Generizität.
MODULA-2.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 18: Mehr über Vererbung und Agenten.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
RelationentheorieObjektorientierte Datenbanken  AIFB SS C++-ODL (1/6) Erweiterung des deklarativen Teils einer C++-Klasse Datentypen d_String,
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Java-Kurs Übung Besprechung der Hausaufgabe
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 18: Undo/Redo.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 7: Referenzen und Zuweisungen.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 9: Abstraktion.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 6: Objekterzeugung.
Prüfungsbesprechung Barbara Scheuner Vorlesung: Programmieren und Problemlösen Prof. Hans Hinterberger.
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 11:Einführung in die Konzepte der Vererbung und Generizität.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
Datentypen: integer, char, string, boolean
Einführung in die Programmierung mit Java
Grundkurs Informatik 11-13
Implementieren von Klassen
The Programming Language Pascal
 Präsentation transkript:

Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 10: Das dynamische Modell und mehr zu Referenzen

2 Ziel dieser Vorlesung Ein paar neue Konzepte und insbesondere ein besseres Verständnis des recht schwierigen Themas der Referenzen Anmerkungen zur Speicherbereinigung und zugehörigen Konzepten

3 Zuweisung Ersetzt einen Wert durch einen anderen x y 2 0 p. set_coordinates ( 2, 1 ) 0 1 p

4 Feldern einen Wert zuweisen (in einer Routine) class VECTOR feature –– Zugriff x: REAL -- Östliche Koordinate. y: REAL -- Nordliche Koordinate. feature –– Element-Veränderung set (new_x, new_y : REAL) -- Setze Koordinaten auf [new_x, new_y]. do ensure x_gesetzt : x = new_x y_gesetzt : y = new_y end x := new_x y := new_y

5 class LINKED_CELL feature item : INTEGER right : LINKED_CELL set_fields (n : INTEGER ; r : LINKED_CELL) -- Beide Felder neu setzen. do item := n right := r end Effekt einer Zuweisung Referenztypen: Referenzzuweisung Expandierte Typen: Kopie des Wertes item right i tem := n right := r t, u : LINKED_CELL create t ; create u t. set_fields (25, u) 3 Siehe LINKABLE in EiffelBase t 0 u  t. set_fields ( 25, u) 25 0

6 Eine verkettete Liste von Strings: Haldenegg item right Central item right Haupt- bahnhof item right (LINKABLE) first_element last_element active count 3 Parade- platz item right Einfügen am Ende (LINKABLE) 4

7 Ein Element am Ende einfügen extend (v : STRING) -- Füge v am Ende hinzu. -- Cursor nicht verschieben. local p : LINKABLE [STRING] do create p. make (v) if is_empty then first_element := p active := p else last_element. put_right ( p) if after then active := p end end last_element := p count := count + 1 end

8 Übung (beinhaltet Schleifen) Kehren Sie eine Liste um! Halden- egg item right Central Haupt- bahnhof last_element first_element count 4 (LINKABLE) (LINKED_LIST) Parade- platz

9 Eine Liste umkehren

10 Eine Liste umkehren from pivot := first_element first_element := Void until pivot = Void loop i := first_element first_element := pivot pivot := pivot. right first_element. put_right (i ) end first_element pivot right i 12345

11 Eine Liste umkehren first_element pivot right i from pivot := first_element first_element := Void until pivot = Void loop i := first_element first_element := pivot pivot := pivot. right first_element. put_right (i ) end

12 Eine Liste umkehren first_element pivot right i from pivot := first_element first_element := Void until pivot = Void loop i := first_element first_element := pivot pivot := pivot. right first_element. put_right (i ) end

13 Eine Liste umkehren first_element pivot right i from pivot := first_element first_element := Void until pivot = Void loop i := first_element first_element := pivot pivot := pivot. right first_element. put_right (i ) end

14 i i pivot Eine Liste umkehren first_element right from pivot := first_element first_element := Void until pivot = Void loop i := first_element first_element := pivot pivot := pivot. right first_element. put_right (i ) end

15 Die Schleifeninvariante first_element pivot right i Invariante: Von first_element nach right : anfängliche Elemente in umgekehrter Reihenfolge Von pivot aus: Rest der Elemente in ursprünglicher Reihenfolge. from pivot := first_element first_element := Void until pivot = Void loop i := first_element first_element := pivot pivot := pivot. right first_element. put_right (i ) end

16 Die Schleifeninvariante (Nicht zu verwechseln mit der Klasseninvariante) Eine Eigenschaft, die:  Nach der Initialisierung (from-Klausel) erfüllt ist  Von jedem Schleifendurchlauf (loop-Klausel), bei der die Abbruchbedingung (until-Klausel) nicht erfüllt ist, eingehalten wird  Wenn die Abbruchbedingung erfüllt ist, das gewünschte Ergebnis sicherstellt

17 Die Schleifeninvariante. Die mögliche Lösung(en) Die Invariante Der vorhergehende Zustand Die Initialisierung Die Abbruchbedingung Der Rumpf

18 Das Problem mit Referenzzuweisungen Eine intuitive Argumentationsweise: -- Hier ist SOME_PROPERTY für a erfüllt “Wende SOME_OPERATION auf b an” -- Hier gilt SOME_PROPERTY immer noch für a Dies gilt für expandierte Werte, z.B. ganze Zahlen (INTEGER) -- Hier ist P (a) erfüllt. OP (b) -- Hier ist P (a) immer noch erfüllt für a

19 Dynamische Mehrfachbenennung a, b: LINKABLE [STRING] create a.... a. put ("Haldenegg") ‏ b := a -- Hier hat a. item den Wert "Haldenegg" b. put ("Paradeplatz") ‏ -- Hier hat a. item den Wert ????? Haldenegg item right a b

20 Andererseits Ich habe gehört, dass die Cousine des Chefs weniger -- als 50’000 Franken pro Jahr verdient “Erhöhen Sie Caroline’s jährliches Gehalt um 50 Rappen” -- ????? Metaphern:  “Die schöne Tochter von Leda”  “Menelas’ Gefährtin”  “Geliebte von Paris” = Helena von Troja

21 Tipps für die Praxis Referenzzuweisungen sind nützlich Sie sind möglicherweise auch etwas schwieriger Überlassen Sie diese so oft wie möglich den spezialisierten Bibliotheken von generellen Datenstrukturen.

22 Varianten von Zuweisungen und Kopieren Referenzzuweisung (Typen von a und b sind Referenztypen): b := a Duplizieren eines Objektes (flach): c := a. twin Duplizieren eines Objektes (tief): d := a. deep_twin Weiterhin: flache Feld-um-Feld Kopie (Kein neues Objekt wird erzeugt): e. copy (a) ‏

23 Flaches und tiefes Klonen Anfangssituation: Resultat von: b := a c := a. twin d := a. deep_twin “Almaviva” name landlord loved_one O1 “Figaro” O2 “Susanna” O3 b “Almaviva” O4 c “Almaviva” O5 “Figaro” O6 “Susanna” O7 d a

24 Woher kommen diese Mechanismen? Die Klasse ANY in der Eiffel “Kernel-Bibliothek” Jede Klasse, die nicht explizit von einer Anderen erbt, erbt implizit von ANY Deshalb ist jede Klasse ein Nachkomme von ANY

25 Die Vererbungsstruktur vervollständigen A BDEC ANY NONE Erbt von

26 Ein verwandter Mechanismus: Persistenz a,b: X a. store (“FN") ‏.... b := retrieved (“FN") Die Speicherung erfolgt automatisch. Persistente Objekte werden durch individuelle Schlüssel identifiziert. Diese Features kommen aus der Bibliotheksklasse STORABLE. Muss verbessert werden, siehe “Objekt-Test”

27 ‘’Object-Test Local’’ Einen Typ erzwingen: Der Objekt-Test if attached {X } retrieved (“FN") as r then --Tu irgendwas mit r, welches garantiert nicht -- void und vom dynamischen Typ X ist. else print ("Too bad.") end Zu prüfender Ausdruck SCOPE der lokalen Variablen

28 Objekte und Referenzen Status einer Referenz: Operationen auf Referenzen: create p p := q p := Void if p = Void then... VOIDGEBUNDEN create p p := q (wobei q gebunden ist) ‏ p := Void p := q (wobei q void ist) ‏ p GEBUNDEN p VOID

29 Die Objekt-Orientierte Form eines Aufrufs some_target. some_feature (some_arguments) ‏ Zum Beispiel: Zurich_map. animate Line 10.append (Haldenbach) x := a. plus (b) ???????

30 Infix- und Präfix-Operatoren Bei a − b ist der − Operator ein “infix“-Operator (zwischen den Operanden geschrieben) ‏ Bei − b ist der − Operator ein “präfix”-Operator (vor dem Operand geschrieben) ‏

31 Operator-Features expanded class INTEGER feature plus alias "+" (other : INTEGER): INTEGER -- Summe mit other do... end times alias “*“ (other : INTEGER): INTEGER -- Multiplikation mit other do... end minus alias “-" : INTEGER -- unäres Minus do... end... end Aufrufe wie i.plus (j) können jetzt auch als i + j geschrieben werden

32 Leseaufgaben auf nächste Woche Chapters on  Recursion(12)  Inheritance (16)

33 Was wir gesehen haben  Mit Referenzen spielen: Umkehrung einer Liste  Dynamische Mehrfachbenennung und die Schwierigkeiten von Zeigern und Referenzen  Allgemeine Vererbungsstruktur  Kopieren, Klonen und Speicheroperationen  Persistenzhülle  Infix- & Präfix-Operatoren