65
Ereignisgesteuerte Ereignisgesteuerte Programmierung Programmierung Klaus Becker 2002

Ereignisgesteuerte Programmierung Klaus Becker 2002

Embed Size (px)

Citation preview

Page 1: Ereignisgesteuerte Programmierung Klaus Becker 2002

Ereignisgesteuerte Ereignisgesteuerte ProgrammierungProgrammierung

Klaus Becker2002

Page 2: Ereignisgesteuerte Programmierung Klaus Becker 2002

2

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gDas ZiegenproblemDas Ziegenproblem

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

Page 3: Ereignisgesteuerte Programmierung Klaus Becker 2002

3

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gSimulationsprogrammSimulationsprogramm

http://www.jgiesen.de/Quiz/Ziegenproblem/Ziegen.html

Page 4: Ereignisgesteuerte Programmierung Klaus Becker 2002

4

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gDialog- und Ein-/AusgabegestaltungDialog- und Ein-/Ausgabegestaltung

Button / Schaltfläche

Label / Anzeigefläche

Button / Schaltfläche

Ereignisgesteuerte graphische Interaktionselemente

Page 5: Ereignisgesteuerte Programmierung Klaus Becker 2002

5

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gZielsetzungZielsetzung

Entwicklung ereignisgesteuerter Programme mit dem Werkzeug

Delphi

Page 6: Ereignisgesteuerte Programmierung Klaus Becker 2002

6

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gTeil 1Teil 1

Programmgestaltung mit GUI-Objekten

Page 7: Ereignisgesteuerte Programmierung Klaus Becker 2002

7

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gEin erstes einfaches BeispielEin erstes einfaches Beispiel

Zielsetzung:Die Entwicklung der Weltbevölkerung schreitet rasch voran: Im Jahr 1999 wurde die 6 Milliardengrenze überschritten; 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.

Zielsetzung:Die Entwicklung der Weltbevölkerung schreitet rasch voran: Im Jahr 1999 wurde die 6 Milliardengrenze überschritten; 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.

Page 8: Ereignisgesteuerte Programmierung Klaus Becker 2002

8

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gEntwurf der BenutzungsschnittstelleEntwurf der Benutzungsschnittstelle

Ereignisbehandlung:

Benutzungsoberfläche:

Benutzeraktion Ereignis

Mausklick auf init-Button

Mausklick auf >-Button

Button

Edit

Label

Programmreaktionen:

Die Anfangspopulation (1999: 6.0 Mrd.) wird festgelegt (und angezeigt).

Die nächste Population (jeweils nach einem Jahr) wird berechnet (und angezeigt).

Page 9: Ereignisgesteuerte Programmierung Klaus Becker 2002

9

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gDelphi-EntwicklungsumgebungDelphi-Entwicklungsumgebung

Komponentenpalette

Objektinspektor

Formular

Page 10: Ereignisgesteuerte Programmierung Klaus Becker 2002

10

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gErzeugung von GUI-ObjektenErzeugung von GUI-Objekten

Aktivierung der Komponente

Page 11: Ereignisgesteuerte Programmierung Klaus Becker 2002

11

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gFestlegung von ObjekteigenschaftenFestlegung von Objekteigenschaften

Veränderung der zugeordneten

Werte

Page 12: Ereignisgesteuerte Programmierung Klaus Becker 2002

12

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gEine erste ObjektvorstellungEine erste Objektvorstellung

EJahr: TEdit

Text = ´´

Left = 208

Top = 80

...

Klasse

EAnzahl: TEdit

Text = ´´

Left = 208

Top = 120

...

BInit: TButton

Caption = ´Init´

Left = 240

Top = 176

...

Objektname

Jedes Objekt ist über seinen Namen identifizierbar.

Objekte mit gleichem Aufbau (Attributen) werden zu Klassen zusammengefasst.

Page 13: Ereignisgesteuerte Programmierung Klaus Becker 2002

13

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gEine erste ObjektvorstellungEine erste Objektvorstellung

EJahr: TEdit

Text = ´´

