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

Slides:



Advertisements
Ähnliche Präsentationen
Objektorientierte Programmierung
Advertisements

der Universität Oldenburg
Programmierung II Prof. Dr. Michael Löwe
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
10. Grundlagen imperativer Programmiersprachen
Unter- und Oberklassen: Beispiel
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
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
Programmieren mit JAVA
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 Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Verkettete Liste Visualisierung. New-Operator Mit dem New-Operator kann zur Laufzeit (dynamisch) Speicherplatz reserviert und angelegt werden Vorteil:
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
Arrays,Strings&Pointer in C/C++
DVG Klassen und Objekte
Hauptseminar Automaten und Formale Sprachen
Einführung in die Programmierung Datensammlung
Grundkonzepte Java - Klassendefinition
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
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 Programmierung
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.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmiersprache C 4
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.
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.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 6: Objekterzeugung.
Variablenkonzept Klassisch, in Java Basistyp
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 18: Mehr über Vererbung und Agenten.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
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.
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
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 9: Abstraktion.
Extended Pascal ( Erweitreung von Pascal) Name: Mehmet CELIK Matr :
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 6: Objekterzeugung.
Extended Pascal Erweiterung von Pascal shadi Behzadipour shadi Shadi behzadipour.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
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 heutige Programm Wie werden Objekte “gemacht” ? (Mehr Details) Wie modifizieren wir ihre Inhalte?  Zuweisungen  Speicherverwaltung, GC  Mehr über Entitäten, Typen, Variablen...

3 Referenzen sind schwierig… require -- “Meine Schwester ist ledig” -- “Meine Schwester lebt in Dietlikon” -- “Der Enkel meines Nachbarn heiratete -- gestern eine Ärztin in Sydney” ensure -- “Meine Schwester ist ledig” -- “Meine Schwester lebt in Dietlikon” end do

4 Eine Wurzel-Erzeugungsprozedur kann:  Neue Objekte erzeugen  Auf diese Features aufrufen, die wiederum neue Objekte erzeugen können Die Ausführung eines Systems beginnt mit der Erzeugung eines Wurzelobjektes, das eine Instanz einer vom System vorgesehenen Klasse (die Wurzelklasse) ist, mittels einer vorgesehenen Erzeugungsprozedur dieser Klasse (die Wurzelprozedur). Wie alles beginnt…

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

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

7 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 zu einem anderen Objekt. (STOP) station next segment (STOP) (SEGMENT) upper_ left (STATION ) lower_ right (POSITION) x 23.5 y (POSITION)

8 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

9 Expandierte und Referenztypen Was ist der Unterschied zwischen:  „Jeder Wagen hat einen Motor“  „Jeder Wagen hat eine Marke und einen Hersteller“ ?

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

11 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

12 Initialisierung Automatische Initialisierungsregeln: 0 für Zahlen (ganze Zahlen, reelle Zahlen) “Null”-Zeichen für Zeichen False für Boole‘sche 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)

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

14 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’

