Grundkonzepte der objektorientierten Programmierung

Slides:



Advertisements
Ähnliche Präsentationen
Anzahl der ausgefüllten und eingesandten Fragebögen: 211
Advertisements

Objektorientierte Programmierung
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil3.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Kritische Betrachtung
Telefonnummer.
Unter- und Oberklassen: Beispiel
Modelle und Methoden der Linearen und Nichtlinearen Optimierung (Ausgewählte Methoden und Fallstudien) U N I V E R S I T Ä T H A M B U R G November 2011.
1 JIM-Studie 2010 Jugend, Information, (Multi-)Media Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
= = = = 47 = 47 = 48 = =
Sequenzdiagramm.
Java: Objektorientierte Programmierung
Rechneraufbau & Rechnerstrukturen, Folie 2.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 2.
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil2.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Differentielles Paar UIN rds gm UIN
Prof. Dr. Bernhard Wasmayr
Studienverlauf im Ausländerstudium
Dieter Bergmann, Lichtenfels
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Prof. Dr. Bernhard Wasmayr VWL 2. Semester
1 Teil 4 Übung: Uhr. 2 Zielsetzung Ziel ist es, mit Hilfe objektorientierter Modellierung ein System zu entwickeln, mit dem eine einfache Uhr simuliert.
UML Begleitdokumentation des Projekts
AWA 2007 Natur und Umwelt Natürlich Leben
Delphi Eine objektorientierte Programmiersprache © Beushausen 2000.
Rechneraufbau & Rechnerstrukturen, Folie 12.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 12.
Prof. Dr. Günter Gerhardinger Soziale Arbeit mit Einzelnen und Familien Übersicht über die Lehrveranstaltung Grundlegende Bestimmungsfaktoren der Praxis.
20:00.
„Küsse deine Freunde“ – FlexKom-App teilen
Zusatzfolien zu B-Bäumen
Delphi II - OOP IFB Fortbildung
Implementierung objektorientierter Modelle
Unified Modeling Language Repetition / Einführung zu UML
Eine Einführung in die CD-ROM
GBI Genios Wiso wiso bietet Ihnen das umfassendste Angebot deutsch- und englischsprachiger Literatur für die Wirtschafts- und Sozialwissenschaften. Wir.
Listen Klaus Becker KB Listen 2 Listen Ansgar A., Speyer Claudia B., Koblenz Knut B., Neustadt Annett B., Wörrstadt Stefani D., Bad Ems Jochen F.,
Dokumentation der Umfrage
Grundkonzepte der objektorientierten Programmierung Teil 3
Wir üben die Malsätzchen
Syntaxanalyse Bottom-Up und LR(0)
Grundkonzepte der objektorientierten Programmierung
Konzepte der objektorientierten Programmierung
Objektorientierte Software-Entwicklung
Einführung in die Software-Entwicklung mit Delphi Teil 1
Grundkonzepte der objektorientierten Programmierung Teil 2
Bausteine zum objektorientierten Programmieren mit Delphi
UML-Kurzüberblick Peter Brusten.
PROCAM Score Alter (Jahre)
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Geometrische Aufgaben
Symmetrische Blockchiffren DES – der Data Encryption Standard
Szenisches Lernen Wie Theaterelemente den Unterricht bereichern
Zahlentheorie und Zahlenspiele Hartmut Menzer, Ingo Althöfer ISBN: © 2014 Oldenbourg Wissenschaftsverlag GmbH Abbildungsübersicht / List.
MINDREADER Ein magisch - interaktives Erlebnis mit ENZO PAOLO
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Folie Beispiel für eine Einzelauswertung der Gemeindedaten (fiktive Daten)
Objektorientierte Modellierung mit UML
Klassen und Klassenstruktur
Programmiervorkurs WS 2014 Referenzdatentypen
Unternehmensbewertung Thomas Hering ISBN: © 2014 Oldenbourg Wissenschaftsverlag GmbH Abbildungsübersicht / List of Figures Tabellenübersicht.
Forschungsprojekt Statistik 2013 „Jugend zählt“ – Folie 1 Statistik 2013 „Jugend zählt“: Daten zur Arbeit mit Kindern und Jugendlichen.
Folie Einzelauswertung der Gemeindedaten
Datum:17. Dezember 2014 Thema:IFRS Update zum Jahresende – die Neuerungen im Überblick Referent:Eberhard Grötzner, EMA ® Anlass:12. Arbeitskreis Internationale.
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
Objektorientierte (OO) Programmierung
Grundkonzepte der objektorientierten Programmierung Teil 1
 Präsentation transkript:

Grundkonzepte der objektorientierten Programmierung Klaus Becker 2003

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

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

Das Würfelspiel „chuck a luck“ Der Spieler zahlt den Einsatz. Einsatz: 1 $ Gewinn: Einsatz + 1 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

Das Würfelspiel „chuck a luck“ Der Spieler zahlt den Einsatz. Einsatz: 1 $ Gewinn: Einsatz + 1 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

Das Würfelspiel „chuck a luck“ Der Spieler zahlt den Einsatz. Einsatz: 1 $ Gewinn: Einsatz + 1 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

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

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

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.

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

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.

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.

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.

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.

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

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

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

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

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)

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)

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

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

Das Spiel als Nachrichtenaustausch UML-Sequenzdiagramm

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

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.

Lösung UML-Objektdiagramm:

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

Lösung UML-Sequenzdiagramm

Implementierung in Delphi Teil 2 Implementierung in Delphi

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

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

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

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

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“).

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.

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.

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

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

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

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

Implementierung von Nachrichten abheben(1)  Form1 konto Senderobjekt-Klasse procedure TForm1.BSpielenClick(Sender: TObject); ... begin ... konto.abheben(1); ... end; Empfängerobjekt Operation

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.

Teil 3 Beziehungen

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

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

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

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.

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

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.

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.

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

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

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.

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.

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.

Hat-Beziehung kennt hat

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;

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.

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

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

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

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

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.

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

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

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

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.

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.

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

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

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

Ü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)

Lösungsvorschlag – Aufgabe 1

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

Lösungsvorschlag – Aufgabe 2

Lösungsvorschlag – Aufgabe 2

Teil 4 Zusammenfassung

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

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.

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.

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

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.

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.

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.

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)

UML: Klassen- und Objektdiagramme Wuerfel UML-Klassendiagramm augen werfen instance of wuerfelA wuerfelB wuerfelC UML-Objektdiagramm augen = 3 augen = 3 augen = 5

UML: Sequenzdiagramm UML-Sequenzdiagramm

Literaturhinweise Helmut Balzert: Lehrbuch Grundlagen der Informatik. Spektrum Ak. Verlag 1999. Heide Balzert: Lehrbuch der Objektmodellierung. Spektrum Ak. Verlag 1999. Bernd Oestereich: Objektorientierte Softwareentwicklung. Oldenbourg 1998. Thomas Erler: Das Einsteigerseminar UML. Bhv 2000. Siegfried Spolwig: Objektorientierung im Informatikunterricht. Dümmler-Verlag 1997. http://ivs.cs.uni-magdeburg.de/~dumke/UML/index.htm (UML-Tutorial der Uni Magdeburg) http://www.oose.de/uml/index.htm (UML-Links Bernd Oestereich) http://hsg.region-kaiserslautern.de/Informatik/se/swep/beispiele/ chuckaluck/index.html (ChuckALuck im Unterricht von K. Merkert)