Left = 208

Top = 80

...

Attribut Attributwert

Der Aufbau eines Objekts wird über Attribute (Eigenschaften) bestimmt. Die Attributwerte legen den aktuellen Objektzustand fest.

Objekt

Page 14: Ereignisgesteuerte Programmierung Klaus Becker 2002

14

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gBenutzungsoberflächeBenutzungsoberfläche

BWeiter

EAnzahl

LUeberschrift

LUeberschrift: TLabel

...

LJahr: TLabel

...

LAnzahl: TLabel

...

EJahr: TEdit

...

EAnzahl: TEdit

...

BInit: TButton

...

BWeiter: TButton

...

GUI-Objekte:

Form1: TForm

...

EJahr

BInit

LJahr

LAnzahl

Modellierung:

Page 15: Ereignisgesteuerte Programmierung Klaus Becker 2002

15

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gImplementierungImplementierung

BWeiter

EAnzahl

LUeberschrift

EJahr

BInit

LJahr

LAnzahl

Aufgabe:

Erstellen Sie mit Hilfe des Delphi-Objektinspektors die unten abgebildete Benutzungsoberfläche. Geben Sie den benutzten GUI-Objekten die unten festgelegten Namen. Schauen Sie sich anschließend auch den von Delphi erzeugten Quelltext an.

Page 16: Ereignisgesteuerte Programmierung Klaus Becker 2002

16

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gDelphi-QuelltextDelphi-Quelltext

unit Unit1;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type TForm1 = class(TForm) LUeberschrift: TLabel; BInit: TButton; BWeiter: TButton; LJahr: TLabel; LAnzahl: TLabel; EJahr: TEdit; EAnzahl: TEdit; private { Private-Deklarationen } public { Public-Deklarationen } end;

var Form1: TForm1;

implementation

{$R *.DFM}

end.

Page 17: Ereignisgesteuerte Programmierung Klaus Becker 2002

17

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gDaten und OperationenDaten und Operationen

const p = 1.3; var Jahr : integer; Anzahl : real;

Variablen / Konstanten:Informationen:

Im Jahr 1999 wurde die 6 Milliardengrenze überschritten; zur Zeit wächst die Weltbevölkerung jährlich um ca. 1,3 %.

Modellierung:

Page 18: Ereignisgesteuerte Programmierung Klaus Becker 2002

18

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gOperationenOperationen

procedure initPopulation;beginJahr := 1999;Anzahl := 6.0;end;

procedure naechstePopulation;beginJahr := Jahr + 1;Anzahl := Anzahl + p/100*Anzahl;end;

Benutzeraktion: Mausklick auf init-Button

Programmreaktion: Die Anfangspopulation (1999: 6.0 Mrd.) wird festgelegt.

Benutzeraktion: Mausklick auf >-Button

Programmreaktion: Die nächste Population wird berechnet.

Page 19: Ereignisgesteuerte Programmierung Klaus Becker 2002

19

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gImplementierungImplementierung

...

implementation

{$R *.DFM}

// Datenmodellconst p = 1.3; // jährliche prozentuale Wachstumsratevar Jahr : integer; Anzahl : real;

// Operationen zur Aktualisierung des Datenmodellsprocedure initPopulation;begin ... end;

procedure naechstePopulation;begin ... end;

end.

Aufgabe:

Ergänzen Sie in der Implementierung das Datenmodell wie folgt.

Page 20: Ereignisgesteuerte Programmierung Klaus Becker 2002

20

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gEreignisbehandlungEreignisbehandlung

Modellierung:

Benutzeraktion Ereignis

Mausklick auf init-Button

Mausklick auf >-Button

Programmreaktionen:

Die Anfangspopulation (1999: 6.0 Mrd.) wird festgelegt (und angezeigt).

Die nächste Population (jeweils nach einem Jahr) wird berechnet (und angezeigt).

Page 21: Ereignisgesteuerte Programmierung Klaus Becker 2002

21

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gDatenaustausch mit den GUI-ObjektenDatenaustausch mit den GUI-Objekten

