100
Grundkonzepte der objektorientierten Programmierung Klaus Becker 2004

Grundkonzepte der objektorientierten Programmierung

  • Upload
    rodney

  • View
    26

  • Download
    1

Embed Size (px)

DESCRIPTION

Grundkonzepte der objektorientierten Programmierung. Klaus Becker 2004. Objektorientierung. Grundideen. Grundkonzepte. Objekt. Klasse. Nachricht. Assoziation. Modellierungssprache: UML. Implementierungssprache: Delphi, Java,. Teil 1. Objekt-basierte Programmierung. - PowerPoint PPT Presentation

Citation preview

Page 1: Grundkonzepte der objektorientierten Programmierung

Grundkonzepte der objektorientierten Programmierung

Klaus Becker

2004

Page 2: Grundkonzepte der objektorientierten Programmierung

2 Objektorientierung

Grundideen

Grundkonzepte

...Ob

jekt

Kla

sse

Nach

rich

t

Ass

ozi

ati

on

Modellierungssprache: UML

Implementierungssprache: Delphi, Java, ...

Page 3: Grundkonzepte der objektorientierten Programmierung

3 Teil 1

Objekt-basierte Programmierung

Page 4: Grundkonzepte der objektorientierten 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.

Page 5: Grundkonzepte der objektorientierten Programmierung

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

Page 6: Grundkonzepte der objektorientierten Programmierung

6 Eine erste objektbasierte Lösung

Im Verzeichnis „ChuckALuck0“ finden Sie ein erstes Programm zur Realisierung des Spiels.

Page 7: Grundkonzepte der objektorientierten Programmierung

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

Page 8: Grundkonzepte der objektorientierten Programmierung

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

Page 9: Grundkonzepte der objektorientierten Programmierung

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.

Page 10: Grundkonzepte der objektorientierten Programmierung

10

Page 11: Grundkonzepte der objektorientierten Programmierung

11 Teil 2

Objektorientierte Modellierung

Page 12: Grundkonzepte der objektorientierten Programmierung

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

Page 13: Grundkonzepte der objektorientierten Programmierung

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

Page 14: Grundkonzepte der objektorientierten Programmierung

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

Page 15: Grundkonzepte der objektorientierten Programmierung

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.

Page 16: Grundkonzepte der objektorientierten Programmierung

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

Page 17: Grundkonzepte der objektorientierten Programmierung

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

Page 18: Grundkonzepte der objektorientierten Programmierung

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

Page 19: Grundkonzepte der objektorientierten Programmierung

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

Page 20: Grundkonzepte der objektorientierten Programmierung

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

Page 21: Grundkonzepte der objektorientierten Programmierung

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).

Page 22: Grundkonzepte der objektorientierten Programmierung

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

Page 23: Grundkonzepte der objektorientierten Programmierung

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

Page 24: Grundkonzepte der objektorientierten Programmierung

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)

Page 25: Grundkonzepte der objektorientierten Programmierung

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

Page 26: Grundkonzepte der objektorientierten Programmierung

26 UML-Editoren

Mit Hilfe von UML-Editoren (wie z. B. Violet) lassen sich UML-Modelle leicht erstellen.

Page 27: Grundkonzepte der objektorientierten Programmierung

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.

Page 28: Grundkonzepte der objektorientierten Programmierung

28 Lösung

UML-Objektdiagramm:

UML-Klassendiagramm (Feinfassung):

Page 29: Grundkonzepte der objektorientierten Programmierung

29 Teil 3

Vom Modell zum Programm

Page 30: Grundkonzepte der objektorientierten Programmierung

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

Page 31: Grundkonzepte der objektorientierten Programmierung

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

Page 32: Grundkonzepte der objektorientierten Programmierung

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

Page 33: Grundkonzepte der objektorientierten Programmierung

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

Page 34: Grundkonzepte der objektorientierten Programmierung

34 Implementierung von Klassen

unit uWuerfel;

interface

...

implementation

constructor TWuerfel.create;beginaugen := 1;randomize;end;

destructor TWuerfel.destroy;beginend;

...

Implementierung der Konstruktoren /

Destruktoren

Page 35: Grundkonzepte der objektorientierten Programmierung

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

Page 36: Grundkonzepte der objektorientierten Programmierung

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

Page 37: Grundkonzepte der objektorientierten Programmierung

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

Page 38: Grundkonzepte der objektorientierten Programmierung

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

Page 39: Grundkonzepte der objektorientierten Programmierung

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;

Page 40: Grundkonzepte der objektorientierten Programmierung

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“.

Page 41: Grundkonzepte der objektorientierten Programmierung

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;

Page 42: Grundkonzepte der objektorientierten Programmierung

42

Page 43: Grundkonzepte der objektorientierten Programmierung

43 Teil 4

Komplexe Objektstruktur

Page 44: Grundkonzepte der objektorientierten Programmierung

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.

Page 45: Grundkonzepte der objektorientierten Programmierung

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.

Page 46: Grundkonzepte der objektorientierten Programmierung

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!

Page 47: Grundkonzepte der objektorientierten Programmierung

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

Page 48: Grundkonzepte der objektorientierten Programmierung

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

Page 49: Grundkonzepte der objektorientierten Programmierung

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

Page 50: Grundkonzepte der objektorientierten Programmierung

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

Page 51: Grundkonzepte der objektorientierten Programmierung

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)

Page 52: Grundkonzepte der objektorientierten Programmierung

52 Das Spiel als Nachrichtenaustausch

wuerfelA

wuerfelB

wuerfelC

konto spielmanager 2: werfen

1: werfen

3: werfen

