Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Grundkonzepte der objektorientierten Programmierung Klaus Becker 2003.

Ähnliche Präsentationen


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

1 Grundkonzepte der objektorientierten Programmierung Klaus Becker 2003

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

3 KB Objektorientierte Programmierung 3 Teil 1 Modellierung mit Objekten, Klassen und Nachrichten

4 KB Objektorientierte Programmierung 4 3 Das Würfelspiel chuck a luck 1$ Der Spieler zahlt den Einsatz. Der Spieler tippt auf eine Zahl. Einsatz: 1 $ Gewinn: Einsatz + 1 Treffer: 1 $ 2 Treffer: 2 $ 3 Treffer: 3 $

5 KB Objektorientierte Programmierung 5 Das Würfelspiel chuck a luck 1$ Der Spieler zahlt den Einsatz. Der Spieler tippt auf eine Zahl. Der Spieler wirft die drei Würfel. 3 1$ Einsatz: 1 $ Gewinn: Einsatz + 1 Treffer: 1 $ 2 Treffer: 2 $ 3 Treffer: 3 $

6 KB Objektorientierte Programmierung 6 Das Würfelspiel chuck a luck 1$ Der Spieler zahlt den Einsatz. Der Spieler tippt auf eine Zahl. Der Spieler wirft die drei Würfel. Der Anbieter zahlt den Gewinn. 3 1$ Einsatz: 1 $ Gewinn: Einsatz + 1 Treffer: 1 $ 2 Treffer: 2 $ 3 Treffer: 3 $

7 KB Objektorientierte Programmierung 7 Zielsetzung Entwicklung eines interaktiven Systems, das dem Benutzer das Würfelspiel chuck a luck bereitstellt. 1$ Benutzer Chuck-a-Luck-System $

8 KB Objektorientierte Programmierung 8 Objektorientierte Modellierung Miniwelt: 1$ Sichtweise: Die Miniwelt ist aus Gegenständen aufgebaut, die in Beziehung zueinander stehen können. Gegenstände können Personen, Dinge, Sachverhalte, Ereignisse,... sein. Jeder Gegenstand stellt eine autonome Einheit mit klar begrenzten Aufgaben dar. Gegenstände der Miniwelt chuck a luck: 3 Würfel, Spielbrett, Spielerkonto,...

9 KB Objektorientierte Programmierung 9 Objektorientierte Modellierung Miniwelt: 1$ Grundidee der objektorientierten Modellierung: Die Gegenstände der Miniwelt werden mit Objekten im Sinne der Informatik beschrieben. wuerfelAwuerfelBwuerfelC Modell(welt): spielbrettkonto

10 KB Objektorientierte Programmierung 10 Struktur eines Objektes Miniwelt: 1$ Eigenschaft: Augen Operation: werfen Eigenschaft: Zahl Operation: Tipp setzen Eigenschaft: Stand Operationen: Betrag einzahlen Betrag abheben

11 KB Objektorientierte Programmierung 11 Attribute Miniwelt: 1$ wuerfelAwuerfelBwuerfelC Modell: spielbrettkonto Die charakteristischen Eigenschaften eines Objekts werden mit Attributen erfasst. Die Gesamtheit der Attributwerte legt den Objektzustand fest. augen = 3 augen = 5zahl = 3stand = 9

12 KB Objektorientierte Programmierung 12 Methoden Miniwelt: 1$ wuerfelAwuerfelBwuerfelC Modell: spielbrettkonto Das Verhalten eines Objekts wird mit Operationen / Methoden erfasst. Diese bestimmen die dynamischen Eigenschaften eines Objekts. augen = 3 augen = 5zahl = 3stand = 9 werfen tipp setzenbetrag abheben betrag einzahlen

