Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Grundkonzepte der objektorientierten Programmierung Klaus Becker 2004.

Ähnliche Präsentationen


Präsentation zum Thema: "Grundkonzepte der objektorientierten Programmierung Klaus Becker 2004."—  Präsentation transkript:

1 Grundkonzepte der objektorientierten Programmierung Klaus Becker 2004

2 2 Objektorientierung Grundideen Grundkonzepte... ObjektKlasseNachrichtAssoziation Modellierungssprache: UML Implementierungssprache: Delphi, Java,...

3 3 Teil 1 Objekt-basierte Programmierung

4 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 5 Das Würfelspiel chuck a luck 1$ 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$ 3

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

7 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

8 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 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 10

11 11 Teil 2 Objektorientierte Modellierung

12 12 Modellierung 1$ Abbild der Miniwelt - Vorlage für das System Miniwelt Modell Informatisches System

13 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$ Würfel Spielbrett Konto

14 14... zum Objekt im Modell Grundidee der objektorientierten Modellierung: Die Gegenstände der Miniwelt werden mit Hilfe von Objekten im Sinne der Informatik beschrieben. wuerfelAwuerfelBwuerfelCspielbrettkonto 1$ Miniwelt Modell Gegenstand Objekt

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

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

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

18 18 Klassen Gleich strukturierte Objekte werden einer Klasse zugeordnet. spielbrett zahl = 3 setzen(tipp) wuerfelAwuerfelBwuerfelC augen = 3 augen = 5 werfen konto stand = 9 abheben(betrag) einzahlen(betrag) TWuerfelTSpielbrettTKonto augenzahlstand werfensetzen(tipp)abheben(betrag) einzahlen(betrag) Modell Objekt Klasse

19 19 Klassen Klassen sind Baupläne für Objekte. Objekte werden als Exemplare (Instanzen) von Klassen bezeichnet. spielbrett setzen(tipp) wuerfelAwuerfelBwuerfelC werfen konto abheben(betrag) einzahlen(betrag) TWuerfelTSpielbrettTKonto augenzahlstand werfensetzen(tipp)abheben(betrag) einzahlen(betrag) Modell Objekt Klasse instance of zahl = 3augen = 3 augen = 5stand = 9

20 20 Erstes objektorientiertes Modell spielbrettwuerfelAwuerfelBwuerfelCkonto TWuerfelTSpielbrettTKonto augenzahlstand werfensetzen(tipp)abheben(betrag) einzahlen(betrag) instance of zahl = 3augen = 3 augen = 5stand = 9 1$ Miniwelt Modell

21 21 Konstruktoren / Destruktoren spielbrettwuerfelBkonto TWuerfelTSpielbrettTKonto augenzahlstand erzeugen vernichten abheben(betrag) einzahlen(betrag) Modell Objekt Klasse instance of zahl =...augen = 3stand = 9 erzeugen vernichten setzen(tipp) erzeugen vernichten werfen 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).

