Grundkonzepte der objektorientierten Programmierung

Slides:



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

Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil3.
Die Projektgruppe heißt Sie herzlichst willkommen
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.
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 = =
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
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.
AWA 2007 Natur und Umwelt Natürlich Leben
Delphi Eine objektorientierte Programmiersprache © Beushausen 2000.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
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
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
Kinder- und Jugenddorf Klinge Qualitätsentwicklung Januar 2005 Auswertung der Fragebögen für die Fachkräfte in den Jugendämtern.
Wir üben die Malsätzchen
Syntaxanalyse Bottom-Up und LR(0)
Copyright 2011 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2011/12 Kapitel 11, Folie 1 2 Dr. Christian Herzog Technische.
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
Der Ablauf eines Clear Rex Klärzyklus
UML-Kurzüberblick Peter Brusten.
Wasserfallmodell und Einzelbegriffe
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
Parkplatz-Orga Diese Version ist vom finale Version!
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
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 2004

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

Objekt-basierte Programmierung Teil 1 Objekt-basierte Programmierung

Fallstudie: chuck a luck Ziel ist es, ein System zu entwickeln, mit dem das in Amerika weit verbreitete Würfelspiel „chuck a luck“ am Rechner gespielt werden kann.

Das Würfelspiel „chuck a luck“ Einsatz zahlen und Zahl tippen Würfel werfen Gewinn auszahlen Einsatz: 1 $ Gewinn: 0 Treffer: 1 Treffer: Einsatz + 1 $ 2 Treffer: Einsatz + 2 $ 3 Treffer: Einsatz + 3 $ 1$ 1$ 1 4 1$ 1$ 2 5 1$ 1$ 1$ 1$ 1$ 3 1$ 1$ 1$ 1$ 1$ 3 3 6

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

Eine erste objektbasierte Lösung Die Benutzungsoberfläche wird mit Hilfe von sog. GUI-Objekten (Graphical User Interface) aufgebaut. Für die Ausführung des Spiels ist das TButton-Objekt „BWerfen“ zuständig. Form1: TForm1 PTitel: TPanel RGSpielbrett: TRadioGroup GBWuerfel: TGroupBox GBKonto: TGroupBox PWuerfelA: TPanel PKonto: TPanel BWerfen: TButton

Eine erste objektbasierte Lösung procedure TGUI.BSpielenClick(Sender: TObject); var wuerfelA, wuerfelB, wuerfelC, konto, spielzahl: integer; richtige: integer; begin // Durchführung des Spiels spielzahl := RGSpielbrett.ItemIndex+1; konto := StrToInt(PKonto.Caption); konto := konto-1; wuerfelA := random(6)+1; wuerfelB := random(6)+1; wuerfelC := random(6)+1; richtige := 0; if spielzahl = wuerfelA then inc(richtige); if spielzahl = wuerfelB then inc(richtige); if spielzahl = wuerfelC then inc(richtige); if richtige > 0 then konto := konto+(richtige+1); // Aktualisierung der Anzeige PWuerfelA.Caption := IntToStr(wuerfelA); PWuerfelB.Caption := IntToStr(wuerfelB); PWuerfelC.Caption := IntToStr(wuerfelC); PKonto.Caption := IntToStr(konto); end; Variablen zur Repräsentation der Spielinformationen

Bemerkungen Das Programm im Verzeichnis „ChuckALuck0“ ist ad hoc entwickelt worden (d. h. Benutzungsoberfläche zusammenstellen; Ereignisbehandlung ergänzen). Für kleinere Anwendungen kann man auf diese Weise schnell zu einem lauffähigen System kommen. Bei größeren Anwendungen versagt in der Regel die ad-hoc-Methode. Man benötigt dann Methoden zur systematischen Entwicklung von Software. Ziel soll es sein, die objektorientierte Methode anhand des ChuckALuck-Beispiels Schritt für Schritt zu entwickeln.

Objektorientierte Modellierung Teil 2 Objektorientierte Modellierung

