Einf - PowerPoint PPT Presentation

1 / 72
About This Presentation
Title:

Einf

Description:

Title: Grundkonzepte der objektorientierten Programmierung Author: KB Last modified by: Klaus Becker Created Date: 3/5/2003 6:57:56 AM Document presentation format – PowerPoint PPT presentation

Number of Views:88
Avg rating:3.0/5.0
Slides: 73
Provided by: KB96
Category:
Tags: einf | quiz

less

Transcript and Presenter's Notes

Title: Einf


1
Einführung in dieSoftware-Entwicklung mit Delphi
Teil 1
  • Klaus Becker
  • 2005

2
Miniprojekt chuck a luck
1
4
2
5
3
6
3
  • Interaktive Systeme entwickeln
  • Benutzungsoberfläche gestalten
  • Ereignisverarbeitung konzipieren und
    implementieren
  • Systeme modellieren und strukturieren

3
Teil 1
Grafische Benutzungsoberfläche
4
Das Würfelspiel chuck a luck
Einsatz zahlen und Zahl tippen Würfel
werfen Gewinn verbuchen
Einsatz 1
Gewinn 0 Treffer 1 Treffer Einsatz 1 2
Treffer Einsatz 2 3 Treffer Einsatz 3
1
4
2
5
3
6
3
5
Zielsetzung
Ziel ist es, ein System zu entwickeln, mit dem
das in Amerika weit verbreitete Würfelspiel
chuck a luck am Rechner gespielt werden kann.
Als Werkzeug benutzen wir das Programmiersystem
Delphi.
6
Anforderungen
/1/ Der Benutzer hat einen vorgegebenen
Geldbetrag auf seinem Konto. /2/ Der Benutzer
kann seinen Einsatz zahlen und eine Zahl auf dem
Spielfeld setzen. /3/ Das System simuliert auf
Wunsch das Werfen von drei Würfeln. /4/ Das
System berechnet auf Wunsch den Gewinn und
verbucht ihn auf dem Konto. ...
7
Benutzungsoberfläche
Eine grafische Benutzungsoberfläche (GUI
Graphical User Interface) legt das äußere
Erscheinungsbild eines Programms und die
Interaktionsmöglichkeiten des Benutzers mit dem
Programm fest. Eine grafische Benutzungsschnittste
lle dient als Mensch-Maschine-Schnittstelle.
Der erste Schritt besteht darin, eine
Benutzungsoberfläche zu entwerfen und sie mit
Hilfe der von Delphi vorgegebenen
Komponentenpalette zu erstellen.
8
GUI-Objekt
Eine Benutzungsoberfläche wird mit Hilfe von sog.
GUI-Objekten aufgebaut. (GUI Graphical User
Interface)
GUI-Objekt
GUI-Objekt
GUI-Objekt
GUI-Objekt
Die Eigenschaften eines Objekts kann man sich mit
dem Objektinspektor anzeigen lassen.
9
Objekt
Ein Objekt hat (in der Regel) einen Namen und
wird einer Klasse zugeordnet. Die Klasse legt
dabei den Typ des Objekts fest.
PKonto TPanel
PKonto TPanel
Im Objektinspektor werden Name und zugehörige
Klasse eines Objekts in einem Fenster angezeigt.
10
Aufbau und Zustand eines Objekts
Der Aufbau eines Objekts wird mit Hilfe von
Attributen (Eigenschaften) festgelegt. Die
Attributwerte legen den aktuellen Objektzustand
fest.
Klasse
Name
Klasse
Name
PKonto TPanel
Caption Konto Left 223 ...
Attributwert
Attribut
Attributwert
Attribut
Objektdiagramm
Um die Struktur von Objekten zu beschreiben,
benutzen wir eine vereinfachende Darstellung. Man
nennt eine solche Darstellung Objektdiagramm.
11
Aufgabe
Erstellen Sie eine Benutzungsoberfläche, die aus
folgendenden GUI-Objekten aufgebaut ist. Beachten
Sie unbedingt den Hinweis auf der nächsten Folie.
FGUI TFGUI
PWuerfel1 TPanel
PWuerfel3TPanel
PWuerfel2 TPanel
PWuerfel TPanel
PUeberschrift TPanel
Pspielfeld TPanel
PKonto TPanel
PKontostand TPanel
ESpielzahl TEdit
BWuerfelWerfenTButton
BEinsatzZahlenTButton
BGewinnVerbuchenTButton
12
Vorbereitung eines Delphi-Projektes
Delphi erzeugt eine ganze Reihe von Dateien zur
Verwaltung eines Programmierprojektes. Um diese
Dateien verwalten zu können, sollte man sie immer
in einem eigenen Ordner speichern.
Schritte zur Vorbereitung eines
Delphi-Projektes 1. Neuen Ordner anlegen
ltChuckALuck0gt 2. Delphi starten 3. Datei ?
Projekt speichern unter ltChuckALuck0/...gt
13
Ein Blick in die Datei Unit1.dfm
object FGUI TFGUI Left 399 Top 112
Width 514 Height 302 Caption 'Fgui'
Color clBtnFace Font.Charset
DEFAULT_CHARSET Font.Color clWindowText
Font.Height -11 Font.Name 'MS Sans Serif'
Font.Style OldCreateOrder False
PixelsPerInch 96 TextHeight 13 object
PUeberschrift TPanel Left 32 Top 32
Width 441 Height 41 Caption
'chuck a luck' Font.Charset
DEFAULT_CHARSET ...
... Font.Color clWindowText
Font.Height -19 Font.Name 'MS Sans
Serif' Font.Style ParentFont
False TabOrder 0 end object PSpielfeld
TPanel Left 32 Top 104 Width
137 Height 25 Caption 'Spielfeld'
TabOrder 1 end object PWuerfel TPanel
Left 184 Top 104 ... end ...end
Achtung Diese Datei wird in älteren
Delphi-Versionen als Binärdatei
abgespeichert.Siehe auch http//hsg.region-kaiser
slautern.de/faecher/inf/material/misc/d6_2_d4.php
14
Objekthierarchie
object FGUI TFGUI Left 399 Top 112
Width 514 Height 302 Caption 'Fgui'
Color clBtnFace Font.Charset
DEFAULT_CHARSET Font.Color clWindowText
Font.Height -11 Font.Name 'MS Sans Serif'
Font.Style OldCreateOrder False
PixelsPerInch 96 TextHeight 13 object
PUeberschrift TPanel Left 32 Top 32
Width 441 Height 41 Caption
'chuck a luck' Font.Charset
DEFAULT_CHARSET ...
FGUITFGUI
PUeberschriftTPanel
PSpielfeldTPanel
PWuerfelTPanel
PKontoTPanel
ESpielzahlTEdit
...
verwaltet
...
...
15
Ein Blick in die Datei Unit1.pas
unit Unit1 interface uses Windows, Messages,
SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,StdCtrls, ExtCtrls type TFGUI
class(TForm) ... private
Private-Deklarationen public
Public-Deklarationen end var FGUI
TFGUI implementation R .DFM end.
Delphi-Quelltext
16
Delphi-Quelltext (Unit1.pas)
unit Unit1 interface uses ... type TFgui
class(TForm) PUeberschrift TPanel
PSpielfeld TPanel PWuerfel TPanel
PKonto TPanel ESpielzahl TEdit
PWuerfel1 TPanel PWuerfel2 TPanel
PWuerfel3 TPanel PKontostand TPanel
BWuerfelWerfen TButton BGewinnVerbuchen
TButton BEinsatzZahlen TButton private
Private-Deklarationen public
Public-Deklarationen end ...
Deklaration eines Formulars mit GUI-Objekten
17
Kompilierung
Beim Kompilieren wird ein Delphi-Projekt in
lauffähigen Delphi-Code übersetzt (siehe
Project1.exe). Dieser Code kann dann anschließend
ausgeführt werden.
Start
18
Aufgabe
Testen Sie die Funktionalitäten des bisher
entwickelten Programms. Was fällt auf?
19
Teil 2
Ereignisse und ihre Verarbeitung
20
Interaktion Benutzer - Programm
Das erwartete Verhalten des Programms kann wie
folgt beschrieben werden
Ausgelöste Aktion(en) Der Einsatz wird vom
Konto abgebucht. Der neue Kontostand wird
angezeigt. Die Würfelwürfe werden simuliert. Die
Würfelergebnisse werden angezeigt. Die Spielzahl
wird übernommen, der Gewinn dann ermittelt und
auf dem Konto verbucht. Der neue Kontostand wird
angezeigt.
Auslösendes Ereignis Eingabe der
Spielzahl Mausklick auf den Button mit der
Aufschrift Einsatz zahlen Mausklick auf den
Button mit der Aufschrift Würfel
werfen Mausklick auf den Button mit der
Aufschrift Gewinn verbuchen
21
Realisierung in Delphi
Doppel-Klick auf den Button erzeugt eine neue
Prozedur.
Ereignis
Doppel-Klick
Prozedur zur Ereignisverarbeitung
22
Ereignisverarbeitung
Wir ergänzen die Implementierung der Prozedur wie
unten angezeigt und kompilieren das Programm. Bei
einem Mausklick auf den Button mit der Aufschrift
Würfel werfen zeigt das Programm das gewünschte
Verhalten.
procedure TFGUI.BWuerfelWerfenClick(Sender
TObject) var wuerfel1 integer
wuerfel2 integer wuerfel3
integer begin // Verarbeitung Würfeln
simulieren wuerfel1 random(6)1 wuerfel2
random(6)1 wuerfel3 random(6)1 // Ausgabe
Aktualisierung der Anzeige PWuerfel1.Caption
IntToStr(wuerfel1) PWuerfel2.Caption
IntToStr(wuerfel2) PWuerfel3.Caption
IntToStr(wuerfel3) end
23
Ereignisverarbeitung
Analog erzeugen wir eine Prozedur zur
Verarbeitung eines Mausklicks auf den Button mit
der Aufschrift Einsatz zahlen.
procedure TFGUI.BEinsatzZahlenClick(Sender
TObject) var konto integer begin //
Eingabe Kontostand übernehmen konto
StrToInt(PKontostand.Caption) // Verarbeitung
Einsatz vom Konto abbuchen konto konto-1 //
Ausgabe Aktualisierung der Anzeige PKontostand.Ca
ption IntToStr(konto) end
24
Initialisierung des Zufallsgenerators
Auslösendes Ereignis Erzeugung des Formulars
(unmittelbar nach dem Programmstart)
Ausgelöste Aktion(en) Der Zufallsgenerator von
Delphi wird initialisiert.
Doppel-Klick auf das Formular erzeugt eine neue
Prozedur.
procedure TFGUI.FormCreate(Sender
TObject) begin randomize end
25
Ereignisse
Ein Ereignis ist eine Zustandsänderung in einem
Objekt, die von Interesse ist und daher mit einer
Ereignisbehandlungsroutine (Prozedur zur
Ereignisverarbeitung) verknüpft werden kann. (K.
Merkert)
Ereignis Der Benutzer klickt auf den Button
Würfel werfen und löst hierdurch das Ereignis
BWuerfelWerfen.onClick aus.
Ereignis Das Formular wird von Delphi erzeugt
und löst dabei das Ereignis FGUI.onCreate aus.
Ereignisverarbeitung Dieses Ereignis wird vom
Betriebssystem an das Programm weitergegeben. Im
Programm muss eine spezielle Prozedur
BWuerfelWerfenClick zur Verarbeitung des
Ereignisses implementiert sein.
Ereignisverarbeitung Dieses Ereignis wird vom
Betriebs-system an das Programm weiter-gegeben.
Im Programm muss eine spezielle Prozedur
FGUICreate zur Verarbeitung des Ereignisses
implementiert sein.
Zur Ereignisverarbeitung in Delphi siehe K.
Merkert http//hsg.region-kaiserslautern.de/faec
her/inf/material/ereignisse/index.php
26
Aufgabe
Ergänzen Sie Schritt für Schritt die Prozeduren
zur Ereignisverarbeitung. Versuchen Sie
insbesondere, die Prozedur zur Verarbeitung des
Ereignisses Mausklick auf den Button Gewinn
verbuchen in Analogie zu den gezeigten
Ereignisverarbeitungsprozeduren zu entwickeln.
Nutzen Sie das Hilfe-System von Delphi bei der
Implementierung bzw. die folgenden Folien.
27
Exkurs Delphi-Grundlagen
procedure TFGUI.BEinsatzZahlenClick(Sender
TObject) var konto integer begin //
Eingabe Kontostand übernehmen konto
StrToInt(PKontostand.Caption) // Verarbeitung
Einsatz vom Konto abbuchen konto konto-1 //
Ausgabe Aktualisierung der Anzeige PKontostand.Ca
ption IntToStr(konto) end
PKontostand TPanel
Variablendeklaration
Caption 100 ...
konto
Datentyp
Bezeichner
konto
100
konto
99
PKontostand TPanel
Caption 99 ...
Variablen dienen dazu, Daten (eines festgelegten
Datentyps) innerhalb eines Programms
zwischenzuspeichern.
28
Exkurs Delphi-Grundlagen
procedure TFGUI.BEinsatzZahlenClick(Sender
TObject) var konto integer begin //
Eingabe Kontostand übernehmen konto
StrToInt(PKontostand.Caption) // Verarbeitung
Einsatz vom Konto abbuchen konto konto-1 //
Ausgabe Aktualisierung der Anzeige PKontostand.Ca
ption IntToStr(konto) end
konto
konto
100
Variablenzustand vorher
Wertzuweisung
konto
99
Variablenzustand nachher
Eine Veränderung eines Variablenwerts kann mit
Hilfe einer Wertzuweisung erfolgen. Der Wert des
Terms (rechte Seite der Wertzuweisung) wird bzgl.
des aktuellen Variablenzustands ermittelt und der
Variablen (linke Seite der Wertzuweisung) als
neuer Wert zugewiesen. Der Inhalt der zur
Variablen gehörenden Speicherzelle wird dabei
überschrieben.
29
Exkurs Delphi-Grundlagen
procedure TFGUI.BEinsatzZahlenClick(Sender
TObject) var konto integer begin //
Eingabe Kontostand übernehmen konto
StrToInt(PKontostand.Caption) //
Verarbeitung Einsatz vom Konto abbuchen konto
konto-1 // Ausgabe Aktualisierung der
Anzeige PKontostand.Caption IntToStr(konto)
end
PKontostand TPanel
Datentyp
Caption 100 ...
konto
konto
100
string
integer
Typumwandlung
konto
99
PKontostand TPanel
Caption 99 ...
string
integer
Typumwandlung
Beachte Bei einer Wertzuweisung müssen die
Datentypen zusammenpassen.
30
Exkurs Delphi-Grundlagen
procedure TFGUI.BWuerfelWerfenClick(Sender
TObject) var wuerfel1 integer
wuerfel2 integer wuerfel3
integer begin // Verarbeitung Würfeln
simulieren wuerfel1 random(6)1 wuerfel2
random(6)1 wuerfel3 random(6)1 // Ausgabe
Aktualisierung der Anzeige PWuerfel1.Caption
IntToStr(wuerfel1) PWuerfel2.Caption
IntToStr(wuerfel2) PWuerfel3.Caption
IntToStr(wuerfel3) end
Variablendeklaration
Deklarationsteil
Kommentar
Anweisung
Anweisungsteil
Prozedur-Deklaration
Beachte Erst deklarieren, dann benutzenAlle
Variablen (Prozeduren etc.) müssen zuerst
deklariert werden, bevor sie benutzt werden
können.
31
Exkurs Delphi-Grundlagen
procedure TFGUI.BWuerfelWerfenClick(Sender
TObject) var wuerfel1 integer
wuerfel2 integer wuerfel3
integer begin // Verarbeitung Würfeln
simulieren wuerfel1 random(6)1 wuerfel2
random(6)1 wuerfel3 random(6)1 // Ausgabe
Aktualisierung der Anzeige PWuerfel1.Caption
IntToStr(wuerfel1) PWuerfel2.Caption
IntToStr(wuerfel2) PWuerfel3.Caption
IntToStr(wuerfel3) end
Schlüsselwort
Semikolon als Trennsymbol
Vordefinierte Bezeichner
Beachte Syntaxregeln Damit der Delphi-Compiler
das Programm in Maschinencode übersetzen kann,
müssen die für die Programmiersprache Delphi
geltenden Syntaxregeln eingehalten werden.
32
Exkurs Delphi-Grundlagen
procedure TFGUI.BGewinnVerbuchenClick(Sender
TObject) var wuerfel1, wuerfel2, wuerfel3
integer spielzahl integer konto
integer treffer integer begin // Eingabe
spieldaten übernehmen spielzahl
StrToInt(ESpielzahl.Text) konto
StrToInt(PKontostand.Caption) wuerfel1
StrToInt(PWuerfel1.Caption) wuerfel2
StrToInt(PWuerfel2.Caption) wuerfel3
StrToInt(PWuerfel3.Caption) // Verarbeitung
Treffer und neuen Kontostand bestimmen treffer
0 if spielzahl wuerfel1 then inc(treffer) if
spielzahl wuerfel2 then inc(treffer) if
spielzahl wuerfel3 then inc(treffer) if
treffer gt 0 then konto kontotreffer1 //
Ausgabe Aktualisierung der Anzeige PKontostand.Ca
ption IntToStr(konto) end
Wertzuweisung
Sequenz
Fallunterscheidung
33
Exkurs Delphi-Grundlagen
Kontrollstrukturen dienen dazu, den genauen
Ablauf der Verarbeitung festzulegen. Wichtige
Kontrollstrukturen sind Sequenz(bildung),
Fallunterscheidung und Wiederholung.
begin ... end
if ... then begin ... end
Wiederholung mitAnfangsbedingung
while ... do begin ... end
Sequenz
if ... then begin ... endelse begin
... end
Einseitige Fallunterscheidung
Zweiseitige Fallunterscheidung
repeat ... until ...
for ... to ... do begin ... end
Wiederholung mitEndbedingung
Zählschleife
34
Aufgabe
Das Programm zur Simulation des
Chuck-A-Luck-Spiels soll wie folgt modifiziert
werden - Das gesamte Spiel soll mit nur einem
Button ausgeführt werden. - Zur Eingabe der
Spielzahl soll eine sog. RadioGroup benutzt
werden.
35
Teil 4
Datenmodellierung
36
Initialisierung des Kontostands
Die Initialisierung des Kontostands soll im
Programm selbst erfolgen.
Version 1
procedure TFGUI.BEinsatzZahlenClick(Sender
TObject) var konto integer begin konto
100 // Eingabe Kontostand übernehmen konto
StrToInt(PKontostand.Caption) //
Verarbeitung Einsatz vom Konto abbuchen konto
konto-1 // Ausgabe Aktualisierung der
Anzeige PKontostand.Caption IntToStr(konto) en
d
Vorsicht nicht korrekt!
37
Initialisierung des Kontostands
Die Initialisierung des Kontostands soll im
Programm selbst erfolgen.
Vorsicht nicht korrekt!
Version 2
procedure TFGUI.BEinsatzZahlenClick(Sender
TObject) var konto integer begin //
Verarbeitung Einsatz vom Konto abbuchen konto
konto-1 // Ausgabe Aktualisierung der
Anzeige PKontostand.Caption IntToStr(konto) en
d
procedure TFGUI.FormCreate(Sender TObject)
var konto integer begin randomize konto
100 PKontostand.Caption IntToStr(konto) end
38
Initialisierung des Kontostands
unit Unit1 interface uses ... type TFGUI
class(TForm) PUeberschrift TPanel ...
private Private-Deklarationen konto
integer public Public-Deklarationen
end var FGUI TFGUI ...
procedure TFGUI.BEinsatzZahlenClick
(Sender TObject) begin // Verarbeitung
Einsatz abbuchen konto konto-1 // Ausgabe
Aktual. der Anzeige PKontostand.Caption
IntToStr(konto) end
Korrekt!
procedure TFGUI.FormCreate(Sender
TObject) begin randomize konto
100 PKontostand.Caption IntToStr(konto) end
Version 3
39
Attribut als globale Variable
unit Unit1 interface uses ... type TFGUI
class(TForm) PUeberschrift TPanel ...
private Private-Deklarationen konto
integer public Public-Deklarationen
end var FGUI TFGUI ...
Durch die nebenstehende Deklaration wird das
Formular-Objekt um ein Attribut zur Verwaltung
des Kontostandes erweitert. Neben Attributen zur
Verwaltung der GUI-Objekte kann ein
Formular-Objekt auch Attribute zur Verwaltung
weiterer Daten enthalten. Diese werden hier in
den Bereich private Deklarationen geschrieben.
Attribut
procedure TFGUI.FormCreate(Sender
TObject) begin randomize konto
100 PKontostand.Caption IntToStr(konto) end
40
Datenmodell zur Miniwelt
1
4
2
5
3
6
3
spielzahl integer wuerfel1 integer wuerfel2
integer wuerfel3 integer konto integer
Unter einem Datenmodell soll hier eine
Beschreibung der Miniwelt verstanden werden, bei
der die relevanten Daten mit Hilfe von Variablen
/ Attributen eines Objektes erfasst werden.
41
Datenmodell zur Miniwelt
type TFGUI class(TForm) Pueberschrift
TPanel Pspielfeld TPanel Pwuerfel
TPanel Pkonto TPanel ...
BWuerfelWerfen TButton ... procedure
FormCreate(Sender TObject) private
Private-Deklarationen spielzahl integer
wuerfel1 integer wuerfel2 integer
wuerfel3 integer konto integer public
Public-Deklarationen end
Das Formular-Objekt soll auch für die Verwaltung
der Spieldaten zuständig sein. Hierzu werden
entsprechende Attribute in den Bereich private
Deklarationen eingeführt.
spielzahl integer wuerfel1 integer wuerfel2
integer wuerfel3 integer konto integer
42
Lokale Variable
type TFGUI class(TForm) ... private
Private-Deklarationen ... konto
integer public Public-Deklarationen
end
Globale Variable
procedure TFGUI.BGewinnVerbuchenClick(Sender
TObject) var treffer integer begin ... if
treffer gt 0 then konto kontotreffer1... end