15 class POSITION feature -- Zugriff x : REAL -- Horizontale Position y : REAL -- Vertikale Position feature – Element change set_position (xwert, ywert: REAL) -- Set coordinates to (`xwert', `ywert'). require x_nicht_negativ: xwert >= 0 y_nicht_negativ: ywert >= 0 do x := xwert y := ywert ensure x_gesetzt: x = xwert y_gesetzt: y = ywert end Attribute sind Features der Klasse. Noch ein Attribut Felder wiederspiegeln Attribute der Klasse Ein Attribut

16 Feldern einen Wert zuweisen (assign) class POSITION feature -- Zugriff x : REAL -- Horizontale Position y : REAL -- Vertikale Position feature -- Element-Veränderungen setze (xwert, ywert : REAL) -- Setzt Koordinaten auf [xwert, ywert ]. require x_nicht_negativ : xwert >= 0 y_nicht_negativ : ywert >= 0 do ensure x_gesetzt : x = xwert y_gesetzt : y = ywert end …

17 class POSITION feature -- Zugriff x : REAL -- Horizontale Position y : REAL -- Vertikale Position feature – Element-Veränderungen setze (xwert, ywert : REAL) -- Setzt Koordinaten auf [xwert, ywert ]. require x_nicht_negativ : xwert >= 0 y_nicht_negativ : ywert >= 0 do ensure x_gesetzt : x = xwert y_gesetzt : y = ywert end x := xwert y := ywert Feldern einen Wert zuweisen x y Eine Instanz von POSITION Ausführung von setze (2, 1) auf diese Instanz

18 class STATION feature x, y : REAL -- Koordinaten des Stationsmittelpunkts grösse : REAL -- Grösse des umschliessenden -- Rechtecks. obere_linke : POSITION -- Obere linke Position des -- umschliessenden Rechtecks. setze_positionen -- Position des umschliessenden -- Rechtecks setzen. do obere_linke. setze (x – grösse/2, y + grösse/2)... end Was Sie tun können Stations Zentrum Umschliessendes Rechteck grösse

19 In Klasse POSITION : verschiebe (dx, dy : REAL) -- Um dx horizontal und dy Vertikale verschieben. require... [Bitte ausfüllen!]... do setze (x + dx, y + dy) ensure... [Bitte ausfüllen!]... end In einer anderen Klasse, z.B. STATION obere_linke : POSITION setze_positionen do obere_linke. setze (x – grösse/2, y + grösse/2)... end Qualifizierte und unqualifizierte Featureaufrufe In Klasse POSITION : setze (xwert, ywert : REAL)... do... end Qualifizierter Aufruf Unqualifizierter Aufruf

20 Das aktuelle Objekt (current object) Zu jeder Zeit während einer Ausführung gibt es ein aktuelles Objekt, auf welches das aktuelle Feature aufgerufen wird. Zu Beginn: Das Wurzelobjekt. Danach:  Ein unqualifizierter Aufruf wie z.B. setze (u, v) wird auf das aktuelle Objekt angewendet.  Ein qualifizierter Aufruf wie z.B. x. setze (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

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

22 Das aktuelle Objekt Zu jeder Zeit während einer Ausführung gibt es ein aktuelles Objekt, auf welches 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”

23 In STATION : setze_positionen do obere_linke.setze (x – grösse/2, y + grösse/2)... end obere_linke : POSITION Featureaufrufe

24 Die Kundenbeziehung (client relation) Da die Klasse STATION ein Feature obere_linke : POSITION hat (und Aufrufe der Form obere_linke.setze (...) ), ist STATION ein Kunde der Klasse POSITION

25 Kunden und Vererbung - graphisch Vererbung Kunde

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

27 ziel := quelle quelle ist ein Ausdruck:  Das Ergebnis einer Abfrage :  position  obere_linke position  Arithmetische oder Boole‘sche Ausdrucke:  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

28 class POSITION feature -- Zugriff x : REAL -- Horizontale Position y : REAL -- Vertikale Position feature -- Element-Veränderungen setze (xwert, ywert : REAL) -- Setzt Koordinaten auf [xwert, ywert ]. require x_nicht_negativ : xwert >= 0 y_nicht_negativ : ywert >= 0 do ensure x_gesetzt : x = xwert y_gesetzt : y = ywert end x := xwert y := ywert Zuweisungen (Erinnerung) x y Eine Instanz von POSITION Ausführung von setze (2, 1) auf diese Instanz

29 setze (xwert, ywert : REAL) do x := xwert y := ywert end Zuweisung Eine Zuweisung ist eine Instruktion, die einen Wert durch einen anderen ersetzt x y 2 0 p. setze (2, 1) 0 1 p

30 x := y if x = y then... e if x = Current then... Zuweisung nicht mit Gleichheit verwechseln! Instruction Ausdruck

31 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) “Almaviva”name grundbesitzer geliebter a O1 “Figaro” O2 “Susanna” O3 

32 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?)

33 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…

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

35 class WERTE_PAAR feature datenfeld : INTEGER rechtes: WERTE_PAAR setze (n : INTEGER ; r : WERTE_PAAR) -- Beide Felder zurücksetzen. do item := n right := r end Effekt einer Zuweisung Referenztypen: Referenzzuweisung Expandierte Typen: Kopie des Wertes 3 datenfeld rechtes item := n rechtes := r t : WERTE_PAAR... create t... t. setze (25, Void)

36 Zuweisung class STATION feature ort : POSITION name : STRING länge : REAL setze_alle ( o : POSITION ; l : REAL ; n : STRING ) do ort := o länge := l name := n end

37 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

38 Ein Element am Ende einfügen extend (v : STRING) -- v am Ende hinzufügen. -- 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

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

40 Lokale Variablen (in Routinen) Eine Art von Entität (Sie heissen auch „lokale Entitäten“). Deklarieren Sie 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... end Result ist (für Funktionen) auch eine lokale Variable.

41 Ü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

42 Leseaufgaben für die nächsten 2 Wochen Control structures: Kapitel 7

43 Was wir 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.