13 KB Objektorientierte Programmierung 13 Klassen wuerfelAwuerfelBwuerfelCspielbrettkonto augen = 3 augen = 5zahl = 3stand = 9 werfen tipp setzenbetrag abheben betrag einzahlen WuerfelSpielbrettKonto augenzahlstand werfentipp setzenbetrag abheben betrag einzahlen Objekte: Klassen: Klassen beschreiben die Gesamtheit gleich strukturierter Objekte.

14 KB Objektorientierte Programmierung 14 Klassen Klassen sind Baupläne für Objekte. Objekte werden als Exemplare (Instanzen) von Klassen bezeichnet. wuerfelAwuerfelBwuerfelCspielbrettkonto augen = 3 augen = 5zahl = 3stand = 9 WuerfelSpielbrettKonto augenzahlstand werfentipp setzenbetrag abheben betrag einzahlen Objekte: Klassen: instance of

15 KB Objektorientierte Programmierung 15 UML wuerfelAwuerfelBwuerfelC augen = 3 augen = 5 Wuerfel augen werfen instance of UML- Klassendiagramm UML- Objektdiagramm UML (Unified Modeling Language): Grafische Sprache zur Beschreibung objektorientierter Modelle

16 KB Objektorientierte Programmierung 16 Konstruktoren / Destruktoren Konstruktoren / Destruktoren sind spezielle Operationen zur Erzeugung / Vernichtung von Objekten. Beachte: Konstruktoren / Destruktoren sind Klassenmethoden (d. h. Objekte verfügen nicht über diese Methoden). WuerfelSpielbrettKonto augenzahlstand erzeugen vernichten werfen erzeugen vernichten tipp setzen erzeugen vernichten betrag abheben betrag einzahlen Klassen:

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

18 KB Objektorientierte Programmierung 18 Zugriffsmethoden Um auf Attributwerte (lesend bzw. schreibend) zugreifen zu können, werden spezielle Zugriffsmethoden benötigt. Konto stand erzeugen vernichten betrag abheben betrag einzahlen stand erfragen stand setzen Konto stand erzeugen vernichten betrag abheben betrag einzahlen Konto stand erzeugen vernichten betrag abheben betrag einzahlen

19 KB Objektorientierte Programmierung 19 Schnittstellenspezifikation Genaue Festlegung der Benutzungsschnittstelle Zugriffsrechte (- kein Zugriff; + Zugriff erlaubt) Datentypen (und Initialisierungswerte) Signaturen (Festlegung der Parameter) Konto stand erzeugen vernichten betrag abheben betrag einzahlen stand erfragen stand setzen Konto – stand: integer + create(betrag: integer) + destroy + abheben(betrag: integer) + einzahlen(betrag: int.) + getStand: integer + setStand(betrag: integer)

20 KB Objektorientierte Programmierung 20 Aufgabe Verfeinern Sie analog zur Konto-Klasse die weiteren Klassen der ChuckALuck-Miniwelt und erstellen Sie mit Hilfe. Konto – stand: integer + create(betrag: integer) + destroy + abheben(betrag: integer) + einzahlen(betrag: int.) + getStand: integer + setStand(betrag: integer) WuerfelSpielbrettKonto augenzahlstand werfentipp setzenbetrag abheben betrag einzahlen

21 KB Objektorientierte Programmierung 21 Aktivierung von Objekten Zustand vorher Zustand nachher abheben(1) Aktivierung durch Nachricht Kunde konto stand = 9 konto stand = 9 konto stand = 8 Sichtweise: Das Objekt stellt seiner Umgebung bestimmte Dienste (Operationen) zur Verfügung. Durch eine Nachricht veranlasst ein Kunde das Objekt, die Dienstleistung zu erledigen (Operation auszuführen).

22 KB Objektorientierte Programmierung 22 Das Spiel als Nachrichtenaustausch UML- Kollaborationsdiagramm wuerfelA wuerfelB wuerfelC konto 4: werfen1: abheben(1) 3: werfen 5: werfen spielbrett 2: setzen(tipp) 8: getAugen 10: einzahlen(richtige+1) 7: getAugen 9: getAugen 6: getZahl

