Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Grundkonzepte der objektorientierten Programmierung

Ähnliche Präsentationen


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

1 Grundkonzepte der objektorientierten Programmierung
Klaus Becker 2003

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

3 Modellierung mit Objekten, Klassen und Nachrichten
Teil 1 Modellierung mit Objekten, Klassen und Nachrichten

4 Das Würfelspiel „chuck a luck“
Der Spieler zahlt den Einsatz. Einsatz: 1 $ Gewinn: Einsatz Treffer: 1 $ 2 Treffer: 2 $ 3 Treffer: 3 $ Der Spieler tippt auf eine Zahl. 1$ 1$ 1$ 1 2 3 1$ 1$ 1$ 1$ 1$ 1$ 1$ 4 5 6

5 Das Würfelspiel „chuck a luck“
Der Spieler zahlt den Einsatz. Einsatz: 1 $ Gewinn: Einsatz Treffer: 1 $ 2 Treffer: 2 $ 3 Treffer: 3 $ Der Spieler tippt auf eine Zahl. Der Spieler wirft die drei Würfel. 1$ 1$ 1$ 1 2 3 3 1$ 1$ 1$ 1$ 1$ 1$ 1$ 4 5 6

6 Das Würfelspiel „chuck a luck“
Der Spieler zahlt den Einsatz. Einsatz: 1 $ Gewinn: Einsatz Treffer: 1 $ 2 Treffer: 2 $ 3 Treffer: 3 $ Der Spieler tippt auf eine Zahl. Der Spieler wirft die drei Würfel. Der Anbieter zahlt den Gewinn. 1$ 1$ 1$ 1 2 3 3 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 4 5 6

7 Zielsetzung 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$
Entwicklung eines interaktiven Systems, das dem Benutzer das Würfelspiel „chuck a luck“ bereitstellt. 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1 2 3 3 4 5 6 Benutzer Chuck-a-Luck-System

8 Objektorientierte Modellierung
Miniwelt: 1$ 1$ 1$ 1 2 3 3 1$ 1$ 1$ 1$ 1$ 1$ 1$ 4 5 6 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 Objektorientierte Modellierung
Miniwelt: 1$ 1$ 1$ 1 2 3 3 1$ 1$ 1$ 1$ 1$ 1$ 1$ 4 5 6 wuerfelA wuerfelB wuerfelC spielbrett konto Modell(welt): Grundidee der objektorientierten Modellierung: Die Gegenstände der Miniwelt werden mit Objekten im Sinne der Informatik beschrieben.

10 Struktur eines Objektes
Miniwelt: 1$ 1$ 1$ 1 2 3 3 1$ 1$ 1$ 1$ 1$ 1$ 1$ 4 5 6 Eigenschaft: Augen Operation: werfen Eigenschaft: Zahl Operation: Tipp setzen Eigenschaft: Stand Operationen: Betrag einzahlen Betrag abheben

11 Attribute 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ Miniwelt: Modell:
2 3 3 1$ 1$ 1$ 1$ 1$ 1$ 1$ 4 5 6 Modell: wuerfelA wuerfelB wuerfelC spielbrett konto augen = 3 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.

12 Methoden 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ Miniwelt: Modell:
2 3 3 1$ 1$ 1$ 1$ 1$ 1$ 1$ 4 5 6 Modell: wuerfelA wuerfelB wuerfelC spielbrett konto augen = 3 augen = 3 augen = 5 zahl = 3 stand = 9 werfen werfen werfen tipp setzen betrag abheben betrag einzahlen Das Verhalten eines Objekts wird mit Operationen / Methoden erfasst. Diese bestimmen die dynamischen Eigenschaften eines Objekts.

13 Klassen Klassen: Objekte:
Wuerfel Spielbrett Konto augen zahl stand werfen tipp setzen betrag abheben betrag einzahlen Objekte: wuerfelA wuerfelB wuerfelC spielbrett konto augen = 3 augen = 3 augen = 5 zahl = 3 stand = 9 werfen werfen werfen tipp setzen betrag abheben betrag einzahlen Klassen beschreiben die Gesamtheit gleich strukturierter Objekte.