EJahr.Text := IntToStr(Jahr);EAnzahl.Text := FloatToStr(Anzahl);

const p = 1.3; var Jahr : integer; Anzahl : real;

Variablen / Konstanten:

EJahr: TEdit

Text = ...

EAnzahl: TEdit

Text = ...

GUI-Objekte:

Jahr := StrToInt(EJahr.Text);Anzahl := StrToFloat(EAnzahl.Text);

Variablen GUI-Objekte

Variablen GUI-Objekte

Page 22: Ereignisgesteuerte Programmierung Klaus Becker 2002

22

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gEreignisbehandlungsmethodenEreignisbehandlungsmethoden

procedure TForm1.BInitClick(Sender: TObject);begininitPopulation; // Aktualisier. der Daten EJahr.Text := IntToStr(Jahr); // Aktualisierung der EAnzahl.Text := FloatToStr(Anzahl); // Objektattributwerteend;

procedure TForm1.BWeiterClick(Sender: TObject);beginnaechstePopulation; // Aktualisier. der Daten EJahr.Text := IntToStr(Jahr); // Aktualisierung der EAnzahl.Text := FloatToStr(Anzahl); // Objektattributwerteend;

Ereignis: Mausklick auf init-Button

Ereignis: Mausklick auf >-Button

Page 23: Ereignisgesteuerte Programmierung Klaus Becker 2002

23

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gDelphi-QuelltextDelphi-Quelltext

...

implementation

{$R *.DFM}

// Datenmodell...

// Operationen zur Aktualisierung des Datenmodells...

// Ereignisbehandlungsmethodenprocedure TForm1.BInitClick(Sender: TObject);begin ... end;

procedure TForm1.BWeiterClick(Sender: TObject);begin ... end;

end.

Bevölkerungsentwicklung1

Aufgabe:

Ergänzen Sie in der Implementierung die fehlenden Ereignisbehandlungsmethoden.

Page 24: Ereignisgesteuerte Programmierung Klaus Becker 2002

24

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gProjektdateien – eine ÜbersichtProjektdateien – eine Übersicht

program Project1;

uses Forms, Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run;end.

Project1.dpr

Project1.exe Compiliertes Programm

Unit1.pas Quelltext für Unit1

Unit1.dcu compilierte Unit1

Project1.cfg Konfigurationsdatei

Project1.res Windows-Ressourcendatei (Button, Label, ...)

Project1.dof Delphi-Projekt-Optionen

Unit1.dfm Bilddatei für Form1

Page 25: Ereignisgesteuerte Programmierung Klaus Becker 2002

25

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gÜbungen – Aufgabe 1Übungen – Aufgabe 1

Ergänzen Sie weitere Buttons, deren Verhalten wie folgt spezifiziert ist:

Benutzeraktion:

Mausklick auf <-Button

Mausklick auf >>-Button

Mausklick auf >>-Button

Programmreaktion:

Die vorherige Population (jeweils vor einem Jahr) wird berechnet (und angezeigt), sofern das Jahr nicht vor 1999 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 1999 zurückspringen.

Page 26: Ereignisgesteuerte Programmierung Klaus Becker 2002

26

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gÜbungen – Aufgabe 2Übungen – Aufgabe 2

Der Benutzer / die Benutzerin soll selbst die Anfangswerte der Population festlegen können. Insbesondere soll er / sie auch die jährliche prozentuale Wachstumsrate eingeben können.

Ändern Sie das Simulationsprogramm entsprechend ab. Überlegen Sie sich hierzu zunächst, welche Programmteile sie verändern / ergänzen müssen.

- Benutzungsoberfläche ?- Datenmodell ?- Verarbeitungsoperationen ?- Ereignisbehandlungsmethoden?

Page 27: Ereignisgesteuerte Programmierung Klaus Becker 2002

27

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gÜbungen – Aufgabe 3Übungen – Aufgabe 3

Das benutzte Wachstumsmodell beschreibt die Bevölkerungsentwicklung nur in einem begrenzten Zeitraum realistisch.