23 KB Objektorientierte Programmierung 23 Das Spiel als Nachrichtenaustausch UML- Sequenzdiagramm

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

25 KB Objektorientierte Programmierung 25 Aufgabe Erstellen Sie mit Hilfe des UML-Editors Violet ein Objekt- und ein Klassendiagramm zur Beschreibung der ChuckALuck-Miniwelt. Ergänzen Sie auch das bereits begonnene Interaktionsdiagramm. Hier soll der gesamte Nachrichtenaustausch zur Beschreibung des Spielablaufs dargestellt werden.

26 KB Objektorientierte Programmierung 26 Lösung UML-Objektdiagramm:

27 KB Objektorientierte Programmierung 27 Lösung UML-Klassendiagramm (Grobfassung): UML-Klassendiagramm (Verfeinerung):

28 KB Objektorientierte Programmierung 28 Lösung UML-Sequenzdiagramm

29 KB Objektorientierte Programmierung 29 Teil 2 Implementierung in Delphi

30 KB Objektorientierte Programmierung 30 Klasse als Modul Klassen werden als Module (Programmeinheit) implementiert, die in Delphi in zwei Teilen beschrieben werden: Öffentlicher Teil bestehend aus den Vereinbarungen, die zur Benutzung des Moduls notwendig sind (Schnittstelle). Privater Teil bestehend aus den Implementierungsdetails, die für die Benutzung nicht benötigt werden. unit uWuerfel; interface // Deklaration der // Attribute und Operationen implementation // Implementierung der // Operationen end. Wuerfel – augen: integer + create + destroy + werfen + getAugen: integer

31 KB Objektorientierte Programmierung 31 Implementierung der Klassen unit uWuerfel; interface type TWuerfel = class(TObject) private augen: integer; public constructor create; destructor destroy; procedure werfen; function getAugen: integer; end;... Wuerfel – augen: integer + create + destroy + werfen + getAugen: integer Deklaration der Attribute und Operationen Von TObject abgeleitet

32 KB Objektorientierte Programmierung 32 Implementierung der Klassen unit uWuerfel; interface... implementation constructor TWuerfel.create; begin inherited create; augen := 1; randomize; end; destructor TWuerfel.destroy; begin inherited destroy; end;... Implementierung der Konstruktoren / Destruktoren Geerbter Konstruktor wird aufgerufen

33 KB Objektorientierte Programmierung 33 Implementierung der 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

34 KB Objektorientierte Programmierung 34 Aufgabe Implementieren Sie die Klassen Wuerfel, Konto und Spielzahl. Erstellen Sie zunächst ein neues Projekt in einem hierfür vorgesehenen neuen Ordner. Erstellen Sie für jede Klassen-Unit eine eigene Datei (Datei – Neu – Unit) und geben Sie dieser Datei einen passenden Namen (z. B. uKonto). Übernehmen Sie die Delphi-Konvention, den Klassennamen mit einem T beginnen zu lassen (z. B. TKonto).

35 KB Objektorientierte Programmierung 35 Benutzungsoberfläche PTitel: TPanel RGSpielbrett: TRadioGroup GBWuerfel: TGroupBox GBKonto: TGroupBox PWuerfelC: TPanel PKonto: TPanel BSpielen: TButton PWuerfelA: TPanel PWuerfelB: TPanel Form1: TForm1 Die Benutzungsoberfläche wird mit Hilfe von sog. GUI-Objekten (Graphical User Interface) aufgebaut.

36 KB Objektorientierte Programmierung 36 Ereignisbehandlung (Benutzer)AktionProgrammreaktionen Erzeugung des Formulars Erzeugung der Modellobjekte. Mausklick auf den Spiel durchführen- Button Der vom Benutzer eingestellte Tipp am Spielbrett wird übernommen. Das Spiel wird mit diesem Tipp durchgeführt. Die Ergebnisse des Spiels (Würfelergebnisse, neuer Kontostand) werden angezeigt.