22 22 Datenkapselung Geheimnisprinzip: Die für die Benutzung einer Systemkomponente (eines Moduls) nicht benötigten Detailinformationen werden verborgen. TKonto stand erzeugen vernichten abheben(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

23 23 Zugriffsmethoden 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 TKonto stand erzeugen vernichten abheben(betrag) einzahlen(betrag) TKonto stand erzeugen vernichten abheben(betrag) einzahlen(betrag) Zugriffsmethoden

24 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 erzeugen vernichten abheben(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)

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

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

27 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 28 Lösung UML-Objektdiagramm: UML-Klassendiagramm (Feinfassung):

29 29 Teil 3 Vom Modell zum Programm

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

31 31 Teilmodell Teil-Modell wuerfelAwuerfelBwuerfelC instance of 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

32 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 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 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 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 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 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 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 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 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 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 42

43 43 Teil 4 Komplexe Objektstruktur

44 44 Ereignissteuerung bisher Auslösende AktionAusgelö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 45 Ereignissteuerung jetzt Auslösende AktionAusgelö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.

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

47 47 Komplexere Ereignissteuerung 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 Zustand: bereit gesetzt gewürfelt Neuer Zustand: gesetzt gewürfelt bereit [1][2]... / Tipp setzen; Konto abbuchen bereit z0 gesetzt z1 [1][2]... / Tipp setzen [aktualisieren] / Konto aktualisieren [werfen] / Würfel werfen gewürfelt z2

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

49 49 Modellierung spielbrettwuerfelAwuerfelBwuerfelC zahl = 3augen = 3 augen = 5 1$ Miniwelt Modell konto stand = 9 spielmanager zustand = 0

50 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

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

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

53 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

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

55 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

56 56 Kennt-Beziehung / Verbindung wuerfelA wuerfelB wuerfelC kontospielmanager kennt spielbrett 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 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 kontospielmanager hat spielbrett hat

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

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

60 60 Exkurs: Beziehungsarten TKontoTSpielmanager kennt hat TSpielmanagerTKonto TFormTForm1 ist Kennt-Beziehung: Verbindung Hat-Beziehung: Komposition Ist-Beziehung: Verfeinerung; Vererbung

61 61 Exkurs: Kardinalitäten TWuerfel TKonto TSpielmanager kennt TSpielbrett kennt : Ein Spielmanager-Objekt steht in Beziehung zu 3 Wuerfel-Objekten. Kardinalitätsangaben: Kardinalität: legt die Wertigkeit einer Beziehung fest. Beziehung zu genau einem Objekt Klasse 1 Beziehung zu beliebig vielen Objekten Klasse * Beziehung zu höchstens einem Objekt Klasse 0..1 Beziehung zu mindestens einem Objekt Klasse 1..*

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

63 63 Teil 5 Implementierung einer Hat-Beziehung

64 64 Zielsetzung spielmanagerwuerfelA 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... TWuerfel hat instance of Teil-Modell erstellen fertig

65 65 Referenzen schaffen Beziehungen Referenzattribut Zeiger (Adresse) 2091

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

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

68 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; Modellstruktur wuerfelAspielmanager hat 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

69 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; Empfängerobjekt wuerfelAspielmanager hat Modellstruktur wuerfelAspielmanager werfen Nachricht Senderobjekt-Klasse Operation

70 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;... wuerfelAspielmanager hat Modellstruktur

71 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;... Kein direkter Zugriff auf wuerfelA möglich wuerfelAspielmanager getAugen form1 getWuerfelA wuerfelAspielmanager hat Modellstruktur Nachrichten form1 Nachrichten kennt

72 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; wuerfelAspielmanager hat Hilfsoperation TSpielmanager - wuerfelA: Wuerfel... + create + destroy + wuerfelWerfen... + getWuerfelA: integer... function TSpielmanager.getWuerfelA: integer; begin result := wuerfelA.getAugen; end;

73 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 74

75 75 Teil 6 Implementierung einer Kennt-Beziehung

76 76 Zielsetzung spielmanagerkonto 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... TKonto kennt instance of Teil-Modell

77 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

78 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; kontospielmanager kennt Modellstruktur

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

80 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; // Aufruf des Konstruktors konto := 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]

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

82 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 83 Teil 7 UML-Werkzeuge

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

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

86 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 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 88 Aufgabe Testen Sie das UML-Werkzeug UMLEd. Geben Sie eines der entwickelten Modelle ein und lassen Sie den zugehörigen Quellcode erzeugen.

89 89 Teil 8 Zusammenfassung

90 90 Objektorientierung Grundideen Grundkonzepte... ObjektKlasseNachrichtAssoziation Modellierungssprache: UML Implementierungssprache: Delphi, Java,...

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

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

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

97 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 Assoziation

98 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 99 Ein Blick auf den LF-Lehrplan

100 100 Literaturhinweise Helmut Balzert: Lehrbuch Grundlagen der Informatik. Spektrum Ak. Verlag Heide Balzert: Lehrbuch der Objektmodellierung. Spektrum Ak. Verlag Bernd Oestereich: Objektorientierte Softwareentwicklung. Oldenbourg Thomas Erler: Das Einsteigerseminar UML. Bhv Siegfried Spolwig: Objektorientierung im Informatikunterricht. Dümmler-Verlag (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 Klaus Becker 2004."

Ähnliche Präsentationen


Google-Anzeigen