If you can't read please download the document
Upload
merlin
View
14
Download
0
Embed Size (px)
DESCRIPTION
Einführung in die Programmierung Prof. Dr. Bertrand Meyer. Lektion 7: Referenzen und Zuweisungen. Das Programm für diese Lektion. Wie werden Objekte “gemacht” ? (Mehr Details) Wie modifizieren wir ihre Inhalte? Zuweisungen Speicherverwaltung, GC - PowerPoint PPT Presentation
Citation preview
Covariance
Einfhrung in die Programmierung
Prof. Dr. Bertrand MeyerLektion 7: Referenzen und ZuweisungenChair of Software Engineering1Das Programm fr diese LektionWie werden Objekte gemacht ?(Mehr Details)
Wie modifizieren wir ihre Inhalte?ZuweisungenSpeicherverwaltung, GCMehr ber Referenzen, Entitten, Typen, Variablen...Nr.mit zustlichen Begriffen: Referenzen sind schwierigrequire-- Meine Schwester ist ledig-- Meine Schwester ist in Dietlikon -- Der Cousin meines Nachbarn heiratete-- gestern eine rztin in Sydneyensure-- Meine Schwester ist ledig-- Meine Schwester ist in Dietlikonend
do(a doctor)Nr.obwohl es oberflchlich einfach ausscheint
Die sichtbare Leichtigkeit ist trgerisch
Nehmen sie zum Bespiel diese Behauptungen hier
Lassen uns ein Bild zeichnen
Wir werden Probleme mit Referenzen begegnen, die sich mit viel mehr technischen worten Ausdrucken, aber prinzipiell sehr hnlich sind
Das Problem ist die menschliche Fhigkeit, ein gewisses Objekt mit mehrere Namen zu ernennen
Mit anderen Worten
diese Referenz weist auf dieses Objekt hin3Erinnerung: Klassen und Objekte Zur Laufzeit: Objekte (Softwaremaschinen)
Im Programmtext: Klassen
Jede Klasse beschreibt eine Menge von mglichen Laufzeitobjekten.
Nr.4Es ist ntzlich, sie noch einmal an die Beziehung zwischen Klassen und Objekten zu erinnernObjektstrukturEin 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 Objektdestinationoriginlinenext(LEG )(LEG )positionname(STATION )(STATION )(LINE )(VECTOR )y -34.9x 23.5Nr.5Wenn sie Integer aussprechen, sind sie in guter Gesellschaft
John von Neumann, einer der Schpfer der Informatik, sprach dieses Wort immer falsch ausZwei Arten von TypenReferenztypen: Der Wert jeder Entitt ist eine Referenz
b : STATION
Expandierte Typen: Der Wert jeder Entitt ist ein Objekt
d : E_STATIONb(STATION )(E_STATION )dNr.6Expandierte und ReferenztypenWas ist der Unterschied zwischen:
Jeder Wagen hat einen Motor
Jeder Wagen hat einen Hersteller
?
Nr.Der grundlegende Unterschied liegt in der Mglichkeit oder Unmglichkeit von Aufteilung
Zwei Wagen knnen ihren Hersteller gemeinsam haben, aber nicht ihre Motoren
bis auf wir Siamesische Zwillingswagen annehmen
7Expandierte KlassenEine Klasse kann als expandiert deklariert werden:
expanded class E_STATION ... Der Rest wie in STATION ...
Dann hat jede Entitt deklariert als
d : E_STATION
die eben beschriebene expandierte Semantik.Nr.8Basistypen als expandierte Klassenexpanded 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
Nr.9InitialisierungAutomatische Initialisierungsregeln:0 fr Zahlen (ganze Zahlen, reelle Zahlen)Null-Zeichen fr ZeichenFalse fr Boolesche WerteVoid fr Referenzen
Diese Regeln gelten fr:Felder (von Klassenattributen), bei der ObjekterzeugungLokale Variablen, beim Start der Routinenausfhrung (gilt auch fr Result)Nr.10Das ist nicht wahr fr C++. Wenn sie nicht selbst ein Feld initialisieren, und ihr Programm versucht, auf das Feld zuzugreifen, wird der Wert sein was der Speicher momentan enthlt. Das ist ein bekanntes Sicherheitsrisiko, denn ein Angreifer kann diese Mglichkeit benutzen, um falsche Werte in ein Programm einzufgen.Referenzen knnen Zyklen bildenO1"Almaviva"namegrundbesitzergeliebter"Figaro""Susanna"O3O2grundbesitzergeliebternamegrundbesitzergeliebternameNr.11Und was ist mit Zeichenketten (strings)?Eine Zeichenkette ist ein Objekt (in Eiffel, Java, )
Das Feld name ist ein ReferenzfeldO1"Almaviva"namegrundbesitzergeliebterAlmavivaNr.12Attribute sind Features der Klasse.
Noch ein AttributFelder widerspiegeln Attribute der KlasseEin AttributclassVECTORfeature -- Zugriffx: REAL-- stliche Koordinate.y: REAL-- Nrdliche Koordinate.
endNr.13Feldern einen Wert zuweisen (assign)classVECTORfeature -- Zugriffx: REAL-- stliche Koordinate.y: REAL-- Nrdliche Koordinate.
feature -- Element-Vernderungenset (new_x, new_y : REAL)-- Setze Koordinaten auf [new_x, new_y].do
ensurex_gesetzt : x = new_xy_gesetzt : y = new_yendendNr.14x := new_xy := new_yFeldern einen Wert zuweisenxy2001Eine Instanzvon VECTORAusfhrung von set (2, 1) auf diese InstanzclassVECTORfeature -- Zugriffx: REAL-- stliche Koordinate.y: REAL-- Nrdliche Koordinate.
feature -- Element-Vernderungenset (new_x, new_y : REAL)-- Setze Koordinaten-- auf [new_x, new_y].do
ensurex_gesetzt : x = new_xy_gesetzt : y = new_yendendNr.15Doppelpunkt gleichclass STATION feature
name : STRING-- Name.
position : VECTOR-- Position in Bezug auf das Stadtzentrum.
set_position (new_x, new_y : REAL)-- Position setzen.doposition set (new_x, new_y)end
endWas Sie tun knnenBesser:-- Position auf Abzisse new_x,-- Ordinate new_y setzen.Nr.16vervollstndigenIn Klasse VECTOR :move (dx, dy : REAL) -- Um dx horizontal und dy vertikal verschieben.doset (x + dx, y + dy)ensure... [Bitte ausfllen!] ...endIn einer anderen Klasse, z.B. STATIONposition: VECTORset_position (new_x, new_y: REAL) do position set (new_x, new_y) endQualifizierte und unqualifizierte FeatureaufrufeIn Klasse VECTOR :set ( new_x, new_y : REAL)do ...endQualifizierter AufrufUnqualifizierter AufrufNr.17Das aktuelle Objekt (current object)Zu jeder Zeit whrend einer Ausfhrung 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
Nr.18Reserviertes wortWurzelobjektWurzelprozedurobj1obj2r1r2create obj1.r1create obj2.r2Ausfhrung eines SystemsNr.19Das aktuelle ObjektZu jeder Zeit whrend einer Ausfhrung gibt es ein aktuelles Objekt, auf welchem das aktuelle Feature aufgerufen wird.
Zu Beginn ist dies das Wurzelobjekt.
Whrend 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 Relativitt
Nr.20In STATION:
position: VECTOR
set_position (new_x, new_y : REAL) do position set (new_x, new_y) endFeatureaufrufeNr.21Die 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
Nr.22Kunden und Vererbung - graphischVererbung
Kundeorigin, destination positionnextrotated, normalized...Nr.23EntittenEine Entitt ist ein Name im Programm, der mgliche Laufzeitwerte bezeichnet.
Manche Entitten sind konstant.
Andere sind variabel:AttributeLokale VariablenNr.24
ziel := quelle
quelle ist ein Ausdruck, z.B.: Das Ergebnis einer Abfrage:position xi_th (5)Arithmetische oder Boolesche Ausdrcke:a + (b * c)(a < b) and (c = d )
ziel ist eine Variable. Die Mglichkeiten sind: Ein AttributResult in einer Funktion (noch nicht gesehen bisher)Eine lokale Variable einer Routine (noch nicht gesehen)Werte von Variablen ndern: ZuweisungenNr.25x := new_xy := new_yZuweisungen (Erinnerung)xy2001Eine Instanz von VECTORAusfhrung von set (2, 1) auf diese InstanzclassVECTORfeature -- Zugriffx: REAL-- stliche Koordinate. y: REAL-- Nrdliche Koordinate.
feature -- Element-Vernderungenset (new_x, new_y : REAL)-- Setze Koordinaten auf [new_x, new_y].do
ensurex_gesetzt : x = new_xy_gesetzt : y = new_yendendNr.26Doppelpunkt gleichset (new_x, new_y : REAL)dox := new_xy := new_y
endZuweisungEine Zuweisung ist eine Instruktion, die einen Wert durch einen anderen ersetzt.xy20v.set (2, 1)01vNr.27Zwei Arten von TypenReferenztypen: Der Wert jeder Entitt ist eine Referenz
b : STATION
Expandierte Typen: Der Wert jeder Entitt ist ein Objekt
d : E_STATIONb(STATION )(E_STATION )dZuweisung: kopiert die Referenzc := bcZuweisung: kopiert das ObjektNr.28x := y
if x = y then...
if x = Current then...
Zuweisungen nicht mit Gleichheit verwechseln!InstruktionAusdruckNr.29Was mit unerreichbaren Objekten tun?Referenzzuweisungen knnenmanche Objekte unerreichbarmachen.
Zwei mgliche AnstzeManuelles free (C++, Pascal)Automatische Speicherbereinigung (garbage collection, d.h. Mllabfuhr) (Eiffel, Java, C#, .NET)AlmavivanamegrundbesitzergeliebteraO1FigaroO2SusannaO3Nr.Die Ansicht eines C-ProgrammierersNewsgroup-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?)
Nr.Ich sage ein klares NEIN! Es ist SCHLECHTE PROGRAMMIERUNG, ein unreferenziertes Objekt herumliegenzulassen. Objektreferenzen sind wie normale Pointer - wenn sie ein Objekt allokieren, sollten sie dafr verantwortlich sein, und es freien, wenn sie fertig mit ihm sind. (Hat ihre Mutter ihnen nicht immer gesagt, die Spielzeuge wegzurumen, wenn sie mit ihnen fertig waren?)Argumente fr automatische BereinigungManuelle Bereinigung ist eine Gefahr fr die Zuverlssigkeit:
Falsche frees sind Bugs, die nur sehr schwierig zu finden und zu beheben sind.
Manuelle Bereinigung ist mhsam.
Moderne (automatische) Speicherbereiniger haben eine akzeptable Performance.
Speicherbereinigung ist einstellbar: an/abschalten, parametrisierenNr.freilassen
reichen, gengen (suffire)Eigenschaften einer SpeicherbereinigungKonsistenz :Nur unerreichbare Objekte werden bereinigt
Vollstndigkeit :Alle unerreichbaren Objekte werden bereinigt
Konsistenz (Soundness) ist eine absolute Anforderung. Lieber keine Speicherbereinigung als eine unsichere Speicherbereinigung.
Aber: sichere automatische Speicherbereinigung ist schwierig fr C-basierte Sprachen.Nr.letztendlich
von Zeit zu Zeit, dann und wann;class LINKABLEfeature item: INTEGER right: LINKABLE set (n : INTEGER ; r : LINKABLE) -- Beide Felder setzen. do item := n right := r endendEffekt einer ZuweisungReferenztypen: ReferenzzuweisungExpandierte Typen: Kopie des Wertes3datenfeldrechtesitem := nright := rl : LINKABLE...create l...l.set(25, Void)Nr.34Zuweisungclass LINE featurenumber : INTEGERcolor : COLORcity : CITY
set_all (n : INTEGER ; co : COLOR ; ci : CITY )donumber := ncolor := cocity := ciendendNr.35Eine verkettete Liste von StringsHaldeneggitemrightCentralitemrightHaupt-bahnhofitemright(LINKABLE)(LINKABLE)(LINKABLE)first_elementlast_elementcount3Parade-platzitemright: Einfgen am Ende(LINKABLE)4Nr.36Ein Element am Ende einfgenextend (v : STRING)-- v am Ende hinzufgen.-- Den Cursor nicht verschieben.localp : LINKABLE [STRING]docreate p make (v)if is_empty thenfirst_element := pelselast_element put_right ( p)endlast_element := pcount := count + 1endNr.37LINKABLE - Zellenclass LINKABLE featureitem: STRING-- Wert dieser Zelle.
right : LINKABLE-- Zelle, welche an diese Zelle angehngt ist -- (falls vorhanden).
put_right (other : like Current)-- Setzt other rechts neben die aktuelle Zelle.doright := otherensureangehaengt: right = otherendendHaldeneggitemrightNr.38Lokale Variablen (in Routinen)Deklarieren Sie einfach zu Beginn einer Routine (in der local Klausel)
r (...)-- Kopfkommentarrequire...localx : REALm : STATIONdo... x und m sind hier benutzbar ...ensure... x und m sind hier nicht mehr benutzbar ...end
Result ist (fr Funktionen) auch eine lokale Variable.Nr.39bung (beinhaltet Schleifen)Kehren Sie eine Liste um!Halden-eggitemrightCentralHaupt-bahnhoflast_elementfirst_elementcount3(LINKABLE)(LINKED_LIST)Parade-platzNr.40Leseaufgaben fr die nchsten 2 WochenControl structures (Kapitel 7)Nr.Was wir in dieser Vorlesung gesehen habenDas aktuelle Objekt
Expandierte Typen und Referenztypen
Zuweisung:Fr ReferenzenFr expandierte Werte
Verkettete Datenstrukturen
Einen kurzen Blick auf bedingte AnweisungenNr.42