Grundkonzepte der objektorientierten Programmierung Klaus Becker 2004 Objektorientierung
Grundkonzepte der objektorientierten Programmierung Klaus Becker 2004
Objektorientierung 2 . . . Modellierungssprache: UML Implementierungssprache: Delphi, Java, . . . Assoziation Grundkonzepte Nachricht Klasse Objekt Grundideen
3 Teil 1 Objekt-basierte Programmierung
4 Fallstudie: chuck a luck Ziel ist es, ein System zu entwickeln, mit dem das in Amerika weit verbreitete Würfelspiel „chuck a luck“ am Rechner gespielt werden kann.
Das Würfelspiel „chuck a luck“ 5 Einsatz zahlen und Zahl tippen Einsatz: 1 $ Gewinn: Würfel werfen Gewinn auszahlen 1 4 2 5 3 1$ 6 0 Treffer: 1 Treffer: Einsatz + 1 $ 2 Treffer: Einsatz + 2 $ 3 Treffer: Einsatz + 3 $ 1$ 1$ 1$
6 Eine erste objektbasierte Lösung Im Verzeichnis „Chuck. ALuck 0“ 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. Form 1: TForm 1 PTitel: TPanel RGSpielbrett: TRadio. Group GBWuerfel: TGroup. Box PWuerfel. A: TPanel GBKonto: TGroup. Box PKonto: TPanel BWerfen: TButton
8 Eine erste objektbasierte Lösung procedure TGUI. BSpielen. Click(Sender: TObject); var wuerfel. A, wuerfel. B, wuerfel. C, konto, spielzahl: integer; richtige: integer; begin Variablen zur // Durchführung des Spiels Repräsentation der spielzahl : = RGSpielbrett. Item. Index+1; Spielinformationen konto : = Str. To. Int(PKonto. Caption); konto : = konto-1; wuerfel. A : = random(6)+1; wuerfel. B : = random(6)+1; wuerfel. C : = random(6)+1; richtige : = 0; if spielzahl = wuerfel. A then inc(richtige); if spielzahl = wuerfel. B then inc(richtige); if spielzahl = wuerfel. C then inc(richtige); if richtige > 0 then konto : = konto+(richtige+1); // Aktualisierung der Anzeige PWuerfel. A. Caption : = Int. To. Str(wuerfel. A); PWuerfel. B. Caption : = Int. To. Str(wuerfel. B); PWuerfel. C. Caption : = Int. To. Str(wuerfel. C); PKonto. Caption : = Int. To. Str(konto); end;
9 Bemerkungen Das Programm im Verzeichnis „Chuck. ALuck 0“ 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 Chuck. ALuck-Beispiels Schritt für Schritt zu entwickeln.
10
11 Teil 2 Objektorientierte Modellierung
Modellierung 12 1 4 2 5 3 1$ 6 1$ 1$ 1$ - Abbild der Miniwelt - Vorlage für das System Miniwelt Modell Informatisches System
13 Vom Gegenstand der Miniwelt. . . 1 4 2 5 3 1$ 6 Spielbrett 1$ 1$ 1$ 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.
. . . zum Objekt im Modell 14 Miniwelt Gegenstand 1 4 2 5 3 1$ 6 spielbrett Objekt 1$ 1$ 1$ wuerfel. A wuerfel. B wuerfel. C konto 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 Gegenstand 1 4 2 5 3 1$ 6 Spielbrett 1$ 1$ 1$ Würfel Konto Eigenschaft: Zahl Eigenschaft: Augen Eigenschaft: Stand Operation: Tipp setzen Operation: werfen Operationen: Betrag einzahlen Betrag abheben Sichtweise: Gegenstände der Miniwelt haben charakteristische Eigenschaften. Mit den Gegenständen kann man bestimmte Operationen ausführen.
Attribute 16 Gegenstand Eigenschaft: Augen Eigenschaft: Zahl Operation: Tipp setzen Eigenschaft: Stand 1 4 2 5 3 1$ 6 Operation: werfen Operationen: Betrag einzahlen Betrag abheben 1$ 1$ 1$ Objekt Miniwelt Modell spielbrett wuerfel. A wuerfel. B wuerfel. C konto zahl = 3 augen = 5 stand = 9 Attribut Die charakteristischen Eigenschaften eines Objekts werden mit Attributen erfasst. Die Gesamtheit der Attributwerte legt den Objektzustand fest.
Methoden 17 Gegenstand Eigenschaft: Zahl Operation: Tipp setzen Eigenschaft: Stand Eigenschaft: Augen 1 4 2 5 3 1$ 6 Operationen: Betrag einzahlen Betrag abheben Operation: werfen 1$ 1$ 1$ Miniwelt Objekt Modell spielbrett wuerfel. A wuerfel. B wuerfel. C konto zahl = 3 augen = 5 stand = 9 setzen(tipp) werfen abheben(betrag) einzahlen(betrag) Methode Das Verhalten eines Objekts wird mit Operationen / Methoden erfasst. Diese bestimmen die dynamischen Eigenschaften eines Objekts.
Klassen 18 Modell Klasse TSpielbrett TWuerfel TKonto zahl augen stand setzen(tipp) werfen abheben(betrag) einzahlen(betrag) spielbrett wuerfel. A wuerfel. B wuerfel. C konto zahl = 3 augen = 5 stand = 9 setzen(tipp) werfen abheben(betrag) einzahlen(betrag) Objekt Gleich strukturierte Objekte werden einer Klasse zugeordnet.
Klassen 19 Modell Klasse TSpielbrett TWuerfel TKonto zahl augen stand setzen(tipp) werfen abheben(betrag) einzahlen(betrag) instance of spielbrett wuerfel. A wuerfel. B wuerfel. C konto zahl = 3 augen = 5 stand = 9 setzen(tipp) werfen abheben(betrag) einzahlen(betrag) Objekt Klassen sind Baupläne für Objekte werden als Exemplare (Instanzen) von Klassen bezeichnet.
Erstes objektorientiertes Modell 20 1 4 2 5 3 1$ 6 1$ 1$ 1$ Modell Miniwelt TSpielbrett TWuerfel TKonto zahl augen stand setzen(tipp) werfen abheben(betrag) einzahlen(betrag) instance of spielbrett wuerfel. A wuerfel. B wuerfel. C konto zahl = 3 augen = 5 stand = 9
Konstruktoren / Destruktoren 21 Modell Klasse TSpielbrett TWuerfel TKonto zahl augen stand erzeugen vernichten setzen(tipp) erzeugen vernichten werfen erzeugen vernichten abheben(betrag) einzahlen(betrag) instance of spielbrett wuerfel. B 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 stand erzeugen vernichten abheben(betrag) einzahlen(betrag) verborgen Zugriff erlaubt
Zugriffsmethoden 23 Um weiterhin auf Attributwerte (lesend bzw. schreibend) zugreifen zu können, werden spezielle Zugriffsmethoden benötigt. TKonto stand 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 stand – stand: integer erzeugen vernichten abheben(betrag) einzahlen(betrag) „stand erfragen“ „stand setzen“ + create(betrag: integer) + destroy + abheben(betrag: integer) + einzahlen(betrag: int. ) + get. Stand: integer + set. Stand(betrag: integer)
UML 25 TWuerfel augen UMLKlassendiagramm erzeugen vernichten werfen instance of wuerfel. A wuerfel. B wuerfel. C augen = 3 augen = 5 UMLObjektdiagramm 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 Chuck. ALuck-Miniwelt. Beachte: Mit Hilfe von Violet können Objekt- und Klassendiagramme nur getrennt erstellt werden. Ergänzen Sie auch passende Datentypen.
28 Lösung UML-Objektdiagramm: UML-Klassendiagramm (Feinfassung):
29 Teil 3 Vom Modell zum Programm
Zielsetzung 30 1 4 2 5 3 1$ 6 1$ 1$ 1$ Miniwelt Modell System Ziel ist es, ein System zur Simulation des Chuck. ALuck-Spiels auf der Basis des entwickelten objektorientierten Modells zu erstellen.
Teilmodell 31 Teil-Modell TWuerfel – augen: integer + create + destroy + werfen + get. Augen: integer instance of wuerfel. A wuerfel. B wuerfel. C augen = 3 augen = 5 Die Implementierung eines objektorientierten Modells soll anhand eines Teilmodells des Gesamtmodells gezeigt werden.
Die Klasse als Modul 32 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 u. Wuerfel; interface // Deklaration der // Attribute und Operationen implementation // Implementierung der // Operationen end. TWuerfel – augen: integer + create + destroy + werfen + get. Augen: integer
Implementierung von Klassen 33 unit u. Wuerfel; interface type TWuerfel = class private augen: integer; public constructor create; destructor destroy; procedure werfen; function get. Augen: integer; TWuerfel – augen: integer + create + destroy + werfen + get. Augen: integer end; . . . Deklaration der Attribute und Operationen
34 Implementierung von Klassen unit u. Wuerfel; interface. . . implementation constructor TWuerfel. create; begin augen : = 1; randomize; end; destructor TWuerfel. destroy; begin end; . . . Implementierung der Konstruktoren / Destruktoren
35 Implementierung von Klassen unit u. Wuerfel; interface. . . implementation. . . procedure TWuerfel. werfen; begin augen : = random(6)+1; end; function TWuerfel. get. Augen: integer; begin result : = augen; end. Implementierung der Operationen
Einbindung einer Modellklasse 36 unit u. GUI; interface uses Windows, Messages, Sys. Utils, Classes, Graphics, Controls, Forms, Dialogs, Std. Ctrls, Ext. Ctrls, u. Wuerfel; type TForm 1 = class(TForm). . . Bekanntmachen der Klassen
Deklaration eines Objekts 37 . . . type TForm 1 = class(TForm) PTitel: TPanel; RGSpielbrett: TRadio. Group; GBWuerfel: TGroup. Box; GBKonto: TGroup. Box; PWuerfel. A: TPanel; PWuerfel. B: TPanel; PWuerfel. C: TPanel; PKonto: TPanel; BSpielen: TButton; procedure Form. Create(Sender: TObject); procedure BSpielen. Click(Sender: TObject); private { Private-Deklarationen } wuerfel. A: TWuerfel; public end; { Public-Deklarationen } Deklaration eines GUI-Objekts Deklaration eines Modell -Objekts
38 Erzeugung eines Modell-Objekts unit u. GUI; interface. . . implementation {$R *. DFM} procedure TForm 1. Form. Create(Sender: TObject); begin wuerfel. A : = TWuerfel. create; end; procedure TForm 1. BSpielen. Click(Sender: TObject); . . . end. Erzeugung eines Modell-Objekts
39 Aktivierung eines Modell-Objekts procedure TForm 1. BSpielen. Click(Sender: TObject); Begin // Aktivierung des Modell-Objekts wuerfel. A. werfen; // Aktualisierung der Anzeige PWuerfel. A. Caption : = Int. To. Str(wuerfel. A. get. Augen); end;
40 Aufgabe Kopieren Sie die Dateien aus dem Verzeichnis Chuch. ALuck 0 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 Chuck. ALuck-Spiels. Eine vollständige Lösung finden Sie im Verzeichnis „Chuck. ALuck 1“.
41 Lösung procedure TGUI. BSpielen. Click(Sender: TObject); var tipp, zahl, richtige: integer; Begin tipp : = RGSpielbrett. Item. Index+1; // Aktivierung der Modell-Objekte konto. abheben(1); spielbrett. setzen(tipp); wuerfel. A. werfen; wuerfel. B. werfen; wuerfel. C. werfen; richtige : = 0; zahl : = spielbrett. get. Zahl; if zahl = wuerfel. A. get. Augen then inc(richtige); if zahl = wuerfel. B. get. Augen then inc(richtige); if zahl = wuerfel. C. get. Augen then inc(richtige); if richtige > 0 then konto. einzahlen(richtige+1); // Aktualisierung der Anzeige PWuerfel. A. Caption : = Int. To. Str(wuerfel. A. get. Augen); PWuerfel. B. Caption : = Int. To. Str(wuerfel. B. get. Augen); PWuerfel. C. Caption : = Int. To. Str(wuerfel. C. get. Augen); PKonto. Caption : = Int. To. Str(konto. get. Stand); end;
42
43 Teil 4 Komplexe Objektstruktur
44 Ereignissteuerung bisher Auslösende Aktion Ausgelöste Aktion Mausklick auf den „werfen“-Button Der vom Benutzer eingestellte Tipp am Spielbrett wird übernommen. Das Spiel wird mit diesem Tipp durchgeführt. Die Ergebnisse des Spiels (Würfelergebnisse, neuer Kontostand) werden angezeigt.
45 Ereignissteuerung jetzt Auslösende Aktion Ausgelöste Aktion Mausklick auf 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.
Ereignissteuerung jetzt 46 Aktionen Zahl auf dem Spielbrett festlegen Solange würfeln, bis genug „Treffer“ erzielt sind. Gewinn auszahlen lassen. Achtung, Fehlbedienung möglich!
47 Komplexere Ereignissteuerung [1][2]. . . / Tipp setzen; Konto abbuchen bereit z 0 [werfen] / Würfel werfen gesetzt z 1 gewürfelt z 2 [aktualisieren] / Konto aktualisieren Zustand: Auslösende Aktion: Ausgelöste Aktion: Neuer Zustand: bereit Radio. Group. Button anklicken Tipp setzen Konto abbuchen gesetzt Radio. Group. Button anklicken Tipp setzen gesetzt Button „werfen“ anklicken Würfel werfen gewürfelt Button „aktualisieren“ anklicken Konto aktualisieren bereit
Spielsteuerung 48 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: Auslösende Aktion: Ausgelöste Aktion: Neuer Zustand: bereit Radio. Group. Button anklicken Tipp setzen Konto abbuchen gesetzt Radio. Group. Button anklicken Tipp setzen gesetzt Button „werfen“ anklicken Würfel werfen gewürfelt Button „aktualisieren“ anklicken Konto aktualisieren bereit
Modellierung 49 1 4 2 5 3 1$ 6 1$ 1$ 1$ Modell Miniwelt spielmanager zustand = 0 spielbrett wuerfel. A wuerfel. B wuerfel. C konto zahl = 3 augen = 5 stand = 9
Aktivierung von Objekten 50 konto stand = 9 spielmanager zustand = 0 abheben(1) konto stand = 9 konto Zustand vorher Aktivierung durch eine Nachricht 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 Radio. Group. Button anklicken im Zustand „bereit“: 2: setzen(tipp) wuerfel. A wuerfel. B wuerfel. C UMLKollaborationsdiagramm spielmanager 1: abheben(1) spielbrett. Setzen(tipp) spielbrett konto
52 Das Spiel als Nachrichtenaustausch Button [werfen] anklicken im Zustand „gesetzt“: wuerfel. A wuerfel. B wuerfel. C 1: werfen 2: werfen 3: werfen spielbrett spielmanager wuerfel. Werfen konto
53 Das Spiel als Nachrichtenaustausch Button [aktualisieren] anklicken im Zustand „gewürfelt“: 1: zahl get. Zahl wuerfel. A spielbrett 2: get. Augen wuerfel. B spielmanager 3: get. Augen 5: [richtige > 0] einzahlen(richtige+1) konto. Aktualisieren wuerfel. C 4: get. Augen konto
54 Das Spiel als Nachrichtenaustausch Radio. Group. Button anklicken im Zustand „bereit“: 2: setzen(tipp) UMLKollaborationsdiagramm UML-Sequenzdiagramm spielmanager 1: abheben(1) spielbrett konto
Beziehung zwischen Objekten 55 1: zahl get. Zahl wuerfel. A spielbrett 2: get. Augen wuerfel. B spielmanager 3: get. Augen konto 5: [richtige > 0] einzahlen(richtige+1) konto. Aktualisieren wuerfel. C 4: get. Augen 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.
Kennt-Beziehung / Verbindung 56 wuerfel. A kennt wuerfel. B kennt spielmanager kennt spielbrett konto kennt wuerfel. C kennt Bei diesen Beziehungen führen die beteiligten Objekte ein Eigenleben. Die in Verbindung stehenden Objekte sind zwar aufeinander angewiesen, weil sie beispielsweise miteinander kommunizieren müssen, um eine gemeinsame Aufgabe zu erledigen, aber es reicht, wenn ein Objekt das andere kennt. Man spricht von einer Kennt-Beziehung zwischen Objekten.
Hat-Beziehung / Komposition 57 wuerfel. A spielbrett hat wuerfel. B hat spielmanager hat konto hat wuerfel. C 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.
Modell mit Spielmanager 58 TSpielmanager TSpielbrett kennt - zustand: integer. . . TWuerfel kennt + create(. . . ) + spielbrett. Setzen(z: int. ) + wuerfel. Werfen + konto. Aktualisieren + get. Zustand: integer wuerfel. A TWuerfel kennt TKonto kennt wuerfel. B kennt wuerfel. C kennt spielmanager kennt spielbrett konto
Modell mit Spielmanager 59 TSpielmanager TSpielbrett hat - zustand: integer. . . TWuerfel hat + create(. . . ) + spielbrett. Setzen(z: int. ) + wuerfel. Werfen + konto. Aktualisieren + get. Zustand: integer. . . TWuerfel hat TKonto hat wuerfel. A spielbrett hat wuerfel. B spielmanager hat wuerfel. C hat konto hat
60 Exkurs: Beziehungsarten Kennt-Beziehung: Verbindung TSpielmanager TKonto kennt Hat-Beziehung: Komposition TSpielmanager TKonto hat Ist-Beziehung: Verfeinerung; Vererbung TForm 1 TForm ist
Exkurs: Kardinalitäten 61 1 3 TWuerfel kennt TSpielmanager TSpielbrett kennt 1 Kardinalitätsangaben: TKonto 3: Ein Spielmanager-Objekt steht in Beziehung zu 3 Wuerfel-Objekten. Kardinalität: legt die Wertigkeit einer Beziehung fest. Klasse 1 Beziehung zu genau einem Objekt Klasse * Beziehung zu beliebig vielen Objekten Klasse 0. . 1 Beziehung zu höchstens einem Objekt Klasse 1. . * Beziehung zu mindestens einem Objekt
62 Aufgabe Erstellen Sie mit Violet zu einem der gezeigten UMLKollaborationsdiagramme ein entsprechendes UML-Sequenzdiagramm.
63 Teil 5 Implementierung einer Hat-Beziehung
Zielsetzung 64 TSpielmanager erstellen TWuerfel hat - zustand: integer. . . fertig + create + wuerfel. Werfen. . . Teil-Modell instance of spielmanager zustand =. . . wuerfel. A hat 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 Referenzattribut
Referenzen schaffen Beziehungen 66 TSpielmanager - zustand: integer - wuerfel. A: TWuerfel - wuerfel. B: TWuerfel - wuerfel. C: TWuerfel - spielbrett: TSpielbrett - konto: TKonto. . . Referenzattribute Mit Hilfe von Referenzattributen kann ein Objekt sich die Adressen seiner „Beziehungspartner“ merken.
Modellklasse mit Referenzattributen 67 unit u. Spielmanager; interface uses u. Wuerfel, u. Konto, u. Spielbrett; type TSpielmanager = class(TObject) private zustand: integer; wuerfel. A: TWuerfel; wuerfel. B: Twuerfel; wuerfel. C: TWuerfel; konto: TKonto; spielbrett: TSpielbrett; public constructor create; destructor destroy; override; . . . end; implementation TSpielmanager Bekanntmachen der Klassen - zustand: integer - wuerfel. A: TWuerfel - wuerfel. B: TWuerfel - wuerfel. C: TWuerfel - spielbrett: TSpielbrett - konto: TKonto. . . Deklaration der Referenzattribute
68 Erzeugung des Würfel-Objekts type TSpielmanager = class(TObject) private wuerfel. A: TWuerfel; public constructor create; destructor destroy; override; . . . end; Siehe Delphi-Hilfe implementation constructor TSpielmanager. create; begin inherited create; wuerfel. A : = TWuerfel. create; end; destructor TSpielmanager. destroy; begin Siehe Delphi-Hilfe wuerfel. A. free; inherited destroy; end; spielmanager wuerfel. A 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.
69 Implementierung einer Nachricht . . . spielmanager type TSpielmanager = class(TObject) private wuerfel. A: TWuerfel; public constructor create; destructor destroy; override; procedure wuerfel. Werfen; . . . end; implementation. . . hat Modellstruktur Nachricht spielmanager Senderobjekt-Klasse procedure TSpielmanager. wuerfel. Werfen; begin wuerfel. A. werfen; Operation end; Empfängerobjekt wuerfel. A werfen wuerfel. A
70 Erzeugung des Spielmanager-Objekts unit u. GUI; spielmanager interface wuerfel. A hat Modellstruktur uses Windows, Messages, Sys. Utils, Classes, Graphics, Controls, Forms, Dialogs, Std. Ctrls, Ext. Ctrls, u. Spielmanager; type TForm 1 = class(TForm). . . private { Private-Deklarationen } spielmanager: TSpielmanager; public { Public-Deklarationen } end; implementation {$R *. DFM} procedure TForm 1. Form. Create(Sender: TObject); begin spielmanager : = TSpielmanager. create; end; . . .
71 Zugriff auf abhängiges Objekt unit u. GUI; form 1 spielmanager kennt interface wuerfel. A hat . . . Modellstruktur implementation {$R *. DFM} procedure TGUI. BWerfen. Click(Sender: TObject); begin // Aktualisierung der Modell-Objekte Kein direkter Zugriff spielmanager. wuerfel. Werfen; auf wuerfel. A möglich // Aktualisierung der Anzeige PWuerfel. A. Caption : = Int. To. Str(spielmanager. get. Wuerfel. A); end; Nachrichten . . . form 1 get. Wuerfel. A spielmanager get. Augen wuerfel. A
72 Zugriff auf abhängiges Objekt unit u. GUI; spielmanager wuerfel. A hat interface. . . implementation {$R *. DFM} procedure TGUI. BWerfen. Click(. . . ); begin // Aktualisierung der Modell-Objekte spielmanager. wuerfel. Werfen; // Aktualisierung der Anzeige Hilfsoperation PWuerfel. A. Caption : = Int. To. Str(spielmanager. get. Wuerfel. A); end; TSpielmanager - wuerfel. A: Wuerfel. . . + create + destroy + wuerfel. Werfen. . . + get. Wuerfel. A: integer. . . function TSpielmanager. get. Wuerfel. A: integer; begin result : = wuerfel. A. get. Augen; end;
73 Aufgabe Die gezeigte Implementierung des Teilmodells „Spielmanager hat Wuerfel“ finden Sie im Verzeichnis „Chuck. ALuck 20“. 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: „Chuck. ALuck 21“) Berücksichtigen Sie in einem letzten Schritt den jeweiligen Spielzustand. Eine vollständige Implementierung finden Sie im Verzeichnis „Chuck. ALuck 22“.
74
75 Teil 6 Implementierung einer Kennt-Beziehung
Zielsetzung 76 TSpielmanager TKonto kennt - zustand: integer. . . + create + wuerfel. Werfen. . . Teil-Modell instance of spielmanager zustand =. . . konto kennt 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 - wuerfel. A: Wuerfel - wuerfel. B: Wuerfel - wuerfel. C: Wuerfel - spielbrett: Spielbrett - konto: Konto + create(. . . ) + spielbrett. Setzen(z: int. ) + wuerfel. Werfen + konto. Aktualisieren + get. Zustand: 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 u. GUI; spielmanager interface konto kennt uses Modellstruktur Windows, Messages, Sys. Utils, Classes, Graphics, Controls, Forms, Dialogs, Std. Ctrls, Ext. Ctrls, u. Konto, . . . , u. Spielmanager; type TForm 1 = class(TForm). . . private { Private-Deklarationen } konto: TKonto; . . . spielmanager: TSpielmanager; public { Public-Deklarationen } constructor create(. . . ; k: Tkonto; . . . ); . . . end; implementation {$R *. DFM} procedure TForm 1. Form. Create(Sender: TObject); begin konto : = TKonto. create; . . . spielmanager : = TSpielmanager. create(. . . , konto, . . . ); end;
79 Erzeugung von Referenzen 3 A 80 spielmanager : = TSpielmanager. create(. . . , konto, . . . ); constructor TSpielmanager. create(. . . ; k: TKonto; . . . ); begin. . . konto : = k; . . . end; 3 A 80
80 Erzeugung von Referenzen // Deklaration des Konstruktors constructor TSpielmanager. create (w. A, w. B, w. C: TWuerfel; k: TKonto; sp: TSpielbrett); begin zustand : = 0; konto : = k; Konstruktor mit wuerfel. A : = w. A; Parametern zur wuerfel. B : = w. B; Übergabe der wuerfel. C : = w. C; Referenzen spielbrett : = sp; end; TSpielmanager - zustand: integer - wuerfel. A: Wuerfel - wuerfel. B: Wuerfel - wuerfel. C: Wuerfel - spielbrett: Spielbrett - konto: Konto + create(w. A, w. B, w. C: Wuerfel; k: Konto; sp: Spielbrett) + spielbrett. Setzen(z: int. ) + wuerfel. Werfen + konto. Aktualisieren + get. Zustand: integer // Aufruf des Konstruktors konto : = TKonto. create(100); konto: [3 A 80]. . . spielmanager : = TSpielmanager. create (wuerfel. A, wuerfel. B, wuerfel. C, konto, spielbrett); 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 Chuck. ALuck-System mit Kennt-Beziehungen. Ausgangspunkt kann „Chuck. ALuck 1“ (Version des neuen Chuck. ALuck. Systems ohne Spielmanager) oder „Chuck. ALuck 21“ oder „Chuck. ALuck 22“ (Versionen mit Hat-Beziehungen) sein. Eine Lösung ohne Spielkontrolle finden Sie im Verzeichnis „Chuck. ALuck 31“, eine mit Kontrolle des Spielzustands im Verzeichnis „Chuck. ALuck 32“.
83 Teil 7 UML-Werkzeuge
84 UML-Editoren unterstützen den Entwickler beim Erstellen von Diagrammen. (Beispiel: Violet)
85 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 m. TWuerfel; interface uses // Uses-Klausel ggf. anpassen type TWuerfel = CLASS // Attribute private augen : integer; //Objektbeziehungen // Methoden public constructor create; procedure werfen; function get. Augen : 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 get. Augen : 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
Objektorientierung 90 . . . Modellierungssprache: UML Implementierungssprache: Delphi, Java, . . . Assoziation Grundkonzepte Nachricht Klasse Objekt Grundideen
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 Systemaktivitä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.
Grundkonzept: Objekt 94 Objekt konto Attribut stand = 9 Operationen Betrag abheben Betrag einzahlen Attributwert Die Struktur eines Objekts wird durch Attribute festgelegt. Die Attributwerte bestimmen den aktuellen Zustand des Objekts. Das Verhalten eines Objekts wird durch Operationen / Methoden festgelegt. Das Objekt stellt diese Methoden selbst bereit. Ein Objekt ist insofern eine autonome Einheiten.
Grundkonzept: Klasse 95 TKonto Klasse stand Klasse Betrag abheben Betrag einzahlen instance of Objekt konto stand = 9 Klassen sind Baupläne für Objekte werden als Exemplare / Instanzen von Klassen bezeichnet.
Grundkonzept: Nachricht 96 Nachricht Sender spielmanager Nachricht werfen( ) Empfänger wuerfel. A Die Aktivierung von Operationen / Methoden erfolgt mit Hilfe von Nachrichten. Eine Nachricht kann also als Methodenaufruf angesehen werden.
Grundkonzept: Assoziation 97 TKonto 1 TSpielbrett 1 TWuerfel TSpielmanager Assoziation 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. 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 (Chuck. ALuck im Unterricht von K. Merkert) LOG IN 128/129. Thema: Objektorientiertes Modellieren und Programmieren Lehrplan für das Leistungsfach: www. informatik-lehren. de. . .
- Slides: 100