Über längere Zeiträume lässt sich das Bevölkerungswachstum besser durch die angegebene Folge beschreiben:

B0 = 6.0

Bn+1 = Bn + 0.0027*Bn*(11 – Bn)

Ändern Sie das Simulationsprogramm entsprechend ab. Überlegen Sie sich hierzu zunächst, welche Programmteile sie verändern müssen.

- Benutzungsoberfläche ?- Datenmodell ?- Verarbeitungsoperationen ?- Ereignisbehandlungsmethoden?

Page 28: Ereignisgesteuerte Programmierung Klaus Becker 2002

28

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gÜbungen – Aufgabe 4Übungen – Aufgabe 4

Es soll ein Programm erstellt werden, das dem Benutzer Aufgaben zu den vier Grundrechenarten aus dem Zahlenbereich 0..10 stellt.

Legen Sie zunächst die Ereignisbehandlung fest.

Entwerfen Sie anschließend das Datenmodell mit den zugehörigen Verarbeitungsoperationen.

Page 29: Ereignisgesteuerte Programmierung Klaus Becker 2002

29

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gTeil 2Teil 2

Ereignisverarbeitung

Page 30: Ereignisgesteuerte Programmierung Klaus Becker 2002

30

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gDer RechentrainerDer Rechentrainer

Ziel: Es soll ein Programm erstellt werden, das dem Benutzer Aufgaben zu den vier Grundrechenarten aus dem Zahlenbereich 0..10 stellt.

(vgl. auch G. Noll: informatikag.bildung-rp.de/html/delphi_teil_1.html)

Ziel: Es soll ein Programm erstellt werden, das dem Benutzer Aufgaben zu den vier Grundrechenarten aus dem Zahlenbereich 0..10 stellt.

(vgl. auch G. Noll: informatikag.bildung-rp.de/html/delphi_teil_1.html)

Page 31: Ereignisgesteuerte Programmierung Klaus Becker 2002

31

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gModellierung der Modellierung der

BenutzungsschnittstelleBenutzungsschnittstelle

Page 32: Ereignisgesteuerte Programmierung Klaus Becker 2002

32

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gModellierung der EreignisbehandlungModellierung der Ereignisbehandlung

Ereignisse:

BAddition.OnClick

BSubtraktion.OnClick

BMultiplikation.OnClick

BDivision.OnClick

BErgebnis.OnClick

Form1.OnCreate

Aktionen:

Erzeuge +-Aufgabe; Berechne Ergebnis; Zeige Aufgabe

Erzeuge -Aufgabe; Berechne Ergebnis; Zeige Aufgabe

Erzeuge *-Aufgabe; Berechne Ergebnis; Zeige Aufgabe

Erzeuge :-Aufgabe; Berechne Ergebnis; Zeige Aufgabe

Zeige Ergebnis

Initialisiere Zufallsgenerator

Page 33: Ereignisgesteuerte Programmierung Klaus Becker 2002

33

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gModellierung der Daten und Modellierung der Daten und

OperationenOperationen

var Rechenzeichen: char; Zahl1, Zahl2, Ergebnis: integer;

Daten:

Verarbeitungsoperationen:procedure PlusAufgabeErzeugen;...

procedure MinusAufgabeErzeugen;...

procedure MalAufgabeErzeugen;...

procedure DurchAufgabeErzeugen;...

procedure ErgebnisBerechnen;...

Page 34: Ereignisgesteuerte Programmierung Klaus Becker 2002

34

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gAuszug aus der ImplementierungAuszug aus der Implementierung

...procedure PlusAufgabeErzeugen;beginZahl1 := random(11);Zahl2 := random(11);Rechenzeichen := '+';end;

procedure MinusAufgabeErzeugen;beginZahl1 := random(11);Zahl2 := random(11);Rechenzeichen := '-';end;

procedure MalAufgabeErzeugen;begin...

Beachte: Die Implementierung ist redundant.

Page 35: Ereignisgesteuerte Programmierung Klaus Becker 2002

35

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gModellierung der Daten und Modellierung der Daten und

