Grundkonzepte der objektorientierten Programmierung

Download Report

Transcript Grundkonzepte der objektorientierten Programmierung

Grundkonzepte der
objektorientierten Programmierung
Klaus Becker
2004
Objektorientierung
2
...
Modellierungssprache: UML
Implementierungssprache: Delphi, Java, ...
Assoziation
Grundkonzepte
Nachricht
Klasse
Objekt
Grundideen
3
Teil 1
Objekt-basierte Programmierung
4
Fallstudie: chuck a luck
Ziel ist es, ein System zu entwickeln, mit dem das in Amerika weit
verbreitete Würfelspiel „chuck a luck“ am Rechner gespielt werden kann.
Das Würfelspiel „chuck a luck“
5
Einsatz zahlen und Zahl tippen
Einsatz: 1 $
Gewinn:
Würfel werfen
Gewinn auszahlen
1
4
2
5
3
1$
6
0 Treffer:
1 Treffer: Einsatz + 1 $
2 Treffer: Einsatz + 2 $
3 Treffer: Einsatz + 3 $
1$
1$ 1$
1$ 1$ 1$ 1$
1$ 1$ 1$ 1$ 1$
6
Eine erste objektbasierte Lösung
Im Verzeichnis „ChuckALuck0“ finden Sie ein erstes Programm zur
Realisierung des Spiels.
7
Eine erste objektbasierte Lösung
Die Benutzungsoberfläche wird mit Hilfe von sog. GUI-Objekten (Graphical
User Interface) aufgebaut. Für die Ausführung des Spiels ist das TButtonObjekt „BWerfen“ zuständig.
Form1:
TForm1
PTitel:
TPanel
RGSpielbrett:
TRadioGroup
GBWuerfel:
TGroupBox
PWuerfelA:
TPanel
GBKonto:
TGroupBox
PKonto:
TPanel
BWerfen:
TButton
8
Eine erste objektbasierte Lösung
procedure TGUI.BSpielenClick(Sender: TObject);
var wuerfelA, wuerfelB, wuerfelC, konto, spielzahl: integer;
richtige: integer;
begin
Variablen zur
// Durchführung des Spiels
Repräsentation der
spielzahl := RGSpielbrett.ItemIndex+1;
Spielinformationen
konto := StrToInt(PKonto.Caption);
konto := konto-1;
wuerfelA := random(6)+1;
wuerfelB := random(6)+1;
wuerfelC := random(6)+1;
richtige := 0;
if spielzahl = wuerfelA then inc(richtige);
if spielzahl = wuerfelB then inc(richtige);
if spielzahl = wuerfelC then inc(richtige);
if richtige > 0 then konto := konto+(richtige+1);
// Aktualisierung der Anzeige
PWuerfelA.Caption := IntToStr(wuerfelA);
PWuerfelB.Caption := IntToStr(wuerfelB);
PWuerfelC.Caption := IntToStr(wuerfelC);
PKonto.Caption
:= IntToStr(konto);
end;
9
Bemerkungen
Das Programm im Verzeichnis „ChuckALuck0“ ist ad hoc entwickelt worden
(d. h. Benutzungsoberfläche zusammenstellen; Ereignisbehandlung
ergänzen). Für kleinere Anwendungen kann man auf diese Weise schnell zu
einem lauffähigen System kommen. Bei größeren Anwendungen versagt in
der Regel die ad-hoc-Methode. Man benötigt dann Methoden zur
systematischen Entwicklung von Software. Ziel soll es sein, die
objektorientierte Methode anhand des ChuckALuck-Beispiels Schritt für
Schritt zu entwickeln.
10
11
Teil 2
Objektorientierte Modellierung
Modellierung
12
1
4
2
5
3
1$
6
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
- Abbild der Miniwelt
- Vorlage für das System
Miniwelt
Modell
Informatisches System
13
Vom Gegenstand der Miniwelt ...
1
4
2
5
3
1$
6
Spielbrett
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
Würfel
Konto
Sichtweise:
Die Miniwelt ist aus Gegenständen aufgebaut. Gegenstände können
Personen, Dinge, Sachverhalte, Ereignisse, ... sein. Jeder Gegenstand
stellt eine autonome Einheit mit klar begrenzten Zuständigkeiten dar.
... zum Objekt im Modell
14
Miniwelt
Gegenstand
1
4
2
5
3
1$
6
spielbrett
Objekt
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
wuerfelA
wuerfelB
wuerfelC
konto
Modell
Grundidee der objektorientierten Modellierung:
Die Gegenstände der Miniwelt werden mit Hilfe von Objekten im Sinne der
Informatik beschrieben.
15
Struktur eines Gegenstandes
Miniwelt
Gegenstand
1
4
2
5
3
1$
6
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
Spielbrett
Würfel
Konto
Eigenschaft:
Zahl
Eigenschaft:
Augen
Eigenschaft:
Stand
Operation:
Tipp setzen
Operation:
werfen
Operationen:
Betrag einzahlen
Betrag abheben
Sichtweise:
Gegenstände der Miniwelt haben charakteristische Eigenschaften. Mit den
Gegenständen kann man bestimmte Operationen ausführen.
Attribute
16
Gegenstand
Eigenschaft:
Stand
Eigenschaft:
Augen
Eigenschaft: 1
Zahl
2
Operation:
Tipp setzen
3
1$
4
Operation:
werfen
5
6
Operationen:
Betrag einzahlen
Betrag abheben
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
Objekt
Miniwelt
Modell
spielbrett
wuerfelA
wuerfelB
wuerfelC
konto
zahl = 3
augen = 3
augen = 3
augen = 5
stand = 9
Attribut
Die charakteristischen Eigenschaften eines Objekts werden mit Attributen
erfasst. Die Gesamtheit der Attributwerte legt den Objektzustand fest.
Methoden
17
Gegenstand
Eigenschaft:
Stand
Eigenschaft:
Augen
Eigenschaft: 1
Zahl
2
Operation:
Tipp setzen
3
1$
4
Operationen:
Betrag einzahlen
Betrag abheben
Operation:
werfen
5
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
6
Miniwelt
Objekt
Modell
spielbrett
wuerfelA
wuerfelB
wuerfelC
konto
zahl = 3
augen = 3
augen = 3
augen = 5
stand = 9
setzen(tipp)
werfen
werfen
werfen
abheben(betrag)
einzahlen(betrag)
Methode
Das Verhalten eines Objekts wird mit Operationen / Methoden erfasst. Diese
bestimmen die dynamischen Eigenschaften eines Objekts.
Klassen
18
Modell
Klasse
TSpielbrett
TWuerfel
TKonto
zahl
augen
stand
setzen(tipp)
werfen
abheben(betrag)
einzahlen(betrag)
spielbrett
wuerfelA
wuerfelB
wuerfelC
konto
zahl = 3
augen = 3
augen = 3
augen = 5
stand = 9
setzen(tipp)
werfen
werfen
werfen
abheben(betrag)
einzahlen(betrag)
Objekt
Gleich strukturierte Objekte werden einer Klasse zugeordnet.
Klassen
19
Modell
Klasse
TSpielbrett
TWuerfel
TKonto
zahl
augen
stand
setzen(tipp)
werfen
abheben(betrag)
einzahlen(betrag)
instance of
instance of
instance of
spielbrett
wuerfelA
wuerfelB
wuerfelC
konto
zahl = 3
augen = 3
augen = 3
augen = 5
stand = 9
setzen(tipp)
werfen
werfen
werfen
abheben(betrag)
einzahlen(betrag)
Objekt
Klassen sind Baupläne für Objekte.
Objekte werden als Exemplare (Instanzen) von Klassen bezeichnet.
Erstes objektorientiertes Modell
20
1
4
2
5
3
1$
6
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
Modell
Miniwelt
TSpielbrett
TWuerfel
TKonto
zahl
augen
stand
setzen(tipp)
werfen
abheben(betrag)
einzahlen(betrag)
instance of
instance of
instance of
spielbrett
wuerfelA
wuerfelB
wuerfelC
konto
zahl = 3
augen = 3
augen = 3
augen = 5
stand = 9
Konstruktoren / Destruktoren
21
Modell
Klasse
TSpielbrett
TWuerfel
TKonto
zahl
augen
stand
erzeugen
vernichten
setzen(tipp)
erzeugen
vernichten
werfen
erzeugen
vernichten
abheben(betrag)
einzahlen(betrag)
instance of
instance of
instance of
spielbrett
wuerfelB
konto
zahl = ...
augen = 3
stand = 9
Objekt
Konstruktoren / Destruktoren sind spezielle Operationen zur Erzeugung /
Vernichtung von Objekten.
Beachte: Konstruktoren / Destruktoren sind Klassenmethoden
(d. h. Objekte verfügen nicht über diese Methoden).
22
Datenkapselung
Geheimnisprinzip:
Die für die Benutzung einer Systemkomponente (eines Moduls) nicht
benötigten Detailinformationen werden verborgen.
Datenkapselung bei Objekten / Klassen:
Die innere Struktur eines Objekts (Aufbau über Attribute) wird verborgen.
Objekte stellen Dienste nur über ihre Operationen / Methoden bereit.
TKonto
verborgen
stand
erzeugen
vernichten
abheben(betrag)
einzahlen(betrag)
Zugriff
erlaubt
Zugriffsmethoden
23
Um weiterhin auf Attributwerte (lesend bzw. schreibend) zugreifen zu
können, werden spezielle Zugriffsmethoden benötigt.
TKonto
TKonto
TKonto
stand
stand
stand
erzeugen
vernichten
abheben(betrag)
einzahlen(betrag)
erzeugen
vernichten
abheben(betrag)
einzahlen(betrag)
erzeugen
vernichten
abheben(betrag)
einzahlen(betrag)
„stand erfragen“
„stand setzen“
Zugriffsmethoden
24
Schnittstellenspezifikation
Die Benutzungsschnittstelle einer Klasse muss genau festgelegt werden.
• Zugriffsrechte (- kein Zugriff; + Zugriff erlaubt)
• Datentypen (und eventuelle Initialisierungswerte)
• Signaturen (Parameter und bei Funktionen der Ergebnistyp)
TKonto
TKonto
stand
– stand: integer
erzeugen
vernichten
abheben(betrag)
einzahlen(betrag)
„stand erfragen“
„stand setzen“
+ create(betrag: integer)
+ destroy
+ abheben(betrag: integer)
+ einzahlen(betrag: int.)
+ getStand: integer
+ setStand(betrag: integer)
UML
25
TWuerfel
augen
UMLKlassendiagramm
erzeugen
vernichten
werfen
instance of
wuerfelA
wuerfelB
wuerfelC
augen = 3
augen = 3
augen = 5
UMLObjektdiagramm
UML (Unified Modeling Language):
Grafische Sprache zur Beschreibung objektorientierter Modelle
26
UML-Editoren
Mit Hilfe von UML-Editoren (wie z. B. Violet) lassen sich UML-Modelle leicht
erstellen.
27
Aufgabe
Erstellen Sie mit Hilfe des UML-Editors „Violet“ ein Objekt- und ein
Klassendiagramm zur Beschreibung der ChuckALuck-Miniwelt.
Beachte: Mit Hilfe von Violet können Objekt- und Klassendiagramme nur
getrennt erstellt werden.
Ergänzen Sie auch passende Datentypen.
28
Lösung
UML-Objektdiagramm:
UML-Klassendiagramm (Feinfassung):
29
Teil 3
Vom Modell zum Programm
Zielsetzung
30
1
4
2
5
3
1$
6
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
Miniwelt
Modell
System
Ziel ist es, ein System zur Simulation des
ChuckALuck-Spiels auf der Basis des
entwickelten objektorientierten Modells
zu erstellen.
Teilmodell
31
Teil-Modell
TWuerfel
– augen: integer
+ create
+ destroy
+ werfen
+ getAugen: integer
instance of
wuerfelA
wuerfelB
wuerfelC
augen = 3
augen = 3
augen = 5
Die Implementierung eines objektorientierten Modells soll anhand eines
Teilmodells des Gesamtmodells gezeigt werden.
Die Klasse als Modul
32
Klassen werden als Module (Programmeinheiten) implementiert, die in
Delphi in zwei Teilen beschrieben werden:
Der öffentliche Teil besteht aus den Vereinbarungen, die zur Benutzung
des Moduls notwendig sind (Schnittstelle).
Der private Teil besteht aus den Implementierungsdetails, die für die
Benutzung nicht benötigt werden.
unit uWuerfel;
interface
// Deklaration der
// Attribute und Operationen
implementation
// Implementierung der
// Operationen
end.
TWuerfel
– augen: integer
+ create
+ destroy
+ werfen
+ getAugen: integer
Implementierung von Klassen
33
unit uWuerfel;
interface
type
TWuerfel = class
private
augen: integer;
public
constructor create;
destructor destroy;
procedure werfen;
function getAugen: integer;
TWuerfel
– augen: integer
+ create
+ destroy
+ werfen
+ getAugen: integer
end;
...
Deklaration der
Attribute und
Operationen
34
Implementierung von Klassen
unit uWuerfel;
interface
...
implementation
constructor TWuerfel.create;
begin
augen := 1;
randomize;
end;
destructor TWuerfel.destroy;
begin
end;
...
Implementierung der
Konstruktoren /
Destruktoren
35
Implementierung von Klassen
unit uWuerfel;
interface
...
implementation
...
procedure TWuerfel.werfen;
begin
augen := random(6)+1;
end;
function TWuerfel.getAugen: integer;
begin
result := augen;
end;
end.
Implementierung der
Operationen
Einbindung einer Modellklasse
36
unit uGUI;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ExtCtrls,
uWuerfel;
type
TForm1 = class(TForm)
...
Bekanntmachen der
Klassen
Deklaration eines Objekts
37
...
type
TForm1 = class(TForm)
PTitel: TPanel;
RGSpielbrett: TRadioGroup;
GBWuerfel: TGroupBox;
GBKonto: TGroupBox;
PWuerfelA: TPanel;
PWuerfelB: TPanel;
PWuerfelC: TPanel;
PKonto: TPanel;
BSpielen: TButton;
procedure FormCreate(Sender: TObject);
procedure BSpielenClick(Sender: TObject);
private
{ Private-Deklarationen }
wuerfelA: TWuerfel;
public
end;
{ Public-Deklarationen }
Deklaration eines
GUI-Objekts
Deklaration eines
Modell-Objekts
38
Erzeugung eines Modell-Objekts
unit uGUI;
interface
...
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
wuerfelA := TWuerfel.create;
end;
procedure TForm1.BSpielenClick(Sender: TObject);
...
end.
Erzeugung eines
Modell-Objekts
39
Aktivierung eines Modell-Objekts
procedure TForm1.BSpielenClick(Sender: TObject);
Begin
// Aktivierung des Modell-Objekts
wuerfelA.werfen;
// Aktualisierung der Anzeige
PWuerfelA.Caption := IntToStr(wuerfelA.getAugen);
end;
40
Aufgabe
Kopieren Sie die Dateien aus dem Verzeichnis ChuchALuck0 in einen neuen
Ordner.
Implementieren und testen Sie Schritt für Schritt die Klassen TWuerfel,
TKonto und TSpielzahl.
Erstellen Sie ein objektorientiertes Programm zur Simulation des
ChuckALuck-Spiels. Eine vollständige Lösung finden Sie im Verzeichnis
„ChuckALuck1“.
41
Lösung
procedure TGUI.BSpielenClick(Sender: TObject);
var tipp, zahl, richtige: integer;
Begin
tipp := RGSpielbrett.ItemIndex+1;
// Aktivierung der Modell-Objekte
konto.abheben(1);
spielbrett.setzen(tipp);
wuerfelA.werfen;
wuerfelB.werfen;
wuerfelC.werfen;
richtige := 0;
zahl := spielbrett.getZahl;
if zahl = wuerfelA.getAugen then inc(richtige);
if zahl = wuerfelB.getAugen then inc(richtige);
if zahl = wuerfelC.getAugen then inc(richtige);
if richtige > 0 then konto.einzahlen(richtige+1);
// Aktualisierung der Anzeige
PWuerfelA.Caption := IntToStr(wuerfelA.getAugen);
PWuerfelB.Caption := IntToStr(wuerfelB.getAugen);
PWuerfelC.Caption := IntToStr(wuerfelC.getAugen);
PKonto.Caption
:= IntToStr(konto.getStand);
end;
42
43
Teil 4
Komplexe Objektstruktur
44
Ereignissteuerung bisher
Auslösende Aktion
Ausgelöste Aktion
Mausklick auf den
„werfen“-Button
Der vom Benutzer eingestellte Tipp am Spielbrett wird
übernommen.
Das Spiel wird mit diesem Tipp durchgeführt.
Die Ergebnisse des Spiels (Würfelergebnisse, neuer
Kontostand) werden angezeigt.
45
Ereignissteuerung jetzt
Auslösende Aktion
Ausgelöste Aktion
Mausklick auf einen
Radio-Button
Der Einsatz wird vom Konto abgehoben. Die gewählte
Zahl wird gesetzt.
Mausklick auf den
„werfen“-Button
Die Würfel werden geworfen.
Mausklick auf den
„aktualisieren“-Button
Der Gewinn wird ermittelt und auf dem Konto
eingezahlt.
Ereignissteuerung jetzt
46
Aktionen
Zahl auf dem Spielbrett festlegen
Solange würfeln, bis genug „Treffer“ erzielt sind.
Gewinn auszahlen lassen.
Achtung,
Fehlbedienung
möglich!
47
Komplexere Ereignissteuerung
[1][2]... / Tipp setzen
[1][2]... /
Tipp setzen; Konto abbuchen
bereit
z0
[werfen] / Würfel werfen
gesetzt
z1
gewürfelt
z2
[aktualisieren] / Konto aktualisieren
Zustand:
Auslösende Aktion:
Ausgelöste Aktion:
Neuer Zustand:
bereit
RadioGroupButton
anklicken
Tipp setzen
Konto abbuchen
gesetzt
gesetzt
RadioGroupButton
anklicken
Tipp setzen
gesetzt
gesetzt
Button „werfen“
anklicken
Würfel werfen
gewürfelt
gewürfelt
Button „aktualisieren“
anklicken
Konto aktualisieren
bereit
Spielsteuerung
48
Die Steuerung des Spiels soll durch ein Objekt „spielmanager“
übernommen werden. Dieses Objekt ist zuständig für die Verwaltung des
Spielzustandes und die jeweilige Aktivierung der am Spiel beteiligten
Objekte.
Zustand:
Auslösende Aktion:
Ausgelöste Aktion:
Neuer Zustand:
bereit
RadioGroupButton
anklicken
Tipp setzen
Konto abbuchen
gesetzt
gesetzt
RadioGroupButton
anklicken
Tipp setzen
gesetzt
gesetzt
Button „werfen“
anklicken
Würfel werfen
gewürfelt
gewürfelt
Button „aktualisieren“
anklicken
Konto aktualisieren
bereit
Modellierung
49
1
4
2
5
3
1$
6
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
Modell
Miniwelt
spielmanager
zustand = 0
spielbrett
wuerfelA
wuerfelB
wuerfelC
konto
zahl = 3
augen = 3
augen = 3
augen = 5
stand = 9
Aktivierung von Objekten
50
konto
stand = 9
spielmanager
zustand = 0
abheben(1) 
konto
stand = 9
konto
Zustand vorher
Aktivierung durch
eine Nachricht
Zustand nachher
stand = 8
Sichtweise:
Ein Objekt stellt seiner Umgebung bestimmte Dienste (Operationen) zur
Verfügung. Durch eine Nachricht veranlasst ein „Kunde“ das Objekt, die
Dienstleistung zu erledigen. Das Objekt führt dann die Operation aus.
51
Das Spiel als Nachrichtenaustausch
RadioGroupButton anklicken im Zustand „bereit“:
2: setzen(tipp) 
wuerfelA
spielbrett
1: abheben(1) 
wuerfelB
wuerfelC
UMLKollaborationsdiagramm
spielmanager
spielbrettSetzen(tipp) 
konto
52
Das Spiel als Nachrichtenaustausch
Button [werfen] anklicken im Zustand „gesetzt“:
 1: werfen
