Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Grundkonzepte der objektorientierten Programmierung

Ähnliche Präsentationen


Präsentation zum Thema: "Grundkonzepte der objektorientierten Programmierung"—  Präsentation transkript:

1 Grundkonzepte der objektorientierten Programmierung
Klaus Becker 2004

2 Objektorientierung Grundideen Assoziation Nachricht Grundkonzepte
... Objekt Klasse Nachricht Assoziation Modellierungssprache: UML Implementierungssprache: Delphi, Java, ...

3 Objekt-basierte Programmierung
Teil 1 Objekt-basierte Programmierung

4 Fallstudie: chuck a luck
Ziel ist es, ein System zu entwickeln, mit dem das in Amerika weit verbreitete Würfelspiel „chuck a luck“ am Rechner gespielt werden kann.

5 Das Würfelspiel „chuck a luck“
Einsatz zahlen und Zahl tippen Würfel werfen Gewinn auszahlen Einsatz: 1 $ Gewinn: 0 Treffer: 1 Treffer: Einsatz + 1 $ 2 Treffer: Einsatz + 2 $ 3 Treffer: Einsatz + 3 $ 1$ 1$ 1 4 1$ 1$ 2 5 1$ 1$ 1$ 1$ 1$ 3 1$ 1$ 1$ 1$ 1$ 3 3 6

6 Eine erste objektbasierte Lösung
Im Verzeichnis „ChuckALuck0“ finden Sie ein erstes Programm zur Realisierung des Spiels.

7 Eine erste objektbasierte Lösung
Die Benutzungsoberfläche wird mit Hilfe von sog. GUI-Objekten (Graphical User Interface) aufgebaut. Für die Ausführung des Spiels ist das TButton-Objekt „BWerfen“ zuständig. Form1: TForm1 PTitel: TPanel RGSpielbrett: TRadioGroup GBWuerfel: TGroupBox GBKonto: TGroupBox PWuerfelA: TPanel PKonto: TPanel BWerfen: TButton

8 Eine erste objektbasierte Lösung
procedure TGUI.BSpielenClick(Sender: TObject); var wuerfelA, wuerfelB, wuerfelC, konto, spielzahl: integer; richtige: integer; begin // Durchführung des Spiels spielzahl := 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 Anzeige PWuerfelA.Caption := IntToStr(wuerfelA); PWuerfelB.Caption := IntToStr(wuerfelB); PWuerfelC.Caption := IntToStr(wuerfelC); PKonto.Caption := IntToStr(konto); end; Variablen zur Repräsentation der Spielinformationen

9 Bemerkungen Das Programm im Verzeichnis „ChuckALuck0“ ist ad hoc entwickelt worden (d. h. Benutzungsoberfläche zusammenstellen; Ereignisbehandlung ergänzen). Für kleinere Anwendungen kann man auf diese Weise schnell zu einem lauffähigen System kommen. Bei größeren Anwendungen versagt in der Regel die ad-hoc-Methode. Man benötigt dann Methoden zur systematischen Entwicklung von Software. Ziel soll es sein, die objektorientierte Methode anhand des ChuckALuck-Beispiels Schritt für Schritt zu entwickeln.

10

11 Objektorientierte Modellierung
Teil 2 Objektorientierte Modellierung

12 Informatisches System
Modellierung 1 4 1$ 1$ 2 5 1$ 1$ 1$ Miniwelt 1$ 1$ 3 1$ 1$ 1$ 1$ 3 3 6 - Abbild der Miniwelt - Vorlage für das System Modell Informatisches System

13 Vom Gegenstand der Miniwelt ...
1 4 1$ 1$ 2 5 1$ 1$ 1$ 1$ 1$ 3 1$ 1$ 1$ 1$ 3 3 6 Spielbrett Würfel Konto Sichtweise: Die Miniwelt ist aus Gegenständen aufgebaut. Gegenstände können Personen, Dinge, Sachverhalte, Ereignisse, ... sein. Jeder Gegenstand stellt eine autonome Einheit mit klar begrenzten Zuständigkeiten dar.

14 ... zum Objekt im Modell 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$
Gegenstand Miniwelt 1 4 1$ 1$ 2 5 1$ 1$ 1$ 1$ 1$ 3 1$ 1$ 1$ 1$ 3 3 6 spielbrett wuerfelA wuerfelB wuerfelC konto Objekt Modell Grundidee der objektorientierten Modellierung: Die Gegenstände der Miniwelt werden mit Hilfe von Objekten im Sinne der Informatik beschrieben.