OperationenOperationen

var Rechenzeichen: char; Zahl1, Zahl2, Ergebnis: integer;

Daten:

Verarbeitungsoperationen:procedure AufgabeErzeugen;...

procedure ErgebnisBerechnen;...

Page 36: Ereignisgesteuerte Programmierung Klaus Becker 2002

36

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gModellierung der EreignisbehandlungModellierung der Ereignisbehandlung

Ereignis:

BAddition.OnClickBSubtraktion.OnClickBMultiplikation.OnClickBDivision.OnClick

BErgebnis.OnClick

Form1.OnCreate

Behandlungsmethode:

TForm1.RechenzeichenClick(Sender: TObject)

TForm1.BErgebnisClick(Sender: TObject)

TForm1.FormCreate(Sender: TObject)

Page 37: Ereignisgesteuerte Programmierung Klaus Becker 2002

37

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gVerarbeitung von EreignissenVerarbeitung von Ereignissen

Auslösende Aktion: Mausklick auf +-Button

Ereignis: BAddition.OnClick

Ausgelöste Aktion: RechenzeichenClick(BAddition)

Delphi wartet auf Ereignisse und reagiert mit der Ausführung der zugeordneten Methoden

Sender

Page 38: Ereignisgesteuerte Programmierung Klaus Becker 2002

38

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gImplementierungshinweise Implementierungshinweise

Ereignis:

BAddition.OnClickBSubtraktion.OnClickBMultiplikation.OnClickBDivision.OnClick

Behandlungsmethode:

TForm1.RechenzeichenClick(Sender: TObject)

procedure TForm1.BRechenzeichenClick(Sender: TObject);begin// Aktualisierung der Modelldatenif Sender = BAddition then Rechenzeichen := '+';if Sender = BSubtraktion then Rechenzeichen := '-';if Sender = BMultiplikation then Rechenzeichen := '*';if Sender = BDivision then Rechenzeichen := ':';// Aufruf der VerarbeitungsoperationenAufgabeErzeugen;ErgebnisBerechnen;// Aktualisierung der AnzeigeLZahl1.Caption := IntToStr(Zahl1);...end;

Page 39: Ereignisgesteuerte Programmierung Klaus Becker 2002

39

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gImplementierung Implementierung

Aufgabe:

Ändern Sie das Programm Rechentrainer1 gemäß der verbesserten Modellierung ab.

(zur Kontrolle: Rechentrainer2)

Page 40: Ereignisgesteuerte Programmierung Klaus Becker 2002

40

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gÜbungen – Aufgabe 5Übungen – Aufgabe 5

Der Rechentrainer soll wie folgt abgeändert werden:

Der Benutzer soll einen Lösungsvorschlag in ein Editfeld eingeben können. Nach Abschluss der Eingabe bewertet das System den Lösungsvorschlag (richtig oder falsch).

Ändern Sie zunächst die Benutzungsoberfläche geeignet ab.

Ergänzen Sie gegebenenfalls das Datenmodell.

Entwerfen und implementieren Sie eine geeignete Ereignisbehandlungs-methode. Das geeignete Ereignis finden Sie mit dem Objektinspektor.

(zur Kontrolle: Rechentrainer3)

Page 41: Ereignisgesteuerte Programmierung Klaus Becker 2002

41

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gTeil 3Teil 3

Modellierung ereignisgesteuerter Abläufe

Page 42: Ereignisgesteuerte Programmierung Klaus Becker 2002

42

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gDas ZiegenproblemDas Ziegenproblem

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 umwählen (hier Tür 2) ?"

Page 43: Ereignisgesteuerte Programmierung Klaus Becker 2002

43

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gSystembeschreibungSystembeschreibung

Das zu entwickelnde System simuliert die Gewinnermittlung der Spielshow. Der Benutzer des Systems übernimmt die Rolle des Kandidaten, das System selbst simuliert den Moderator.

Anforderungen an das System:

- Das System bereitet eine Spielsituation (wie im Bild) vor.

