Grundkonzepte der objektorientierten Programmierung
Klaus Becker
2004
2 Objektorientierung
Grundideen
Grundkonzepte
...Ob
jekt
Kla
sse
Nach
rich
t
Ass
ozi
ati
on
Modellierungssprache: UML
Implementierungssprache: Delphi, Java, ...
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.
5 Das Würfelspiel „chuck a luck“
1$ 1$ 1$ 1$1$ 1$ 1$
1$1$ 1$
1
2
3
4
5
6
Einsatz zahlen und Zahl tippen
Würfel werfen
Gewinn auszahlen
Einsatz: 1 $
3
Gewinn:
0 Treffer: 1 Treffer: Einsatz + 1 $
2 Treffer: Einsatz + 2 $3 Treffer: Einsatz + 3 $
1$
1$
1$1$
3
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 TButton-Objekt „BWerfen“ zuständig.
PTitel: TPanel
RGSpielbrett: TRadioGroup
GBWuerfel: TGroupBox
GBKonto: TGroupBox
PKonto: TPanel
BWerfen: TButton
PWuerfelA: TPanel
Form1: TForm1
8 Eine erste objektbasierte Lösung
procedure TGUI.BSpielenClick(Sender: TObject); var wuerfelA, wuerfelB, wuerfelC, konto, spielzahl: integer; richtige: integer;begin// Durchführung des Spielsspielzahl := RGSpielbrett.ItemIndex+1;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 AnzeigePWuerfelA.Caption := IntToStr(wuerfelA);PWuerfelB.Caption := IntToStr(wuerfelB);PWuerfelC.Caption := IntToStr(wuerfelC);PKonto.Caption := IntToStr(konto);end;
Variablen zur Repräsentation der Spielinformationen
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
12 Modellierung
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$1
2
3
4
5
631$31$
- Abbild der Miniwelt
- Vorlage für das System
Miniwelt
Modell
Informatisches System
13 Vom Gegenstand der Miniwelt ...
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.
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$1
2
3
4
5
631$31$
WürfelSpielbrett Konto
14 ... zum Objekt im Modell
Grundidee der objektorientierten Modellierung: Die Gegenstände der Miniwelt werden mit Hilfe von Objekten im Sinne der Informatik beschrieben.
wuerfelA wuerfelB wuerfelCspielbrett konto
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$1
2
3
4
5
631$31$
Miniwelt
Modell
Gegenstand
Objekt
15 Struktur eines Gegenstandes
Eigenschaft: Augen
Operation: werfen
Eigenschaft: Zahl
Operation: Tipp setzen
Eigenschaft: Stand
Operationen:Betrag einzahlenBetrag abheben
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$1
2
3
4
5
631$31$
MiniweltGegenstand
WürfelSpielbrett Konto
Sichtweise: Gegenstände der Miniwelt haben charakteristische Eigenschaften. Mit den Gegenständen kann man bestimmte Operationen ausführen.
16 Attribute
wuerfelA wuerfelB wuerfelCspielbrett konto
Die charakteristischen Eigenschaften eines Objekts werden mit Attributen erfasst. Die Gesamtheit der Attributwerte legt den Objektzustand fest.
augen = 3 augen = 3 augen = 5zahl = 3 stand = 9
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$1
2
3
4
5
631$31$
Gegenstand
Eigenschaft: Zahl
Operation: Tipp setzen
Eigenschaft: Augen
Operation: werfen
Eigenschaft: Stand
Operationen:Betrag einzahlenBetrag abheben
Objekt
Attribut
Miniwelt
Modell
17 Methoden
Das Verhalten eines Objekts wird mit Operationen / Methoden erfasst. Diese bestimmen die dynamischen Eigenschaften eines Objekts.
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$1
2
3
4
5
631$31$Miniwelt
Gegenstand
Objekt
Eigenschaft: Zahl
Operation: Tipp setzen
Eigenschaft: Augen
Operation: werfen
Eigenschaft: Stand
Operationen:Betrag einzahlenBetrag abheben
spielbrett
zahl = 3
setzen(tipp)
wuerfelA wuerfelB wuerfelC
augen = 3 augen = 3 augen = 5
werfen werfen werfen
konto
stand = 9
abheben(betrag)einzahlen(betrag)
Modell
Methode
18 Klassen
Gleich strukturierte Objekte werden einer Klasse zugeordnet.
spielbrett
zahl = 3
setzen(tipp)
wuerfelA wuerfelB wuerfelC
augen = 3 augen = 3 augen = 5
werfen werfen werfen
konto
stand = 9
abheben(betrag)einzahlen(betrag)
TWuerfelTSpielbrett TKonto
augenzahl stand
werfensetzen(tipp) abheben(betrag)einzahlen(betrag)
Modell
Objekt
Klasse
19 Klassen
Klassen sind Baupläne für Objekte. Objekte werden als Exemplare (Instanzen) von Klassen bezeichnet.
spielbrett
setzen(tipp)
wuerfelA wuerfelB wuerfelC
werfen werfen werfen
konto
abheben(betrag)einzahlen(betrag)
TWuerfelTSpielbrett TKonto
augenzahl stand
werfensetzen(tipp) abheben(betrag)einzahlen(betrag)
Modell
Objekt
Klasse
instance ofinstance of instance of
zahl = 3 augen = 3 augen = 3 augen = 5 stand = 9
20 Erstes objektorientiertes Modell
spielbrett wuerfelA wuerfelB wuerfelC konto
TWuerfelTSpielbrett TKonto
augenzahl stand
werfensetzen(tipp) abheben(betrag)einzahlen(betrag)
instance ofinstance of instance of
zahl = 3 augen = 3 augen = 3 augen = 5 stand = 9
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$1
2
3
4
5
631$31$
Miniwelt Modell
21 Konstruktoren / Destruktoren
spielbrett wuerfelB konto
TWuerfelTSpielbrett TKonto
augenzahl stand
erzeugenvernichtenabheben(betrag)einzahlen(betrag)
Modell
Objekt
Klasse
instance of
zahl = ... augen = 3 stand = 9
erzeugenvernichtensetzen(tipp)
erzeugenvernichtenwerfen
instance of instance of
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.
TKonto
stand
erzeugenvernichtenabheben(betrag)einzahlen(betrag)
Datenkapselung bei Objekten / Klassen:Die innere Struktur eines Objekts (Aufbau über Attribute) wird verborgen. Objekte stellen Dienste nur über ihre Operationen / Methoden bereit.
verborgen
Zugriff erlaubt
23 Zugriffsmethoden
Um weiterhin auf Attributwerte (lesend bzw. schreibend) zugreifen zu können, werden spezielle Zugriffsmethoden benötigt.
TKonto
stand
erzeugenvernichtenabheben(betrag)einzahlen(betrag)„stand erfragen“„stand setzen“
TKonto
stand
erzeugenvernichtenabheben(betrag)einzahlen(betrag)
TKonto
stand
erzeugenvernichtenabheben(betrag)einzahlen(betrag)
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
stand
erzeugenvernichtenabheben(betrag)einzahlen(betrag)„stand erfragen“„stand setzen“
TKonto
– stand: integer
+ create(betrag: integer)+ destroy+ abheben(betrag: integer)+ einzahlen(betrag: int.)+ getStand: integer+ setStand(betrag: integer)
25 UML
wuerfelA wuerfelB wuerfelC
augen = 3 augen = 3 augen = 5
instance of
UML-Klassendiagram
m
UML-Objektdiagramm
UML (Unified Modeling Language):
Grafische Sprache zur Beschreibung objektorientierter Modelle
TWuerfel
augen
erzeugenvernichtenwerfen
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
30 Zielsetzung
Ziel ist es, ein System zur Simulation des ChuckALuck-Spiels auf der Basis des entwickelten objektorientierten Modells zu erstellen.
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$1
2
3
4
5
631$31$
Miniwelt
Modell
System
31 Teilmodell
Teil-Modell
wuerfelA wuerfelB wuerfelC
instance of
augen = 3 augen = 3 augen = 5
Die Implementierung eines objektorientierten Modells soll anhand eines Teilmodells des Gesamtmodells gezeigt werden.
TWuerfel
– augen: integer
+ create+ destroy+ werfen+ getAugen: integer
32 Die Klasse als Modul
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
33 Implementierung von Klassen
unit uWuerfel;
interface
type TWuerfel = class
private augen: integer;
public constructor create; destructor destroy; procedure werfen; function getAugen: integer;
end;
...
TWuerfel
– augen: integer
+ create+ destroy+ werfen+ getAugen: integer
Deklaration der Attribute und Operationen
34 Implementierung von Klassen
unit uWuerfel;
interface
...
implementation
constructor TWuerfel.create;beginaugen := 1;randomize;end;
destructor TWuerfel.destroy;beginend;
...
Implementierung der Konstruktoren /
Destruktoren
35 Implementierung von Klassen
unit uWuerfel;
interface
...
implementation
...
procedure TWuerfel.werfen;beginaugen := random(6)+1;end;
function TWuerfel.getAugen: integer;beginresult := augen;end;
end.
Implementierung der Operationen
36 Einbindung einer Modellklasse
unit uGUI;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, uWuerfel;
type
TForm1 = class(TForm) ...
Bekanntmachen der Klassen
37 Deklaration eines Objekts
...
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 { Public-Deklarationen }
end;
Deklaration eines GUI-Objekts
Deklaration eines Modell-Objekts
38 Erzeugung eines Modell-Objekts
unit uGUI;
interface
...
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);beginwuerfelA := 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 AnzeigePWuerfelA.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;
Begintipp := RGSpielbrett.ItemIndex+1;// Aktivierung der Modell-Objektekonto.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 AnzeigePWuerfelA.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 den „werfen“-Button
Die Würfel werden geworfen.
Mausklick auf den „aktualisieren“-Button
Der Gewinn wird ermittelt und auf dem Konto eingezahlt.
Mausklick auf einen Radio-Button
Der Einsatz wird vom Konto abgehoben. Die gewählte Zahl wird gesetzt.
46 Ereignissteuerung jetzt
Aktionen
Solange würfeln, bis genug „Treffer“ erzielt sind.
Gewinn auszahlen lassen.
Zahl auf dem Spielbrett festlegen
Achtung, Fehlbedienun
g möglich!
47 Komplexere Ereignissteuerung
Auslösende Aktion:
RadioGroupButton anklicken
RadioGroupButton anklicken
Button „werfen“ anklicken
Button „aktualisieren“ anklicken
Ausgelöste Aktion:
Tipp setzenKonto abbuchen
Tipp setzen
Würfel werfen
Konto aktualisieren
Zustand:
bereit
gesetzt
gesetzt
gewürfelt
Neuer Zustand:
gesetzt
gesetzt
gewürfelt
bereit
[1][2]... / Tipp setzen; Konto
abbuchen
bereitz0
gesetztz1
[1][2]... / Tipp setzen
[aktualisieren] / Konto aktualisieren
[werfen] / Würfel werfen
gewürfeltz2
48 Spielsteuerung
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.
Auslösende Aktion:
RadioGroupButton anklicken
RadioGroupButton anklicken
Button „werfen“ anklicken
Button „aktualisieren“ anklicken
Ausgelöste Aktion:
Tipp setzenKonto abbuchen
Tipp setzen
Würfel werfen
Konto aktualisieren
Zustand:
bereit
gesetzt
gesetzt
gewürfelt
Neuer Zustand:
gesetzt
gesetzt
gewürfelt
bereit
49 Modellierung
spielbrett wuerfelA wuerfelB wuerfelC
zahl = 3 augen = 3 augen = 3 augen = 5
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$1
2
3
4
5
631$31$
Miniwelt Modell
konto
stand = 9
spielmanager
zustand = 0
50 Aktivierung von Objekten
Zustand vorher
Zustand nachher
abheben(1) Aktivierung durch eine Nachricht
konto
stand = 9
konto
stand = 9
konto
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.
spielmanager
zustand = 0
51 Das Spiel als Nachrichtenaustausch
UML-Kollaborationsdiagra
mm
wuerfelA
wuerfelB
wuerfelC
konto spielmanager1: abheben(1)
spielbrett2: setzen(tipp)
RadioGroupButton anklicken im Zustand „bereit“:
spielbrettSetzen(tipp)
52 Das Spiel als Nachrichtenaustausch
wuerfelA
wuerfelB
wuerfelC
konto spielmanager 2: werfen
1: werfen
3: werfen
spielbrett
Button [werfen] anklicken im Zustand „gesetzt“:
wuerfelWerfen
53 Das Spiel als Nachrichtenaustausch
wuerfelA
wuerfelB
wuerfelC
konto spielmanager
spielbrett
3: getAugen 5: [richtige > 0] einzahlen(richtige+1)
2: getAugen
4: getAugen
1: zahl getZahl
Button [aktualisieren] anklicken im Zustand „gewürfelt“:
kontoAktualisieren
54 Das Spiel als Nachrichtenaustausch
UML-Kollaborationsdiagra
mm
konto spielmanager1: abheben(1)
spielbrett2: setzen(tipp)
RadioGroupButton anklicken im Zustand „bereit“:
UML-Sequenzdiagramm
55 Beziehung zwischen Objekten
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.
wuerfelA
wuerfelB
wuerfelC
konto spielmanager
spielbrett
3: getAugen 5: [richtige > 0] einzahlen(richtige+1)
2: getAugen
4: getAugen
1: zahl getZahl
kontoAktualisieren
56 Kennt-Beziehung / Verbindung
wuerfelA
wuerfelB
wuerfelC
kontospielmanagerkennt
kennt
kennt
spielbrettkennt
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.
57 Hat-Beziehung / Komposition
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.
wuerfelA
wuerfelB
wuerfelC
kontospielmanagerhat
hat
hat
spielbrett
hat
hat
58 Modell mit Spielmanager
TSpielmanager
- zustand: integer...
+ create(...)+ spielbrettSetzen(z: int.)+ wuerfelWerfen+ kontoAktualisieren+ getZustand: integer
TSpielbrettkennt
TWuerfelkennt
TWuerfelkennt
TWuerfelkennt
TKontokennt
wuerfelA
wuerfelB
wuerfelC
kontospielmanagerkennt
kennt
kennt
spielbrettkennt
kennt
59 Modell mit Spielmanager
TSpielmanager
- zustand: integer...
+ create(...)+ spielbrettSetzen(z: int.)+ wuerfelWerfen+ kontoAktualisieren+ getZustand: integer...
TSpielbretthat
TWuerfelhat
TWuerfelhat
TWuerfelhat
TKontohat
wuerfelA
wuerfelB
wuerfelC
kontospielmanager
spielbrett
hat
hat
hat
hat
hat
60 Exkurs: Beziehungsarten
TKontoTSpielmanagerkennt
hat
TSpielmanager TKonto
TFormTForm1ist
Kennt-Beziehung: Verbindung
Hat-Beziehung: Komposition
Ist-Beziehung: Verfeinerung; Vererbung
61 Exkurs: Kardinalitäten
TWuerfel
TKonto
TSpielmanagerkennt kennt
TSpielbrett
kennt3
1
1
3: Ein Spielmanager-Objekt steht in Beziehung zu 3 Wuerfel-Objekten.
Kardinalitätsangaben:
Kardinalität: legt die Wertigkeit einer Beziehung fest.
Beziehung zu genau einem ObjektKlasse 1
Beziehung zu beliebig vielen ObjektenKlasse *
Beziehung zu höchstens einem ObjektKlasse 0..1
Beziehung zu mindestens einem ObjektKlasse 1..*
62 Aufgabe
Erstellen Sie mit Violet zu einem der gezeigten UML-Kollaborationsdiagramme ein entsprechendes UML-Sequenzdiagramm.
63 Teil 5
Implementierung einer Hat-Beziehung
64 Zielsetzung
spielmanager wuerfelA
instance of
zustand = ... augen = 3
Die Implementierung der Hat-Beziehung soll anhand eines Teilmodells des Gesamtmodells gezeigt werden. Wir verzichten vorerst auf die Verwaltung des Spielzustands.
TSpielmanager
- zustand: integer...
+ create+ wuerfelWerfen...
TWuerfelhat
hat
instance of
Teil-Modell
erstellen
fertig
65 Referenzen schaffen Beziehungen
Referenzattribut
Zeiger (Adresse)
2091
2091
66 Referenzen schaffen Beziehungen
Referenzattribute
Mit Hilfe von Referenzattributen kann ein Objekt sich die Adressen seiner „Beziehungspartner“ merken.
TSpielmanager
- zustand: integer- wuerfelA: TWuerfel- wuerfelB: TWuerfel- wuerfelC: TWuerfel- spielbrett: TSpielbrett- konto: TKonto
...
67
Modellklasse mit Referenzattributen
unit uSpielmanager;
interface
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
Bekanntmachen der Klassen
Deklaration der Referenzattribute
TSpielmanager
- zustand: integer- wuerfelA: TWuerfel- wuerfelB: TWuerfel- wuerfelC: TWuerfel- spielbrett: TSpielbrett- konto: TKonto
...
68 Erzeugung des Würfel-Objekts
type TSpielmanager = class(TObject) private wuerfelA: TWuerfel; public constructor create; destructor destroy; override; ... end;implementationconstructor TSpielmanager.create;begininherited create;wuerfelA := TWuerfel.create;end;destructor TSpielmanager.destroy;beginwuerfelA.free;inherited destroy;end;
Modellstruktur
wuerfelAspielmanagerhat
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.
Siehe Delphi-Hilfe
Siehe Delphi-Hilfe
69 Implementierung einer Nachricht
...
type TSpielmanager = class(TObject) private wuerfelA: TWuerfel; public constructor create; destructor destroy; override; procedure wuerfelWerfen; ... end;
implementation
...
procedure TSpielmanager.wuerfelWerfen;beginwuerfelA.werfen;end;
Empfängerobjekt
wuerfelAspielmanagerhat
Modellstruktur
wuerfelAspielmanagerwerfen
Nachricht
Senderobjekt-Klasse
Operation
70
Erzeugung des Spielmanager-Objekts
unit uGUI;
interface
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);beginspielmanager := TSpielmanager.create;end; ...
wuerfelAspielmanagerhat
Modellstruktur
71 Zugriff auf abhängiges Objekt
unit uGUI;
interface
...
implementation
{$R *.DFM}
procedure TGUI.BWerfenClick(Sender: TObject);begin// Aktualisierung der Modell-Objektespielmanager.wuerfelWerfen;// Aktualisierung der AnzeigePWuerfelA.Caption := IntToStr(spielmanager.getWuerfelA);end;
...
Kein direkter Zugriff auf
wuerfelA möglich
wuerfelAspielmanagergetAugen
form1getWuerfelA
wuerfelAspielmanagerhat
Modellstruktur
Nachrichten
form1
Nachrichten
kennt
72 Zugriff auf abhängiges Objekt
unit uGUI;
interface
...
implementation
{$R *.DFM}
procedure TGUI.BWerfenClick(...);begin// Aktualisierung der Modell-Objektespielmanager.wuerfelWerfen;// Aktualisierung der AnzeigePWuerfelA.Caption := IntToStr(spielmanager.getWuerfelA);end;
wuerfelAspielmanagerhat
Hilfsoperation
TSpielmanager
- wuerfelA: Wuerfel...
+ create+ destroy+ wuerfelWerfen...+ getWuerfelA: integer...
function TSpielmanager.getWuerfelA: integer;beginresult := wuerfelA.getAugen;end;
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
76 Zielsetzung
spielmanager konto
instance of
zustand = ... stand = 99
Hier sollen die Ähnlichkeiten und Unterschiede zwischen einer Implementierung der Kennt-Beziehung und der Hat-Beziehung aufgezeigt werden.
TSpielmanager
- zustand: integer...
+ create+ wuerfelWerfen...
TKontokennt
kennt
instance of
Teil-Modell
77 Bekanntschaft durch Referenzen
Referenzattribute
Die anzustrebende Grundsituation bleibt gleich: Mit Hilfe von Referenzattributen soll das TSpielmanager-Objekt sich die Adressen seiner „Bekanntschaften“ merken.
TSpielmanager
- zustand: integer- wuerfelA: Wuerfel- wuerfelB: Wuerfel- wuerfelC: Wuerfel- spielbrett: Spielbrett- konto: Konto
+ create(...)+ spielbrettSetzen(z: int.)+ wuerfelWerfen+ kontoAktualisieren+ getZustand: integer
78 Erzeugung der Objekte
unit uGUI;
interface
uses 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);beginkonto := TKonto.create; ...spielmanager := TSpielmanager.create(..., konto, ...);end;
kontospielmanagerkennt
Modellstruktur
79 Erzeugung von Referenzen
spielmanager := TSpielmanager.create(..., konto, ...);
3A80
3A80
3A80
3A80
3A80
constructor TSpielmanager.create(...; k: TKonto; ...);begin ... konto := k; ...end;
3A80
80 Erzeugung von Referenzen
// Deklaration des Konstruktorsconstructor TSpielmanager.create (wA, wB, wC: TWuerfel;
k: TKonto; sp: TSpielbrett);begin zustand := 0;konto := k;wuerfelA := wA;wuerfelB := wB;wuerfelC := wC;spielbrett := sp;end;
// Aufruf des Konstruktorskonto := TKonto.create(100);... spielmanager := TSpielmanager.create (wuerfelA, wuerfelB, wuerfelC, konto, spielbrett);
Die Referenzbildung erfolgt bei der Erzeugung des Spielmanager-Objekts.
Konstruktor mit Parametern zur Übergabe der Referenzen
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
konto: [3A80]
81 Unterschied: Kennt-/Hat-Beziehung
kennt
hat
Das Objekt „spielmanger“ hat die volle Kontrolle über das Objekt „konto“.
Das Objekt „spielmanager“ steht in Verbindung zum Objekt „konto“.
82 Aufgabe
Implementieren Sie ein ChuckALuck-System mit Kennt-Beziehungen. Ausgangspunkt kann „ChuckALuck1“ (Version des neuen ChuckALuck-Systems 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
90 Objektorientierung
Grundideen
Grundkonzepte
...Ob
jekt
Kla
sse
Nach
rich
t
Ass
ozi
ati
on
Modellierungssprache: UML
Implementierungssprache: Delphi, Java, ...
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 System-
aktivitä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.
94 Grundkonzept: Objekt
konto
stand = 9
Betrag abhebenBetrag einzahlen
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.
Attribut Attributwert
Operationen
Obj
ekt
95 Grundkonzept: Klasse
Klassen sind Baupläne für Objekte. Objekte werden als Exemplare / Instanzen von Klassen bezeichnet.
Klasse
Objekt
TKonto
stand
Betrag abhebenBetrag einzahlen
konto
stand = 9
instance of
Kla
sse
96 Grundkonzept: Nachricht
Die Aktivierung von Operationen / Methoden erfolgt mit Hilfe von Nachrichten.Eine Nachricht kann also als Methodenaufruf angesehen werden.
wuerfelAwerfen( )
Nachricht
spielmanager
EmpfängerSender
Nac
hric
ht
97 Grundkonzept: Assoziation
Eine Assoziation ist eine Beziehung zwischen verschiedenen Objekten einer oder mehrerer Klassen.
Eine Assoziation ist i.a. Grundvoraussetzung für den Nachrichtenaustausch.
TWuerfel
TSpielbrett
TKonto
TSpielmanager
1
3
1
Assoziation
Ass
ozia
tion
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
...