15 Struktur eines Gegenstandes
Miniwelt 1 4 1$ 1$ 2 5 1$ 1$ 1$ 1$ 1$ 3 1$ 1$ 1$ 1$ 3 3 6 Spielbrett Würfel Konto Eigenschaft: Zahl Operation: Tipp setzen Eigenschaft: Augen Operation: werfen Eigenschaft: Stand Operationen: Betrag einzahlen Betrag abheben Sichtweise: Gegenstände der Miniwelt haben charakteristische Eigenschaften. Mit den Gegenständen kann man bestimmte Operationen ausführen.

16 Attribute 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$
Eigenschaft: Stand Operationen: Betrag einzahlen Betrag abheben Gegenstand Eigenschaft: Augen Operation: werfen Eigenschaft: Zahl Operation: Tipp setzen 1 4 1$ 1$ 2 5 1$ 1$ 1$ 1$ 1$ 3 1$ 1$ 1$ 1$ 3 3 6 Miniwelt Objekt Modell spielbrett wuerfelA wuerfelB wuerfelC konto zahl = 3 augen = 3 augen = 3 augen = 5 stand = 9 Attribut Die charakteristischen Eigenschaften eines Objekts werden mit Attributen erfasst. Die Gesamtheit der Attributwerte legt den Objektzustand fest.

17 Methoden Eigenschaft: Stand Operationen: Betrag einzahlen Betrag abheben Gegenstand Eigenschaft: Augen Operation: werfen Eigenschaft: Zahl Operation: Tipp setzen 1 4 1$ 1$ 2 5 1$ 1$ 1$ 1$ 1$ 3 1$ 1$ 1$ 1$ 3 3 6 Miniwelt Objekt Modell spielbrett wuerfelA wuerfelB wuerfelC konto zahl = 3 augen = 3 augen = 3 augen = 5 stand = 9 setzen(tipp) werfen werfen werfen abheben(betrag) einzahlen(betrag) Methode Das Verhalten eines Objekts wird mit Operationen / Methoden erfasst. Diese bestimmen die dynamischen Eigenschaften eines Objekts.

18 Klassen Gleich strukturierte Objekte werden einer Klasse zugeordnet.
Modell Klasse TSpielbrett TWuerfel TKonto zahl augen stand setzen(tipp) werfen abheben(betrag) einzahlen(betrag) spielbrett wuerfelA wuerfelB wuerfelC konto zahl = 3 augen = 3 augen = 3 augen = 5 stand = 9 setzen(tipp) werfen werfen werfen abheben(betrag) einzahlen(betrag) Objekt Gleich strukturierte Objekte werden einer Klasse zugeordnet.

19 Klassen Modell Klasse TSpielbrett TWuerfel TKonto zahl augen stand setzen(tipp) werfen abheben(betrag) einzahlen(betrag) instance of instance of instance of spielbrett wuerfelA wuerfelB wuerfelC konto zahl = 3 augen = 3 augen = 3 augen = 5 stand = 9 setzen(tipp) werfen werfen werfen abheben(betrag) einzahlen(betrag) Objekt Klassen sind Baupläne für Objekte. Objekte werden als Exemplare (Instanzen) von Klassen bezeichnet.

20 Erstes objektorientiertes Modell
1 4 1$ 1$ 2 5 1$ 1$ 1$ 1$ 1$ 3 1$ 1$ 1$ 1$ 3 3 6 Miniwelt Modell TSpielbrett TWuerfel TKonto zahl augen stand setzen(tipp) werfen abheben(betrag) einzahlen(betrag) instance of instance of instance of spielbrett wuerfelA wuerfelB wuerfelC konto zahl = 3 augen = 3 augen = 3 augen = 5 stand = 9

21 Konstruktoren / Destruktoren
Modell Klasse TSpielbrett TWuerfel TKonto zahl augen stand erzeugen vernichten setzen(tipp) erzeugen vernichten werfen erzeugen vernichten abheben(betrag) einzahlen(betrag) instance of instance of instance of spielbrett wuerfelB konto zahl = ... augen = 3 stand = 9 Objekt Konstruktoren / Destruktoren sind spezielle Operationen zur Erzeugung / Vernichtung von Objekten. Beachte: Konstruktoren / Destruktoren sind Klassenmethoden (d. h. Objekte verfügen nicht über diese Methoden).

