Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 7: Referenzen und Zuweisungen.

Slides:



Advertisements
Ähnliche Präsentationen
Einführung in die Informatik: Programmierung und Software-Entwicklung
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.
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
WS Algorithmentheorie 02 - Polynomprodukt und Fast Fourier Transformation Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) 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
Diskrete Mathematik I Vorlesung Arrays-
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 Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
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.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Verkettete Liste Visualisierung. New-Operator Mit dem New-Operator kann zur Laufzeit (dynamisch) Speicherplatz reserviert und angelegt werden Vorteil:
DVG Klassen und Objekte
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Grundkonzepte Java - Klassendefinition
20:00.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
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.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 13: (Container-)Datenstrukturen.
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
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.
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 Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung.
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Dynamische Datentypen
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 4: Die Schnittstelle einer Klasse.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 6: Objekterzeugung.
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Programmiervorkurs WS 2014 Referenzdatentypen
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.
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
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.
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
Grundkurs Informatik 11-13
Implementieren von Klassen
 Präsentation transkript:

Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 7: Referenzen und Zuweisungen

2 Das Programm für diese Lektion Wie werden Objekte gemacht ? (Mehr Details) Wie modifizieren wir ihre Inhalte? Zuweisungen Speicherverwaltung, GC Mehr über Referenzen, Entitäten, Typen, Variablen...

3 Referenzen sind schwierig… require -- Meine Schwester ist ledig -- Meine Schwester ist in Dietlikon -- Der Cousin meines Nachbarn heiratete -- gestern eine Ärztin in Sydney ensure -- Meine Schwester ist ledig -- Meine Schwester ist in Dietlikon end do (a doctor)

4 Erinnerung: Klassen und Objekte Zur Laufzeit: Objekte (Softwaremaschinen) Im Programmtext: Klassen Jede Klasse beschreibt eine Menge von möglichen Laufzeitobjekten

5 Objektstruktur Ein Objekt besteht aus Feldern Jedes Feld ist ein Wert, entweder: Ein Basiswert: Ganze Zahl (integer), Zeichen (character), reelle Zahl, … (genannt expandierte Werte) Eine Referenz auf ein anderes Objekt destination origin line next (LEG ) position name (STATION ) (LINE ) (VECTOR ) y x 23.5

6 Zwei Arten von Typen Referenztypen: Der Wert jeder Entität ist eine Referenz b : STATION Expandierte Typen: Der Wert jeder Entität ist ein Objekt d : E_STATION b (STATION ) ( E_STATION ) d

7 Expandierte und Referenztypen Was ist der Unterschied zwischen: Jeder Wagen hat einen Motor Jeder Wagen hat einen Hersteller ?

8 Expandierte Klassen Eine Klasse kann als expandiert deklariert werden: expanded class E_STATION... Der Rest wie in STATION... Dann hat jede Entität deklariert als d : E_STATION die eben beschriebene expandierte Semantik.

9 Basistypen als expandierte Klassen expanded class INTEGER... (intern: INTEGER_32, INTEGER_64 etc.) expanded class BOOLEAN... expanded class CHARACTER... expanded class REAL... (intern: REAL_32, REAL_64 etc.) n : INTEGER

10 Initialisierung Automatische Initialisierungsregeln: 0 für Zahlen (ganze Zahlen, reelle Zahlen) Null-Zeichen für Zeichen False für Boolesche Werte Void für Referenzen Diese Regeln gelten für: Felder (von Klassenattributen), bei der Objekterzeugung Lokale Variablen, beim Start der Routinenausführung (gilt auch für Result)

11 Referenzen können Zyklen bilden O1 "Almaviva" name grundbesitzer geliebter "Figaro""Susanna" O3 O2 grundbesitzer geliebter name grundbesitzer geliebter name

12 Und was ist mit Zeichenketten (strings)? Eine Zeichenkette ist ein Objekt (in Eiffel, Java, …) Das Feld name ist ein Referenzfeld O1 "Almaviva" name grundbesitzer geliebter A l m a v i v a

13 Attribute sind Features der Klasse. Noch ein Attribut Felder widerspiegeln Attribute der Klasse Ein Attribut class VECTOR feature -- Zugriff x: REAL -- Östliche Koordinate. y: REAL -- Nördliche Koordinate. end

