Einführung in die Programmierung Prof. Dr. Bertrand Meyer

  • 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