wuerfelA
spielbrett
 2: werfen
wuerfelB
spielmanager
 3: werfen
wuerfelC
wuerfelWerfen 
konto
53
Das Spiel als Nachrichtenaustausch
Button [aktualisieren] anklicken im Zustand „gewürfelt“:
1: zahl  getZahl 
wuerfelA
spielbrett
 2: getAugen
wuerfelB
spielmanager
 3: getAugen
5: [richtige > 0]
einzahlen(richtige+1) 
kontoAktualisieren 
wuerfelC
 4: getAugen
konto
54
Das Spiel als Nachrichtenaustausch
RadioGroupButton anklicken im Zustand „bereit“:
2: setzen(tipp) 
UMLKollaborationsdiagramm
UML-Sequenzdiagramm
spielbrett
1: abheben(1) 
spielmanager
konto
Beziehung zwischen Objekten
55
1: zahl  getZahl 
wuerfelA
spielbrett
 2: getAugen
wuerfelB
spielmanager
 3: getAugen
konto
5: [richtige > 0]
einzahlen(richtige+1) 
kontoAktualisieren 
wuerfelC
 4: getAugen
Ein Nachrichtenaustausch zwischen Objekten kann nur stattfinden, wenn
das sendende Objekt die Nachricht dem Empfängerobjekt „zustellen“ kann.
Hierzu müssen diese Objekte in Beziehung zueinander stehen.
Kennt-Beziehung / Verbindung
56
wuerfelA
kennt
wuerfelB
kennt
spielmanager
kennt
spielbrett
konto
kennt
wuerfelC
kennt
Bei diesen Beziehungen führen die beteiligten Objekte ein Eigenleben. Die
in Verbindung stehenden Objekte sind zwar aufeinander angewiesen, weil
sie beispielsweise miteinander kommunizieren müssen, um eine
gemeinsame Aufgabe zu erledigen, aber es reicht, wenn ein Objekt das
andere kennt. Man spricht von einer Kennt-Beziehung zwischen Objekten.
Hat-Beziehung / Komposition
57
wuerfelA
spielbrett
hat
wuerfelB
hat
spielmanager
hat
konto
hat
hat
wuerfelC
Bei dieser Struktur geht man davon aus, dass ein Objekt ein anderes
besitzt, d. h. es hat die vollständige Kontrolle über dieses Objekt. Bei einer
solchen Zerlegung trägt das Ganze die Verantwortung für die Teilobjekte,
die Existenz eines Teilobjekts hängt unmittelbar von der Existenz des
Ganzen ab. Man spricht von einer Hat-Beziehung zwischen dem Ganzen
und seinen Teilen.
Modell mit Spielmanager
58
TSpielmanager
TSpielbrett
kennt
- zustand: integer
...
TWuerfel
kennt
TWuerfel
kennt
+ create(...)
+ spielbrettSetzen(z: int.)
+ wuerfelWerfen
+ kontoAktualisieren
+ getZustand: integer
wuerfelA
TWuerfel
kennt
TKonto
kennt
kennt
wuerfelB
kennt
wuerfelC
kennt
kennt
spielmanager
kennt
spielbrett
konto
Modell mit Spielmanager
59
TSpielmanager
TSpielbrett
hat
- zustand: integer
...
TWuerfel
hat
TWuerfel
hat
+ create(...)
+ spielbrettSetzen(z: int.)
+ wuerfelWerfen
+ kontoAktualisieren
+ getZustand: integer
...
TWuerfel
hat
TKonto
hat
wuerfelA
spielbrett
hat
wuerfelB
spielmanager
hat
wuerfelC
hat
hat
konto
hat
60
Exkurs: Beziehungsarten
Kennt-Beziehung: Verbindung
TSpielmanager
TKonto
kennt
Hat-Beziehung: Komposition
TSpielmanager
TKonto
hat
Ist-Beziehung: Verfeinerung; Vererbung
TForm1
TForm
ist
Exkurs: Kardinalitäten
61
1
3
TWuerfel
kennt
TSpielmanager
TSpielbrett
kennt
kennt
1
Kardinalitätsangaben:
TKonto
3: Ein Spielmanager-Objekt steht in Beziehung zu 3 Wuerfel-Objekten.
Kardinalität: legt die Wertigkeit einer Beziehung fest.
Klasse
1
Beziehung zu genau einem Objekt
Klasse
*
Beziehung zu beliebig vielen Objekten
Klasse
0..1
Beziehung zu höchstens einem Objekt
Klasse
1..*
Beziehung zu mindestens einem Objekt
62
Aufgabe
Erstellen Sie mit Violet zu einem der gezeigten UMLKollaborationsdiagramme ein entsprechendes UML-Sequenzdiagramm.
63
Teil 5
Implementierung einer Hat-Beziehung
Zielsetzung
64
TSpielmanager
erstellen
TWuerfel
hat
- zustand: integer
...
fertig
+ create
+ wuerfelWerfen
...
Teil-Modell
instance of
instance of
spielmanager
zustand = ...
wuerfelA
hat
augen = 3
Die Implementierung der Hat-Beziehung soll anhand eines Teilmodells des
Gesamtmodells gezeigt werden. Wir verzichten vorerst auf die Verwaltung
des Spielzustands.
65
Referenzen schaffen Beziehungen
Zeiger (Adresse)
2091
2091
Referenzattribut
Referenzen schaffen Beziehungen
66
TSpielmanager
- zustand: integer
- wuerfelA: TWuerfel
- wuerfelB: TWuerfel
- wuerfelC: TWuerfel
- spielbrett: TSpielbrett
- konto: TKonto
...
Referenzattribute
Mit Hilfe von Referenzattributen kann ein Objekt sich die Adressen seiner
„Beziehungspartner“ merken.
Modellklasse mit Referenzattributen
67
unit uSpielmanager;
interface
Bekanntmachen der Klassen
uses uWuerfel, uKonto, uSpielbrett;
type
TSpielmanager = class(TObject)
private
zustand: integer;
wuerfelA: TWuerfel;
wuerfelB: Twuerfel;
wuerfelC: TWuerfel;
konto: TKonto;
spielbrett: TSpielbrett;
public
constructor create;
destructor destroy; override;
...
end;
implementation
TSpielmanager
- zustand: integer
- wuerfelA: TWuerfel
- wuerfelB: TWuerfel
- wuerfelC: TWuerfel
- spielbrett: TSpielbrett
- konto: TKonto
...
Deklaration der Referenzattribute
68
Erzeugung des Würfel-Objekts
type
TSpielmanager = class(TObject)
private
wuerfelA: TWuerfel;
public
constructor create;
destructor destroy; override;
...
end;
Siehe Delphi-Hilfe
implementation
constructor TSpielmanager.create;
begin
inherited create;
wuerfelA := TWuerfel.create;
end;
destructor TSpielmanager.destroy;
begin
Siehe Delphi-Hilfe
wuerfelA.free;
inherited destroy;
end;
spielmanager
wuerfelA
hat
Modellstruktur
Bei dieser Struktur geht man
davon aus, dass ein Objekt ein
anderes besitzt, d. h. es hat die
vollständige Kontrolle über
dieses Objekt. Bei einer solchen
Zerlegung trägt das Ganze die
Verantwortung für die
Teilobjekte, die Existenz eines
Teilobjekts hängt unmittelbar
von der Existenz des Ganzen
ab. Man spricht von einer HatBeziehung zwischen dem
Ganzen und seinen Teilen.
69
Implementierung einer Nachricht
...
spielmanager
type
TSpielmanager = class(TObject)
private
wuerfelA: TWuerfel;
public
constructor create;
destructor destroy; override;
procedure wuerfelWerfen;
...
end;
hat
Modellstruktur
Nachricht
spielmanager
implementation
...
Senderobjekt-Klasse
procedure TSpielmanager.wuerfelWerfen;
begin
wuerfelA.werfen;
Operation
end;
Empfängerobjekt
wuerfelA
werfen 
wuerfelA
70
Erzeugung des Spielmanager-Objekts
unit uGUI;
spielmanager
interface
wuerfelA
hat
Modellstruktur
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ExtCtrls, uSpielmanager;
type
TForm1 = class(TForm)
...
private
{ Private-Deklarationen }
spielmanager: TSpielmanager;
public
{ Public-Deklarationen }
end;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
spielmanager := TSpielmanager.create;
end; ...
71
Zugriff auf abhängiges Objekt
unit uGUI;
form1
spielmanager
kennt
interface
wuerfelA
hat
...
Modellstruktur
implementation
{$R *.DFM}
procedure TGUI.BWerfenClick(Sender: TObject);
begin
// Aktualisierung der Modell-Objekte
Kein direkter Zugriff
spielmanager.wuerfelWerfen;
auf wuerfelA möglich
// Aktualisierung der Anzeige
PWuerfelA.Caption :=
IntToStr(spielmanager.getWuerfelA);
end;
Nachrichten
...
form1
getWuerfelA 
spielmanager
getAugen 
wuerfelA
72
Zugriff auf abhängiges Objekt
unit uGUI;
spielmanager
interface
wuerfelA
hat
...
implementation
{$R *.DFM}
procedure TGUI.BWerfenClick(...);
begin
// Aktualisierung der Modell-Objekte
spielmanager.wuerfelWerfen;
// Aktualisierung der Anzeige
Hilfsoperation
PWuerfelA.Caption :=
IntToStr(spielmanager.getWuerfelA);
end;
function TSpielmanager.getWuerfelA: integer;
begin
result := wuerfelA.getAugen;
end;
TSpielmanager
- wuerfelA: Wuerfel
...
+ create
+ destroy
+ wuerfelWerfen
...
+ getWuerfelA: integer
...
73
Aufgabe
Die gezeigte Implementierung des Teilmodells „Spielmanager hat Wuerfel“
finden Sie im Verzeichnis „ChuckALuck20“. Testen Sie zunächst diese
Implementierung. Beachten Sie, dass man hier nur Würfel A werfen kann.
Bauen Sie dann schrittweise diese Implementierung zu einer
Implementierung des gesamten Spiels aus. Berücksichtigen Sie zunächst
noch nicht den jeweiligen Spielzustand. (Zum Vergleich: „ChuckALuck21“)
Berücksichtigen Sie in einem letzten Schritt den jeweiligen Spielzustand.
Eine vollständige Implementierung finden Sie im Verzeichnis
„ChuckALuck22“.
74
75
Teil 6
Implementierung einer Kennt-Beziehung
Zielsetzung
76
TSpielmanager
TKonto
kennt
- zustand: integer
...
+ create
+ wuerfelWerfen
...
Teil-Modell
instance of
instance of
spielmanager
zustand = ...
konto
kennt
stand = 99
Hier sollen die Ähnlichkeiten und Unterschiede zwischen einer
Implementierung der Kennt-Beziehung und der Hat-Beziehung aufgezeigt
werden.
77
Bekanntschaft durch Referenzen
TSpielmanager
- zustand: integer
- wuerfelA: Wuerfel
- wuerfelB: Wuerfel
- wuerfelC: Wuerfel
- spielbrett: Spielbrett
- konto: Konto
+ create(...)
+ spielbrettSetzen(z: int.)
+ wuerfelWerfen
+ kontoAktualisieren
+ getZustand: integer
Referenzattribute
Die anzustrebende Grundsituation bleibt gleich:
Mit Hilfe von Referenzattributen soll das TSpielmanager-Objekt sich die
Adressen seiner „Bekanntschaften“ merken.
78
Erzeugung der Objekte
unit uGUI;
spielmanager
interface
konto
kennt
uses
Modellstruktur
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ExtCtrls, uKonto, ..., uSpielmanager;
type
TForm1 = class(TForm)
...
private
{ Private-Deklarationen }
konto: TKonto; ...
spielmanager: TSpielmanager;
public
{ Public-Deklarationen }
constructor create(...; k: Tkonto; ...); ...
end;
implementation {$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
konto := TKonto.create; ...
spielmanager := TSpielmanager.create(..., konto, ...);
end;
79
Erzeugung von Referenzen
3A80
3A80
3A80
spielmanager := TSpielmanager.create(..., konto, ...);
constructor TSpielmanager.create(...; k: TKonto; ...);
begin
... konto := k; ...
end;
3A80
3A80
3A80
80
Erzeugung von Referenzen
// Deklaration des Konstruktors
constructor TSpielmanager.create
(wA, wB, wC: TWuerfel;
k: TKonto; sp: TSpielbrett);
begin
zustand := 0;
konto := k;
Konstruktor mit
wuerfelA := wA;
Parametern zur
wuerfelB := wB;
Übergabe der
wuerfelC := wC;
Referenzen
spielbrett := sp;
end;
TSpielmanager
- zustand: integer
- wuerfelA: Wuerfel
- wuerfelB: Wuerfel
- wuerfelC: Wuerfel
- spielbrett: Spielbrett
- konto: Konto
+ create(wA, wB, wC: Wuerfel;
k: Konto;
sp: Spielbrett)
+ spielbrettSetzen(z: int.)
+ wuerfelWerfen
+ kontoAktualisieren
+ getZustand: integer
// Aufruf des Konstruktors
konto := TKonto.create(100);
konto: [3A80]
...
spielmanager := TSpielmanager.create
(wuerfelA, wuerfelB, wuerfelC, konto, spielbrett);
Die Referenzbildung erfolgt bei der Erzeugung des Spielmanager-Objekts.
81
Unterschied: Kennt-/Hat-Beziehung
Das Objekt „spielmanager“ steht in Verbindung zum Objekt „konto“.
kennt
hat
Das Objekt „spielmanger“ hat die volle Kontrolle über das Objekt „konto“.
82
Aufgabe
Implementieren Sie ein ChuckALuck-System mit Kennt-Beziehungen.
Ausgangspunkt kann „ChuckALuck1“ (Version des neuen ChuckALuckSystems ohne Spielmanager) oder „ChuckALuck21“ oder „ChuckALuck22“
(Versionen mit Hat-Beziehungen) sein.
Eine Lösung ohne Spielkontrolle finden Sie im Verzeichnis „ChuckALuck31“,
eine mit Kontrolle des Spielzustands im Verzeichnis „ChuckALuck32“.
83
Teil 7
UML-Werkzeuge
84
UML-Editoren
UML-Editoren unterstützen den Entwickler beim Erstellen von Diagrammen.
(Beispiel: Violet)
85
UML-Werkzeuge
UML-Werkzeuge unterstützen den Entwickler auch beim Erstellen des
Quellcodes und der Dokumentation von Modellen. (Beispiel: UMLEd)
86
UML-Werkzeuge
Quellcode – erzeugt mit UMLEd:
UNIT mTWuerfel;
interface
uses
// Uses-Klausel ggf. anpassen
type
TWuerfel = CLASS
// Attribute
private
augen : integer;
//Objektbeziehungen
// Methoden
public
constructor create;
procedure werfen;
function getAugen : integer;
end;
...
87
UML-Werkzeuge
Dokumentation – erzeugt mit UMLEd:
Dokumentation der Klasse "TWuerfel"
Beschreibung der Klasse:
Attribute
augen : integer
beschreibt die aktuelle Augenzahl des Würfels
Protokoll der Dienste / Methoden
Konstruktor
create
Auftrag
werfen
aktiviert den Würfel so, dass (mit Hilfe des Zufallsgenerators) eine neue
Augenzahl erzeugt wird
Anfrage
getAugen : integer
88
Aufgabe
Testen Sie das UML-Werkzeug UMLEd. Geben Sie eines der entwickelten
Modelle ein und lassen Sie den zugehörigen Quellcode erzeugen.
89
Teil 8
Zusammenfassung
Objektorientierung
90
...
Modellierungssprache: UML
Implementierungssprache: Delphi, Java, ...
Assoziation
Grundkonzepte
Nachricht
Klasse
Objekt
Grundideen
91
Idee: Objekt als Systemkomponente
Ein System besteht aus Objekten. Jedes Objekt
ist für bestimmte Aufgaben zuständig und
erledigt diese in eigener Verantwortung. Durch
Nachrichten können Objekte andere Objekte
zur Erledigung von (Teil)Aufgaben auffordern
und somit gemeinsam die Systemaktivitäten erzeugen.
92
Idee: Objekt als Modul
Ein Objekt (eine Klasse) ist eine Einheit
(Modul), bei dem Daten und die hierauf
anzuwendenden Operationen gemeinsam
verwaltet werden. Die Daten werden so
verkapselt, dass ein Zugriff nur über
Operationen erfolgen kann (Geheimnisprinzip).
Diese Operationen werden in einer klar
definierten Schnittstelle festgelegt.
93
Idee: Objekt als Baustein
Objekte / Klassen sollten nach Möglichkeit so
abstrakt entworfen werden, dass sie zur
Erledigung vieler Aufgaben benutzt werden
können (Wiederverwendung). Gut verwendbare
Klassen können dann in Klassenbibliotheken zur
weiteren Verwendung bereitgestellt
werden.
Grundkonzept: Objekt
94
Objekt
konto
Attribut
stand = 9
Operationen
Betrag abheben
Betrag einzahlen
Attributwert
Die Struktur eines Objekts wird durch Attribute
festgelegt. Die Attributwerte bestimmen den aktuellen
Zustand des Objekts.
Das Verhalten eines Objekts wird durch Operationen /
Methoden festgelegt. Das Objekt stellt diese Methoden
selbst bereit. Ein Objekt ist insofern eine autonome
Einheiten.
Grundkonzept: Klasse
95
TKonto
Klasse
stand
Klasse
Betrag abheben
Betrag einzahlen
instance of
Objekt
konto
stand = 9
Klassen sind Baupläne für Objekte.
Objekte werden als Exemplare / Instanzen von Klassen
bezeichnet.
Grundkonzept: Nachricht
96
Nachricht
Sender
spielmanager
Nachricht
werfen( ) 
Empfänger
wuerfelA
Die Aktivierung von Operationen / Methoden erfolgt
mit Hilfe von Nachrichten.
Eine Nachricht kann also als Methodenaufruf
angesehen werden.
Grundkonzept: Assoziation
Assoziation
97
TKonto
1
TSpielbrett
1
TSpielmanager
Assoziation
TWuerfel
3
Eine Assoziation ist eine Beziehung zwischen
verschiedenen Objekten einer oder mehrerer Klassen.
Eine Assoziation ist i.a. Grundvoraussetzung für den
Nachrichtenaustausch.
98
UML: Unified Modeling Language
Die Unified Modelling Language ist eine Sprache zur Spezifikation,
Visualisierung, Konstruktion und Dokumentation von Modellen für
Softwaresysteme, Geschäftsmodelle und andere Nicht-Softwaresysteme.
Sie bietet den Entwicklern die Möglichkeit, den Entwurf und die
Entwicklung von Softwaremodellen auf einheitlicher Basis zu diskutieren.
Die UML wird seit 1998 als Standard angesehen.
(aus: UML-Tutorial der Uni Magdeburg)
99
Ein Blick auf den LF-Lehrplan
100
Literaturhinweise
Helmut Balzert: Lehrbuch Grundlagen der Informatik. Spektrum Ak. Verlag 1999.
Heide Balzert: Lehrbuch der Objektmodellierung. Spektrum Ak. Verlag 1999.
Bernd Oestereich: Objektorientierte Softwareentwicklung. Oldenbourg 1998.
Thomas Erler: Das Einsteigerseminar UML. Bhv 2000.
Siegfried Spolwig: Objektorientierung im Informatikunterricht. Dümmler-Verlag
1997.
http://ivs.cs.uni-magdeburg.de/~dumke/UML/index.htm (UML-Tutorial der Uni
Magdeburg)
http://www.oose.de/uml/index.htm (UML-Links Bernd Oestereich)
http://hsg.region-kaiserslautern.de/Informatik/se/swep/beispiele/
chuckaluck/index.html (ChuckALuck im Unterricht von K. Merkert)
LOG IN 128/129. Thema: Objektorientiertes Modellieren und Programmieren
Lehrplan für das Leistungsfach: www.informatik-lehren.de
...