14 Feldern einen Wert zuweisen (assign) class VECTOR feature -- Zugriff x: REAL -- Östliche Koordinate. y: REAL -- Närdliche Koordinate. feature -- Element-Veränderungen 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 …

15 x := new_x y := new_y Feldern einen Wert zuweisen x y Eine Instanz von VECTOR Ausführung von set (2, 1) auf diese Instanz class VECTOR feature -- Zugriff x: REAL -- Östliche Koordinate. y: REAL -- Nordliche Koordinate. feature -- Element-Veränderungen 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

16 class STATION feature name : STRING -- Name. position : VECTOR -- Position in Bezug auf das Stadtzentrum. set_position (new_x, new_y : REAL) -- Position setzen. do position set (new_x, new_y) end Was Sie tun können Besser: -- Position auf Abzisse new_x, -- Ordinate new_y setzen.

17 In Klasse VECTOR : move (dx, dy : REAL) -- Um dx horizontal und dy vertikal verschieben. do set (x + dx, y + dy) ensure... [Bitte ausfüllen!]... end In einer anderen Klasse, z.B. STATION position: VECTOR set_position (new_x, new_y: REAL) do position set (new_x, new_y) end Qualifizierte und unqualifizierte Featureaufrufe In Klasse VECTOR : set ( new_x, new_y : REAL) do... end Qualifizierter Aufruf Unqualifizierter Aufruf

18 Das aktuelle Objekt (current object) Zu jeder Zeit während einer Ausführung gibt es ein aktuelles Objekt, auf welchem das aktuelle Feature aufgerufen wird. Zu Beginn: Das Wurzelobjekt. Danach: Ein unqualifizierter Aufruf wie z.B. set (u, v ) wird auf das aktuelle Objekt angewendet. Ein qualifizierter Aufruf wie z.B. x. set (u, v) bedingt, dass das an x gebundene Objekt zum aktuellen Objekt wird. Nach dem Aufruf wird das vorherige Objekt wieder zum aktuellen Objekt. Um auf das aktuelle Objekt zuzugreifen: Benutzen Sie Current

19 Wurzelobjekt Wurzelprozedur obj1 obj2 r1 r2 create obj1.r1 create obj2.r2 Ausführung eines Systems

20 Das aktuelle Objekt Zu jeder Zeit während einer Ausführung gibt es ein aktuelles Objekt, auf welchem das aktuelle Feature aufgerufen wird Zu Beginn ist dies das Wurzelobjekt Während eines qualifizierten Aufrufs x. f (a) ist das neue aktuelle Objekt dasjenige, das an x gebunden ist Nach einem solchen Aufruf übernimmt das vorherige aktuelle Objekt wieder seine Rolle Allgemeine Relativität

21 In STATION: position: VECTOR set_position (new_x, new_y : REAL) do position set (new_x, new_y) end Featureaufrufe

22 Die Kundenbeziehung (client relation) Da die Klasse STATION ein Feature position : VECTOR hat (und Aufrufe der Form position set (...) ), ist STATION ein Kunde der Klasse VECTOR

23 Kunden und Vererbung - graphisch Vererbung Kunde origin, destination position next rotated, normalized...

24 Entitäten Eine Entität ist ein Name im Programm, der mögliche Laufzeitwerte bezeichnet Manche Entitäten sind konstant Andere sind variabel: Attribute Lokale Variablen

25 ziel := quelle quelle ist ein Ausdruck, z.B.: Das Ergebnis einer Abfrage: position x i_th (5) Arithmetische oder Boolesche Ausdrücke: a + (b c) (a < b) and (c = d ) ziel ist eine Variable. Die Möglichkeiten sind: Ein Attribut Result in einer Funktion (noch nicht gesehen bisher) Eine lokale Variable einer Routine (noch nicht gesehen) Werte von Variablen ändern: Zuweisungen

26 x := new_x y := new_y Zuweisungen (Erinnerung) x y Eine Instanz von VECTOR Ausführung von set (2, 1) auf diese Instanz class VECTOR feature -- Zugriff x: REAL -- Östliche Koordinate. y: REAL -- Nördliche Koordinate. feature -- Element-Veränderungen 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