22 Datenkapselung Geheimnisprinzip: Die für die Benutzung einer Systemkomponente (eines Moduls) nicht benötigten Detailinformationen werden verborgen. Datenkapselung bei Objekten / Klassen: Die innere Struktur eines Objekts (Aufbau über Attribute) wird verborgen. Objekte stellen Dienste nur über ihre Operationen / Methoden bereit. TKonto verborgen stand erzeugen vernichten abheben(betrag) einzahlen(betrag) Zugriff erlaubt

23 Zugriffsmethoden Um weiterhin auf Attributwerte (lesend bzw. schreibend) zugreifen zu können, werden spezielle Zugriffsmethoden benötigt. TKonto TKonto TKonto stand stand stand erzeugen vernichten abheben(betrag) einzahlen(betrag) erzeugen vernichten abheben(betrag) einzahlen(betrag) erzeugen vernichten abheben(betrag) einzahlen(betrag) „stand erfragen“ „stand setzen“ Zugriffsmethoden

24 Schnittstellenspezifikation
Die Benutzungsschnittstelle einer Klasse muss genau festgelegt werden. Zugriffsrechte (- kein Zugriff; + Zugriff erlaubt) Datentypen (und eventuelle Initialisierungswerte) Signaturen (Parameter und bei Funktionen der Ergebnistyp) TKonto TKonto stand – stand: integer erzeugen vernichten abheben(betrag) einzahlen(betrag) „stand erfragen“ „stand setzen“ + create(betrag: integer) + destroy + abheben(betrag: integer) + einzahlen(betrag: int.) + getStand: integer + setStand(betrag: integer)

25 UML UML (Unified Modeling Language):
TWuerfel augen UML-Klassendiagramm erzeugen vernichten werfen instance of wuerfelA wuerfelB wuerfelC UML-Objektdiagramm augen = 3 augen = 3 augen = 5 UML (Unified Modeling Language): Grafische Sprache zur Beschreibung objektorientierter Modelle

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

27 Aufgabe Erstellen Sie mit Hilfe des UML-Editors „Violet“ ein Objekt- und ein Klassendiagramm zur Beschreibung der ChuckALuck-Miniwelt. Beachte: Mit Hilfe von Violet können Objekt- und Klassendiagramme nur getrennt erstellt werden. Ergänzen Sie auch passende Datentypen.

28 Lösung UML-Objektdiagramm: UML-Klassendiagramm (Feinfassung):

29 Vom Modell zum Programm
Teil 3 Vom Modell zum Programm

30 Zielsetzung 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$
4 1$ 1$ 2 5 1$ 1$ 1$ 1$ 1$ 3 1$ 1$ 1$ 1$ 3 3 6 Miniwelt Modell System Ziel ist es, ein System zur Simulation des ChuckALuck-Spiels auf der Basis des entwickelten objektorientierten Modells zu erstellen.

31 Teilmodell TWuerfel – augen: integer + create + destroy + werfen + getAugen: integer Teil-Modell instance of wuerfelA wuerfelB wuerfelC augen = 3 augen = 3 augen = 5 Die Implementierung eines objektorientierten Modells soll anhand eines Teilmodells des Gesamtmodells gezeigt werden.

32 Die Klasse als Modul Klassen werden als Module (Programmeinheiten) implementiert, die in Delphi in zwei Teilen beschrieben werden: Der öffentliche Teil besteht aus den Vereinbarungen, die zur Benutzung des Moduls notwendig sind (Schnittstelle). Der private Teil besteht aus den Implementierungsdetails, die für die Benutzung nicht benötigt werden. unit uWuerfel; interface // Deklaration der // Attribute und Operationen implementation // Implementierung der // Operationen end. TWuerfel – augen: integer + create + destroy + werfen + getAugen: integer

33 Implementierung von Klassen
unit uWuerfel; interface type TWuerfel = class private augen: integer; public constructor create; destructor destroy; procedure werfen; function getAugen: integer; end; ... TWuerfel – augen: integer + create + destroy + werfen + getAugen: integer Deklaration der Attribute und Operationen

34 Implementierung von Klassen
unit uWuerfel; interface ... implementation constructor TWuerfel.create; begin augen := 1; randomize; end; destructor TWuerfel.destroy; begin end; Implementierung der Konstruktoren / Destruktoren

35 Implementierung von Klassen
unit uWuerfel; interface ... implementation procedure TWuerfel.werfen; begin augen := random(6)+1; end; function TWuerfel.getAugen: integer; begin result := augen; end; end. Implementierung der Operationen

