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
Imperative Programmierung
Advertisements

Programmierung II Prof. Dr. Michael Löwe
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Zusammenfassung der Vorwoche
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
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
Java: Grundlagen der Objektorientierung
Algorithmentheorie 04 –Hashing
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
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
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 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)
Diskrete Mathematik I Vorlesung Arrays-
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Vererbung Spezialisierung von Klassen in JAVA möglich durch
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 im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
RelationentheorieObjektorientierte Datenbanken AIFB SS Das ODMG-Objektmodell vs. relationales Modell (1/9) ODMG-Objektmodell Literal_type Atomic_literal.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Einführung in die Programmierung
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 Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
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.
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.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
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.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Auslegung eines Vorschubantriebes
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 9: Abstraktion.
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
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.
Dynamische Datentypen
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
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.
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Analyseprodukte numerischer Modelle
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 18: Mehr über Vererbung und Agenten.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
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.
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.
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.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 10: Das dynamische Modell und mehr zu Referenzen.
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
 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 if last_element /= Void then 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 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

12 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

13 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

14 i i pivot 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 right 12345

15 Die Schleifeninvariante 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 Invariante: Von first_element nach right : anfängliche Elemente in umgekehrter Reihenfolge Von pivot aus: Rest der Elemente in ursprünglicher Reihenfolge.

16 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

17 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

18 Andererseits Ich habe gehört, dass die Cousine des Chefs weniger -- als Franken pro Jahr verdient Erhöhen Sie Carolines Gehalt um 1 Franken -- ????? Metaphern: Die schöne Tochter von Leda Menelas Gefährtin Geliebte von Paris = Helena von Troja

19 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.

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

21 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

22 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

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

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

25 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

26 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

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

28 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)

29 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

30 Leseaufgaben auf nächste Woche Kapitel über Syntax (11) Inheritance (16)

31 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 Persistieren von Objekten Infix- & Präfix-Operatoren