Informatisches System Modellierung 1 4 1$ 1$ 2 5 1$ 1$ 1$ Miniwelt 1$ 1$ 3 1$ 1$ 1$ 1$ 3 3 6 - Abbild der Miniwelt - Vorlage für das System Modell Informatisches System

Vom Gegenstand der Miniwelt ... 1 4 1$ 1$ 2 5 1$ 1$ 1$ 1$ 1$ 3 1$ 1$ 1$ 1$ 3 3 6 Spielbrett Würfel Konto Sichtweise: Die Miniwelt ist aus Gegenständen aufgebaut. Gegenstände können Personen, Dinge, Sachverhalte, Ereignisse, ... sein. Jeder Gegenstand stellt eine autonome Einheit mit klar begrenzten Zuständigkeiten dar.

... zum Objekt im Modell 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ Gegenstand Miniwelt 1 4 1$ 1$ 2 5 1$ 1$ 1$ 1$ 1$ 3 1$ 1$ 1$ 1$ 3 3 6 spielbrett wuerfelA wuerfelB wuerfelC konto Objekt Modell Grundidee der objektorientierten Modellierung: Die Gegenstände der Miniwelt werden mit Hilfe von Objekten im Sinne der Informatik beschrieben.

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

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

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

Klassen Gleich strukturierte Objekte werden einer Klasse zugeordnet. Modell Klasse TSpielbrett TWuerfel TKonto zahl augen stand setzen(tipp) werfen abheben(betrag) einzahlen(betrag) spielbrett wuerfelA wuerfelB wuerfelC konto zahl = 3 augen = 3 augen = 3 augen = 5 stand = 9 setzen(tipp) werfen werfen werfen abheben(betrag) einzahlen(betrag) Objekt Gleich strukturierte Objekte werden einer Klasse zugeordnet.

Klassen Modell Klasse TSpielbrett TWuerfel TKonto zahl augen stand setzen(tipp) werfen abheben(betrag) einzahlen(betrag) instance of instance of instance of spielbrett wuerfelA wuerfelB wuerfelC konto zahl = 3 augen = 3 augen = 3 augen = 5 stand = 9 setzen(tipp) werfen werfen werfen abheben(betrag) einzahlen(betrag) Objekt Klassen sind Baupläne für Objekte. Objekte werden als Exemplare (Instanzen) von Klassen bezeichnet.

Erstes objektorientiertes Modell 1 4 1$ 1$ 2 5 1$ 1$ 1$ 1$ 1$ 3 1$ 1$ 1$ 1$ 3 3 6 Miniwelt Modell TSpielbrett TWuerfel TKonto zahl augen stand setzen(tipp) werfen abheben(betrag) einzahlen(betrag) instance of instance of instance of spielbrett wuerfelA wuerfelB wuerfelC konto zahl = 3 augen = 3 augen = 3 augen = 5 stand = 9

Konstruktoren / Destruktoren Modell Klasse TSpielbrett TWuerfel TKonto zahl augen stand erzeugen vernichten setzen(tipp) erzeugen vernichten werfen erzeugen vernichten abheben(betrag) einzahlen(betrag) instance of instance of instance of spielbrett wuerfelB konto zahl = ... augen = 3 stand = 9 Objekt 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. TKonto verborgen stand erzeugen vernichten abheben(betrag) einzahlen(betrag) Zugriff erlaubt

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

Schnittstellenspezifikation Die Benutzungsschnittstelle einer Klasse muss genau festgelegt werden. Zugriffsrechte (- kein Zugriff; + Zugriff erlaubt) Datentypen (und eventuelle Initialisierungswerte) Signaturen (Parameter und bei Funktionen der Ergebnistyp) TKonto TKonto stand – stand: integer erzeugen vernichten abheben(betrag) einzahlen(betrag) „stand erfragen“ „stand setzen“ + create(betrag: integer) + destroy + abheben(betrag: integer) + einzahlen(betrag: int.) + getStand: integer + setStand(betrag: integer)

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

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. Beachte: Mit Hilfe von Violet können Objekt- und Klassendiagramme nur getrennt erstellt werden. Ergänzen Sie auch passende Datentypen.