36 Einbindung einer Modellklasse
unit uGUI; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, uWuerfel; type TForm1 = class(TForm) Bekanntmachen der Klassen

37 Deklaration eines Objekts
... type TForm1 = class(TForm) PTitel: TPanel; RGSpielbrett: TRadioGroup; GBWuerfel: TGroupBox; GBKonto: TGroupBox; PWuerfelA: TPanel; PWuerfelB: TPanel; PWuerfelC: TPanel; PKonto: TPanel; BSpielen: TButton; procedure FormCreate(Sender: TObject); procedure BSpielenClick(Sender: TObject); private { Private-Deklarationen } wuerfelA: TWuerfel; public { Public-Deklarationen } end; Deklaration eines GUI-Objekts Deklaration eines Modell-Objekts

38 Erzeugung eines Modell-Objekts
unit uGUI; interface ... implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin wuerfelA := TWuerfel.create; end; procedure TForm1.BSpielenClick(Sender: TObject); ... end. Erzeugung eines Modell-Objekts

39 Aktivierung eines Modell-Objekts
procedure TForm1.BSpielenClick(Sender: TObject); Begin // Aktivierung des Modell-Objekts wuerfelA.werfen; // Aktualisierung der Anzeige PWuerfelA.Caption := IntToStr(wuerfelA.getAugen); end;

40 Aufgabe Kopieren Sie die Dateien aus dem Verzeichnis ChuchALuck0 in einen neuen Ordner. Implementieren und testen Sie Schritt für Schritt die Klassen TWuerfel, TKonto und TSpielzahl. Erstellen Sie ein objektorientiertes Programm zur Simulation des ChuckALuck-Spiels. Eine vollständige Lösung finden Sie im Verzeichnis „ChuckALuck1“.

41 Lösung procedure TGUI.BSpielenClick(Sender: TObject);
var tipp, zahl, richtige: integer; Begin tipp := RGSpielbrett.ItemIndex+1; // Aktivierung der Modell-Objekte konto.abheben(1); spielbrett.setzen(tipp); wuerfelA.werfen; wuerfelB.werfen; wuerfelC.werfen; richtige := 0; zahl := spielbrett.getZahl; if zahl = wuerfelA.getAugen then inc(richtige); if zahl = wuerfelB.getAugen then inc(richtige); if zahl = wuerfelC.getAugen then inc(richtige); if richtige > 0 then konto.einzahlen(richtige+1); // Aktualisierung der Anzeige PWuerfelA.Caption := IntToStr(wuerfelA.getAugen); PWuerfelB.Caption := IntToStr(wuerfelB.getAugen); PWuerfelC.Caption := IntToStr(wuerfelC.getAugen); PKonto.Caption := IntToStr(konto.getStand); end;

42

43 Komplexe Objektstruktur
Teil 4 Komplexe Objektstruktur

44 Ereignissteuerung bisher
Auslösende Aktion Ausgelöste Aktion Mausklick auf den „werfen“-Button Der vom Benutzer eingestellte Tipp am Spielbrett wird übernommen. Das Spiel wird mit diesem Tipp durchgeführt. Die Ergebnisse des Spiels (Würfelergebnisse, neuer Kontostand) werden angezeigt.

45 Ereignissteuerung jetzt
Auslösende Aktion Ausgelöste Aktion Mausklick auf einen Radio-Button Der Einsatz wird vom Konto abgehoben. Die gewählte Zahl wird gesetzt. Mausklick auf den „werfen“-Button Die Würfel werden geworfen. Mausklick auf den „aktualisieren“-Button Der Gewinn wird ermittelt und auf dem Konto eingezahlt.

46 Ereignissteuerung jetzt
Aktionen Zahl auf dem Spielbrett festlegen Achtung, Fehlbedienung möglich! Solange würfeln, bis genug „Treffer“ erzielt sind. Gewinn auszahlen lassen.

47 Komplexere Ereignissteuerung
[1][2]... / Tipp setzen [1][2]... / Tipp setzen; Konto abbuchen [werfen] / Würfel werfen bereit z0 gesetzt z1 gewürfelt z2 [aktualisieren] / Konto aktualisieren Zustand: bereit gesetzt gewürfelt Auslösende Aktion: RadioGroupButton anklicken Button „werfen“ anklicken Button „aktualisieren“ anklicken Ausgelöste Aktion: Tipp setzen Konto abbuchen Tipp setzen Würfel werfen Konto aktualisieren Neuer Zustand: gesetzt gewürfelt bereit

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. Zustand: bereit gesetzt gewürfelt Auslösende Aktion: RadioGroupButton anklicken Button „werfen“ anklicken Button „aktualisieren“ anklicken Ausgelöste Aktion: Tipp setzen Konto abbuchen Tipp setzen Würfel werfen Konto aktualisieren Neuer Zustand: gesetzt gewürfelt bereit

