1.02k likes | 1.25k Views
Grundkonzepte der objektorientierten Programmierung. Klaus Becker 2004. Objektorientierung. Grundideen. Grundkonzepte. Objekt. Klasse. Nachricht. Assoziation. Modellierungssprache: UML. Implementierungssprache: Delphi, Java,. Teil 1. Objekt-basierte Programmierung.
E N D
Grundkonzepte der objektorientierten Programmierung Klaus Becker 2004
Objektorientierung Grundideen Grundkonzepte ... Objekt Klasse Nachricht Assoziation Modellierungssprache: UML Implementierungssprache: Delphi, Java, ...
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.
1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 3 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 4 2 5 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.
Teil 2 Objektorientierte Modellierung
1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 3 Modellierung 1 4 2 5 Miniwelt 3 3 6 - Abbild der Miniwelt - Vorlage für das System Modell Informatisches System
1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 3 Vom Gegenstand der Miniwelt ... 1 4 2 5 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.
1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 3 ... zum Objekt im Modell Miniwelt Gegenstand 1 4 2 5 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.
1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 3 Struktur eines Gegenstandes Miniwelt Gegenstand 1 4 2 5 3 3 6 Spielbrett Würfel Konto Eigenschaft: Zahl Operation: Tipp setzen Eigenschaft:Augen Operation:werfen Eigenschaft: Stand Operationen:Betrag einzahlenBetrag abheben Sichtweise:Gegenstände der Miniwelt haben charakteristische Eigenschaften. Mit den Gegenständen kann man bestimmte Operationen ausführen.
1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 3 Attribute Eigenschaft: Stand Operationen:Betrag einzahlenBetrag abheben Gegenstand Eigenschaft:Augen Operation:werfen Eigenschaft: Zahl Operation: Tipp setzen 1 4 2 5 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.
1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 3 Methoden Eigenschaft: Stand Operationen:Betrag einzahlenBetrag abheben Gegenstand Eigenschaft:Augen Operation:werfen Eigenschaft: Zahl Operation: Tipp setzen 1 4 2 5 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 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.
1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 3 Erstes objektorientiertes Modell 1 4 2 5 3 3 6 Modell Miniwelt 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 TWuerfel augen UML-Klassendiagramm erzeugen vernichten werfen instance of UML-Objektdiagramm wuerfelA wuerfelB wuerfelC 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):
Teil 3 Vom Modell zum Programm
1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 3 Zielsetzung 1 4 2 5 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.
TWuerfel – augen: integer + create + destroy + werfen + getAugen: integer Teilmodell 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.
TWuerfel – augen: integer + create + destroy + werfen + getAugen: integer 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; ... Deklaration der Attribute und Operationen
Implementierung von Klassen unit uWuerfel; interface ... implementation constructor TWuerfel.create;beginaugen := 1;randomize;end; destructor TWuerfel.destroy;beginend; ... Implementierung der Konstruktoren / Destruktoren
Implementierung von Klassen unit uWuerfel; interface ... implementation ... procedure TWuerfel.werfen;beginaugen := random(6)+1;end; function TWuerfel.getAugen: integer;beginresult := 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);beginwuerfelA := 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 AnzeigePWuerfelA.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; Begintipp := RGSpielbrett.ItemIndex+1;// Aktivierung der Modell-Objektekonto.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 AnzeigePWuerfelA.Caption := IntToStr(wuerfelA.getAugen);PWuerfelB.Caption := IntToStr(wuerfelB.getAugen);PWuerfelC.Caption := IntToStr(wuerfelC.getAugen);PKonto.Caption := IntToStr(konto.getStand);end;
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 bereitz0 gesetztz1 gewürfeltz2 [aktualisieren] / Konto aktualisieren Zustand: bereit gesetzt gesetzt gewürfelt Auslösende Aktion: RadioGroupButton anklicken RadioGroupButton anklicken Button „werfen“ anklicken Button „aktualisieren“ anklicken Ausgelöste Aktion: Tipp setzenKonto abbuchen Tipp setzen Würfel werfen Konto aktualisieren Neuer Zustand: gesetzt 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 gesetzt gewürfelt Auslösende Aktion: RadioGroupButton anklicken RadioGroupButton anklicken Button „werfen“ anklicken Button „aktualisieren“ anklicken Ausgelöste Aktion: Tipp setzenKonto abbuchen Tipp setzen Würfel werfen Konto aktualisieren Neuer Zustand: gesetzt gesetzt gewürfelt bereit
1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 3 Modellierung 1 4 2 5 3 3 6 Modell Miniwelt 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.