37 KB Objektorientierte Programmierung 37 Einbindung der Modellklassen unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, uWuerfel, uSpielbrett, uKonto; type TForm1 = class(TForm)... Bekanntmachen der Klassen

38 KB Objektorientierte Programmierung 38 Deklaration der Objekte... type TForm1 = class(TForm) PTitel: TPanel; RGSpielbrett: TRadioGroup; GBWuerfel: TGroupBox; GBKonto: TGroupBox; PWuerfelA: TPanel; PWuerfelB: TPanel; PWuerfelC: TPanel; PKonto: TPanel; BSpielen: TButton; procedure FormCreate(Sender: TObject); procedure BSpielenClick(Sender: TObject); private { Private-Deklarationen } wuerfelA, wuerfelB, wuerfelC: TWuerfel; spielbrett: TSpielbrett; konto: TKonto; public { Public-Deklarationen } end; Von Delphi deklarierte GUI-Objekte Vom Benutzer deklarierte Modell-Objekte

39 KB Objektorientierte Programmierung 39 Erzeugung der Modell-Objekte unit Unit1; interface... implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin wuerfelA := TWuerfel.create; wuerfelB := TWuerfel.create; wuerfelC := TWuerfel.create; konto := TKonto.create(100); spielbrett := TSpielbrett.create; end; procedure TForm1.BSpielenClick(Sender: TObject);... end. Erzeugung der Modell-Objekte

40 KB Objektorientierte Programmierung 40 Implementierung des Spiels procedure TForm1.BSpielenClick(Sender: TObject); var tipp, zahl, richtige: integer; begin // Aktualisierung des Eingabewerts tipp := RGSpielbrett.ItemIndex+1; // Aktualisier. d. Modell-Objekte bzw. Durchführung d. Spiels 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);... end; Nachrichtenaustausch zur Erzeugung des Spiels

41 KB Objektorientierte Programmierung 41 Implementierung von Nachrichten procedure TForm1.BSpielenClick(Sender: TObject);... begin... konto.abheben(1);... end; abheben(1) kontoForm1 Empfängerobjekt Senderobjekt-Klasse Operation

42 KB Objektorientierte Programmierung 42 Aufgabe Erstellen Sie eine geeignete Benutzungsoberfläche. Ergänzen Sie das Delphi-Programm zur Simulation des ChuckALuck-Spiels. Testen Sie anschließend das fertige Programm.

43 KB Objektorientierte Programmierung 43 Teil 3 Beziehungen

44 KB Objektorientierte Programmierung 44 Das Spiel als Objekt Das Spiel soll jetzt als eigenständiges Objekt modelliert werden.

45 KB Objektorientierte Programmierung 45 Die Klasse zum Spielobjekt Spiel... + durchfuehren(tipp: int.) spiel

46 KB Objektorientierte Programmierung 46 Die Operation durchfuehren Spiel... + durchfuehren(tipp: int.) spiel procedure TSpiel.durchfuehren(tipp: integer); var richtige: integer; zahl: integer; begin konto.abheben(1); spielbrett.setZahl(tipp); wuerfelA.werfen; wuerfelB.werfen; wuerfelC.werfen; richtige := 0; zahl := spielbrett.getZahl; if zahl = wuerfelA.getAugen then inc(richtige); if zahl = wuerfelB.getAugen then inc(richtige); if zahl = wuerfelC.getAugen then inc(richtige); if richtige > 0 then konto.einzahlen(richtige+1); end;

47 KB Objektorientierte Programmierung 47 Bekanntschaft zwischen Objekten Ein Nachrichtenaustausch zwischen Objekten kann nur stattfinden, wenn das sendende Objekt das Empfängerobjekt kennt. wuerfelA wuerfelB wuerfelC kontospiel kennt spielbrett kennt