49 Modellierung 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ Modell Miniwelt 1 4 2 5
3 1$ 1$ 1$ 1$ 3 3 6 Miniwelt Modell spielmanager zustand = 0 spielbrett wuerfelA wuerfelB wuerfelC konto zahl = 3 augen = 3 augen = 3 augen = 5 stand = 9

50 Aktivierung von Objekten
konto Zustand vorher stand = 9 abheben(1)  spielmanager konto Aktivierung durch eine Nachricht zustand = 0 stand = 9 konto Zustand nachher stand = 8 Sichtweise: Ein Objekt stellt seiner Umgebung bestimmte Dienste (Operationen) zur Verfügung. Durch eine Nachricht veranlasst ein „Kunde“ das Objekt, die Dienstleistung zu erledigen. Das Objekt führt dann die Operation aus.

51 Das Spiel als Nachrichtenaustausch
RadioGroupButton anklicken im Zustand „bereit“: 2: setzen(tipp)  wuerfelA spielbrett 1: abheben(1)  wuerfelB spielmanager konto wuerfelC spielbrettSetzen(tipp)  UML-Kollaborationsdiagramm

52 Das Spiel als Nachrichtenaustausch
Button [werfen] anklicken im Zustand „gesetzt“:  1: werfen wuerfelA spielbrett  2: werfen wuerfelB spielmanager konto  3: werfen wuerfelC wuerfelWerfen 

53 Das Spiel als Nachrichtenaustausch
Button [aktualisieren] anklicken im Zustand „gewürfelt“: wuerfelA 1: zahl  getZahl  spielbrett  2: getAugen wuerfelB spielmanager konto  3: getAugen 5: [richtige > 0] einzahlen(richtige+1)  wuerfelC kontoAktualisieren   4: getAugen

54 Das Spiel als Nachrichtenaustausch
RadioGroupButton anklicken im Zustand „bereit“: 2: setzen(tipp)  UML- Kollaborationsdiagramm spielbrett 1: abheben(1)  UML-Sequenzdiagramm spielmanager konto

55 Beziehung zwischen Objekten
wuerfelA 1: zahl  getZahl  spielbrett  2: getAugen wuerfelB spielmanager konto  3: getAugen 5: [richtige > 0] einzahlen(richtige+1)  wuerfelC kontoAktualisieren   4: getAugen Ein Nachrichtenaustausch zwischen Objekten kann nur stattfinden, wenn das sendende Objekt die Nachricht dem Empfängerobjekt „zustellen“ kann. Hierzu müssen diese Objekte in Beziehung zueinander stehen.

56 Kennt-Beziehung / Verbindung
wuerfelA spielbrett kennt kennt wuerfelB spielmanager konto kennt 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.

57 Hat-Beziehung / Komposition
wuerfelA spielbrett hat hat wuerfelB spielmanager konto hat 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.

58 Modell mit Spielmanager
TSpielbrett kennt - zustand: integer ... TWuerfel kennt TWuerfel kennt + create(...) + spielbrettSetzen(z: int.) + wuerfelWerfen + kontoAktualisieren + getZustand: integer TWuerfel kennt TKonto kennt kennt kennt wuerfelA spielbrett kennt kennt wuerfelB spielmanager konto kennt wuerfelC

59 Modell mit Spielmanager
TSpielbrett hat - zustand: integer ... TWuerfel hat TWuerfel hat + create(...) + spielbrettSetzen(z: int.) + wuerfelWerfen + kontoAktualisieren + getZustand: integer ... TWuerfel hat TKonto hat wuerfelA spielbrett hat hat wuerfelB spielmanager konto hat hat hat wuerfelC

60 Exkurs: Beziehungsarten
Kennt-Beziehung: Verbindung TSpielmanager TKonto kennt Hat-Beziehung: Komposition TSpielmanager TKonto hat Ist-Beziehung: Verfeinerung; Vererbung TForm1 TForm ist

