Grundkonzepte der objektorientierten Programmierung Klaus Becker 2003 Objektorientierung
Grundkonzepte der objektorientierten Programmierung Klaus Becker 2003
Objektorientierung KB . . . Modellierungssprache: UML Implementierungssprache: Delphi, Java, . . . Assoziation Grundkonzepte Nachricht Klasse Grundideen Objektorientierte Programmierung 2
Objektorientierte Programmierung 3 KB Teil 1 Modellierung mit Objekten, Klassen und Nachrichten
Objektorientierte Programmierung 4 KB Das Würfelspiel „chuck a luck“ Der Spieler zahlt den Einsatz: 1 $ Der Spieler tippt auf eine Zahl. Gewinn: Einsatz + 1 Treffer: 1 $ 2 Treffer: 2 $ 3 Treffer: 3 $ 1 2 3 1$ 4 5 6 1$ 1$ 1$
Objektorientierte Programmierung 5 KB Das Würfelspiel „chuck a luck“ Der Spieler zahlt den Einsatz: 1 $ Der Spieler tippt auf eine Zahl. Der Spieler wirft die drei Würfel. Gewinn: Einsatz + 1 Treffer: 1 $ 2 Treffer: 2 $ 3 Treffer: 3 $ 1 2 3 1$ 4 5 6 1$ 1$ 1$
Objektorientierte Programmierung 6 KB Das Würfelspiel „chuck a luck“ Der Spieler zahlt den Einsatz: 1 $ Der Spieler tippt auf eine Zahl. Der Spieler wirft die drei Würfel. Der Anbieter zahlt den Gewinn: Einsatz + 1 Treffer: 1 $ 2 Treffer: 2 $ 3 Treffer: 3 $ 1 2 3 4 5 6 1$ 1$ 1$
Zielsetzung Objektorientierte Programmierung 7 Entwicklung eines interaktiven Systems, das dem Benutzer das Würfelspiel „chuck a luck“ bereitstellt. 1$ 1$ 1$ 1 2 3 1$ 4 5 6 Benutzer Chuck-a-Luck-System KB
8 Objektorientierte Modellierung Objektorientierte Programmierung Miniwelt: KB 1 2 3 1$ 4 5 6 1$ 1$ 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, . . .
Objektorientierte Modellierung 9 Objektorientierte Programmierung Miniwelt: KB wuerfel. A wuerfel. B 1 2 3 1$ 4 5 6 wuerfel. C 1$ 1$ 1$ spielbrett konto Modell(welt): Grundidee der objektorientierten Modellierung: Die Gegenstände der Miniwelt werden mit Objekten im Sinne der Informatik beschrieben.
Struktur eines Objektes 10 Objektorientierte Programmierung Miniwelt: KB 1 2 3 1$ 4 5 6 1$ 1$ 1$ Eigenschaft: Augen Eigenschaft: Zahl Eigenschaft: Stand Operation: werfen Operation: Tipp setzen Operationen: Betrag einzahlen Betrag abheben
Attribute 11 Objektorientierte Programmierung Miniwelt: KB 1 2 3 1$ 4 5 6 1$ 1$ 1$ Modell: wuerfel. A wuerfel. B wuerfel. C spielbrett konto augen = 3 augen = 5 zahl = 3 stand = 9 Die charakteristischen Eigenschaften eines Objekts werden mit Attributen erfasst. Die Gesamtheit der Attributwerte legt den Objektzustand fest.
Methoden 12 Objektorientierte Programmierung Miniwelt: KB 1 2 3 1$ 4 5 6 1$ 1$ 1$ Modell: wuerfel. A wuerfel. B wuerfel. C spielbrett konto augen = 3 augen = 5 zahl = 3 stand = 9 werfen tipp setzen betrag abheben betrag einzahlen Das Verhalten eines Objekts wird mit Operationen / Methoden erfasst. Diese bestimmen die dynamischen Eigenschaften eines Objekts.
Klassen 13 Objektorientierte Programmierung Klassen: Wuerfel Spielbrett Konto augen zahl stand werfen tipp setzen betrag abheben betrag einzahlen Objekte: wuerfel. A wuerfel. B wuerfel. C spielbrett konto augen = 3 augen = 5 zahl = 3 stand = 9 werfen tipp setzen betrag abheben betrag einzahlen Klassen beschreiben die Gesamtheit gleich strukturierter Objekte. KB
Klassen 14 Objektorientierte Programmierung Klassen: Wuerfel Objekte: Spielbrett Konto augen zahl stand werfen tipp setzen betrag abheben betrag einzahlen instance of wuerfel. A wuerfel. B wuerfel. C spielbrett konto augen = 3 augen = 5 zahl = 3 stand = 9 Klassen sind Baupläne für Objekte werden als Exemplare (Instanzen) von Klassen bezeichnet. KB
UML Objektorientierte Programmierung 15 Wuerfel UMLKlassendiagramm augen werfen instance of wuerfel. A wuerfel. B wuerfel. C augen = 3 augen = 5 UMLObjektdiagramm UML (Unified Modeling Language): Grafische Sprache zur Beschreibung objektorientierter Modelle KB
Konstruktoren / Destruktoren 16 Objektorientierte Programmierung Klassen: KB Wuerfel Spielbrett Konto augen zahl stand erzeugen vernichten werfen erzeugen vernichten tipp setzen erzeugen vernichten betrag abheben betrag einzahlen Konstruktoren / Destruktoren sind spezielle Operationen zur Erzeugung / Vernichtung von Objekten. Beachte: Konstruktoren / Destruktoren sind Klassenmethoden (d. h. Objekte verfügen nicht über diese Methoden).
Datenkapselung Objektorientierte Programmierung 17 KB 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. Konto stand erzeugen vernichten betrag abheben betrag einzahlen
Zugriffsmethoden Objektorientierte Programmierung 18 KB 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
19 Schnittstellenspezifikation Objektorientierte Programmierung Genaue Festlegung der Benutzungsschnittstelle KB • Zugriffsrechte (- kein Zugriff; + Zugriff erlaubt) • Datentypen (und Initialisierungswerte) • Signaturen (Festlegung der Parameter) Konto stand – stand: integer erzeugen vernichten betrag abheben betrag einzahlen stand erfragen stand setzen + create(betrag: integer) + destroy + abheben(betrag: integer) + einzahlen(betrag: int. ) + get. Stand: integer + set. Stand(betrag: integer)
Aufgabe Objektorientierte Programmierung 20 KB Verfeinern Sie analog zur Konto-Klasse die weiteren Klassen der Chuck. ALuck-Miniwelt und erstellen Sie mit Hilfe. Wuerfel Spielbrett Konto augen zahl stand werfen tipp setzen betrag abheben betrag einzahlen Konto – stand: integer + create(betrag: integer) + destroy + abheben(betrag: integer) + einzahlen(betrag: int. ) + get. Stand: integer + set. Stand(betrag: integer)
Aktivierung von Objekten Objektorientierte Programmierung 21 KB konto stand = 9 „Kunde“ abheben(1) konto stand = 9 konto Zustand vorher Aktivierung durch Nachricht Zustand nachher 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).
Objektorientierte Programmierung 22 KB Das Spiel als Nachrichtenaustausch wuerfel. A wuerfel. B 3: werfen 2: setzen(tipp) 7: get. Augen 6: get. Zahl 4: werfen 8: get. Augen wuerfel. C 1: abheben(1) spielbrett konto 10: einzahlen(richtige+1) 5: werfen 9: get. Augen UMLKollaborationsdiagramm
Objektorientierte Programmierung 23 KB Das Spiel als Nachrichtenaustausch UMLSequenzdiagramm
Objektorientierte Programmierung 24 KB UML-Editoren Mit Hilfe von UML-Editoren (wie z. B. Violet) lassen sich UMLModelle leicht erstellen.
Objektorientierte Programmierung 25 KB Aufgabe Erstellen Sie mit Hilfe des UML-Editors „Violet“ ein Objekt- und ein Klassendiagramm zur Beschreibung der Chuck. ALuck-Miniwelt. Ergänzen Sie auch das bereits begonnene Interaktionsdiagramm. Hier soll der gesamte Nachrichtenaustausch zur Beschreibung des Spielablaufs dargestellt werden.
Objektorientierte Programmierung 26 KB Lösung UML-Objektdiagramm:
27 Lösung Objektorientierte Programmierung UML-Klassendiagramm (Grobfassung): KB UML-Klassendiagramm (Verfeinerung):
Objektorientierte Programmierung 28 KB Lösung UML-Sequenzdiagramm
Objektorientierte Programmierung 29 KB Teil 2 Implementierung in Delphi
Klasse als Modul Objektorientierte Programmierung 30 KB 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 u. Wuerfel; interface // Deklaration der // Attribute und Operationen implementation // Implementierung der // Operationen end. Wuerfel – augen: integer + create + destroy + werfen + get. Augen: integer
Implementierung der Klassen 31 Objektorientierte Programmierung unit u. Wuerfel; KB interface Von TObject abgeleitet type TWuerfel = class(TObject) private augen: integer; public constructor create; destructor destroy; procedure werfen; function get. Augen: integer; Wuerfel – augen: integer + create + destroy + werfen + get. Augen: integer end; . . . Deklaration der Attribute und Operationen
Implementierung der Klassen 32 Objektorientierte Programmierung unit u. Wuerfel; KB interface. . . Implementierung der Konstruktoren / Destruktoren implementation constructor TWuerfel. create; begin inherited create; augen : = 1; randomize; end; destructor TWuerfel. destroy; begin inherited destroy; end; . . . Geerbter Konstruktor wird aufgerufen
Implementierung der Klassen 33 Objektorientierte Programmierung unit u. Wuerfel; KB interface. . . implementation. . . procedure TWuerfel. werfen; begin augen : = random(6)+1; end; function TWuerfel. get. Augen: integer; begin result : = augen; end. Implementierung der Operationen
34 Aufgabe Objektorientierte Programmierung Implementieren Sie die Klassen Wuerfel, Konto und Spielzahl. KB 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. u. Konto). Übernehmen Sie die Delphi-Konvention, den Klassennamen mit einem „T“ beginnen zu lassen (z. B. „TKonto“).
Benutzungsoberfläche 35 Objektorientierte Programmierung Form 1: TForm 1 KB PTitel: TPanel GBWuerfel: TGroup. Box RGSpielbrett: TRadio. Group GBKonto: TGroup. Box PWuerfel. A: TPanel PWuerfel. B: TPanel PKonto: TPanel PWuerfel. C: TPanel BSpielen: TButton Die Benutzungsoberfläche wird mit Hilfe von sog. GUI-Objekten (Graphical User Interface) aufgebaut.
Ereignisbehandlung Objektorientierte Programmierung 36 KB (Benutzer)Aktion Programmreaktionen 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.
Einbindung der Modellklassen 37 Objektorientierte Programmierung unit Unit 1; KB interface uses Windows, Messages, Sys. Utils, Classes, Graphics, Controls, Forms, Dialogs, Std. Ctrls, Ext. Ctrls, u. Wuerfel, u. Spielbrett, u. Konto; Bekanntmachen der type Klassen TForm 1 = class(TForm). . .
Deklaration der Objekte 38 Objektorientierte Programmierung . . . KB type TForm 1 = class(TForm) PTitel: TPanel; RGSpielbrett: TRadio. Group; GBWuerfel: TGroup. Box; GBKonto: TGroup. Box; Von Delphi deklarierte PWuerfel. A: TPanel; GUI-Objekte 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, wuerfel. B, wuerfel. C: TWuerfel; spielbrett: TSpielbrett; Vom Benutzer konto: TKonto; deklarierte Modell-Objekte public { Public-Deklarationen } end;
Erzeugung der Modell-Objekte 39 Objektorientierte Programmierung unit Unit 1; interface. . . implementation {$R *. DFM} procedure TForm 1. Form. Create(Sender: TObject); begin wuerfel. A : = TWuerfel. create; wuerfel. B : = TWuerfel. create; wuerfel. C : = TWuerfel. create; Erzeugung der konto : = TKonto. create(100); Modell-Objekte spielbrett : = TSpielbrett. create; end; procedure TForm 1. BSpielen. Click(Sender: TObject); . . . end. KB
40 Implementierung des Spiels procedure TForm 1. BSpielen. Click(Sender: TObject); Objektorientierte Programmierung var tipp, zahl, richtige: integer; KB begin // Aktualisierung des Eingabewerts tipp : = RGSpielbrett. Item. Index+1; // Aktualisier. d. Modell-Objekte bzw. Durchführung d. Spiels konto. abheben(1); spielbrett. setzen(tipp); Nachrichtenaustausch zur wuerfel. A. werfen; Erzeugung des Spiels 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); . . . end;
Objektorientierte Programmierung 41 KB Implementierung von Nachrichten abheben(1) Form 1 konto Senderobjekt-Klasse procedure TForm 1. BSpielen. Click(Sender: TObject); . . . begin. . . Empfängerobjekt konto. abheben(1); . . . end; Operation
Objektorientierte Programmierung 42 KB Aufgabe Erstellen Sie eine geeignete Benutzungsoberfläche. Ergänzen Sie das Delphi-Programm zur Simulation des Chuck. ALuck-Spiels. Testen Sie anschließend das fertige Programm.
Objektorientierte Programmierung 43 KB Teil 3 Beziehungen
Objektorientierte Programmierung 44 KB Das Spiel als Objekt Das Spiel soll jetzt als eigenständiges Objekt modelliert werden.
Objektorientierte Programmierung 45 KB Die Klasse zum Spielobjekt Spiel. . . + durchfuehren(tipp: int. ) spiel
46 Die Operation „durchfuehren“ Objektorientierte Programmierung procedure TSpiel. durchfuehren(tipp: integer); KB var richtige: integer; zahl: integer; begin konto. abheben(1); spielbrett. set. Zahl(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); end; Spiel. . . + durchfuehren(tipp: int. ) spiel
Bekanntschaft zwischen Objektorientierte Programmierung 47 KB wuerfel. A kennt wuerfel. B kennt spielbrett konto kennt wuerfel. C kennt Ein Nachrichtenaustausch zwischen Objekten kann nur stattfinden, wenn das sendende Objekt das Empfängerobjekt kennt.
48 Bekanntschaft durch Referenzen Objektorientierte Programmierung Zeiger (Adresse) KB 3 A 80 Referenzattribute
49 Bekanntschaft durch Referenzen Objektorientierte Programmierung Spiel KB - wuerfel. A: Wuerfel - wuerfel. B: Wuerfel - wuerfel. C: Wuerfel - konto: Konto - spielbrett: Spielbrett. . . + durchfuehren(tipp: int. ) Referenzattribute Mit Referenzattributen kann ein Objekt die Adressen seiner „Bekanntschaften“ speichern.
50 Erzeugung von Referenzen Objektorientierte Programmierung // Deklaration des Konstruktors KB constructor TSpiel. create( w. A, w. B, w. C: TWuerfel; k: TKonto; sp: TSpielbrett); begin konto : = k; wuerfel. A : = w. A; Konstruktor mit wuerfel. B : = w. B; Parametern zur wuerfel. C : = w. C; Übergabe der spielbrett : = sp; end; Referenzen Spiel - wuerfel. A: Wuerfel - wuerfel. B: Wuerfel - wuerfel. C: Wuerfel - konto: Konto - spielbrett: Spielbrett + create( w. A, w. B, w. C: Wuerfel; k: Konto; sp: Spielbrett) + durchfuehren(tipp: int. ) // Aufruf des Konstruktors konto : = Tkonto. create(100); . . . spiel : = TSpiel. create( wuerfel. A, wuerfel. B, wuerfel. C, konto, spielbrett); Die Referenzbildung erfolgt bei der Erzeugung des Spiel-Objekts.
Objektorientierte Programmierung 51 KB Erzeugung von Referenzen konto : = Tkonto. create(100); 3 A 80
52 Erzeugung von Referenzen Objektorientierte Programmierung 3 A 80 KB 3 A 80 spiel : = TSpiel. create(. . . , konto, . . . ); constructor TSpiel. create(. . . ; k: TKonto; . . . ); begin. . . konto : = k; . . . end; 3 A 80
Objektorientierte Programmierung 53 KB Aufgabe Fertigen Sie sich zunächst eine Kopie des ersten Chuck. ALuck. 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.
Kennt-Beziehung / Verbindung 54 Objektorientierte Programmierung wuerfel. A KB kennt wuerfel. B 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 55 Objektorientierte Programmierung wuerfel. A KB spielbrett hat wuerfel. B hat spiel 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.
Objektorientierte Programmierung 56 KB Hat-Beziehung kennt hat
57 Hat-Beziehung Objektorientierte Programmierung // Deklaration des Konstruktors KB constructor TSpiel. create; begin inherited create; konto : = TKonto. create(100); wuerfel. A : = TWuerfel. create; wuerfel. B : = TWuerfel. create; wuerfel. C : = TWuerfel. create; spielbrett : = TSpielbrett. create; end; // Deklaration des Destruktors destructor TSpiel. destroy; begin konto. free; wuerfel. A. free; wuerfel. B. free; wuerfel. C. free; spielbrett. free; inherited destroy; end; Spiel - wuerfel. A: Wuerfel - wuerfel. B: Wuerfel - wuerfel. C: Wuerfel - konto: Konto - spielbrett: Spielbrett + create + destroy + durchfuehren(tipp: int. ) + get. Wuerfel. AAugen: int. . + get. Konto. Stand: integer
Objektorientierte Programmierung 58 KB Aufgabe Fertigen Sie sich zunächst eine Kopie des ersten Chuck. ALuck. Programms an (neuer Ordner, . . . ). Ändern Sie das Programm so ab, dass das Spiel die volle Kontrolle über die weiteren Objekte hat.
59 UML: Beziehungen / Assoziationen Objektorientierte Programmierung wuerfel. A kennt wuerfel. B kennt spiel kennt konto kennt UMLObjektdiagramm wuerfel. C kennt UMLKlassendiagramm 1 Wuerfel 3 kennt KB spielbrett Spielbrett kennt 1 Konto
Kardinalitäten 60 Objektorientierte Programmierung 1 KB 3 Wuerfel kennt Spielbrett kennt 1 Kardinalitätsangaben: Konto 3: Ein Spiel-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
61 UML: Beziehungsarten Objektorientierte Programmierung Kennt-Beziehung: Verbindung Spiel Konto kennt Hat-Beziehung: Komposition Spiel Konto hat Ist-Beziehung: Verfeinerung; Vererbung Form 1 Form ist KB
Exkurs: Ist-Beziehung 62 Objektorientierte Programmierung TForm KB . . . type TForm 1 = class(TForm) ist ein . . end; TForm 1 – wuerfel. A: Wuerfel. . . Vererbung
Objektorientierte Programmierung 63 KB Exkurs: Erzeugung von Quellcode Erstellen Sie mit Hilfe von UMLed ein Klassendiagramm zum Chuck. ALuck-Spiel. Erzeugen Sie anschließend mit Hilfe von UMLed den zugehörigen Delphi-Code.
Eine neue Modellierung Objektorientierte Programmierung 64 KB wuerfel spiel hat Bei dieser Modellierung des Chuck. ALuck. 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 (wuerfel. A, wuerfel. B, wuerfel. C: integer) erfasst. Des weiteren wird kein Spielbrett-Objekt benutzt. Die relevanten Informationen werden mit einem geeigneten Spiel-Attribut (spielzahl: integer) erfasst. konto kennt Spiel - wuerfel. A: integer - wuerfel. B: integer - wuerfel. C: integer - spielzahl: integer - konto: Konto - wuerfel: Wuerfel + create(k: Konto) + destroy + durchfuehren(tipp: int. ) + get. Wuerfel. A: integer + get. Wuerfel. B: integer + get. Wuerfel. C: integer
Objektorientierte Programmierung 65 KB Aufgabe Implementieren Sie das neue Modell. Bedenken Sie, an welcher Stelle im Programm das Würfel-Objekt erzeugt werden soll.
Lösung 66 Objektorientierte Programmierung unit u. Spiel; interface uses u. Wuerfel, u. Konto; type TSpiel = class private spielzahl: integer; wuerfel. A, wuerfel. B, wuerfel. C: integer; konto: TKonto; wuerfel: TWuerfel; public constructor create(k: TKonto); destructor destroy; procedure durchfuehren(tipp: integer); function get. Wuerfel. A: integer; function get. Wuerfel. B: integer; function get. Wuerfel. C: integer; end; implementation KB . . .
Lösung 67 Objektorientierte Programmierung unit u. Spiel; 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; . . . KB end.
68 Benutzungsoberfläche und Fachkonzept Objektorientierte Programmierung GUI-Objekte KB PWuerfel. B . . . hat PWuerfel. A Form 1 hat wuerfel spiel hat konto kennt Fachkonzept-Objekte Trennungsprinzip: klare Trennung zwischen Benutzungsoberfläche und Fachkonzept: Die Fachkonzeptobjekte kennen die GUI-Objekte nicht.
Übungen – Aufgabe 1 Objektorientierte Programmierung 69 Folgendes Zufallsexperiment soll simuliert werden: Man würfelt so lange, bis eine 6 fällt. KB
Objektorientierte Programmierung 70 KB Ü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.
Objektorientierte Programmierung 71 KB Übungen – Aufgabe 2 Das Chuck. ALuck-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 Übungen – Aufgabe 2 Objektorientierte Programmierung Erstellen Sie zunächst ein objektorientiertes Modell. KB Ü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 Chuck. ALuck 5 – Aufgabe)
Objektorientierte Programmierung 73 KB Lösungsvorschlag – Aufgabe 1
Lösungsvorschlag – Aufgabe 2 74 Objektorientierte Programmierung Statistik - anzahl. Der. Spiele: integer - anfangskontostand: integer - gewinn. Pro. Spiel: integer - konto: Konto + create(k: Konto) + spiele. Beruecksichtigen( spielanzahl: integer) + get. Anzahl. Der. Spiele: integer + get. Gewinn. Pro. Spiel: real UMLObjektdiagramm statistik kennt wuerfel spiel hat KB UMLKlassendiagramm konto kennt
Objektorientierte Programmierung 75 KB Lösungsvorschlag – Aufgabe 2
Objektorientierte Programmierung 76 KB Lösungsvorschlag – Aufgabe 2
Objektorientierte Programmierung 77 KB Teil 4 Zusammenfassung
Objektorientierung KB . . . Modellierungssprache: UML Implementierungssprache: Delphi, Java, . . . Assoziation Grundkonzepte Nachricht Klasse Grundideen Objektorientierte Programmierung 78
Objektorientierte Programmierung 79 KB 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 Systemaktivitäten erzeugen.
Objektorientierte Programmierung 80 KB 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.
Objektorientierte Programmierung 81 KB 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.
Grundkonzept: Objekt KB konto Objektorientierte Programmierung 82 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 KB Konto Klasse stand Betrag abheben Betrag einzahlen Klasse Objektorientierte Programmierung 83 instance of Objekt konto stand = 9 Klassen sind Baupläne für Objekte werden als Exemplare / Instanzen von Klassen bezeichnet.
Grundkonzept: Nachricht KB Sender Nachricht Objektorientierte Programmierung 84 spiel 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 KB Assoziation Objektorientierte Programmierung 85 Konto 1 Spielbrett 1 Wuerfel Spiel Assoziation 3 Eine Assoziation ist eine Beziehung zwischen verschiedenen Objekten einer oder mehrerer Klassen. Eine Assoziation ist i. a. Grundvoraussetzung für den Nachrichtenaustausch.
Objektorientierte Programmierung 86 KB 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)
Objektorientierte Programmierung 87 KB UML: Klassen- und Objektdiagramme Wuerfel UMLKlassendiagramm augen werfen instance of wuerfel. A wuerfel. B wuerfel. C augen = 3 augen = 5 UMLObjektdiagramm
Objektorientierte Programmierung 88 KB UML: Sequenzdiagramm UMLSequenzdiagramm
Objektorientierte Programmierung 89 KB 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 (UMLTutorial 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)
- Slides: 89