Lösung UML-Objektdiagramm: UML-Klassendiagramm (Feinfassung):

Vom Modell zum Programm Teil 3 Vom Modell zum Programm

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

Teilmodell TWuerfel – augen: integer + create + destroy + werfen + getAugen: integer Teil-Modell instance of wuerfelA wuerfelB wuerfelC augen = 3 augen = 3 augen = 5 Die Implementierung eines objektorientierten Modells soll anhand eines Teilmodells des Gesamtmodells gezeigt werden.

Die Klasse als Modul Klassen werden als Module (Programmeinheiten) implementiert, die in Delphi in zwei Teilen beschrieben werden: Der öffentliche Teil besteht aus den Vereinbarungen, die zur Benutzung des Moduls notwendig sind (Schnittstelle). Der private Teil besteht aus den Implementierungsdetails, die für die Benutzung nicht benötigt werden. unit uWuerfel; interface // Deklaration der // Attribute und Operationen implementation // Implementierung der // Operationen end. TWuerfel – augen: integer + create + destroy + werfen + getAugen: integer

Implementierung von Klassen unit uWuerfel; interface type TWuerfel = class private augen: integer; public constructor create; destructor destroy; procedure werfen; function getAugen: integer; end; ... TWuerfel – augen: integer + create + destroy + werfen + getAugen: integer Deklaration der Attribute und Operationen

Implementierung von Klassen unit uWuerfel; interface ... implementation constructor TWuerfel.create; begin augen := 1; randomize; end; destructor TWuerfel.destroy; begin end; Implementierung der Konstruktoren / Destruktoren

Implementierung von Klassen unit uWuerfel; interface ... implementation procedure TWuerfel.werfen; begin augen := random(6)+1; end; function TWuerfel.getAugen: integer; begin result := augen; end; end. Implementierung der Operationen

Einbindung einer Modellklasse unit uGUI; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, uWuerfel; type TForm1 = class(TForm) ... Bekanntmachen der Klassen

Deklaration eines Objekts ... type TForm1 = class(TForm) PTitel: TPanel; RGSpielbrett: TRadioGroup; GBWuerfel: TGroupBox; GBKonto: TGroupBox; PWuerfelA: TPanel; PWuerfelB: TPanel; PWuerfelC: TPanel; PKonto: TPanel; BSpielen: TButton; procedure FormCreate(Sender: TObject); procedure BSpielenClick(Sender: TObject); private { Private-Deklarationen } wuerfelA: TWuerfel; public { Public-Deklarationen } end; Deklaration eines GUI-Objekts Deklaration eines Modell-Objekts

Erzeugung eines Modell-Objekts unit uGUI; interface ... implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin wuerfelA := TWuerfel.create; end; procedure TForm1.BSpielenClick(Sender: TObject); ... end. Erzeugung eines Modell-Objekts

Aktivierung eines Modell-Objekts procedure TForm1.BSpielenClick(Sender: TObject); Begin // Aktivierung des Modell-Objekts wuerfelA.werfen; // Aktualisierung der Anzeige PWuerfelA.Caption := IntToStr(wuerfelA.getAugen); end;

Aufgabe Kopieren Sie die Dateien aus dem Verzeichnis ChuchALuck0 in einen neuen Ordner. Implementieren und testen Sie Schritt für Schritt die Klassen TWuerfel, TKonto und TSpielzahl. Erstellen Sie ein objektorientiertes Programm zur Simulation des ChuckALuck-Spiels. Eine vollständige Lösung finden Sie im Verzeichnis „ChuckALuck1“.

