objekt - jargon programmierung ii prof. dr. michael löwe
TRANSCRIPT
Objekt - „Jargon“
Programmierung II
Prof. Dr. Michael Löwe
Klassen und Objekte 2
Inhalt
BegriffeObjekterzeugung: „New“, „Create“ etc.Das Undefinierte: „Nil“, „Null“, „Nothing“ etc. Objektzuweisung: „:=“, „Set...=“ etc.Das Clonen: „clone“, „copy“, etc.Objektvergleich: „=“, „==“, „Is“ etc.Das Objekt selbst: „Me“, myself, etc.Rekursive KlassenCollections
Klassen und Objekte 3
Begriffe
Instanzen zu Klassen(modulen) heißen Objekte.
Die Variablen einer Klasse heißen auch Attribute.
Die Prozeduren/Funktionen einer Klasse nennt man Methoden.
Die öffentlichen Methoden bilden die Schnittstelle einer Klasse.
Die Schnittstelle (ohne die implementierenden Rümpfe) nennt man auch Protokoll der Klasse.
Den Aufruf einer Methode für ein Objekt nennt man auch Nachricht an das Objekt.
Ein Objekt versteht eine Nachricht, wenn Sie zum Protokoll seiner Klasse gehört.
Klassen und Objekte 4
Übung: Wahrheitswerte
Definieren Sie eine Klasse MyBool mit folgender Schnittstelle (Initialisierung auf „false“):
Class MyBoolPublic Function myNot As MyBoolPublic Function myAnd (b As MyBool) As MyBoolPublic Function myOr (b As MyBool) As MyBoolPublic Sub setTrue Public Sub setFalse End Class MyBool
Klassen und Objekte 5
Objekterzeugung
Variablendeklaration und Variablenbelegung:
• Dim i As Integer
• Dim b As MyBool
• b = New MyBool
Name: iName: i Wert: 0Wert: 0Variablen-Assoziation
Name: bName: bVariablen-Assoziation
Name: bName: b
Variablen-AssoziationV1: ...V2: ...Vn: ...
V1: ...V2: ...Vn: ...
Klassen und Objekte 6
Das Undefinierte
Dim b as MyBool
Set b = Nothing
„b.method()“ ist undefiniert• Nothing kann nichts• Nothing macht nichts• Auf Nothing kann man nicht zugreifen Nothing ist die Verkörperung des NICHTS
Name: bName: bVariablen-Assoziation
NothingNothing
Klassen und Objekte 7
Objektzuweisung
Zuweisungen an Variablen zu (elementaren) Typen:
Dim x As Boolean [x: false]
Dim y As Boolean [x: false, y: false]
x = true [x: true, y: false]
y = x [x: true, y: true]
y = False [x: true, y: false]
If x = y Then ... [(x = y) false]
Klassen und Objekte 8
Objektzuweisung
Zuweisungen an Variablen zu Objekttypen:Dim x As MyBoolDim y As MyBoolSet x = New MyBoolSet y = New MyBoolCall x.setTrueSet y = xCall y.setFalseIf x Is y Then ...
Namen: Objekte:
xxNothingNothing
Namen: Objekte:
xxNothingNothing
yy
Namen: Objekte:
xxNothingNothing
yyo1: falseo1: false
Namen: Objekte:
xxNothingNothing
yyo1: falseo1: false
o2: falseo2: false
Namen: Objekte:
xxNothingNothing
yyo1: trueo1: true
o2: falseo2: false
Namen: Objekte:
xxNothingNothing
yyo1: trueo1: true
o2: false
Namen: Objekte:
xxNothingNothing
yyo1: falseo1: false
Klassen und Objekte 9
Das „Clonen“ von Objekten
• Erweitern Sie die MyBool-Schnittstelle um:Public Function cloneMyBool As MyBool`Liefert als Wert eine Kopie von sich selbst
• Wie sieht das allgemeine Verfahren zum Kopieren von Objekten aus?
Klassen und Objekte 10
Objekt-Wert-Zuweisungen
Zuweisungen an Variablen zu Objekttypen:Dim x As MyBoolDim y As MyBoolSet x = New MyBoolSet y = New MyBoolCall x.setTrueSet y = x.cloneMyBoolCall y.setFalseIf x Is y Then ...
Namen: Objekte:
xxNothingNothing
Namen: Objekte:
xxNothingNothing
yy
Namen: Objekte:
xxNothingNothing
yyo1: falseo1: false
Namen: Objekte:
xxNothingNothing
yyo1: falseo1: false
o2: falseo2: false
Namen: Objekte:
xxNothingNothing
yyo1: trueo1: true
o2: falseo2: false
Namen: Objekte:
xxNothingNothing
yyo1: trueo1: true
o2: false
o3: trueo3: true
Namen: Objekte:
xxNothingNothing
yyo1: trueo1: true
o3: falseo3: false
Klassen und Objekte 11
Objektvergleich
Der Operator Is vergleicht, ob zwei Objekt-variablen dasselbe Objekt als Wert haben
Der Operator Is vergleicht nicht, ob die zwei Objektwerte inhaltlich gleich sind.
¿Was ist richtig? 1. (x Is y) (x = y)
2. (x = y) (x Is y)
Übungen:Ergänzen Sie die Schnittstelle von MyBool um die Gleichheit!
Wie sieht das allgemeine Verfahren für den Test auf Gleichheit aus?
Klassen und Objekte 12
Das Objekt selbst
Nachrichten an sich selbst schickencall Me. aMethod (...)
Set x = Me.aMethod (...)
Sich selbst als Parameter übergebencall anObject.aMethod(..., me,...)
Set x = anObject.aMethod(..., me,...)
Klassen und Objekte 13
Rekursive KlassenKlassen, die Attribute mit ihrem eigenen Typ definierenFast alle interessanten Datenstrukturen sind rekursiv:
– Listen, Ströme, Stapel, ....– Bäume, Hierarchien, ...– Arrays, Abbildungen, Dictionaries, ...
Übung: Realisieren Sie Ströme als rekursive Klasse!Class MyStream
Private entry As VariantPrivate nextEntry As MyStreamPublic function isEmpty As BooleanPublic function first As VariantPublic sub append (x As Variant)Public sub removeFirst
End Class MyStream
Klassen und Objekte 14
Ganzheitliche Vertiefung
Realisieren Sie optimierte Ströme, indem Sie sich das Ende merken:Class MyBetterStream
Private start As MyStream
Private end As MyStream
.... (Protokoll wie gehabt)....
End Class MyBetterStream
Klassen und Objekte 15
Objektzuweisung
Zuweisungen an Variablen zu Objekttypen:
Dim x As New MyBool [x: false]
Dim y As New MyBool [x: false, y: false]
Call x.setTrue [x: true, y: false]
Set y = x [x: true, y: true]
Call y.setFalse [x: false, y: false]
If x Is y Then ... [(x = y) true]