- Der Benutzer kann mit dem System über Schaltflächen etc. interagieren.

- Der Benutzer wird über seine vorzunehmenden Aktionen und die jeweiligen Resultate informiert.

- Das Spiel kann wiederholt ausgeführt werden.

[- Es wird eine kleine Statistik über die Spielergebnisse angefertigt.]

Page 44: Ereignisgesteuerte Programmierung Klaus Becker 2002

44

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gModellierung der Modellierung der

BenutzungsoberflächeBenutzungsoberfläche

Page 45: Ereignisgesteuerte Programmierung Klaus Becker 2002

45

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gAblaufmodellierungAblaufmodellierung

Ereignis:

Form1.OnCreate

BTuer1.OnClick...

BTuer1.OnClick...

BNeu.OnClick

Aktionen:

Spiel vorbereiten Anzeigen

Ziegentür öffnenAnzeigen

Spiel auswerten Anzeigen

Spiel vorbereiten Anzeigen

Zustand:

bereit

gewählt

fertig

Neuer Zustand:

bereit

gewählt

fertig

bereit

Page 46: Ereignisgesteuerte Programmierung Klaus Becker 2002

46

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gAblaufmodellierungAblaufmodellierung

BTuer1.OnClick / Ziegentür öffnen

bereit gewählt

fertig

BNeu.OnClick / Spiel vorbereiten

BTuer2.OnClick / Ziegentür öffnen

BTuer3.OnClick/ Ziegentür öffnen

Form1.OnCreate / Spiel vorbereiten

BTuer1.OnClick / Spiel auswerten

BTuer2.OnClick / Spiel auswerten

BTuer3.OnClick / Spiel auswerten

BNeu.OnClick / Spiel vorbereiten

BNeu.OnClick / Spiel vorbereiten

BTuer1.OnClick

BTuer2.OnClick

BTuer3.OnClick

Darstellung mit einem Zustandsübergangsdiagramm

Zustandsbasierte Ablaufmodellierung

Page 47: Ereignisgesteuerte Programmierung Klaus Becker 2002

47

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gModellierungstechnik: AutomatModellierungstechnik: Automat

Zustand1Ereignis [Bedingung] / Aktion

Grundschema eines Zustandsübergangs bei einem (Harel-) Automat

Zustand2

Page 48: Ereignisgesteuerte Programmierung Klaus Becker 2002

48

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gDatenmodellierungDatenmodellierung

type tZustand = (bereit, gewaehlt, fertig);

var offen1: boolean offen2: boolean offen3: boolean Gewinntuer: integer; gewaehlteTuer: integer; Gewinn: string; Spielzustand: tZustand

Version 1

Ziegenproblem1

Page 49: Ereignisgesteuerte Programmierung Klaus Becker 2002

49

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gDatenmodellierungDatenmodellierung

type tZustand = (bereit, gewaehlt, fertig); tTuer = RECORD offen: boolean; Gewinn: string; END;

var Tuer1: tTuer Tuer2: tTuer Tuer3: tTuer Gewinntuer: integer; gewaehlteTuer: integer; SpielGewinn: string; Spielzustand: tZustand

Version 2

Ziegenproblem2

Page 50: Ereignisgesteuerte Programmierung Klaus Becker 2002

50

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gDatenmodellierungDatenmodellierung

type tZustand = (bereit, gewaehlt, fertig); tTuer = RECORD offen: boolean; Gewinn: string; END;

var Tuer: array [1..3] of tTuer Gewinntuer: integer; gewaehlteTuer: integer; SpielGewinn: string; Spielzustand: tZustand

Version 3

Page 51: Ereignisgesteuerte Programmierung Klaus Becker 2002

51

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gModellierung der Modellierung der

VerarbeitungsoperationenVerarbeitungsoperationen

SpielVorbereiten- alle Türen werden geschlossen- die Gewinntür wird (per Zufallsgenerator) ermittelt- der Spielzustand wird gesetzt

ZiegentuerOeffnen- die vom Master gewählte „Ziegentür“ wird bestimmt und geöffnet- der Spielzustand wird aktualisiert