Lokale Variable
Eine lokale Variable ist eine Variable, die
innerhalb einer Prozedur deklariert ist und auch
nur innerhalb dieser Prozedur zugreifbar ist.
43
Aufgabe
Verändern Sie das Programm so, dass das
Datenmodell mit Hilfe von Formular-Attributen
implementiert wird.
44
Aufgabe
Das Programm zur Simulation des Spiels chuck a
luck soll dem Benutzer auch folgende
statistische Daten liefern - Gesamtanzahl der
Spiele - insgesamt gewonnener / verlorener
Betrag - pro Spiel durchschnittlich gewonnener /
verlorener Betrag Erweitern Sie schrittweise das
bestehende Chuck-A-Luck-System.
45
Teil 5
Zustandsbasierte Modellierung
46
Aufbesserung des Kontos
Das Programm zur Simulation des
Chuck-A-Luck-Spiels lässt noch Bedienungen zu,
die in der Miniwelt nicht erlaubt sind.
Einsatz zahlen und Zahl tippen Würfel
werfen Gewinn verbuchen
Einsatz zahlen Zahl tippen (z. B. 1) Solange
Würfel werfen, bis die getippte Zahl fällt Gewinn
verbuchen
47
Zustandsbasierte Ablaufmodellierung
Ausgelöste Aktion(en) Einsatz vom Konto
abbuchen Spielzahl festlegen Würfelwerfen
simulieren Gewinn ermitteln und auf dem Konto
verbuchen
Auslösendes Ereignis BEinsatzZahlen.onClick RGSp
ielfeld.onClick BWuerfelWerfen.onClick BGewinnVe
rbuchen.onClick
AktuellerZustand bereit einsatzgezahlt gewürf
elt
NeuerZustand einsatzgezahlt einsatzgezahlt gewü
rfelt bereit
Einsatz zahlen und Zahl tippen Würfel
werfen Gewinn verbuchen
48
Zustandsbasierte Ablaufmodellierung
RGSpielfeld.onClick / Spielzahl festlegen
BEinsatzZahlen.onClick / Einsatz vom Konto
abbuchen
BWuerfelWerfen.onClick/Würfelwerfen simulieren
einsatzgezahlt
bereit
gewürfelt
BGewinnVerbuchen.onClick /Gewinn ermitteln und
auf dem Konto verbuchen
Einsatz zahlen und Zahl tippen Würfel
werfen Gewinn verbuchen
49
Zustandsbasierte Modellierung
Ausgelöste Aktion(en) Einsatz vom Konto
abbuchen Spielzahl festlegen Würfelwerfen
simulieren Gewinn ermitteln und auf dem Konto
verbuchen
Auslösendes Ereignis BEinsatzZahlen.onClick RGSp
ielfeld.onClick BWuerfelWerfen.onClick BGewinnVe
rbuchen.onClick
AktuellerZustand bereit einsatzgezahlt gewürf
elt
NeuerZustand einsatzgezahlt einsatzgezahlt gewü
rfelt bereit
Zustandsbasierte Modellierung wird benutzt, um
Systeme zu beschreiben, bei denen das Verhalten
nicht nur von äußeren Eingaben bzw.
Ereignissen, sondern auch von inneren Zuständen
abhängt, die das System durchlaufen hat. Das
Ergebnis einer solchen Modellierung nennt man
auch Zustandsautomat.
50
Zustandsbasierte Modellierung
Zustandsautomat
RGSpielfeld.onClick / Spielzahl festlegen
Auslösendes Ereignis
Ausgelöste Aktion(en)
BEinsatzZahlen.onClick / Einsatz vom Konto
abbuchen
BWuerfelWerfen.onClick/Würfelwerfen simulieren
Anfangs-zustand
einsatzgezahlt
bereit
gewürfelt
BGewinnVerbuchen.onClick /Gewinn ermitteln und
auf dem Konto verbuchen
Zustand
Zustands-übergang
51
Ansatz GUI-Objekte (de)aktivieren
procedure TFGUI.BEinsatzZahlenClick(Sender
TObject) begin // Aktualisierung des
Datenmodells konto konto-1 // Aktualisierung
der Anzeige PKontostand.Caption
IntToStr(konto) // Aktualisierung der
Kontrolle BEinsatzZahlen.Enabled
false RGSpielfeld.Enabled true BWuerfelWerfen
.Enabled true end
Das gewünschte Verhalten lässt sich mit Hilfe des
Attribut Enabled der benutzten GUI-Objekte
implementieren.
52
Aufgabe
Modifizieren Sie das Chuck-A-Luck-System so, dass
es das gewünschte Ablaufverhalten zeigt.
53
Ansatz Datenmodell erweitern
type tZustand (bereit, einsatzgezahlt,
gewuerfelt) type TFGUI class(TForm) ...
spielzahl integer wuerfel1 integer wuerfel2
integer wuerfel3 integer konto
integer zustand tZustand
Wir erweitern das Datenmodell um eine Variable
zur Beschreibung des Spielzustands.
procedure TFGUI.BEinsatzZahlenClick(Sender
TObject) begin if zustand bereit then begin
// Aktualisierung des Datenmodells konto
konto-1 zustand einsatzgezahlt //
Aktualisierung der Anzeige PKontostand.Caption
IntToStr(konto) end end
54
Aufgabe
Modifizieren Sie das Chuck-A-Luck-System so, dass
es das gewünschte Ablaufverhalten zeigt.
55
Ein Button, viele Aufgaben
Wir benutzen nur noch einen Button zur
Spielkontrolle. In Abhängigkeit des jeweiligen
Spielzustands soll sich die Aufschrift und das
Verhalten des Buttons ändern.
56
Aufgabe
Passen Sie das Chuck-A-Luck-System an die neuen
Anforderungen an. Nutzen Sie die sog.
case-Anweisung zur Fallunterscheidung (siehe
Delphi-Hilfe).
case zustand of bereit begin ...
end einsatzgezahlt begin ...
end gewuerfelt begin ... end
end
57
Zustandsbasierte Modellierung
Beachte Das gleiche Ereignis führt hier zu
unterschiedlichen Aktionen.
RGSpielfeld.onClick / Spielzahl festlegen
BSpielen.onClick / Einsatz vom Konto abbuchen
BSpielen.onClick/Würfelwerfen simulieren
einsatzgezahlt
bereit
gewürfelt
BSpielen.onClick /Gewinn ermitteln und auf Konto
verbuchen
58
Strukturierung der Lösung
procedure TFGUI.BSpielenClick(Sender TObject)
var treffer integer begin // Aktualisierung
der Kontrolle case zustand of bereit begin
BSpielen.Caption 'Würfel werfen' ... end
einsatzgezahlt ... gewuerfelt ... end //
Aktualisierung des Datenmodells case zustand of
bereit begin konto konto-1 zustand
einsatzgezahlt end einsatzgezahlt ...
gewuerfelt ... end // Aktualisierung der
Anzeige PKontostand.Caption IntToStr(konto) PW
uerfel1.Caption IntToStr(wuerfel1) PWuerfel2.C
aption IntToStr(wuerfel2) PWuerfel3.Caption
IntToStr(wuerfel3) end
59
Teil 6
Zusammenfassung
60
Benutzungsoberfläche
Die Mensch-Maschine-Interaktion wird wesentlich
durch die GUI-Objekte zur Gestaltung der
Benutzungsoberfläche bestimmt.
FGUI TFGUI
PWuerfel1 TPanel
PWuerfel3TPanel
PWuerfel2 TPanel
PWuerfel TPanel
PUeberschrift TPanel
Pspielfeld TPanel
PKonto TPanel
PKontostand TPanel
ESpielzahl TEdit
BWuerfelWerfenTButton
BEinsatzZahlenTButton
BGewinnVerbuchenTButton
61
EVA - Systeme
Einfache Eingabe-Verarbeitung-Ausgabe-Systeme
lassen sich direkt mit Hilfe von GUI-Objekten
realisieren.
procedure TFGUI.BGewinnVerbuchenClick(Sender
TObject) var treffer integer wuerfel1,
wuerfel2, wuerfel3, spielzahl, konto
integerbegin // Eingabe Spieldaten
übernehmen spielzahl StrToInt(ESpielzahl.Text)
konto StrToInt(PKontostand.Caption) wuerfel1
StrToInt(PWuerfel1.Caption) wuerfel2
StrToInt(PWuerfel2.Caption) wuerfel3
StrToInt(PWuerfel3.Caption) // Verarbeitung
Treffer und neuen Kontostand bestimmen treffer
0 if spielzahl wuerfel1 then inc(treffer) if
spielzahl wuerfel2 then inc(treffer) if
spielzahl wuerfel3 then inc(treffer) if
treffer gt 0 then konto kontotreffer1 //
Ausgabe Aktualisierung der Anzeige PKontostand.Ca
ption IntToStr(konto) end
62
Trennung GUI Datenmodell
Bei komplexeren Systemen ist es günstig, ein von
der GUI getrenntes Datenmodell zu entwickeln.
type TFgui class(TForm) Pueberschrift
TPanel Pspielfeld TPanel Pwuerfel
TPanel Pkonto TPanel ...
BWuerfelWerfen TButton ... private
Private-Deklarationen spielzahl integer
wuerfel1 integer wuerfel2 integer
wuerfel3 integer konto integer public
Public-Deklarationen end
GUI-Objekte
Datenmodell
63
Trennung GUI Datenmodell
Die Trennung zwischen GUI und Datenmodell sollte
sich auch im Programmtext widerspiegeln.
procedure TFGUI.BGewinnVerbuchenClick(Sender
TObject) var treffer integer begin //
Eingabe Datenmodell aktualisieren spielzahl
StrToInt(ESpielzahl.Text) konto
StrToInt(PKontostand.Caption) wuerfel1
StrToInt(PWuerfel1.Caption) wuerfel2
StrToInt(PWuerfel2.Caption) wuerfel3
StrToInt(PWuerfel3.Caption) // Verarbeitung
Daten verarbeiten treffer 0 if spielzahl
wuerfel1 then inc(treffer) if spielzahl
wuerfel2 then inc(treffer) if spielzahl
wuerfel3 then inc(treffer) if treffer gt 0 then
konto kontotreffer1 // Ausgabe Anzeige
aktualisieren PKontostand.Caption
IntToStr(konto) end
64
Zustandsbasierte Modellierung
Zustandsbasierte Modellierung ist eine wichtige
Technik, um komplexere (reaktive) Systeme zu
entwerfen.
RGSpielfeld.onClick / Spielzahl festlegen
BEinsatzZahlen.onClick / Einsatz vom Konto
abbuchen
BWuerfelWerfen.onClick/Würfelwerfen simulieren
einsatzgezahlt
bereit
gewürfelt
BGewinnVerbuchen.onClick /Gewinn ermitteln und
auf Konto verbuchen
65
Teil 7
Vertiefende Übungen
66
Aufgabe
Entwickeln Sie ein einfaches Eingabe-Ausgabe-Syste
m zur Berechnung des BMI-Indexes. Eingaben
Körpergröße, Gewicht Ausgaben BMI-Index, ...
67
Aufgabe
Die Entwicklung der Weltbevölkerung schreitet
rasch voran Im Jahr 2000 lebten etwa 6
Milliarden auf der Erde. Zur Zeit wächst die
Weltbevölkerung jährlich um ca. 1,3 . Kann das
so weitergehen? Mit Hilfe eines interaktiven
Simulationsprogramms soll der Benutzer die
Konsequenzen eines solchen Wachstums austesten
können. Das Programm kann wie folgt erweitert
werden
Auslösendes Ereignis Mausklick auf
lt-Button Mausklick auf gtgt-Button Mausklick auf
gtgt-Button
Ausgelöste Aktion(en) Die vorherige Population
(jeweils vor einem Jahr) wird berechnet (und
angezeigt), sofern das Jahr nicht vor 2000
ist. Die Population 10 Jahre später wird
berechnet (und angezeigt). Die Population 10
Jahre vorher wird berechnet (und angezeigt). Man
kann aber höchstens bis 2000 zurückspringen.
68
Aufgabe
Entwickeln Sie ein einfaches zustandsbasiertes
System zur Simulation einer Ampel. Hinweis Die
Ampel soll zunächst möglichst einfach dargestellt
werden. Erst in einem zweiten Schritt können sie
die Darstellung optimieren (wie z. B. in den
Materialien zum Buch Damann, Wemßen
Objektorientierte Programmierung mit Delphi, Band
1, s. u.).
69
Aufgabe
Entwickeln Sie ein Programm zur Simulation des
Ziegenproblems.
Der Moderator einer Spielshow zeigt dem
Kandidaten 3 Türen. "Hinter einer der 3 Türen
steht der Hauptgewinn, ein Auto. Hinter den
beiden anderen Türen sind Ziegen.Welche Tür
wählen Sie ?" Nachdem sich der Kandidat
entschieden hat (z.B. für Tür 1), öffnet der
Moderator eine der beiden anderen mit einer Ziege
(z.B. Tür 3). "Bleiben Sie nun bei Ihrer Wahl
oder möchten Sie auf Tür 2 umwählen ?"
Siehe auch http//www.jgiesen.de/Quiz/Ziegenprob
lem/Ziegen.html
70
Aufgabe
Entwickeln Sie ein Programm zur Simulation eines
einfachen Taschenrechners. Gehen Sie dabei
schrittweise vor von einem ersten einfachen
System (das evtl. nur ganze Zahlen verarbeitet)
bis hin zu komplexeren Systemen (die evtl.
Speichertasten, Klammern, ... zulassen).
71
Literaturhinweise
E. Modrow Informatik mit Delphi, Band 1/2,
Dümmler-Stam 1998-2000. P. Damann, J. Wemßen
Objektorientierte Programmierung mit Delphi, Band
1. Klett-Verlag 2001. U. Bänisch Praktische
Informatik mit Delphi, Band 1/2. Cornelsen
2001. Frischalowski Delphi 5.0, Band 1/2,
Herdt-Verlag 1999. Pohl Schülerübungen /
Klausuren in Delphi, Heft 1/2, Verlag J. Pohl
1997-2001. Noll, Mayr, Paulus, Selinger
http//informatikag.bildung-rp.de/html/delphi_tei
l_1.html K. Merkerthttp//hsg.region-kaiserslaut
ern.de/faecher/inf/material/delphi/index.php R.
Mechlinghttp//www.gk-informatik.de/ K.
Heidlerhttp//www.friedrich.fr.schule-bw.de/delp
hi/delphi.htm Hessischer Bildungsserverhttp//ww
w.bildung.hessen.de/abereich/inform/skii/material/
delphi/index.htm
72
Literaturhinweise
S. Spolwig http//oszhdl.be.schule.de/gymnasium/f
aecher/informatik/delphi/index.htm Weitere
Hinweise unter http//www.delphi-source.de Einste
iger-Tutorial http//www.delphi-treff.de/content/t
utorials/einsteigerkurs/ ...
Write a Comment
User Comments (0)
About PowerShow.com