14 Klassen Klassen: Objekte: Klassen sind Baupläne für Objekte.
Wuerfel Spielbrett Konto augen zahl stand werfen tipp setzen betrag abheben betrag einzahlen Objekte: instance of instance of instance of wuerfelA wuerfelB wuerfelC spielbrett konto augen = 3 augen = 3 augen = 5 zahl = 3 stand = 9 Klassen sind Baupläne für Objekte. Objekte werden als Exemplare (Instanzen) von Klassen bezeichnet.

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

16 Konstruktoren / Destruktoren
Klassen: 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).

17 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. Konto Konto stand stand erzeugen vernichten betrag abheben betrag einzahlen erzeugen vernichten betrag abheben betrag einzahlen

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

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

20 Aufgabe Verfeinern Sie analog zur Konto-Klasse die weiteren Klassen der ChuckALuck-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.) + getStand: integer + setStand(betrag: integer)

21 Aktivierung von Objekten
konto Zustand vorher stand = 9 abheben(1)  „Kunde“ konto Aktivierung durch Nachricht stand = 9 konto 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).

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

23 Das Spiel als Nachrichtenaustausch
UML-Sequenzdiagramm

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

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 Lösung UML-Objektdiagramm:

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

28 Lösung UML-Sequenzdiagramm

29 Implementierung in Delphi
Teil 2 Implementierung in Delphi

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 Implementierung der Klassen
Von TObject abgeleitet 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

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 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 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 Benutzungsoberfläche
Form1: TForm1 PTitel: TPanel GBWuerfel: TGroupBox RGSpielbrett: TRadioGroup GBKonto: TGroupBox PWuerfelA: TPanel PWuerfelB: TPanel PKonto: TPanel PWuerfelC: TPanel BSpielen: TButton Die Benutzungsoberfläche wird mit Hilfe von sog. GUI-Objekten (Graphical User Interface) aufgebaut.