48 KB Objektorientierte Programmierung 48 Bekanntschaft durch Referenzen Referenzattribute Zeiger (Adresse) 3A80

49 KB Objektorientierte Programmierung 49 Bekanntschaft durch Referenzen Spiel - wuerfelA: Wuerfel - wuerfelB: Wuerfel - wuerfelC: Wuerfel - konto: Konto - spielbrett: Spielbrett... + durchfuehren(tipp: int.) Referenzattribute Mit Referenzattributen kann ein Objekt die Adressen seiner Bekanntschaften speichern.

50 KB Objektorientierte Programmierung 50 Erzeugung von Referenzen // Deklaration des Konstruktors constructor TSpiel.create( wA, wB, wC: TWuerfel; k: TKonto; sp: TSpielbrett); begin konto := k; wuerfelA := wA; wuerfelB := wB; wuerfelC := wC; spielbrett := sp; end; // Aufruf des Konstruktors konto := Tkonto.create(100);... spiel := TSpiel.create( wuerfelA, wuerfelB, wuerfelC, konto, spielbrett); Die Referenzbildung erfolgt bei der Erzeugung des Spiel-Objekts. Spiel - wuerfelA: Wuerfel - wuerfelB: Wuerfel - wuerfelC: Wuerfel - konto: Konto - spielbrett: Spielbrett + create( wA, wB, wC: Wuerfel; k: Konto; sp: Spielbrett) + durchfuehren(tipp: int.) Konstruktor mit Parametern zur Übergabe der Referenzen

51 KB Objektorientierte Programmierung 51 Erzeugung von Referenzen konto := Tkonto.create(100); 3A80

52 KB Objektorientierte Programmierung 52 Erzeugung von Referenzen spiel := TSpiel.create(..., konto,...); 3A80 constructor TSpiel.create(...; k: TKonto;...); begin... konto := k;... end; 3A80

53 KB Objektorientierte Programmierung 53 Aufgabe Fertigen Sie sich zunächst eine Kopie des ersten ChuckALuck- Programms an (neuer Ordner,...). Ändern Sie das Programm so ab, dass auch das Spiel mit einem Objekt beschrieben wird. Implementieren Sie hierzu die Klasse TSpiel (neue Unit,...). Ändern Sie anschließend die Form-Unit passend ab.

54 KB Objektorientierte Programmierung 54 Kennt-Beziehung / Verbindung wuerfelA wuerfelB wuerfelC kontospiel 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.

55 KB Objektorientierte Programmierung 55 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 kontospiel hat spielbrett hat

56 KB Objektorientierte Programmierung 56 Hat-Beziehung kennt hat

57 KB Objektorientierte Programmierung 57 Hat-Beziehung // Deklaration des Konstruktors constructor TSpiel.create; begin inherited create; konto := TKonto.create(100); wuerfelA := TWuerfel.create; wuerfelB := TWuerfel.create; wuerfelC := TWuerfel.create; spielbrett := TSpielbrett.create; end; Spiel - wuerfelA: Wuerfel - wuerfelB: Wuerfel - wuerfelC: Wuerfel - konto: Konto - spielbrett: Spielbrett + create + destroy + durchfuehren(tipp: int.) + getWuerfelAAugen: int getKontoStand: integer // Deklaration des Destruktors destructor TSpiel.destroy; begin konto.free; wuerfelA.free; wuerfelB.free; wuerfelC.free; spielbrett.free; inherited destroy; end;

58 KB Objektorientierte Programmierung 58 Aufgabe Fertigen Sie sich zunächst eine Kopie des ersten ChuckALuck- Programms an (neuer Ordner,...). Ändern Sie das Programm so ab, dass das Spiel die volle Kontrolle über die weiteren Objekte hat.