27 set (new_x, new_y : REAL) do x := new_x y := new_y end Zuweisung Eine Zuweisung ist eine Instruktion, die einen Wert durch einen anderen ersetzt. x y 2 0 v. set (2, 1) 0 1 v

28 Zwei Arten von Typen Referenztypen: Der Wert jeder Entität ist eine Referenz b : STATION Expandierte Typen: Der Wert jeder Entität ist ein Objekt d : E_STATION b (STATION ) ( E_STATION ) d Zuweisung: kopiert die Referenz c := b c Zuweisung: kopiert das Objekt

29 x := y if x = y then... if x = Current then... Zuweisungen nicht mit Gleichheit verwechseln! Instruktion Ausdruck

30 Was mit unerreichbaren Objekten tun? Referenzzuweisungen können manche Objekte unerreichbar machen Zwei mögliche Ansätze Manuelles free (C++, Pascal) Automatische Speicherbereinigung (garbage collection, d.h. Müllabfuhr) (Eiffel, Java, C#,.NET) Almavivaname grundbesitzer geliebter a O1 Figaro O2 Susanna O3

31 Die Ansicht eines C-Programmierers Newsgroup-Eintrag von Ian Stephenson, 1993 (Zitat aus Object-Oriented Software Construction): I say a big NO ! Leaving an unreferenced object around is BAD PROGRAMMING. Object pointers ARE like ordinary pointers if you allocate an object you should be responsible for it, and free it when its finished with. (Didn't your mother always tell you to put your toys away when you'd finished with them?)

32 Argumente für automatische Bereinigung Manuelle Bereinigung ist eine Gefahr für die Zuverlässigkeit: Falsche frees sind Bugs, die nur sehr schwierig zu finden und zu beheben sind. Manuelle Bereinigung ist mühsam. Moderne (automatische) Speicherbereiniger haben eine akzeptable Performance. Speicherbereinigung ist einstellbar: an/abschalten, parametrisieren…

33 Eigenschaften einer Speicherbereinigung Konsistenz : Nur unerreichbare Objekte werden bereinigt Vollständigkeit : Alle unerreichbaren Objekte werden bereinigt Konsistenz (Soundness) ist eine absolute Anforderung. Lieber keine Speicherbereinigung als eine unsichere Speicherbereinigung Aber: sichere automatische Speicherbereinigung ist schwierig für C-basierte Sprachen

34 class LINKABLE feature item: INTEGER right: LINKABLE set (n : INTEGER ; r : LINKABLE) -- Beide Felder setzen. do item := n right := r end Effekt einer Zuweisung Referenztypen: Referenzzuweisung Expandierte Typen: Kopie des Wertes 3 datenfeld rechtes item := n right := r l : LINKABLE... create l... l. set(25, Void)

35 Zuweisung class LINE feature number : INTEGER color : COLOR city : CITY set_all (n : INTEGER ; co : COLOR ; ci : CITY ) do number := n color := co city := ci end

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

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

38 LINKABLE - Zellen class LINKABLE feature item: STRING -- Wert dieser Zelle. right : LINKABLE -- Zelle, welche an diese Zelle angehängt ist -- (falls vorhanden). put_right (other : like Current) -- Setzt other rechts neben die aktuelle Zelle. do right := other ensure angehaengt: right = other end Haldenegg item right

39 Lokale Variablen (in Routinen) Deklarieren Sie einfach zu Beginn einer Routine (in der local Klausel) r (...) -- Kopfkommentar require... local x : REAL m : STATION do... x und m sind hier benutzbar... ensure... x und m sind hier nicht mehr benutzbar... end Result ist (für Funktionen) auch eine lokale Variable.

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

41 Leseaufgaben für die nächsten 2 Wochen Control structures (Kapitel 7)

42 Was wir in dieser Vorlesung gesehen haben Das aktuelle Objekt Expandierte Typen und Referenztypen Zuweisung: Für Referenzen Für expandierte Werte Verkettete Datenstrukturen Einen kurzen Blick auf bedingte Anweisungen