61 Exkurs: Kardinalitäten
1 TSpielbrett 3 kennt TWuerfel TSpielmanager kennt kennt TKonto 1 Kardinalitätsangaben: 3: Ein Spielmanager-Objekt steht in Beziehung zu 3 Wuerfel-Objekten. Kardinalität: legt die Wertigkeit einer Beziehung fest. 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 Klasse

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

63 Implementierung einer Hat-Beziehung
Teil 5 Implementierung einer Hat-Beziehung

64 Zielsetzung TSpielmanager TWuerfel hat - zustand: integer ... erstellen fertig + create + wuerfelWerfen ... instance of instance of Teil-Modell spielmanager wuerfelA hat zustand = ... augen = 3 Die Implementierung der Hat-Beziehung soll anhand eines Teilmodells des Gesamtmodells gezeigt werden. Wir verzichten vorerst auf die Verwaltung des Spielzustands.

65 Referenzen schaffen Beziehungen
Zeiger (Adresse) 2091 2091 Referenzattribut

66 Referenzen schaffen Beziehungen
TSpielmanager - zustand: integer - wuerfelA: TWuerfel - wuerfelB: TWuerfel - wuerfelC: TWuerfel - spielbrett: TSpielbrett - konto: TKonto ... Referenzattribute Mit Hilfe von Referenzattributen kann ein Objekt sich die Adressen seiner „Beziehungspartner“ merken.

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 TSpielmanager - zustand: integer - wuerfelA: TWuerfel - wuerfelB: TWuerfel - wuerfelC: TWuerfel - spielbrett: TSpielbrett - konto: TKonto ... Deklaration der Referenzattribute

68 Erzeugung des Würfel-Objekts
type TSpielmanager = class(TObject) private wuerfelA: TWuerfel; public constructor create; destructor destroy; override; end; implementation constructor TSpielmanager.create; begin inherited create; wuerfelA := TWuerfel.create; end; destructor TSpielmanager.destroy; begin wuerfelA.free; inherited destroy; end; spielmanager wuerfelA hat Modellstruktur Bei dieser Struktur geht man davon aus, dass ein Objekt ein anderes besitzt, d. h. es hat die vollständige Kontrolle über dieses Objekt. Bei einer solchen Zerlegung trägt das Ganze die Verantwortung für die Teilobjekte, die Existenz eines Teilobjekts hängt unmittelbar von der Existenz des Ganzen ab. Man spricht von einer Hat-Beziehung zwischen dem Ganzen und seinen Teilen. Siehe Delphi-Hilfe Siehe Delphi-Hilfe

69 Implementierung einer Nachricht
... type TSpielmanager = class(TObject) private wuerfelA: TWuerfel; public constructor create; destructor destroy; override; procedure wuerfelWerfen; end; implementation procedure TSpielmanager.wuerfelWerfen; begin wuerfelA.werfen; end; spielmanager wuerfelA hat Modellstruktur Nachricht werfen  spielmanager wuerfelA Senderobjekt-Klasse Operation Empfängerobjekt

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); begin spielmanager := TSpielmanager.create; end; ... spielmanager wuerfelA hat Modellstruktur

71 Zugriff auf abhängiges Objekt
unit uGUI; interface ... implementation {$R *.DFM} procedure TGUI.BWerfenClick(Sender: TObject); begin // Aktualisierung der Modell-Objekte spielmanager.wuerfelWerfen; // Aktualisierung der Anzeige PWuerfelA.Caption := IntToStr(spielmanager.getWuerfelA); end; form1 spielmanager wuerfelA kennt hat Modellstruktur Kein direkter Zugriff auf wuerfelA möglich Nachrichten Nachrichten getWuerfelA  getAugen  form1 spielmanager wuerfelA

72 Zugriff auf abhängiges Objekt
unit uGUI; interface ... implementation {$R *.DFM} procedure TGUI.BWerfenClick(...); begin // Aktualisierung der Modell-Objekte spielmanager.wuerfelWerfen; // Aktualisierung der Anzeige PWuerfelA.Caption := IntToStr(spielmanager.getWuerfelA); end; spielmanager wuerfelA hat TSpielmanager - wuerfelA: Wuerfel ... + create + destroy + wuerfelWerfen ... + getWuerfelA: integer ... Hilfsoperation function TSpielmanager.getWuerfelA: integer; begin result := wuerfelA.getAugen; end;

