Objektorientierte Programmierung

Download Report

Transcript Objektorientierte Programmierung

Grundkonzepte der
objektorientierten Programmierung
Klaus Becker
2003
Objektorientierung
KB
...
Modellierungssprache: UML
Implementierungssprache: Delphi, Java, ...
Assoziation
Grundkonzepte
Nachricht
Klasse
Grundideen
Objekt
Objektorientierte Programmierung
2
Objektorientierte Programmierung
3
KB
Teil 1
Modellierung mit Objekten, Klassen und Nachrichten
Objektorientierte Programmierung
4
KB
Das Würfelspiel „chuck a luck“
Der Spieler zahlt den Einsatz.
Der Spieler tippt auf eine Zahl.
Einsatz: 1 $
Gewinn: Einsatz
+
1 Treffer: 1 $
2 Treffer: 2 $
3 Treffer: 3 $
1
2
3
1$
4
5
6
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
Objektorientierte Programmierung
5
KB
Das Würfelspiel „chuck a luck“
Der Spieler zahlt den Einsatz.
Der Spieler tippt auf eine Zahl.
Der Spieler wirft die drei Würfel.
Einsatz: 1 $
Gewinn: Einsatz
+
1 Treffer: 1 $
2 Treffer: 2 $
3 Treffer: 3 $
1
2
3
1$
4
5
6
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
Das Würfelspiel „chuck a luck“
Objektorientierte Programmierung
6
KB
Der
Der
Der
Der
Spieler zahlt den Einsatz.
Spieler tippt auf eine Zahl.
Spieler wirft die drei Würfel.
Anbieter zahlt den Gewinn.
Einsatz: 1 $
Gewinn: Einsatz
+
1 Treffer: 1 $
2 Treffer: 2 $
3 Treffer: 3 $
1
2
3
4
5
6
1$
1$ 1$
1$ 1$ 1$ 1$
1$ 1$ 1$ 1$ 1$
Zielsetzung
Objektorientierte Programmierung
7
Entwicklung eines interaktiven Systems, das dem Benutzer das
Würfelspiel „chuck a luck“ bereitstellt.
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
1
2
3
1$
4
5
6
Benutzer
Chuck-a-Luck-System
KB
8
Objektorientierte Modellierung
Objektorientierte Programmierung
Miniwelt:
KB
1
2
3
1$
4
5
6
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
Sichtweise:
Die Miniwelt ist aus Gegenständen aufgebaut, die in Beziehung
zueinander stehen können. Gegenstände können Personen,
Dinge, Sachverhalte, Ereignisse, ... sein. Jeder Gegenstand stellt
eine autonome Einheit mit klar begrenzten Aufgaben dar.
Gegenstände der Miniwelt „chuck a luck“:
3 Würfel, Spielbrett, Spielerkonto, ...
Objektorientierte Modellierung
9
Objektorientierte Programmierung
Miniwelt:
KB
wuerfelA
wuerfelB
1
2
3
1$
4
5
6
wuerfelC
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
spielbrett
konto
Modell(welt):
Grundidee der objektorientierten Modellierung:
Die Gegenstände der Miniwelt werden mit Objekten im Sinne der
Informatik beschrieben.
Struktur eines Objektes
10
Objektorientierte Programmierung
Miniwelt:
KB
1
2
3
1$
4
5
6
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
Eigenschaft:
Augen
Eigenschaft:
Zahl
Eigenschaft:
Stand
Operation:
werfen
Operation:
Tipp setzen
Operationen:
Betrag einzahlen
Betrag abheben
Attribute
11
Objektorientierte Programmierung
Miniwelt:
KB
1
2
3
1$
4
5
6
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
Modell:
wuerfelA
wuerfelB
wuerfelC
spielbrett
konto
augen = 3
augen = 3
augen = 5
zahl = 3
stand = 9
Die charakteristischen Eigenschaften eines Objekts werden mit
Attributen erfasst. Die Gesamtheit der Attributwerte legt den
Objektzustand fest.
Methoden
12
Objektorientierte Programmierung
Miniwelt:
KB
1
2
3
1$
4
5
6
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
Modell:
wuerfelA
wuerfelB
wuerfelC
spielbrett
konto
augen = 3
augen = 3
augen = 5
zahl = 3
stand = 9
werfen
werfen
werfen
tipp setzen
betrag abheben
betrag einzahlen
Das Verhalten eines Objekts wird mit Operationen / Methoden
erfasst. Diese bestimmen die dynamischen Eigenschaften eines
Objekts.
Klassen
13
Objektorientierte Programmierung
Klassen:
Wuerfel
Spielbrett
Konto
augen
zahl
stand
werfen
tipp setzen
betrag abheben
betrag einzahlen
Objekte:
wuerfelA
wuerfelB
wuerfelC
spielbrett
konto
augen = 3
augen = 3
augen = 5
zahl = 3
stand = 9
werfen
werfen
werfen
tipp setzen
betrag abheben
betrag einzahlen
Klassen beschreiben die Gesamtheit gleich strukturierter Objekte.
KB
Klassen
14
Objektorientierte Programmierung
Klassen:
Wuerfel
Objekte:
Spielbrett
Konto
augen
zahl
stand
werfen
tipp setzen
betrag abheben
betrag einzahlen
instance of
instance of
instance of
wuerfelA
wuerfelB
wuerfelC
spielbrett
konto
augen = 3
augen = 3
augen = 5
zahl = 3
stand = 9
Klassen sind Baupläne für Objekte.
Objekte werden als Exemplare (Instanzen) von Klassen bezeichnet.
KB
UML
Objektorientierte Programmierung
15
Wuerfel
UMLKlassendiagramm
augen
werfen
instance of
wuerfelA
wuerfelB
wuerfelC
augen = 3
augen = 3
augen = 5
UMLObjektdiagramm
UML (Unified Modeling Language):
Grafische Sprache zur Beschreibung objektorientierter Modelle
KB
Konstruktoren / Destruktoren
16
Objektorientierte Programmierung
Klassen:
KB
Wuerfel
Spielbrett
Konto
augen
zahl
stand
erzeugen
vernichten
werfen
erzeugen
vernichten
tipp setzen
erzeugen
vernichten
betrag abheben
betrag einzahlen
Konstruktoren / Destruktoren sind spezielle Operationen zur
Erzeugung / Vernichtung von Objekten.
Beachte: Konstruktoren / Destruktoren sind Klassenmethoden
(d. h. Objekte verfügen nicht über diese Methoden).
Datenkapselung
Objektorientierte Programmierung
17
KB
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.
Konto
Konto
stand
stand
erzeugen
vernichten
betrag abheben
betrag einzahlen
erzeugen
vernichten
betrag abheben
betrag einzahlen
Zugriffsmethoden
Objektorientierte Programmierung
18
KB
Um auf Attributwerte (lesend bzw. schreibend) zugreifen zu
können, werden spezielle Zugriffsmethoden benötigt.
Konto
Konto
Konto
stand
stand
stand
erzeugen
vernichten
betrag abheben
betrag einzahlen
erzeugen
vernichten
betrag abheben
betrag einzahlen
erzeugen
vernichten
betrag abheben
betrag einzahlen
stand erfragen
stand setzen
19
Schnittstellenspezifikation
Objektorientierte Programmierung
Genaue Festlegung der Benutzungsschnittstelle
KB
• Zugriffsrechte (- kein Zugriff; + Zugriff erlaubt)
• Datentypen (und Initialisierungswerte)
• Signaturen (Festlegung der Parameter)
Konto
Konto
stand
– stand: integer
erzeugen
vernichten
betrag abheben
betrag einzahlen
stand erfragen
stand setzen
+ create(betrag: integer)
+ destroy
+ abheben(betrag: integer)
+ einzahlen(betrag: int.)
+ getStand: integer
+ setStand(betrag: integer)
Aufgabe
Objektorientierte Programmierung
20
KB
Verfeinern Sie analog zur Konto-Klasse die weiteren Klassen der
ChuckALuck-Miniwelt und erstellen Sie mit Hilfe .
Wuerfel
Spielbrett
Konto
augen
zahl
stand
werfen
tipp setzen
betrag abheben
betrag einzahlen
Konto
– stand: integer
+ create(betrag: integer)
+ destroy
+ abheben(betrag: integer)
+ einzahlen(betrag: int.)
+ getStand: integer
+ setStand(betrag: integer)
Aktivierung von Objekten
Objektorientierte Programmierung
21
KB
konto
stand = 9
„Kunde“
abheben(1) 
konto
stand = 9
konto
Zustand vorher
Aktivierung durch
Nachricht
Zustand nachher
stand = 8
Sichtweise:
Das Objekt stellt seiner Umgebung bestimmte Dienste
(Operationen) zur Verfügung. Durch eine Nachricht veranlasst ein
„Kunde“ das Objekt, die Dienstleistung zu erledigen (Operation
auszuführen).
Objektorientierte Programmierung
22
KB
Das Spiel als Nachrichtenaustausch
 3: werfen