59 KB Objektorientierte Programmierung 59 UML: Beziehungen / Assoziationen UML- Klassendiagramm wuerfelA wuerfelB wuerfelC kontospiel kennt spielbrett kennt Wuerfel Konto Spiel kennt Spielbrett kennt UML- Objektdiagramm

60 KB Objektorientierte Programmierung 60 Kardinalitäten Wuerfel Konto Spiel kennt Spielbrett kennt : Ein Spiel-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..*

61 KB Objektorientierte Programmierung 61 UML: Beziehungsarten KontoSpiel kennt hat SpielKonto FormForm1 ist Kennt-Beziehung: Verbindung Hat-Beziehung: Komposition Ist-Beziehung: Verfeinerung; Vererbung

62 KB Objektorientierte Programmierung 62 Exkurs: Ist-Beziehung TForm... TForm1 – wuerfelA: Wuerfel... ist ein Vererbung type TForm1 = class(TForm).. end;

63 KB Objektorientierte Programmierung 63 Exkurs: Erzeugung von Quellcode Erstellen Sie mit Hilfe von UMLed ein Klassendiagramm zum ChuckALuck-Spiel. Erzeugen Sie anschließend mit Hilfe von UMLed den zugehörigen Delphi-Code.

64 KB Objektorientierte Programmierung 64 Eine neue Modellierung wuerfelkontospiel hatkennt Spiel - wuerfelA: integer - wuerfelB: integer - wuerfelC: integer - spielzahl: integer - konto: Konto - wuerfel: Wuerfel + create(k: Konto) + destroy + durchfuehren(tipp: int.) + getWuerfelA: integer + getWuerfelB: integer + getWuerfelC: integer Bei dieser Modellierung des ChuckALuck- Spiels soll nur ein Würfel-Objekt benutzt werden. Dieses Würfel-Objekt soll dreimal zum Würfelwerfen aktiviert werden. Die Würfelergebnisse werden mit geeigneten Spiel-Attributen (wuerfelA, wuerfelB, wuerfelC: integer) erfasst. Des weiteren wird kein Spielbrett-Objekt benutzt. Die relevanten Informationen werden mit einem geeigneten Spiel-Attribut (spielzahl: integer) erfasst.

65 KB Objektorientierte Programmierung 65 Aufgabe Implementieren Sie das neue Modell. Bedenken Sie, an welcher Stelle im Programm das Würfel-Objekt erzeugt werden soll.

66 KB Objektorientierte Programmierung 66 Lösung unit uSpiel; interface uses uWuerfel, uKonto; type TSpiel = class private spielzahl: integer; wuerfelA, wuerfelB, wuerfelC: integer; konto: TKonto; wuerfel: TWuerfel; public constructor create(k: TKonto); destructor destroy; procedure durchfuehren(tipp: integer); function getWuerfelA: integer; function getWuerfelB: integer; function getWuerfelC: integer; end; implementation...

67 KB Objektorientierte Programmierung 67 Lösung unit uSpiel; interface... implementation constructor TSpiel.create(k: TKonto); begin inherited create; spielzahl := 1; wuerfel := TWuerfel.create; konto := k; end; destructor Tspiel.destroy; begin wuerfel.free; inherited destroy; end;... end.

68 KB Objektorientierte Programmierung 68 Benutzungsoberfläche und Fachkonzept wuerfelkontospiel hatkennt PWuerfelAForm1 hat PWuerfelB hat... GUI-Objekte Fachkonzept-Objekte Trennungsprinzip: klare Trennung zwischen Benutzungsoberfläche und Fachkonzept: Die Fachkonzeptobjekte kennen die GUI-Objekte nicht.

69 KB Objektorientierte Programmierung 69 Übungen – Aufgabe 1 Folgendes Zufallsexperiment soll simuliert werden: Man würfelt so lange, bis eine 6 fällt.