73 Aufgabe Die gezeigte Implementierung des Teilmodells „Spielmanager hat Wuerfel“ finden Sie im Verzeichnis „ChuckALuck20“. Testen Sie zunächst diese Implementierung. Beachten Sie, dass man hier nur Würfel A werfen kann. Bauen Sie dann schrittweise diese Implementierung zu einer Implementierung des gesamten Spiels aus. Berücksichtigen Sie zunächst noch nicht den jeweiligen Spielzustand. (Zum Vergleich: „ChuckALuck21“) Berücksichtigen Sie in einem letzten Schritt den jeweiligen Spielzustand. Eine vollständige Implementierung finden Sie im Verzeichnis „ChuckALuck22“.

74

75 Implementierung einer Kennt-Beziehung
Teil 6 Implementierung einer Kennt-Beziehung

76 Zielsetzung TSpielmanager TKonto kennt - zustand: integer ... + create + wuerfelWerfen ... instance of instance of Teil-Modell spielmanager konto kennt zustand = ... stand = 99 Hier sollen die Ähnlichkeiten und Unterschiede zwischen einer Implementierung der Kennt-Beziehung und der Hat-Beziehung aufgezeigt werden.

77 Bekanntschaft durch Referenzen
TSpielmanager - zustand: integer - wuerfelA: Wuerfel - wuerfelB: Wuerfel - wuerfelC: Wuerfel - spielbrett: Spielbrett - konto: Konto + create(...) + spielbrettSetzen(z: int.) + wuerfelWerfen + kontoAktualisieren + getZustand: integer Referenzattribute Die anzustrebende Grundsituation bleibt gleich: Mit Hilfe von Referenzattributen soll das TSpielmanager-Objekt sich die Adressen seiner „Bekanntschaften“ merken.

78 Erzeugung der Objekte unit uGUI; 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); begin konto := TKonto.create; ... spielmanager := TSpielmanager.create(..., konto, ...); end; spielmanager konto kennt Modellstruktur

79 Erzeugung von Referenzen
3A80 3A80 3A80 spielmanager := TSpielmanager.create(..., konto, ...); constructor TSpielmanager.create(...; k: TKonto; ...); begin ... konto := k; ... end; 3A80 3A80 3A80

80 Erzeugung von Referenzen
// Deklaration des Konstruktors constructor TSpielmanager.create (wA, wB, wC: TWuerfel; k: TKonto; sp: TSpielbrett); begin zustand := 0; konto := k; wuerfelA := wA; wuerfelB := wB; wuerfelC := wC; spielbrett := sp; end; TSpielmanager - zustand: integer - wuerfelA: Wuerfel - wuerfelB: Wuerfel - wuerfelC: Wuerfel - spielbrett: Spielbrett - konto: Konto Konstruktor mit Parametern zur Übergabe der Referenzen + create(wA, wB, wC: Wuerfel; k: Konto; sp: Spielbrett) + spielbrettSetzen(z: int.) + wuerfelWerfen + kontoAktualisieren + getZustand: integer // Aufruf des Konstruktors konto := TKonto.create(100); ... spielmanager := TSpielmanager.create (wuerfelA, wuerfelB, wuerfelC, konto, spielbrett); konto: [3A80] Die Referenzbildung erfolgt bei der Erzeugung des Spielmanager-Objekts.

81 Unterschied: Kennt-/Hat-Beziehung
Das Objekt „spielmanager“ steht in Verbindung zum Objekt „konto“. kennt hat Das Objekt „spielmanger“ hat die volle Kontrolle über das Objekt „konto“.

82 Aufgabe Implementieren Sie ein ChuckALuck-System mit Kennt-Beziehungen. Ausgangspunkt kann „ChuckALuck1“ (Version des neuen ChuckALuck-Systems ohne Spielmanager) oder „ChuckALuck21“ oder „ChuckALuck22“ (Versionen mit Hat-Beziehungen) sein. Eine Lösung ohne Spielkontrolle finden Sie im Verzeichnis „ChuckALuck31“, eine mit Kontrolle des Spielzustands im Verzeichnis „ChuckALuck32“.

83 Teil 7 UML-Werkzeuge

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

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

86 UML-Werkzeuge Quellcode – erzeugt mit UMLEd: UNIT mTWuerfel; interface
uses // Uses-Klausel ggf. anpassen type TWuerfel = CLASS // Attribute private augen : integer; //Objektbeziehungen // Methoden public constructor create; procedure werfen; function getAugen : integer; end; ...