2: setzen(tipp) 
wuerfelA
spielbrett
 7: getAugen
 4: werfen
wuerfelB
6: getZahl 
1: abheben(1) 
konto
 8: getAugen
10: einzahlen(richtige+1) 
 5: werfen
wuerfelC
 9: getAugen
UMLKollaborationsdiagramm
Objektorientierte Programmierung
23
KB
Das Spiel als Nachrichtenaustausch
UMLSequenzdiagramm
Objektorientierte Programmierung
24
KB
UML-Editoren
Mit Hilfe von UML-Editoren (wie z. B. Violet) lassen sich UMLModelle leicht erstellen.
Objektorientierte Programmierung
25
KB
Aufgabe
Erstellen Sie mit Hilfe des UML-Editors „Violet“ ein Objekt- und ein
Klassendiagramm zur Beschreibung der ChuckALuck-Miniwelt.
Ergänzen Sie auch das bereits begonnene Interaktionsdiagramm.
Hier soll der gesamte Nachrichtenaustausch zur Beschreibung des
Spielablaufs dargestellt werden.
Objektorientierte Programmierung
26
KB
Lösung
UML-Objektdiagramm:
27
Lösung
Objektorientierte Programmierung
UML-Klassendiagramm (Grobfassung):
KB
UML-Klassendiagramm (Verfeinerung):
Objektorientierte Programmierung
28
KB
Lösung
UML-Sequenzdiagramm
Objektorientierte Programmierung
29
KB
Teil 2
Implementierung in Delphi
Klasse als Modul
Objektorientierte Programmierung
30
KB
Klassen werden als Module (Programmeinheit) implementiert, die
in Delphi in zwei Teilen beschrieben werden:
Öffentlicher Teil bestehend aus den Vereinbarungen, die zur
Benutzung des Moduls notwendig sind (Schnittstelle).
Privater Teil bestehend aus den Implementierungsdetails, die für
die Benutzung nicht benötigt werden.
unit uWuerfel;
interface
Wuerfel
// Deklaration der
// Attribute und Operationen
implementation
// Implementierung der
// Operationen
end.
– augen: integer
+ create
+ destroy
+ werfen
+ getAugen: integer
Implementierung der Klassen
31
Objektorientierte Programmierung
unit uWuerfel;
KB
interface
Von TObject
abgeleitet
type
TWuerfel = class(TObject)
private
augen: integer;
public
constructor create;
destructor destroy;
procedure werfen;
function getAugen: integer;
Wuerfel
– augen: integer
+ create
+ destroy
+ werfen
+ getAugen: integer
end;
...
Deklaration der
Attribute und
Operationen
Implementierung der Klassen
32
Objektorientierte Programmierung
unit uWuerfel;
KB
interface
...
Implementierung der
Konstruktoren /
Destruktoren
implementation
constructor TWuerfel.create;
begin
inherited create;
augen := 1;
randomize;
end;
destructor TWuerfel.destroy;
begin
inherited destroy;
end;
...
Geerbter Konstruktor
wird aufgerufen
Implementierung der Klassen
33
Objektorientierte Programmierung
unit uWuerfel;
KB
interface
...
implementation
...
procedure TWuerfel.werfen;
begin
augen := random(6)+1;
end;
function TWuerfel.getAugen: integer;
begin
result := augen;
end;
end.
Implementierung der
Operationen
34
Aufgabe
Objektorientierte Programmierung
Implementieren Sie die Klassen Wuerfel, Konto und Spielzahl.
KB
Erstellen Sie zunächst ein neues Projekt in einem hierfür
vorgesehenen neuen Ordner.
Erstellen Sie für jede Klassen-Unit eine eigene Datei (Datei –
Neu – Unit) und geben Sie dieser Datei einen passenden
Namen (z. B. uKonto).
Übernehmen Sie die Delphi-Konvention, den Klassennamen mit
einem „T“ beginnen zu lassen (z. B. „TKonto“).
Benutzungsoberfläche
35
Objektorientierte Programmierung
Form1:
TForm1
KB
PTitel:
TPanel
GBWuerfel:
TGroupBox
RGSpielbrett:
TRadioGroup
GBKonto:
TGroupBox
PWuerfelA:
TPanel
PWuerfelB:
TPanel
PKonto:
TPanel
PWuerfelC:
TPanel
BSpielen:
TButton
Die Benutzungsoberfläche wird mit Hilfe von sog. GUI-Objekten
(Graphical User Interface) aufgebaut.
Ereignisbehandlung
Objektorientierte Programmierung
36
KB
(Benutzer)Aktion
Programmreaktionen
Erzeugung des
Formulars
Erzeugung der Modellobjekte.
Mausklick auf den
„Spiel durchführen“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.
Einbindung der Modellklassen
37
Objektorientierte Programmierung
unit Unit1;
KB
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ExtCtrls,
uWuerfel, uSpielbrett, uKonto;
Bekanntmachen der
type
Klassen
TForm1 = class(TForm)
...
Deklaration der Objekte
38
Objektorientierte Programmierung
...
KB
type
TForm1 = class(TForm)
PTitel: TPanel;
RGSpielbrett: TRadioGroup;
GBWuerfel: TGroupBox;
GBKonto: TGroupBox;
Von Delphi deklarierte
PWuerfelA: TPanel;
GUI-Objekte
PWuerfelB: TPanel;
PWuerfelC: TPanel;
PKonto: TPanel;
BSpielen: TButton;
procedure FormCreate(Sender: TObject);
procedure BSpielenClick(Sender: TObject);
private
{ Private-Deklarationen }
wuerfelA, wuerfelB, wuerfelC: TWuerfel;
spielbrett: TSpielbrett;
Vom Benutzer
konto: TKonto;
deklarierte Modell-Objekte
public
{ Public-Deklarationen }
end;
Erzeugung der Modell-Objekte
39
Objektorientierte Programmierung
unit Unit1;
interface
...
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
wuerfelA := TWuerfel.create;
wuerfelB := TWuerfel.create;
wuerfelC := TWuerfel.create;
Erzeugung der
konto := TKonto.create(100);
Modell-Objekte
spielbrett := TSpielbrett.create;
end;
procedure TForm1.BSpielenClick(Sender: TObject);
...
end.
KB
40
Implementierung des Spiels
procedure TForm1.BSpielenClick(Sender: TObject);
Objektorientierte Programmierung
var tipp, zahl, richtige: integer;
KB
begin
// Aktualisierung des Eingabewerts
tipp := RGSpielbrett.ItemIndex+1;
// Aktualisier. d. Modell-Objekte bzw. Durchführung d. Spiels
konto.abheben(1);
spielbrett.setzen(tipp);
Nachrichtenaustausch zur
wuerfelA.werfen;
Erzeugung des Spiels
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);
...
end;
Objektorientierte Programmierung
41
KB
Implementierung von Nachrichten
abheben(1) 
Form1
konto
Senderobjekt-Klasse
procedure TForm1.BSpielenClick(Sender: TObject);
...
begin
...
Empfängerobjekt
konto.abheben(1);
...
end;
Operation
Objektorientierte Programmierung
42
KB
Aufgabe
Erstellen Sie eine geeignete Benutzungsoberfläche. Ergänzen
Sie das Delphi-Programm zur Simulation des ChuckALuck-Spiels.
Testen Sie anschließend das fertige Programm.
Objektorientierte Programmierung
43
KB
Teil 3
Beziehungen
Objektorientierte Programmierung
44
KB
Das Spiel als Objekt
Das Spiel soll jetzt als eigenständiges Objekt modelliert werden.
Objektorientierte Programmierung
45
Die Klasse zum Spielobjekt
Spiel
...
...
+ durchfuehren(tipp: int.)
spiel
KB
46
Die Operation „durchfuehren“
Objektorientierte Programmierung
procedure TSpiel.durchfuehren(tipp: integer);
KB
var richtige: integer;
zahl: integer;
begin
konto.abheben(1);
spielbrett.setZahl(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);
end;
Spiel
...
...
+ durchfuehren(tipp: int.)
spiel
Bekanntschaft zwischen Objekten
Objektorientierte Programmierung
47
KB
wuerfelA
kennt
wuerfelB
kennt
spiel
kennt
spielbrett
konto
kennt
wuerfelC
kennt
Ein Nachrichtenaustausch zwischen Objekten kann nur stattfinden,
wenn das sendende Objekt das Empfängerobjekt kennt.
48
Bekanntschaft durch Referenzen
Objektorientierte Programmierung
Zeiger (Adresse)
KB
3A80
3A80
Referenzattribute
49
Bekanntschaft durch Referenzen
Objektorientierte Programmierung
Spiel
KB
- wuerfelA: Wuerfel
- wuerfelB: Wuerfel
- wuerfelC: Wuerfel
- konto: Konto
- spielbrett: Spielbrett
...
+ durchfuehren(tipp: int.)
Referenzattribute
Mit Referenzattributen kann ein Objekt die Adressen seiner
„Bekanntschaften“ speichern.
50
Erzeugung von Referenzen
Objektorientierte Programmierung
// Deklaration des Konstruktors
KB
constructor TSpiel.create(
wA, wB, wC: TWuerfel;
k: TKonto; sp: TSpielbrett);
begin
konto := k;
wuerfelA := wA;
Konstruktor mit
wuerfelB := wB;
Parametern zur
wuerfelC := wC;
Übergabe der
spielbrett := sp;
end;
Referenzen
Spiel
- wuerfelA: Wuerfel
- wuerfelB: Wuerfel
- wuerfelC: Wuerfel
- konto: Konto
- spielbrett: Spielbrett
+ create(
wA, wB, wC: Wuerfel;
k: Konto;
sp: Spielbrett)
+ durchfuehren(tipp: int.)
// Aufruf des Konstruktors
konto := Tkonto.create(100);
...
spiel := TSpiel.create(
wuerfelA, wuerfelB, wuerfelC, konto, spielbrett);
Die Referenzbildung erfolgt bei der Erzeugung des Spiel-Objekts.
Objektorientierte Programmierung
51
KB
Erzeugung von Referenzen
konto := Tkonto.create(100);
3A80
3A80
52
Erzeugung von Referenzen
Objektorientierte Programmierung
3A80
KB
3A80
3A80
spiel := TSpiel.create(..., konto, ...);
constructor TSpiel.create(...; k: TKonto; ...);
begin
... konto := k; ...
end;
3A80
3A80
3A80
Objektorientierte Programmierung
53
KB
Aufgabe
Fertigen Sie sich zunächst eine Kopie des ersten ChuckALuckProgramms an (neuer Ordner, ...).
Ändern Sie das Programm so ab, dass auch das Spiel mit einem
Objekt beschrieben wird.
Implementieren Sie hierzu die Klasse TSpiel (neue Unit, ...).
Ändern Sie anschließend die Form-Unit passend ab.
Kennt-Beziehung / Verbindung
54
Objektorientierte Programmierung
wuerfelA
KB
kennt
wuerfelB
kennt
spiel
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
55
Objektorientierte Programmierung
wuerfelA
KB
spielbrett
hat
wuerfelB
hat
spiel
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.
Objektorientierte Programmierung
56
KB
Hat-Beziehung
kennt
hat
57
Hat-Beziehung
Objektorientierte Programmierung
// Deklaration des Konstruktors
KB
constructor TSpiel.create;
begin
inherited create;
konto := TKonto.create(100);
wuerfelA := TWuerfel.create;
wuerfelB := TWuerfel.create;
wuerfelC := TWuerfel.create;
spielbrett := TSpielbrett.create;
end;
// Deklaration des Destruktors
destructor TSpiel.destroy;
begin
konto.free;
wuerfelA.free;
wuerfelB.free;
wuerfelC.free;
spielbrett.free;
inherited destroy;
end;
Spiel
- wuerfelA: Wuerfel
- wuerfelB: Wuerfel
- wuerfelC: Wuerfel
- konto: Konto
- spielbrett: Spielbrett
+ create
+ destroy
+ durchfuehren(tipp: int.)
+ getWuerfelAAugen: int.
...
+ getKontoStand: integer
Objektorientierte Programmierung
58
KB
Aufgabe
Fertigen Sie sich zunächst eine Kopie des ersten ChuckALuckProgramms an (neuer Ordner, ...).
Ändern Sie das Programm so ab, dass das Spiel die volle
Kontrolle über die weiteren Objekte hat.
59
UML: Beziehungen / Assoziationen
Objektorientierte Programmierung
wuerfelA
kennt
wuerfelB
kennt
spiel
kennt
konto
kennt
UMLObjektdiagramm
wuerfelC
kennt
UMLKlassendiagramm
1
Wuerfel
3
kennt
KB
spielbrett
Spiel
Spielbrett
kennt
kennt
1
Konto
Kardinalitäten
60
Objektorientierte Programmierung
1
KB
3
Wuerfel
kennt
Spiel
Spielbrett
kennt
kennt
1
Kardinalitätsangaben:
Konto
3: Ein Spiel-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
61
UML: Beziehungsarten
Objektorientierte Programmierung
Kennt-Beziehung: Verbindung
Spiel
Konto
kennt
Hat-Beziehung: Komposition
Spiel
Konto
hat
Ist-Beziehung: Verfeinerung; Vererbung
Form1
Form
ist
KB
Exkurs: Ist-Beziehung
62
Objektorientierte Programmierung
TForm
KB
...
type
TForm1 = class(TForm)
ist ein
..
end;
TForm1
– wuerfelA: Wuerfel
...
...
Vererbung
Objektorientierte Programmierung
63
KB
Exkurs: Erzeugung von Quellcode
Erstellen Sie mit Hilfe von UMLed ein Klassendiagramm zum
ChuckALuck-Spiel. Erzeugen Sie anschließend mit Hilfe von
UMLed den zugehörigen Delphi-Code.
Eine neue Modellierung
Objektorientierte Programmierung
64
KB
wuerfel
spiel
hat
Bei dieser Modellierung des ChuckALuckSpiels soll nur ein Würfel-Objekt benutzt
werden. Dieses Würfel-Objekt soll dreimal
zum Würfelwerfen aktiviert werden. Die
Würfelergebnisse werden mit geeigneten
Spiel-Attributen (wuerfelA, wuerfelB,
wuerfelC: integer) erfasst. Des weiteren
wird kein Spielbrett-Objekt benutzt. Die
relevanten Informationen werden mit
einem geeigneten Spiel-Attribut (spielzahl:
integer) erfasst.
konto
kennt
Spiel
- wuerfelA: integer
- wuerfelB: integer
- wuerfelC: integer
- spielzahl: integer
- konto: Konto
- wuerfel: Wuerfel
+ create(k: Konto)
+ destroy
+ durchfuehren(tipp: int.)
+ getWuerfelA: integer
+ getWuerfelB: integer
+ getWuerfelC: integer
Objektorientierte Programmierung
65
KB
Aufgabe
Implementieren Sie das neue Modell. Bedenken Sie, an welcher
Stelle im Programm das Würfel-Objekt erzeugt werden soll.
Lösung
66
Objektorientierte Programmierung
unit uSpiel;
interface
uses uWuerfel, uKonto;
type
TSpiel = class
private
spielzahl: integer;
wuerfelA, wuerfelB, wuerfelC: integer;
konto: TKonto;
wuerfel: TWuerfel;
public
constructor create(k: TKonto);
destructor destroy;
procedure durchfuehren(tipp: integer);
function getWuerfelA: integer;
function getWuerfelB: integer;
function getWuerfelC: integer;
end;
implementation
KB
...
Lösung
67
Objektorientierte Programmierung
unit uSpiel;
interface
...
implementation
constructor TSpiel.create(k: TKonto);
begin
inherited create;
spielzahl := 1;
wuerfel := TWuerfel.create;
konto := k;
end;
destructor Tspiel.destroy;
begin
wuerfel.free;
inherited destroy;
end;
...
end.
KB
68
Benutzungsoberfläche und Fachkonzept
Objektorientierte Programmierung
GUI-Objekte
KB
PWuerfelB
...
hat
PWuerfelA
Form1
hat
wuerfel
spiel
hat
konto
kennt
Fachkonzept-Objekte
Trennungsprinzip:
klare Trennung zwischen Benutzungsoberfläche und Fachkonzept:
Die Fachkonzeptobjekte kennen die GUI-Objekte nicht.
Übungen – Aufgabe 1
Objektorientierte Programmierung
69
Folgendes Zufallsexperiment soll simuliert werden: Man würfelt
so lange, bis eine 6 fällt.
KB
Objektorientierte Programmierung
70
KB
Übungen – Aufgabe 1
Erstellen Sie in einem ersten Schritt ein objektorientiertes
Modell und dokumentieren sie es mit UML-Diagrammen.
Überlegen Sie sich hierzu, welche Objekte im Modell zur
Miniwelt vorkommen und in welchen Beziehungen sie
zueinander stehen sollen. Lassen Sie zunächst die statistische
Auswertung außer Betracht.
Entwerfen Sie anschließend die Details (Attribute und
Methoden) und erstellen Sie ein Klassendiagramm.
Stellen Sie Ihre Modelle mit Hilfe von Violet dar.
Implementieren Sie in einem zweiten Schritt das erstellte
Modell.
In einem dritten Schritt können Sie dann das entwickelte
System um eine statistische Auswertung erweitern.
Objektorientierte Programmierung
71
KB
Übungen – Aufgabe 2
Das ChuckALuck-Spiel soll vom System wiederholt gespielt
werden. Die jeweilige Spielzahl soll dabei mit dem
Zufallsgenerator erzeugt werden. Über die Ergebnisse soll
eine Statistik geführt werden.
72
Übungen – Aufgabe 2
Objektorientierte Programmierung
Erstellen Sie zunächst ein objektorientiertes Modell.
KB
Überlegen Sie sich zunächst, welche Objekte in dem neuen
Modell vorkommen und in welchen Beziehungen sie zueinander
stehen.
Entwerfen Sie anschließend die Details (Attribute und
Methoden) und erstellen Sie ein Klassendiagramm.
Stellen Sie Ihr Modell mit Hilfe von Violet dar.
Implementieren Sie abschließend das Modell. Sie können die
vorgegebene Benutzungsoberfläche benutzen.
(siehe ChuckALuck5 – Aufgabe)
Objektorientierte Programmierung
73
KB
Lösungsvorschlag – Aufgabe 1
Lösungsvorschlag – Aufgabe 2
74
Objektorientierte Programmierung
Statistik
- anzahlDerSpiele: integer
- anfangskontostand: integer
- gewinnProSpiel: integer
- konto: Konto
+ create(k: Konto)
+ spieleBeruecksichtigen(
spielanzahl: integer)
+ getAnzahlDerSpiele: integer
+ getGewinnProSpiel: real
UMLObjektdiagramm
statistik
kennt
wuerfel
spiel
hat
KB
UMLKlassendiagramm
konto
kennt
Objektorientierte Programmierung
75
KB
Lösungsvorschlag – Aufgabe 2
Objektorientierte Programmierung
76
KB
Lösungsvorschlag – Aufgabe 2
Objektorientierte Programmierung
77
KB
Teil 4
Zusammenfassung
Objektorientierung
KB
...
Modellierungssprache: UML
Implementierungssprache: Delphi, Java, ...
Assoziation
Grundkonzepte
Nachricht
Klasse
Grundideen
Objekt
Objektorientierte Programmierung
78
Objektorientierte Programmierung
79
KB
Grundidee: 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.
Objektorientierte Programmierung
80
KB
Grundidee: 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.
Objektorientierte Programmierung
81
KB
Grundidee: Objekt als Baustein
Objekte sollten nach Möglichkeit so abstrakt
entworfen werden, dass sie zur Erledigung
vieler Aufgaben benutzt werden können
(Wiederverwendung). Gut verwendbare
Objekte / Klassen können dann in
Klassenbibliotheken zur weiteren
Verwendung bereitgestellt werden.
Grundkonzept: Objekt
KB
konto
Objekt
Objektorientierte Programmierung
82
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
KB
Konto
Klasse
stand
Betrag abheben
Betrag einzahlen
Klasse
Objektorientierte Programmierung
83
instance of
Objekt
konto
stand = 9
Klassen sind Baupläne für Objekte.
Objekte werden als Exemplare / Instanzen von Klassen
bezeichnet.
Grundkonzept: Nachricht
KB
Sender
Nachricht
Objektorientierte Programmierung
84
spiel
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
KB
Assoziation
Objektorientierte Programmierung
85
Konto
1
Spielbrett
1
Spiel
Assoziation
Wuerfel
3
Eine Assoziation ist eine Beziehung zwischen
verschiedenen Objekten einer oder mehrerer Klassen.
Eine Assoziation ist i.a. Grundvoraussetzung für den
Nachrichtenaustausch.
Objektorientierte Programmierung
86
KB
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)
Objektorientierte Programmierung
87
KB
UML: Klassen- und Objektdiagramme
Wuerfel
UMLKlassendiagramm
augen
werfen
instance of
wuerfelA
wuerfelB
wuerfelC
augen = 3
augen = 3
augen = 5
UMLObjektdiagramm
Objektorientierte Programmierung
88
KB
UML: Sequenzdiagramm
UMLSequenzdiagramm
Objektorientierte Programmierung
89
KB
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 (UMLTutorial 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)