SpielAuswerten- alle Türen werden geöffnet- der Gewinn wird ermittelt- der Spielzustand wird aktualisiert

informelle Verhaltensbeschreibungen

Page 52: Ereignisgesteuerte Programmierung Klaus Becker 2002

52

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gImplementierungImplementierung

Versuchen Sie jetzt, das Programm selbst zu implementieren.

Sie können aber auch eine fertige Implementierung analysieren und um eine statistische Auswertung (wie beim Internet-Simulationsprogramm) ergänzen.

Page 53: Ereignisgesteuerte Programmierung Klaus Becker 2002

53

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gÜbungen – Aufgabe 6Übungen – Aufgabe 6

Password-Überprüfung

Das zu entwickelnde System ermittelt per Zufallsgenerator eine Zahl zwischen 0 und 9 (Password). Der Benutzer hat maximal 3 Versuche, das Password richtig einzugeben. Nach drei Fehlversuchen nimmt das System keine weiteren Eingaben mehr an und informiert den Benutzer hierüber.

Entwickeln Sie ein solches Passwordüberprüfungssystem.

Schritt 1: Systembeschreibung (teilweise oben durchgeführt)

Schritt 2: Modellierung des Systems (Benutzungsoberfläche; Ablaufmodell. mit Automat; Datenmodell incl. Verarbeitungsoperationen)

Schritt 3: Realisierung bzw. Implementierung des Systems

Schritt 4: Test des Systems

Page 54: Ereignisgesteuerte Programmierung Klaus Becker 2002

54

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gÜbungen – Aufgabe 7Übungen – Aufgabe 7

17 und 4

Ziel ist es, das Spiel „17 und 4“ zu simulieren. Das Spiel soll wie folgt funktionieren:In jedem Spielzug wird eine Karte mit einer Zahl aus dem Bereich [1;...;11] bestimmt und auf einen Kartenstapel gelegt. Der Spieler kann nach jedem Spielzug entscheiden, ob er aufhört oder weiter spielt. Ist die Summe der Zahlen der Karten des Stapels größer als 21, so hat der Spieler verloren. Hört der Spieler bei einer Stapelsumme kleiner oder gleich 21 auf, so wird die nächste Karte gezogen. Ist die neue Stapelsumme immer noch kleiner oder gleich 21, so hat der Spieler verloren, andernfalls gewonnen.

Page 55: Ereignisgesteuerte Programmierung Klaus Becker 2002

55

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gAufgabe 6 - LösungsvorschlagAufgabe 6 - Lösungsvorschlag

Password1

Page 56: Ereignisgesteuerte Programmierung Klaus Becker 2002

56

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gAufgabe 6 - LösungsvorschlagAufgabe 6 - Lösungsvorschlag

EEingabe.OnChange / [Eingabe Password] /Ausgabe: falsch

0 1 2

Form1.OnCreate / DatenInitialisieren

4

3

EEingabe.OnChange / [Eingabe Password] /Ausgabe: falsch

EEingabe.OnChange / [Eingabe Password] /Ausgabe: falsch

EEingabe.OnChange /

EEingabe.OnChange / [Eingabe = Password] /Ausgabe: ok

EEingabe.OnChange /

Page 57: Ereignisgesteuerte Programmierung Klaus Becker 2002

57

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gAufgabe 6 - LösungsvorschlagAufgabe 6 - Lösungsvorschlag

// Datenmodelltype tZustand = 0..4;

var Password : integer; Eingabe : integer; Zustand : tZustand;

// Datenverarbeitungsoperationen

procedure DatenInitialisieren;beginrandomize;Password := random(10);Zustand := 0;end;

Password1

Page 58: Ereignisgesteuerte Programmierung Klaus Becker 2002

58

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gAufgabe 6 - LösungsvorschlagAufgabe 6 - Lösungsvorschlag

// Ereignisbehandlungsmethoden

procedure TForm1.FormCreate(Sender: TObject);begin// Aktualisierung des DatenmodellsDatenInitialisieren;end;

