Upload
sabine-droste
View
112
Download
0
Embed Size (px)
Citation preview
Grundkonzepte der Grundkonzepte der objektorientierten objektorientierten ProgrammierungProgrammierung
Klaus Becker2003
2
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gObjektorientierungObjektorientierung
Grundideen
Grundkonzepte
...Ob
jekt
Kla
sse
Nach
rich
t
Ass
ozi
ati
on
Modellierungssprache: UML
Implementierungssprache: Delphi, Java, ...
3
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gTeil 1Teil 1
Modellierung mit Objekten, Klassen und Nachrichten
4
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
g
3
Das Würfelspiel „chuck a luck“Das Würfelspiel „chuck a luck“
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$1$1 2
4 5 6
Der Spieler zahlt den Einsatz.
Der Spieler tippt auf eine Zahl.
Einsatz: 1 $
Gewinn: Einsatz +1 Treffer: 1 $ 2 Treffer: 2 $3 Treffer: 3 $
5
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gDas Würfelspiel „chuck a luck“Das Würfelspiel „chuck a luck“
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$1 2 3
4 5 6
Der Spieler zahlt den Einsatz.
Der Spieler tippt auf eine Zahl.Der Spieler wirft die drei Würfel.
31$
Einsatz: 1 $
Gewinn: Einsatz +1 Treffer: 1 $ 2 Treffer: 2 $3 Treffer: 3 $
6
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gDas Würfelspiel „chuck a luck“Das Würfelspiel „chuck a luck“
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$1$
1 2 3
4 5 6
Der Spieler zahlt den Einsatz.
Der Spieler tippt auf eine Zahl.Der Spieler wirft die drei Würfel.Der Anbieter zahlt den Gewinn.
3
1$1$
Einsatz: 1 $
Gewinn: Einsatz +1 Treffer: 1 $ 2 Treffer: 2 $3 Treffer: 3 $
7
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gZielsetzungZielsetzung
Entwicklung eines interaktiven Systems, das dem Benutzer das Würfelspiel „chuck a luck“ bereitstellt.
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$
Benutzer
Chuck-a-Luck-System
1 2 3
4 5 6
31$
8
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gObjektorientierte ModellierungObjektorientierte Modellierung
Miniwelt:
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$1 2 3
4 5 6
31$
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, ...
9
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gObjektorientierte ModellierungObjektorientierte Modellierung
Miniwelt:
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$1 2 3
4 5 6
31$
Grundidee der objektorientierten Modellierung: Die Gegenstände der Miniwelt werden mit Objekten im Sinne der Informatik beschrieben.
wuerfelA wuerfelB wuerfelC
Modell(welt):
spielbrett konto
10
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gStruktur eines ObjektesStruktur eines Objektes
Miniwelt:
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$1 2 3
4 5 6
31$
Eigenschaft: Augen
Operation: werfen
Eigenschaft: Zahl
Operation: Tipp setzen
Eigenschaft: Stand
Operationen:Betrag einzahlenBetrag abheben
11
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gAttributeAttribute
Miniwelt:
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$1 2 3
4 5 6
31$
wuerfelA wuerfelB wuerfelC
Modell:
spielbrett konto
Die charakteristischen Eigenschaften eines Objekts werden mit Attributen erfasst. Die Gesamtheit der Attributwerte legt den Objektzustand fest.
augen = 3 augen = 3 augen = 5 zahl = 3 stand = 9
12
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gMethodenMethoden
Miniwelt:
1$ 1$ 1$ 1$1$ 1$ 1$
1$ 1$1 2 3
4 5 6
31$
wuerfelA wuerfelB wuerfelC
Modell:
spielbrett konto
Das Verhalten eines Objekts wird mit Operationen / Methoden erfasst. Diese bestimmen die dynamischen Eigenschaften eines Objekts.
augen = 3 augen = 3 augen = 5 zahl = 3 stand = 9
werfen werfen werfen tipp setzen betrag abhebenbetrag einzahlen
13
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gKlassenKlassen
wuerfelA wuerfelB wuerfelC spielbrett konto
augen = 3 augen = 3 augen = 5 zahl = 3 stand = 9
werfen werfen werfen tipp setzen betrag abhebenbetrag einzahlen
Wuerfel Spielbrett Konto
augen zahl stand
werfen tipp setzen betrag abhebenbetrag einzahlen
Objekte:
Klassen:
Klassen beschreiben die Gesamtheit gleich strukturierter Objekte.
14
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gKlassenKlassen
Klassen sind Baupläne für Objekte.
Objekte werden als Exemplare (Instanzen) von Klassen bezeichnet.
wuerfelA wuerfelB wuerfelC spielbrett konto
augen = 3 augen = 3 augen = 5 zahl = 3 stand = 9
Wuerfel Spielbrett Konto
augen zahl stand
werfen tipp setzen betrag abhebenbetrag einzahlen
Objekte:
Klassen:
instance of instance of instance of
15
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gUMLUML
wuerfelA wuerfelB wuerfelC
augen = 3 augen = 3 augen = 5
Wuerfel
augen
werfen
instance of
UML-Klassendiagram
m
UML-Objektdiagramm
UML (Unified Modeling Language):
Grafische Sprache zur Beschreibung objektorientierter Modelle
16
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gKonstruktoren / DestruktorenKonstruktoren / Destruktoren
Konstruktoren / Destruktoren sind spezielle Operationen zur Erzeugung / Vernichtung von Objekten.
Beachte: Konstruktoren / Destruktoren sind Klassenmethoden (d. h. Objekte verfügen nicht über diese Methoden).
Wuerfel Spielbrett Konto
augen zahl stand
erzeugenvernichtenwerfen
erzeugenvernichtentipp setzen
erzeugenvernichtenbetrag abhebenbetrag einzahlen
Klassen:
17
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gDatenkapselungDatenkapselung
Geheimnisprinzip:Die für die Benutzung einer Systemkomponente (eines Moduls) nicht benötigten Detailinformationen werden verborgen.
Konto
stand
erzeugenvernichtenbetrag abhebenbetrag einzahlen
Konto
stand
erzeugenvernichtenbetrag abhebenbetrag einzahlen
Datenkapselung bei Objekten / Klassen:Die innere Struktur eines Objekts (Aufbau über Attribute) wird verborgen. Objekte stellen Dienste nur über ihre Operationen / Methoden bereit.
18
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gZugriffsmethodenZugriffsmethoden
Um auf Attributwerte (lesend bzw. schreibend) zugreifen zu können, werden spezielle Zugriffsmethoden benötigt.
Konto
stand
erzeugenvernichtenbetrag abhebenbetrag einzahlenstand erfragenstand setzen
Konto
stand
erzeugenvernichtenbetrag abhebenbetrag einzahlen
Konto
stand
erzeugenvernichtenbetrag abhebenbetrag einzahlen
19
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gSchnittstellenspezifikationSchnittstellenspezifikation
Genaue Festlegung der Benutzungsschnittstelle
• Zugriffsrechte (- kein Zugriff; + Zugriff erlaubt)
• Datentypen (und Initialisierungswerte)
• Signaturen (Festlegung der Parameter)
Konto
stand
erzeugenvernichtenbetrag abhebenbetrag einzahlenstand erfragenstand setzen
Konto
– stand: integer
+ create(betrag: integer)+ destroy+ abheben(betrag: integer)+ einzahlen(betrag: int.)+ getStand: integer+ setStand(betrag: integer)
20
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gAufgabeAufgabe
Verfeinern Sie analog zur Konto-Klasse die weiteren Klassen der ChuckALuck-Miniwelt und erstellen Sie mit Hilfe .
Konto
– stand: integer
+ create(betrag: integer)+ destroy+ abheben(betrag: integer)+ einzahlen(betrag: int.)+ getStand: integer+ setStand(betrag: integer)
Wuerfel Spielbrett Konto
augen zahl stand
werfen tipp setzen betrag abhebenbetrag einzahlen
21
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gAktivierung von ObjektenAktivierung von Objekten
Zustand vorher
Zustand nachher
abheben(1) Aktivierung durch Nachricht
„Kunde“
konto
stand = 9
konto
stand = 9
konto
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).
22
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gDas Spiel als NachrichtenaustauschDas Spiel als Nachrichtenaustausch
UML-Kollaborationsdiagra
mm
wuerfelA
wuerfelB
wuerfelC
konto 4: werfen 1: abheben(1)
3: werfen
5: werfen
spielbrett2: setzen(tipp)
8: getAugen10: einzahlen(richtige+1)
7: getAugen
9: getAugen
6: getZahl
23
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gDas Spiel als NachrichtenaustauschDas Spiel als Nachrichtenaustausch
UML-Sequenzdiagramm
24
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gUML-EditorenUML-Editoren
Mit Hilfe von UML-Editoren (wie z. B. Violet) lassen sich UML-Modelle leicht erstellen.
25
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gAufgabeAufgabe
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.
26
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gLösungLösung
UML-Objektdiagramm:
27
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gLösungLösung
UML-Klassendiagramm (Grobfassung):
UML-Klassendiagramm (Verfeinerung):
28
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gLösungLösung
UML-Sequenzdiagramm
29
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gTeil 2Teil 2
Implementierung in Delphi
30
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gKlasse als ModulKlasse als Modul
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
// Deklaration der // Attribute und Operationen
implementation
// Implementierung der // Operationen
end.
Wuerfel
– augen: integer
+ create+ destroy+ werfen+ getAugen: integer
31
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gImplementierung der KlassenImplementierung der Klassen
unit uWuerfel;
interface
type TWuerfel = class(TObject)
private augen: integer;
public constructor create; destructor destroy; procedure werfen; function getAugen: integer;
end;
...
Wuerfel
– augen: integer
+ create+ destroy+ werfen+ getAugen: integer
Deklaration der Attribute und Operationen
Von TObject abgeleitet
32
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gImplementierung der KlassenImplementierung der Klassen
unit uWuerfel;
interface
...
implementation
constructor TWuerfel.create;begininherited create;augen := 1;randomize;end;
destructor TWuerfel.destroy;begininherited destroy;end;
...
Implementierung der Konstruktoren /
Destruktoren
Geerbter Konstruktor wird
aufgerufen
33
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gImplementierung der KlassenImplementierung der Klassen
unit uWuerfel;
interface
...
implementation
...
procedure TWuerfel.werfen;beginaugen := random(6)+1;end;
function TWuerfel.getAugen: integer;beginresult := augen;end;
end.
Implementierung der Operationen
34
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gAufgabeAufgabe
Implementieren Sie die Klassen Wuerfel, Konto und Spielzahl.
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“).
35
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gBenutzungsoberflächeBenutzungsoberfläche
PTitel: TPanel
RGSpielbrett: TRadioGroup
GBWuerfel: TGroupBox
GBKonto: TGroupBox
PWuerfelC: TPanel
PKonto: TPanel
BSpielen: TButton
PWuerfelA: TPanel
PWuerfelB: TPanel
Form1: TForm1
Die Benutzungsoberfläche wird mit Hilfe von sog. GUI-Objekten (Graphical User Interface) aufgebaut.
36
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gEreignisbehandlungEreignisbehandlung
(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.
37
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gEinbindung der Modellklassen Einbindung der Modellklassen
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, uWuerfel, uSpielbrett, uKonto;
type
TForm1 = class(TForm) ...
Bekanntmachen der Klassen
38
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gDeklaration der ObjekteDeklaration der Objekte
...
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, wuerfelB, wuerfelC: TWuerfel; spielbrett: TSpielbrett; konto: TKonto;
public { Public-Deklarationen }
end;
Von Delphi deklarierte GUI-
Objekte
Vom Benutzer deklarierte Modell-
Objekte
39
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gErzeugung der Modell-ObjekteErzeugung der Modell-Objekte
unit Unit1;
interface
...
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);beginwuerfelA := TWuerfel.create;wuerfelB := TWuerfel.create;wuerfelC := TWuerfel.create;konto := TKonto.create(100);spielbrett := TSpielbrett.create;end;
procedure TForm1.BSpielenClick(Sender: TObject);...
end.
Erzeugung der Modell-Objekte
40
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gImplementierung des SpielsImplementierung des Spiels
procedure TForm1.BSpielenClick(Sender: TObject);
var tipp, zahl, richtige: integer;
begin// Aktualisierung des Eingabewerts
tipp := RGSpielbrett.ItemIndex+1;// Aktualisier. d. Modell-Objekte bzw. Durchführung d. Spielskonto.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);...end;
Nachrichtenaustausch zur Erzeugung des
Spiels
41
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gImplementierung von NachrichtenImplementierung von Nachrichten
procedure TForm1.BSpielenClick(Sender: TObject);
...
begin...
konto.abheben(1);
...end;
abheben(1) kontoForm1
Empfängerobjekt
Senderobjekt-Klasse
Operation
42
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gAufgabeAufgabe
Erstellen Sie eine geeignete Benutzungsoberfläche. Ergänzen Sie das Delphi-Programm zur Simulation des ChuckALuck-Spiels.
Testen Sie anschließend das fertige Programm.
43
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gTeil 3Teil 3
Beziehungen
44
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gDas Spiel als ObjektDas Spiel als Objekt
Das Spiel soll jetzt als eigenständiges Objekt modelliert werden.
45
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gDie Klasse zum SpielobjektDie Klasse zum Spielobjekt
Spiel
...
...+ durchfuehren(tipp: int.)
spiel
46
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gDie Operation „durchfuehren“Die Operation „durchfuehren“
Spiel
...
...+ durchfuehren(tipp: int.)
spiel
procedure TSpiel.durchfuehren(tipp: integer);
var richtige: integer; zahl: integer;
beginkonto.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;
47
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gBekanntschaft zwischen ObjektenBekanntschaft zwischen Objekten
Ein Nachrichtenaustausch zwischen Objekten kann nur stattfinden, wenn das sendende Objekt das Empfängerobjekt kennt.
wuerfelA
wuerfelB
wuerfelC
kontospielkennt
kennt
kennt
spielbrettkennt
kennt
48
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gBekanntschaft durch ReferenzenBekanntschaft durch Referenzen
Referenzattribute
Zeiger (Adresse)
3A80 3A8
0
49
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gBekanntschaft durch ReferenzenBekanntschaft durch Referenzen
Spiel
- 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
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gErzeugung von ReferenzenErzeugung von Referenzen
// Deklaration des Konstruktors
constructor TSpiel.create(wA, wB, wC: TWuerfel; k: TKonto; sp: TSpielbrett);
beginkonto := k;wuerfelA := wA;wuerfelB := wB;wuerfelC := wC;spielbrett := sp;end;
// Aufruf des Konstruktors
konto := Tkonto.create(100);... spiel := TSpiel.create(
wuerfelA, wuerfelB, wuerfelC, konto, spielbrett);
Die Referenzbildung erfolgt bei der Erzeugung des Spiel-Objekts.
Spiel
- wuerfelA: Wuerfel- wuerfelB: Wuerfel- wuerfelC: Wuerfel- konto: Konto- spielbrett: Spielbrett
+ create( wA, wB, wC: Wuerfel; k: Konto; sp: Spielbrett)+ durchfuehren(tipp: int.)
Konstruktor mit Parametern zur Übergabe der Referenzen
51
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gErzeugung von ReferenzenErzeugung von Referenzen
konto := Tkonto.create(100);
3A80
3A80
52
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gErzeugung von ReferenzenErzeugung von Referenzen
spiel := TSpiel.create(..., konto, ...);
3A80
3A80
3A80
3A80
3A80
constructor TSpiel.create(...; k: TKonto; ...);begin ... konto := k; ...end;
3A80
53
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gAufgabeAufgabe
Fertigen Sie sich zunächst eine Kopie des ersten ChuckALuck-Programms 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.
54
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gKennt-Beziehung / VerbindungKennt-Beziehung / Verbindung
wuerfelA
wuerfelB
wuerfelC
kontospielkennt
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.
55
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gHat-Beziehung / KompositionHat-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
kontospielhat
hat
hat
spielbrett
hat
hat
56
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gHat-BeziehungHat-Beziehung
kennt
hat
57
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gHat-BeziehungHat-Beziehung
// Deklaration des Konstruktors
constructor TSpiel.create;begininherited create;konto := TKonto.create(100);wuerfelA := TWuerfel.create;wuerfelB := TWuerfel.create;wuerfelC := TWuerfel.create;spielbrett := TSpielbrett.create;end;
Spiel
- wuerfelA: Wuerfel- wuerfelB: Wuerfel- wuerfelC: Wuerfel- konto: Konto- spielbrett: Spielbrett
+ create+ destroy+ durchfuehren(tipp: int.)+ getWuerfelAAugen: int....+ getKontoStand: integer// Deklaration des Destruktors
destructor TSpiel.destroy;beginkonto.free;wuerfelA.free;wuerfelB.free;wuerfelC.free;spielbrett.free;inherited destroy;end;
58
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gAufgabeAufgabe
Fertigen Sie sich zunächst eine Kopie des ersten ChuckALuck-Programms an (neuer Ordner, ...).
Ändern Sie das Programm so ab, dass das Spiel die volle Kontrolle über die weiteren Objekte hat.
59
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gUML: Beziehungen / AssoziationenUML: Beziehungen / Assoziationen
UML-Klassendiagramm
wuerfelA
wuerfelB
wuerfelC
kontospielkennt
kennt
kennt
spielbrettkennt
kennt
Wuerfel
Konto
Spielkennt kennt
Spielbrett
kennt3
1
1
UML-Objektdiagramm
60
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gKardinalitätenKardinalitäten
Wuerfel
Konto
Spielkennt kennt
Spielbrett
kennt3
1
1
3: Ein Spiel-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..*
61
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gUML: BeziehungsartenUML: Beziehungsarten
KontoSpielkennt
hat
Spiel Konto
FormForm1ist
Kennt-Beziehung: Verbindung
Hat-Beziehung: Komposition
Ist-Beziehung: Verfeinerung; Vererbung
62
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gExkurs: Ist-BeziehungExkurs: Ist-Beziehung
TForm
...
TForm1
– wuerfelA: Wuerfel...
...
ist ein Vererbung
type
TForm1 = class(TForm)
..
end;
63
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gExkurs: Erzeugung von QuellcodeExkurs: 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.
64
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gEine neue ModellierungEine neue Modellierung
wuerfel kontospielhat 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
Bei dieser Modellierung des ChuckALuck-Spiels 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.
65
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gAufgabeAufgabe
Implementieren Sie das neue Modell. Bedenken Sie, an welcher Stelle im Programm das Würfel-Objekt erzeugt werden soll.
66
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gLösungLösung
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
...
67
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gLösungLösung
unit uSpiel;
interface
...
implementation
constructor TSpiel.create(k: TKonto);begininherited create;spielzahl := 1;wuerfel := TWuerfel.create;konto := k;end;
destructor Tspiel.destroy;beginwuerfel.free;inherited destroy;end;
...
end.
68
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gBenutzungsoberfläche und Benutzungsoberfläche und
FachkonzeptFachkonzept
wuerfel kontospielhat kennt
PWuerfelA Form1hat
PWuerfelBhat
...
GUI-Objekte
Fachkonzept-Objekte
Trennungsprinzip:klare Trennung zwischen Benutzungsoberfläche und Fachkonzept:Die Fachkonzeptobjekte kennen die GUI-Objekte nicht.
69
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gÜbungen – Aufgabe 1Übungen – Aufgabe 1
Folgendes Zufallsexperiment soll simuliert werden: Man würfelt so lange, bis eine 6 fällt.
70
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gÜbungen – Aufgabe 1Ü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.
71
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gÜbungen – Aufgabe 2Ü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
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gÜbungen – Aufgabe 2Übungen – Aufgabe 2
Erstellen Sie zunächst ein objektorientiertes Modell.
Ü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)
73
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gLösungsvorschlag – Aufgabe 1Lösungsvorschlag – Aufgabe 1
74
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gLösungsvorschlag – Aufgabe 2Lösungsvorschlag – Aufgabe 2
wuerfel kontospielkennt
statistik
kennt
Statistik
- anzahlDerSpiele: integer- anfangskontostand: integer- gewinnProSpiel: integer- konto: Konto
+ create(k: Konto) + spieleBeruecksichtigen( spielanzahl: integer)+ getAnzahlDerSpiele: integer+ getGewinnProSpiel: real
UML-Klassendiagra
mm
UML-Objektdiagram
m
hat
75
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gLösungsvorschlag – Aufgabe 2Lösungsvorschlag – Aufgabe 2
76
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gLösungsvorschlag – Aufgabe 2Lösungsvorschlag – Aufgabe 2
77
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gTeil 4Teil 4
Zusammenfassung
78
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gObjektorientierungObjektorientierung
Grundideen
Grundkonzepte
...Ob
jekt
Kla
sse
Nach
rich
t
Ass
ozi
ati
on
Modellierungssprache: UML
Implementierungssprache: Delphi, Java, ...
79
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gGrundidee: Objekt als Grundidee: Objekt als SystemkomponenteSystemkomponente
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.
80
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gGrundidee: Objekt als ModulGrundidee: 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.
81
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gGrundidee: Objekt als BausteinGrundidee: 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.
82
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gGrundkonzept: ObjektGrundkonzept: 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
83
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gGrundkonzept: KlasseGrundkonzept: Klasse
Kla
sse
Klassen sind Baupläne für Objekte. Objekte werden als Exemplare / Instanzen von Klassen bezeichnet.
Klasse
Objekt
Konto
stand
Betrag abhebenBetrag einzahlen
konto
stand = 9
instance of
84
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gGrundkonzept: NachrichtGrundkonzept: Nachricht
Nac
hric
ht
Die Aktivierung von Operationen / Methoden erfolgt mit Hilfe von Nachrichten.Eine Nachricht kann also als Methodenaufruf angesehen werden.
wuerfelAwerfen( )
Nachricht
spiel
EmpfängerSender
85
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gGrundkonzept: AssoziationGrundkonzept: Assoziation
Ass
ozia
tion
Eine Assoziation ist eine Beziehung zwischen verschiedenen Objekten einer oder mehrerer Klassen.
Eine Assoziation ist i.a. Grundvoraussetzung für den Nachrichtenaustausch.
Wuerfel
Spielbrett
Konto
Spiel
1
3
1
Assoziation
86
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gUML: Unified Modeling LanguageUML: 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)
87
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gUML: Klassen- und ObjektdiagrammeUML: Klassen- und Objektdiagramme
wuerfelA wuerfelB wuerfelC
augen = 3 augen = 3 augen = 5
Wuerfel
augen
werfen
instance of
UML-Klassendiagram
m
UML-Objektdiagramm
88
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gUML: SequenzdiagrammUML: Sequenzdiagramm
UML-Sequenzdiagramm
89
KB
Ob
jekto
rien
tiert
e P
rog
ram
mie
run
gLiteraturhinweiseLiteraturhinweise
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)