87 UML-Werkzeuge Dokumentation – erzeugt mit UMLEd:
Dokumentation der Klasse "TWuerfel" Beschreibung der Klasse:  Attribute augen : integer beschreibt die aktuelle Augenzahl des Würfels Protokoll der Dienste / Methoden Konstruktor create Auftrag werfen aktiviert den Würfel so, dass (mit Hilfe des Zufallsgenerators) eine neue Augenzahl erzeugt wird Anfrage getAugen : integer

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

89 Teil 8 Zusammenfassung

90 Objektorientierung Grundideen Assoziation Nachricht Grundkonzepte
... Objekt Klasse Nachricht Assoziation Modellierungssprache: UML Implementierungssprache: Delphi, Java, ...

91 Idee: Objekt als Systemkomponente
Ein System besteht aus Objekten. Jedes Objekt ist für bestimmte Aufgaben zuständig und erledigt diese in eigener Verantwortung. Durch Nachrichten können Objekte andere Objekte zur Erledigung von (Teil)Aufgaben auffordern und somit gemeinsam die System- aktivitäten erzeugen.

92 Idee: Objekt als Modul Ein Objekt (eine Klasse) ist eine Einheit (Modul), bei dem Daten und die hierauf anzuwendenden Operationen gemeinsam verwaltet werden. Die Daten werden so verkapselt, dass ein Zugriff nur über Operationen erfolgen kann (Geheimnisprinzip). Diese Operationen werden in einer klar definierten Schnittstelle festgelegt.

93 Idee: Objekt als Baustein
Objekte / Klassen sollten nach Möglichkeit so abstrakt entworfen werden, dass sie zur Erledigung vieler Aufgaben benutzt werden können (Wiederverwendung). Gut verwendbare Klassen können dann in Klassenbibliotheken zur weiteren Verwendung bereitgestellt werden.

94 Grundkonzept: Objekt Attribut Attributwert Operationen
konto Attribut Attributwert stand = 9 Betrag abheben Betrag einzahlen Operationen 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. Objekt

95 Grundkonzept: Klasse Klasse Klasse Objekt
TKonto Klasse stand Betrag abheben Betrag einzahlen instance of Klasse konto Objekt stand = 9 Klassen sind Baupläne für Objekte. Objekte werden als Exemplare / Instanzen von Klassen bezeichnet.

96 Grundkonzept: Nachricht
Sender Nachricht Empfänger werfen( )  spielmanager wuerfelA Nachricht Die Aktivierung von Operationen / Methoden erfolgt mit Hilfe von Nachrichten. Eine Nachricht kann also als Methodenaufruf angesehen werden.

97 Grundkonzept: Assoziation
TKonto 1 TSpielbrett 1 TSpielmanager Assoziation Assoziation TWuerfel 3 Eine Assoziation ist eine Beziehung zwischen verschiedenen Objekten einer oder mehrerer Klassen. Eine Assoziation ist i.a. Grundvoraussetzung für den Nachrichtenaustausch.

98 UML: Unified Modeling Language
Die Unified Modelling Language ist eine Sprache zur Spezifikation, Visualisierung, Konstruktion und Dokumentation von Modellen für Softwaresysteme, Geschäftsmodelle und andere Nicht-Softwaresysteme. Sie bietet den Entwicklern die Möglichkeit, den Entwurf und die Entwicklung von Softwaremodellen auf einheitlicher Basis zu diskutieren. Die UML wird seit 1998 als Standard angesehen. (aus: UML-Tutorial der Uni Magdeburg)

99 Ein Blick auf den LF-Lehrplan

100 Literaturhinweise Helmut Balzert: Lehrbuch Grundlagen der Informatik. Spektrum Ak. Verlag 1999. Heide Balzert: Lehrbuch der Objektmodellierung. Spektrum Ak. Verlag 1999. Bernd Oestereich: Objektorientierte Softwareentwicklung. Oldenbourg 1998. Thomas Erler: Das Einsteigerseminar UML. Bhv 2000. Siegfried Spolwig: Objektorientierung im Informatikunterricht. Dümmler-Verlag 1997. (UML-Tutorial der Uni Magdeburg) (UML-Links Bernd Oestereich) chuckaluck/index.html (ChuckALuck im Unterricht von K. Merkert) LOG IN 128/129. Thema: Objektorientiertes Modellieren und Programmieren Lehrplan für das Leistungsfach: ...


Herunterladen ppt "Grundkonzepte der objektorientierten Programmierung"

Ähnliche Präsentationen


Google-Anzeigen