Lösung procedure TGUI.BSpielenClick(Sender: TObject); var tipp, zahl, richtige: integer; Begin tipp := RGSpielbrett.ItemIndex+1; // Aktivierung der Modell-Objekte konto.abheben(1); spielbrett.setzen(tipp); wuerfelA.werfen; wuerfelB.werfen; wuerfelC.werfen; richtige := 0; zahl := spielbrett.getZahl; if zahl = wuerfelA.getAugen then inc(richtige); if zahl = wuerfelB.getAugen then inc(richtige); if zahl = wuerfelC.getAugen then inc(richtige); if richtige > 0 then konto.einzahlen(richtige+1); // Aktualisierung der Anzeige PWuerfelA.Caption := IntToStr(wuerfelA.getAugen); PWuerfelB.Caption := IntToStr(wuerfelB.getAugen); PWuerfelC.Caption := IntToStr(wuerfelC.getAugen); PKonto.Caption := IntToStr(konto.getStand); end;

Komplexe Objektstruktur Teil 4 Komplexe Objektstruktur

Ereignissteuerung bisher Auslösende Aktion Ausgelöste Aktion Mausklick auf den „werfen“-Button Der vom Benutzer eingestellte Tipp am Spielbrett wird übernommen. Das Spiel wird mit diesem Tipp durchgeführt. Die Ergebnisse des Spiels (Würfelergebnisse, neuer Kontostand) werden angezeigt.

Ereignissteuerung jetzt Auslösende Aktion Ausgelöste Aktion Mausklick auf einen Radio-Button Der Einsatz wird vom Konto abgehoben. Die gewählte Zahl wird gesetzt. Mausklick auf den „werfen“-Button Die Würfel werden geworfen. Mausklick auf den „aktualisieren“-Button Der Gewinn wird ermittelt und auf dem Konto eingezahlt.

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

Komplexere Ereignissteuerung [1][2]... / Tipp setzen [1][2]... / Tipp setzen; Konto abbuchen [werfen] / Würfel werfen bereit z0 gesetzt z1 gewürfelt z2 [aktualisieren] / Konto aktualisieren Zustand: bereit gesetzt gewürfelt Auslösende Aktion: RadioGroupButton anklicken Button „werfen“ anklicken Button „aktualisieren“ anklicken Ausgelöste Aktion: Tipp setzen Konto abbuchen Tipp setzen Würfel werfen Konto aktualisieren Neuer Zustand: gesetzt gewürfelt bereit

Spielsteuerung Die Steuerung des Spiels soll durch ein Objekt „spielmanager“ übernommen werden. Dieses Objekt ist zuständig für die Verwaltung des Spielzustandes und die jeweilige Aktivierung der am Spiel beteiligten Objekte. Zustand: bereit gesetzt gewürfelt Auslösende Aktion: RadioGroupButton anklicken Button „werfen“ anklicken Button „aktualisieren“ anklicken Ausgelöste Aktion: Tipp setzen Konto abbuchen Tipp setzen Würfel werfen Konto aktualisieren Neuer Zustand: gesetzt gewürfelt bereit

Modellierung 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ Modell Miniwelt 1 4 2 5 3 1$ 1$ 1$ 1$ 3 3 6 Miniwelt Modell spielmanager zustand = 0 spielbrett wuerfelA wuerfelB wuerfelC konto zahl = 3 augen = 3 augen = 3 augen = 5 stand = 9

Aktivierung von Objekten konto Zustand vorher stand = 9 abheben(1)  spielmanager konto Aktivierung durch eine Nachricht zustand = 0 stand = 9 konto Zustand nachher stand = 8 Sichtweise: Ein Objekt stellt seiner Umgebung bestimmte Dienste (Operationen) zur Verfügung. Durch eine Nachricht veranlasst ein „Kunde“ das Objekt, die Dienstleistung zu erledigen. Das Objekt führt dann die Operation aus.

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

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

Das Spiel als Nachrichtenaustausch Button [aktualisieren] anklicken im Zustand „gewürfelt“: wuerfelA 1: zahl  getZahl  spielbrett  2: getAugen wuerfelB spielmanager konto  3: getAugen 5: [richtige > 0] einzahlen(richtige+1)  wuerfelC kontoAktualisieren   4: getAugen

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