36 Ereignisbehandlung (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.

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 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 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 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 Implementierung von Nachrichten
abheben(1)  Form1 konto Senderobjekt-Klasse procedure TForm1.BSpielenClick(Sender: TObject); ... begin ... konto.abheben(1); ... end; Empfängerobjekt Operation

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 Teil 3 Beziehungen

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

45 Die Klasse zum Spielobjekt
... ... + durchfuehren(tipp: int.) spiel

46 Die Operation „durchfuehren“
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; Spiel ... ... + durchfuehren(tipp: int.) spiel

47 Bekanntschaft zwischen Objekten
wuerfelA spielbrett kennt kennt wuerfelB spiel konto kennt kennt wuerfelC kennt Ein Nachrichtenaustausch zwischen Objekten kann nur stattfinden, wenn das sendende Objekt das Empfängerobjekt kennt.

48 Bekanntschaft durch Referenzen
Zeiger (Adresse) 3A80 3A80 Referenzattribute

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 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; Spiel - wuerfelA: Wuerfel - wuerfelB: Wuerfel - wuerfelC: Wuerfel - konto: Konto - spielbrett: Spielbrett Konstruktor mit Parametern zur Übergabe der Referenzen + create( wA, wB, wC: Wuerfel; k: Konto; sp: Spielbrett) + durchfuehren(tipp: int.) // Aufruf des Konstruktors konto := Tkonto.create(100); ... spiel := TSpiel.create( wuerfelA, wuerfelB, wuerfelC, konto, spielbrett); Die Referenzbildung erfolgt bei der Erzeugung des Spiel-Objekts.

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

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

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 Kennt-Beziehung / Verbindung
wuerfelA spielbrett kennt kennt wuerfelB spiel konto kennt kennt wuerfelC kennt Bei diesen Beziehungen führen die beteiligten Objekte ein Eigenleben. Die in Verbindung stehenden Objekte sind zwar aufeinander angewiesen, weil sie beispielsweise miteinander kommunizieren müssen, um eine gemeinsame Aufgabe zu erledigen, aber es reicht, wenn ein Objekt das andere kennt. Man spricht von einer Kennt-Beziehung zwischen Objekten.

55 Hat-Beziehung / Komposition
wuerfelA spielbrett hat hat wuerfelB spiel konto hat hat hat wuerfelC Bei dieser Struktur geht man davon aus, dass ein Objekt ein anderes besitzt, d. h. es hat die vollständige Kontrolle über dieses Objekt. Bei einer solchen Zerlegung trägt das Ganze die Verantwortung für die Teilobjekte, die Existenz eines Teilobjekts hängt unmittelbar von der Existenz des Ganzen ab. Man spricht von einer Hat-Beziehung zwischen dem Ganzen und seinen Teilen.

56 Hat-Beziehung kennt hat

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 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 UML: Beziehungen / Assoziationen
wuerfelA spielbrett kennt kennt wuerfelB spiel konto kennt kennt wuerfelC UML- Objektdiagramm kennt UML- Klassendiagramm 1 Spielbrett 3 kennt Wuerfel Spiel kennt kennt Konto 1

60 Kardinalitäten Kardinalitätsangaben:
1 Spielbrett 3 kennt Wuerfel Spiel kennt kennt Konto 1 Kardinalitätsangaben: 3: Ein Spiel-Objekt steht in Beziehung zu 3 Wuerfel-Objekten. Kardinalität: legt die Wertigkeit einer Beziehung fest. 1 Beziehung zu genau einem Objekt Klasse * Beziehung zu beliebig vielen Objekten Klasse 0..1 Beziehung zu höchstens einem Objekt Klasse 1..* Beziehung zu mindestens einem Objekt Klasse

61 UML: Beziehungsarten Kennt-Beziehung: Verbindung
Spiel Konto kennt Hat-Beziehung: Komposition Spiel Konto hat Ist-Beziehung: Verfeinerung; Vererbung Form1 Form ist

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

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 Eine neue Modellierung
wuerfel spiel konto hat kennt 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. 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

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

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 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 Benutzungsoberfläche und Fachkonzept
GUI-Objekte ... PWuerfelB hat PWuerfelA Form1 hat wuerfel spiel konto hat kennt Fachkonzept-Objekte Trennungsprinzip: klare Trennung zwischen Benutzungsoberfläche und Fachkonzept: Die Fachkonzeptobjekte kennen die GUI-Objekte nicht.

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

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 Ü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 Ü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 Lösungsvorschlag – Aufgabe 1

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

75 Lösungsvorschlag – Aufgabe 2

76 Lösungsvorschlag – Aufgabe 2

77 Teil 4 Zusammenfassung

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

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 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 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 Grundkonzept: Objekt Attribut Attributwert Operationen
konto Attribut Attributwert stand = 9 Betrag abheben Betrag einzahlen Operationen Die Struktur eines Objekts wird durch Attribute festgelegt. Die Attributwerte bestimmen den aktuellen Zustand des Objekts. Das Verhalten eines Objekts wird durch Operationen / Methoden festgelegt. Das Objekt stellt diese Methoden selbst bereit. Ein Objekt ist insofern eine autonome Einheiten. Objekt

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

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

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

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 UML: Klassen- und Objektdiagramme
Wuerfel UML-Klassendiagramm augen werfen instance of wuerfelA wuerfelB wuerfelC UML-Objektdiagramm augen = 3 augen = 3 augen = 5

88 UML: Sequenzdiagramm UML-Sequenzdiagramm

89 Literaturhinweise Helmut Balzert: Lehrbuch Grundlagen der Informatik. Spektrum Ak. Verlag 1999. Heide Balzert: Lehrbuch der Objektmodellierung. Spektrum Ak. Verlag 1999. Bernd Oestereich: Objektorientierte Softwareentwicklung. Oldenbourg 1998. Thomas Erler: Das Einsteigerseminar UML. Bhv 2000. Siegfried Spolwig: Objektorientierung im Informatikunterricht. Dümmler-Verlag 1997. (UML-Tutorial der Uni Magdeburg) (UML-Links Bernd Oestereich) chuckaluck/index.html (ChuckALuck im Unterricht von K. Merkert)


Herunterladen ppt "Grundkonzepte der objektorientierten Programmierung"

Ähnliche Präsentationen


Google-Anzeigen