70 KB Objektorientierte Programmierung 70 Übungen – Aufgabe 1 Erstellen Sie in einem ersten Schritt ein objektorientiertes Modell und dokumentieren sie es mit UML-Diagrammen. Überlegen Sie sich hierzu, welche Objekte im Modell zur Miniwelt vorkommen und in welchen Beziehungen sie zueinander stehen sollen. Lassen Sie zunächst die statistische Auswertung außer Betracht. Entwerfen Sie anschließend die Details (Attribute und Methoden) und erstellen Sie ein Klassendiagramm. Stellen Sie Ihre Modelle mit Hilfe von Violet dar. Implementieren Sie in einem zweiten Schritt das erstellte Modell. In einem dritten Schritt können Sie dann das entwickelte System um eine statistische Auswertung erweitern.

71 KB Objektorientierte Programmierung 71 Übungen – Aufgabe 2 Das ChuckALuck-Spiel soll vom System wiederholt gespielt werden. Die jeweilige Spielzahl soll dabei mit dem Zufallsgenerator erzeugt werden. Über die Ergebnisse soll eine Statistik geführt werden.

72 KB Objektorientierte Programmierung 72 Übungen – Aufgabe 2 Erstellen Sie zunächst ein objektorientiertes Modell. Überlegen Sie sich zunächst, welche Objekte in dem neuen Modell vorkommen und in welchen Beziehungen sie zueinander stehen. Entwerfen Sie anschließend die Details (Attribute und Methoden) und erstellen Sie ein Klassendiagramm. Stellen Sie Ihr Modell mit Hilfe von Violet dar. Implementieren Sie abschließend das Modell. Sie können die vorgegebene Benutzungsoberfläche benutzen. (siehe ChuckALuck5 – Aufgabe)

73 KB Objektorientierte Programmierung 73 Lösungsvorschlag – Aufgabe 1

74 KB Objektorientierte Programmierung 74 Lösungsvorschlag – Aufgabe 2 wuerfelkontospiel kennt statistik kennt Statistik - anzahlDerSpiele: integer - anfangskontostand: integer - gewinnProSpiel: integer - konto: Konto + create(k: Konto) + spieleBeruecksichtigen( spielanzahl: integer) + getAnzahlDerSpiele: integer + getGewinnProSpiel: real UML- Klassendiagramm UML- Objektdiagramm hat

75 KB Objektorientierte Programmierung 75 Lösungsvorschlag – Aufgabe 2

76 KB Objektorientierte Programmierung 76 Lösungsvorschlag – Aufgabe 2

77 KB Objektorientierte Programmierung 77 Teil 4 Zusammenfassung

78 KB Objektorientierte Programmierung 78 Objektorientierung Grundideen Grundkonzepte... ObjektKlasseNachrichtAssoziation Modellierungssprache: UML Implementierungssprache: Delphi, Java,...

79 KB Objektorientierte Programmierung 79 Grundidee: 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.

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

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

82 KB Objektorientierte Programmierung 82 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

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

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

85 KB Objektorientierte Programmierung 85 Grundkonzept: Assoziation Assoziation Eine Assoziation ist eine Beziehung zwischen verschiedenen Objekten einer oder mehrerer Klassen. Eine Assoziation ist i.a. Grundvoraussetzung für den Nachrichtenaustausch. Wuerfel Spielbrett Konto Spiel Assoziation

86 KB Objektorientierte Programmierung 86 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)

87 KB Objektorientierte Programmierung 87 UML: Klassen- und Objektdiagramme wuerfelAwuerfelBwuerfelC augen = 3 augen = 5 Wuerfel augen werfen instance of UML- Klassendiagramm UML- Objektdiagramm

88 KB Objektorientierte Programmierung 88 UML: Sequenzdiagramm UML- Sequenzdiagramm

89 KB Objektorientierte Programmierung 89 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)


Herunterladen ppt "Grundkonzepte der objektorientierten Programmierung Klaus Becker 2003."

Ähnliche Präsentationen


Google-Anzeigen