Beziehung zwischen Objekten wuerfelA 1: zahl  getZahl  spielbrett  2: getAugen wuerfelB spielmanager konto  3: getAugen 5: [richtige > 0] einzahlen(richtige+1)  wuerfelC kontoAktualisieren   4: getAugen Ein Nachrichtenaustausch zwischen Objekten kann nur stattfinden, wenn das sendende Objekt die Nachricht dem Empfängerobjekt „zustellen“ kann. Hierzu müssen diese Objekte in Beziehung zueinander stehen.

Kennt-Beziehung / Verbindung wuerfelA spielbrett kennt kennt wuerfelB spielmanager 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 spielmanager 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.

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

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

Exkurs: Beziehungsarten Kennt-Beziehung: Verbindung TSpielmanager TKonto kennt Hat-Beziehung: Komposition TSpielmanager TKonto hat Ist-Beziehung: Verfeinerung; Vererbung TForm1 TForm ist

Exkurs: Kardinalitäten 1 TSpielbrett 3 kennt TWuerfel TSpielmanager kennt kennt TKonto 1 Kardinalitätsangaben: 3: Ein Spielmanager-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

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

Implementierung einer Hat-Beziehung Teil 5 Implementierung einer Hat-Beziehung

Zielsetzung TSpielmanager TWuerfel hat - zustand: integer ... erstellen fertig + create + wuerfelWerfen ... instance of instance of Teil-Modell spielmanager wuerfelA hat zustand = ... augen = 3 Die Implementierung der Hat-Beziehung soll anhand eines Teilmodells des Gesamtmodells gezeigt werden. Wir verzichten vorerst auf die Verwaltung des Spielzustands.

Referenzen schaffen Beziehungen Zeiger (Adresse) 2091 2091 Referenzattribut

Referenzen schaffen Beziehungen TSpielmanager - zustand: integer - wuerfelA: TWuerfel - wuerfelB: TWuerfel - wuerfelC: TWuerfel - spielbrett: TSpielbrett - konto: TKonto ... Referenzattribute Mit Hilfe von Referenzattributen kann ein Objekt sich die Adressen seiner „Beziehungspartner“ merken.

Modellklasse mit Referenzattributen unit uSpielmanager; interface uses uWuerfel, uKonto, uSpielbrett; type TSpielmanager = class(TObject) private zustand: integer; wuerfelA: TWuerfel; wuerfelB: Twuerfel; wuerfelC: TWuerfel; konto: TKonto; spielbrett: TSpielbrett; public constructor create; destructor destroy; override; ... end; implementation Bekanntmachen der Klassen TSpielmanager - zustand: integer - wuerfelA: TWuerfel - wuerfelB: TWuerfel - wuerfelC: TWuerfel - spielbrett: TSpielbrett - konto: TKonto ... Deklaration der Referenzattribute

Erzeugung des Würfel-Objekts type TSpielmanager = class(TObject) private wuerfelA: TWuerfel; public constructor create; destructor destroy; override; ... end; implementation constructor TSpielmanager.create; begin inherited create; wuerfelA := TWuerfel.create; end; destructor TSpielmanager.destroy; begin wuerfelA.free; inherited destroy; end; spielmanager wuerfelA hat Modellstruktur Bei dieser Struktur geht man davon aus, dass ein Objekt ein anderes besitzt, d. h. es hat die vollständige Kontrolle über dieses Objekt. Bei einer solchen Zerlegung trägt das Ganze die Verantwortung für die Teilobjekte, die Existenz eines Teilobjekts hängt unmittelbar von der Existenz des Ganzen ab. Man spricht von einer Hat-Beziehung zwischen dem Ganzen und seinen Teilen. Siehe Delphi-Hilfe Siehe Delphi-Hilfe