spielbrett

Button [werfen] anklicken im Zustand „gesetzt“:

wuerfelWerfen

Page 53: Grundkonzepte der objektorientierten Programmierung

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

Page 54: Grundkonzepte der objektorientierten Programmierung

54 Das Spiel als Nachrichtenaustausch

UML-Kollaborationsdiagra

mm

konto spielmanager1: abheben(1)

spielbrett2: setzen(tipp)

RadioGroupButton anklicken im Zustand „bereit“:

UML-Sequenzdiagramm

Page 55: Grundkonzepte der objektorientierten Programmierung

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

Page 56: Grundkonzepte der objektorientierten Programmierung

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.

Page 57: Grundkonzepte der objektorientierten Programmierung

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

Page 58: Grundkonzepte der objektorientierten Programmierung

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

Page 59: Grundkonzepte der objektorientierten Programmierung

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

Page 60: Grundkonzepte der objektorientierten Programmierung

60 Exkurs: Beziehungsarten

TKontoTSpielmanagerkennt

hat

TSpielmanager TKonto

TFormTForm1ist

Kennt-Beziehung: Verbindung

Hat-Beziehung: Komposition

Ist-Beziehung: Verfeinerung; Vererbung

Page 61: Grundkonzepte der objektorientierten Programmierung

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..*

Page 62: Grundkonzepte der objektorientierten Programmierung

62 Aufgabe

Erstellen Sie mit Violet zu einem der gezeigten UML-Kollaborationsdiagramme ein entsprechendes UML-Sequenzdiagramm.

Page 63: Grundkonzepte der objektorientierten Programmierung

63 Teil 5

Implementierung einer Hat-Beziehung

Page 64: Grundkonzepte der objektorientierten Programmierung

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

Page 65: Grundkonzepte der objektorientierten Programmierung

65 Referenzen schaffen Beziehungen

Referenzattribut

Zeiger (Adresse)

2091

2091

Page 66: Grundkonzepte der objektorientierten Programmierung

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

...

Page 67: Grundkonzepte der objektorientierten Programmierung

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

...

Page 68: Grundkonzepte der objektorientierten Programmierung

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

Page 69: Grundkonzepte der objektorientierten Programmierung

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

Page 70: Grundkonzepte der objektorientierten Programmierung

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

Page 71: Grundkonzepte der objektorientierten Programmierung

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

Page 72: Grundkonzepte der objektorientierten Programmierung

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;

Page 73: Grundkonzepte der objektorientierten Programmierung

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“.

Page 74: Grundkonzepte der objektorientierten Programmierung

74

Page 75: Grundkonzepte der objektorientierten Programmierung

75 Teil 6

Implementierung einer Kennt-Beziehung

Page 76: Grundkonzepte der objektorientierten Programmierung

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

Page 77: Grundkonzepte der objektorientierten Programmierung

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

Page 78: Grundkonzepte der objektorientierten Programmierung

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

Page 79: Grundkonzepte der objektorientierten Programmierung

79 Erzeugung von Referenzen

spielmanager := TSpielmanager.create(..., konto, ...);

3A80

3A80

3A80

3A80

3A80

constructor TSpielmanager.create(...; k: TKonto; ...);begin ... konto := k; ...end;

3A80

Page 80: Grundkonzepte der objektorientierten Programmierung

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]

Page 81: Grundkonzepte der objektorientierten Programmierung

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“.

Page 82: Grundkonzepte der objektorientierten Programmierung

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“.

Page 83: Grundkonzepte der objektorientierten Programmierung

83 Teil 7

UML-Werkzeuge

Page 84: Grundkonzepte der objektorientierten Programmierung

84 UML-Editoren

UML-Editoren unterstützen den Entwickler beim Erstellen von Diagrammen. (Beispiel: Violet)

Page 85: Grundkonzepte der objektorientierten Programmierung

85 UML-Werkzeuge

UML-Werkzeuge unterstützen den Entwickler auch beim Erstellen des Quellcodes und der Dokumentation von Modellen. (Beispiel: UMLEd)

Page 86: Grundkonzepte der objektorientierten Programmierung

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;

...

Page 87: Grundkonzepte der objektorientierten Programmierung

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

Page 88: Grundkonzepte der objektorientierten Programmierung

88 Aufgabe

Testen Sie das UML-Werkzeug UMLEd. Geben Sie eines der entwickelten Modelle ein und lassen Sie den zugehörigen Quellcode erzeugen.

Page 89: Grundkonzepte der objektorientierten Programmierung

89 Teil 8

Zusammenfassung

Page 90: Grundkonzepte der objektorientierten Programmierung

90 Objektorientierung

Grundideen

Grundkonzepte

...Ob

jekt

Kla

sse

Nach

rich

t

Ass

ozi

ati

on

Modellierungssprache: UML

Implementierungssprache: Delphi, Java, ...

Page 91: Grundkonzepte der objektorientierten Programmierung

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.

Page 92: Grundkonzepte der objektorientierten Programmierung

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.

Page 93: Grundkonzepte der objektorientierten Programmierung

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.

Page 94: Grundkonzepte der objektorientierten Programmierung

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

Page 95: Grundkonzepte der objektorientierten Programmierung

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

Page 96: Grundkonzepte der objektorientierten Programmierung

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

Page 97: Grundkonzepte der objektorientierten Programmierung

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

Page 98: Grundkonzepte der objektorientierten Programmierung

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)

Page 99: Grundkonzepte der objektorientierten Programmierung

99 Ein Blick auf den LF-Lehrplan

Page 100: Grundkonzepte der objektorientierten Programmierung

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

...