procedure TForm1.EEingabeChange(Sender: TObject);begin// Aktualisierung des Datenmodellsif Zustand < 3 then begin Eingabe := StrToInt(EEingabe.Text); if Eingabe = Password then Zustand := 4 else Zustand := Zustand + 1; end;// Aktualisierung der Anzeigeif Zustand = 4 then PRueckmeldung.Caption := 'Ok!'else PRueckmeldung.Caption := 'Falsch!';end;

Password1

Page 59: Ereignisgesteuerte Programmierung Klaus Becker 2002

59

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gTeil 4Teil 4

Entwicklung von Delphi-Programmen

Page 60: Ereignisgesteuerte Programmierung Klaus Becker 2002

60

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gProgrammentwicklungProgrammentwicklung

Problemanalyse

Entwurf / Modellierung

- Modellierung der Benutzungsoberfläche – erfolgt oft direkt in der Entwicklungsumgebung: Auswahl der Objekte zur Systemkontrolle und Datenanzeige - Modellierung der Ereignisbehandlung (Tabelle / Automat)- Modellierung der Daten und Verarbeitungsoperationen (ergeben sich i. a. aus der Ereignisbehandlung)

Realisierung- Implementierung des Datenmodells und der Verarbeitungsoperationen - Implementierung der Ereignisbehandlungsmethoden

Nutzung

- Testen der Programmfunktionalitäten

Page 61: Ereignisgesteuerte Programmierung Klaus Becker 2002

61

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gStrukturierung: Model-View-ControlStrukturierung: Model-View-Control

var Rechenzeichen: char; Zahl1, Zahl2, Ergebnis: integer;

procedure AufgabeErzeugen;...

procedure ErgebnisBerechnen;...

Model

View

ControlControl

Page 62: Ereignisgesteuerte Programmierung Klaus Becker 2002

62

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gProgrammgestaltungProgrammgestaltung

unit Unit1;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type TForm1 = class(TForm) // View- und Control-Objekte LUeberschrift: TLabel; ...

private { Private-Deklarationen } public { Public-Deklarationen } end;

var Form1: TForm1;

Page 63: Ereignisgesteuerte Programmierung Klaus Becker 2002

63

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gProgrammgestaltungProgrammgestaltung

implementation

{$R *.DFM}

// Datenmodell (Model)const ...type ...var ...

// Operationen zur Aktualisierung des Datenmodellsprocedure ...;begin ... end;

function ...;begin ... end;

// Ereignisbehandlungsmethoden (Control)procedure TForm1.???OnClick(Sender: TObject);begin // Aktualisierung des Modells (Model)... // Aktualisierung der Anzeige (View)...end;

end.

Page 64: Ereignisgesteuerte Programmierung Klaus Becker 2002

64

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gLiteraturhinweiseLiteraturhinweise

Einführung in die Programmierung mit Delphi.

- Doberenz / Kowalski: Borland Delphi 6, Hanser-Verlag 2002.

- Schumann: Delphi für Kids (incl. Delphi 3 CD), mitp-Verlag 2000.

...

Schulbücher zur Programmierung / Informatik mit Delphi

- Modrow: Informatik mit Delphi (2 Bd.), Dümmler-Stam 1998-2000.

- Bähnisch: Praktische Informatik mit Delphi (2 Bd.), Cornelsen 2001.

- Damann-Wemßen: Objektorientierte Programmierung mit Delphi, Band 1, Klett 2001.

...

Page 65: Ereignisgesteuerte Programmierung Klaus Becker 2002

65

KB

Ere

ign

isg

est

eu

ert

e P

rog

ram

mie

run

gLiteraturhinweiseLiteraturhinweise

Materialien im Internet

- IFB-Fortbildung: informatikag.bildung-rp.de/html/delphi_teil_1.html

- Lessing-Gymnasium Plauen: www.plauener.de/delphi

- OSZ Berlin: oszhdl.be.schule.de/index.htm

- Heidler: www.friedrich.fr.schule-bw.de/ delphi

...