Implementierung einer Nachricht ... type TSpielmanager = class(TObject) private wuerfelA: TWuerfel; public constructor create; destructor destroy; override; procedure wuerfelWerfen; ... end; implementation procedure TSpielmanager.wuerfelWerfen; begin wuerfelA.werfen; end; spielmanager wuerfelA hat Modellstruktur Nachricht werfen  spielmanager wuerfelA Senderobjekt-Klasse Operation Empfängerobjekt

Erzeugung des Spielmanager-Objekts unit uGUI; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, uSpielmanager; type TForm1 = class(TForm) ... private { Private-Deklarationen } spielmanager: TSpielmanager; public { Public-Deklarationen } end; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin spielmanager := TSpielmanager.create; end; ... spielmanager wuerfelA hat Modellstruktur

Zugriff auf abhängiges Objekt unit uGUI; interface ... implementation {$R *.DFM} procedure TGUI.BWerfenClick(Sender: TObject); begin // Aktualisierung der Modell-Objekte spielmanager.wuerfelWerfen; // Aktualisierung der Anzeige PWuerfelA.Caption := IntToStr(spielmanager.getWuerfelA); end; form1 spielmanager wuerfelA kennt hat Modellstruktur Kein direkter Zugriff auf wuerfelA möglich Nachrichten Nachrichten getWuerfelA  getAugen  form1 spielmanager wuerfelA

Zugriff auf abhängiges Objekt unit uGUI; interface ... implementation {$R *.DFM} procedure TGUI.BWerfenClick(...); begin // Aktualisierung der Modell-Objekte spielmanager.wuerfelWerfen; // Aktualisierung der Anzeige PWuerfelA.Caption := IntToStr(spielmanager.getWuerfelA); end; spielmanager wuerfelA hat TSpielmanager - wuerfelA: Wuerfel ... + create + destroy + wuerfelWerfen ... + getWuerfelA: integer ... Hilfsoperation function TSpielmanager.getWuerfelA: integer; begin result := wuerfelA.getAugen; end;

Aufgabe Die gezeigte Implementierung des Teilmodells „Spielmanager hat Wuerfel“ finden Sie im Verzeichnis „ChuckALuck20“. Testen Sie zunächst diese Implementierung. Beachten Sie, dass man hier nur Würfel A werfen kann. Bauen Sie dann schrittweise diese Implementierung zu einer Implementierung des gesamten Spiels aus. Berücksichtigen Sie zunächst noch nicht den jeweiligen Spielzustand. (Zum Vergleich: „ChuckALuck21“) Berücksichtigen Sie in einem letzten Schritt den jeweiligen Spielzustand. Eine vollständige Implementierung finden Sie im Verzeichnis „ChuckALuck22“.

Implementierung einer Kennt-Beziehung Teil 6 Implementierung einer Kennt-Beziehung

Zielsetzung TSpielmanager TKonto kennt - zustand: integer ... + create + wuerfelWerfen ... instance of instance of Teil-Modell spielmanager konto kennt zustand = ... stand = 99 Hier sollen die Ähnlichkeiten und Unterschiede zwischen einer Implementierung der Kennt-Beziehung und der Hat-Beziehung aufgezeigt werden.

Bekanntschaft durch Referenzen TSpielmanager - zustand: integer - wuerfelA: Wuerfel - wuerfelB: Wuerfel - wuerfelC: Wuerfel - spielbrett: Spielbrett - konto: Konto + create(...) + spielbrettSetzen(z: int.) + wuerfelWerfen + kontoAktualisieren + getZustand: integer Referenzattribute Die anzustrebende Grundsituation bleibt gleich: Mit Hilfe von Referenzattributen soll das TSpielmanager-Objekt sich die Adressen seiner „Bekanntschaften“ merken.

Erzeugung der Objekte unit uGUI; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, uKonto, ..., uSpielmanager; type TForm1 = class(TForm) ... private { Private-Deklarationen } konto: TKonto; ... spielmanager: TSpielmanager; public { Public-Deklarationen } constructor create(...; k: Tkonto; ...); ... end; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin konto := TKonto.create; ... spielmanager := TSpielmanager.create(..., konto, ...); end; spielmanager konto kennt Modellstruktur

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

Erzeugung von Referenzen // Deklaration des Konstruktors constructor TSpielmanager.create (wA, wB, wC: TWuerfel; k: TKonto; sp: TSpielbrett); begin zustand := 0; konto := k; wuerfelA := wA; wuerfelB := wB; wuerfelC := wC; spielbrett := sp; end; TSpielmanager - zustand: integer - wuerfelA: Wuerfel - wuerfelB: Wuerfel - wuerfelC: Wuerfel - spielbrett: Spielbrett - konto: Konto Konstruktor mit Parametern zur Übergabe der Referenzen + create(wA, wB, wC: Wuerfel; k: Konto; sp: Spielbrett) + spielbrettSetzen(z: int.) + wuerfelWerfen + kontoAktualisieren + getZustand: integer // Aufruf des Konstruktors konto := TKonto.create(100); ... spielmanager := TSpielmanager.create (wuerfelA, wuerfelB, wuerfelC, konto, spielbrett); konto: [3A80] Die Referenzbildung erfolgt bei der Erzeugung des Spielmanager-Objekts.

Unterschied: Kennt-/Hat-Beziehung Das Objekt „spielmanager“ steht in Verbindung zum Objekt „konto“. kennt hat Das Objekt „spielmanger“ hat die volle Kontrolle über das Objekt „konto“.

Aufgabe Implementieren Sie ein ChuckALuck-System mit Kennt-Beziehungen. Ausgangspunkt kann „ChuckALuck1“ (Version des neuen ChuckALuck-Systems ohne Spielmanager) oder „ChuckALuck21“ oder „ChuckALuck22“ (Versionen mit Hat-Beziehungen) sein. Eine Lösung ohne Spielkontrolle finden Sie im Verzeichnis „ChuckALuck31“, eine mit Kontrolle des Spielzustands im Verzeichnis „ChuckALuck32“.

Teil 7 UML-Werkzeuge

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

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

UML-Werkzeuge Quellcode – erzeugt mit UMLEd: UNIT mTWuerfel; interface uses // Uses-Klausel ggf. anpassen type TWuerfel = CLASS // Attribute private augen : integer; //Objektbeziehungen // Methoden public constructor create; procedure werfen; function getAugen : integer; end; ...

UML-Werkzeuge Dokumentation – erzeugt mit UMLEd: Dokumentation der Klasse "TWuerfel" Beschreibung der Klasse:  Attribute augen : integer beschreibt die aktuelle Augenzahl des Würfels Protokoll der Dienste / Methoden Konstruktor create Auftrag werfen aktiviert den Würfel so, dass (mit Hilfe des Zufallsgenerators) eine neue Augenzahl erzeugt wird Anfrage getAugen : integer

Aufgabe Testen Sie das UML-Werkzeug UMLEd. Geben Sie eines der entwickelten Modelle ein und lassen Sie den zugehörigen Quellcode erzeugen.

Teil 8 Zusammenfassung

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

Idee: Objekt als Systemkomponente Ein System besteht aus Objekten. Jedes Objekt ist für bestimmte Aufgaben zuständig und erledigt diese in eigener Verantwortung. Durch Nachrichten können Objekte andere Objekte zur Erledigung von (Teil)Aufgaben auffordern und somit gemeinsam die System- aktivitäten erzeugen.

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

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

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 TKonto 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( )  spielmanager wuerfelA Nachricht Die Aktivierung von Operationen / Methoden erfolgt mit Hilfe von Nachrichten. Eine Nachricht kann also als Methodenaufruf angesehen werden.

Grundkonzept: Assoziation TKonto 1 TSpielbrett 1 TSpielmanager Assoziation Assoziation TWuerfel 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)

Ein Blick auf den LF-Lehrplan

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) LOG IN 128/129. Thema: Objektorientiertes Modellieren und Programmieren Lehrplan für das Leistungsfach: www.informatik-lehren.de ...