Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Ereignisgesteuerte Programmierung

Ähnliche Präsentationen


Präsentation zum Thema: "Ereignisgesteuerte Programmierung"—  Präsentation transkript:

1 Ereignisgesteuerte Programmierung
Klaus Becker 2002

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

3 Simulationsprogramm

4 Dialog- und Ein-/Ausgabegestaltung
Button / Schaltfläche Button / Schaltfläche Label / Anzeigefläche Ereignisgesteuerte graphische Interaktionselemente

5 Entwicklung ereignisgesteuerter Programme mit dem Werkzeug
Zielsetzung Entwicklung ereignisgesteuerter Programme mit dem Werkzeug Delphi

6 Programmgestaltung mit GUI-Objekten
Teil 1 Programmgestaltung mit GUI-Objekten

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

8 Entwurf der Benutzungsschnittstelle
Benutzungsoberfläche: Label Edit Button Ereignisbehandlung: 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).

9 Delphi-Entwicklungsumgebung
Komponentenpalette Objektinspektor Formular

10 Erzeugung von GUI-Objekten
Aktivierung der Komponente

11 Festlegung von Objekteigenschaften
Veränderung der zugeordneten Werte

12 Eine erste Objektvorstellung
Objektname Klasse EJahr: TEdit EAnzahl: TEdit BInit: TButton Text = ´´ Left = 208 Top = 80 ... Text = ´´ Left = 208 Top = 120 ... Caption = ´Init´ Left = 240 Top = 176 ... Jedes Objekt ist über seinen Namen identifizierbar. Objekte mit gleichem Aufbau (Attributen) werden zu Klassen zusammengefasst.

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

14 Benutzungsoberfläche
Modellierung: LUeberschrift LJahr EJahr LAnzahl EAnzahl BInit BWeiter GUI-Objekte: LUeberschrift: TLabel EJahr: TEdit BInit: TButton ... ... ... LJahr: TLabel EAnzahl: TEdit BWeiter: TButton ... ... ... LAnzahl: TLabel Form1: TForm ... ...

15 Implementierung 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. LUeberschrift LJahr EJahr LAnzahl EAnzahl BInit BWeiter

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

17 Daten und Operationen Modellierung: Variablen / Konstanten:
Informationen: Im Jahr 1999 wurde die 6 Milliardengrenze überschritten; zur Zeit wächst die Weltbevölkerung jährlich um ca. 1,3 %. const p = 1.3; var Jahr : integer; Anzahl : real;

18 Operationen Benutzeraktion: Mausklick auf init-Button
Programmreaktion: Die Anfangspopulation (1999: 6.0 Mrd.) wird festgelegt. procedure initPopulation; begin Jahr := 1999; Anzahl := 6.0; end; Benutzeraktion: Mausklick auf >-Button Programmreaktion: Die nächste Population wird berechnet. procedure naechstePopulation; begin Jahr := Jahr + 1; Anzahl := Anzahl + p/100*Anzahl; end;

19 Implementierung Aufgabe:
Ergänzen Sie in der Implementierung das Datenmodell wie folgt. ... implementation {$R *.DFM} // Datenmodell const p = 1.3; // jährliche prozentuale Wachstumsrate var Jahr : integer; Anzahl : real; // Operationen zur Aktualisierung des Datenmodells procedure initPopulation; begin ... end; procedure naechstePopulation; end.

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

21 Datenaustausch mit den GUI-Objekten
Variablen / Konstanten: GUI-Objekte: const p = 1.3; var Jahr : integer; Anzahl : real; EJahr: TEdit Text = ... EAnzahl: TEdit Text = ... Variablen GUI-Objekte Jahr := StrToInt(EJahr.Text); Anzahl := StrToFloat(EAnzahl.Text); Variablen GUI-Objekte EJahr.Text := IntToStr(Jahr); EAnzahl.Text := FloatToStr(Anzahl);

22 Ereignisbehandlungsmethoden
Ereignis: Mausklick auf init-Button procedure TForm1.BInitClick(Sender: TObject); begin initPopulation; // Aktualisier. der Daten EJahr.Text := IntToStr(Jahr); // Aktualisierung der EAnzahl.Text := FloatToStr(Anzahl); // Objektattributwerte end; Ereignis: Mausklick auf >-Button procedure TForm1.BWeiterClick(Sender: TObject); begin naechstePopulation; // Aktualisier. der Daten EJahr.Text := IntToStr(Jahr); // Aktualisierung der EAnzahl.Text := FloatToStr(Anzahl); // Objektattributwerte end;

23 Delphi-Quelltext Aufgabe:
Ergänzen Sie in der Implementierung die fehlenden Ereignisbehandlungsmethoden. ... implementation {$R *.DFM} // Datenmodell // Operationen zur Aktualisierung des Datenmodells // Ereignisbehandlungsmethoden procedure TForm1.BInitClick(Sender: TObject); begin ... end; procedure TForm1.BWeiterClick(Sender: TObject); end. Bevölkerungsentwicklung1

24 Projektdateien – eine Übersicht
Project1.dpr program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. Project1.exe Compiliertes Programm Project1.res Windows-Ressourcendatei (Button, Label, ...) Project1.dof Delphi-Projekt-Optionen Project1.cfg Konfigurationsdatei Unit1.pas Quelltext für Unit1 Unit1.dcu compilierte Unit1 Unit1.dfm Bilddatei für Form1

25 Übungen – Aufgabe 1 Ergänzen Sie weitere Buttons, deren Verhalten wie folgt spezifiziert ist: Benutzeraktion: 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.

26 Ü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?

27 Ü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 *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?

28 Übungen – Aufgabe 4 Es soll ein Programm erstellt werden, das dem Benutzer Aufgaben zu den vier Grundrechenarten aus dem Zahlenbereich stellt. Legen Sie zunächst die Ereignisbehandlung fest. Entwerfen Sie anschließend das Datenmodell mit den zugehörigen Verarbeitungsoperationen.

29 Ereignisverarbeitung
Teil 2 Ereignisverarbeitung

30 Der Rechentrainer Ziel: Es soll ein Programm erstellt werden, das dem Benutzer Aufgaben zu den vier Grundrechenarten aus dem Zahlenbereich stellt. (vgl. auch G. Noll: informatikag.bildung-rp.de/html/delphi_teil_1.html)

31 Modellierung der Benutzungsschnittstelle

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

33 Modellierung der Daten und Operationen
var Rechenzeichen: char; Zahl1, Zahl2, Ergebnis: integer; Verarbeitungsoperationen: procedure PlusAufgabeErzeugen; ... procedure MinusAufgabeErzeugen; ... procedure MalAufgabeErzeugen; ... procedure DurchAufgabeErzeugen; ... procedure ErgebnisBerechnen; ...

34 Auszug aus der Implementierung
... procedure PlusAufgabeErzeugen; begin Zahl1 := random(11); Zahl2 := random(11); Rechenzeichen := '+'; end; procedure MinusAufgabeErzeugen; Rechenzeichen := '-'; procedure MalAufgabeErzeugen; Beachte: Die Implementierung ist redundant.

35 Modellierung der Daten und Operationen
var Rechenzeichen: char; Zahl1, Zahl2, Ergebnis: integer; Verarbeitungsoperationen: procedure AufgabeErzeugen; ... procedure ErgebnisBerechnen; ...

36 Modellierung der Ereignisbehandlung
BAddition.OnClick BSubtraktion.OnClick BMultiplikation.OnClick BDivision.OnClick BErgebnis.OnClick Form1.OnCreate Behandlungsmethode: TForm1.RechenzeichenClick(Sender: TObject) TForm1.BErgebnisClick(Sender: TObject) TForm1.FormCreate(Sender: TObject)

37 Verarbeitung von Ereignissen
Auslösende Aktion: Mausklick auf +-Button Ereignis: BAddition.OnClick Ausgelöste Aktion: RechenzeichenClick(BAddition) Sender Delphi wartet auf Ereignisse und reagiert mit der Ausführung der zugeordneten Methoden

38 Implementierungshinweise
Ereignis: BAddition.OnClick BSubtraktion.OnClick BMultiplikation.OnClick BDivision.OnClick Behandlungsmethode: TForm1.RechenzeichenClick(Sender: TObject) procedure TForm1.BRechenzeichenClick(Sender: TObject); begin // Aktualisierung der Modelldaten if Sender = BAddition then Rechenzeichen := '+'; if Sender = BSubtraktion then Rechenzeichen := '-'; if Sender = BMultiplikation then Rechenzeichen := '*'; if Sender = BDivision then Rechenzeichen := ':'; // Aufruf der Verarbeitungsoperationen AufgabeErzeugen; ErgebnisBerechnen; // Aktualisierung der Anzeige LZahl1.Caption := IntToStr(Zahl1); ... end;

39 Implementierung Aufgabe:
Ändern Sie das Programm Rechentrainer1 gemäß der verbesserten Modellierung ab. (zur Kontrolle: Rechentrainer2)

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

41 Modellierung ereignisgesteuerter Abläufe
Teil 3 Modellierung ereignisgesteuerter Abläufe

42 Das 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) ?"

43 Systembeschreibung 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.]

44 Modellierung der Benutzungsoberfläche

45 Ablaufmodellierung Zustand: bereit gewählt fertig Ereignis:
Form1.OnCreate BTuer1.OnClick ... BNeu.OnClick Aktionen: Spiel vorbereiten Anzeigen Ziegentür öffnen Anzeigen Spiel auswerten Anzeigen Neuer Zustand: bereit gewählt fertig

46 Ablaufmodellierung Zustandsbasierte Ablaufmodellierung
BTuer3.OnClick/ Ziegentür öffnen BTuer3.OnClick / Spiel auswerten BNeu.OnClick / Spiel vorbereiten BTuer2.OnClick / Ziegentür öffnen BTuer2.OnClick / Spiel auswerten BTuer1.OnClick / Ziegentür öffnen BTuer1.OnClick / Spiel auswerten Form1.OnCreate / Spiel vorbereiten bereit gewählt fertig BNeu.OnClick / Spiel vorbereiten BNeu.OnClick / Spiel vorbereiten BTuer3.OnClick BTuer2.OnClick Zustandsbasierte Ablaufmodellierung BTuer1.OnClick Darstellung mit einem Zustandsübergangsdiagramm

47 Modellierungstechnik: Automat
Ereignis [Bedingung] / Aktion Zustand1 Zustand2 Grundschema eines Zustandsübergangs bei einem (Harel-) Automat

48 Datenmodellierung Version 1
type tZustand = (bereit, gewaehlt, fertig); var offen1: boolean offen2: boolean offen3: boolean Gewinntuer: integer; gewaehlteTuer: integer; Gewinn: string; Spielzustand: tZustand Ziegenproblem1

49 Datenmodellierung Version 2
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 Ziegenproblem2

50 Datenmodellierung Version 3
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

51 Modellierung der Verarbeitungsoperationen
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

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

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

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

55 Aufgabe 6 - Lösungsvorschlag
Password1

56 Aufgabe 6 - Lösungsvorschlag
Form1.OnCreate / DatenInitialisieren EEingabe.OnChange / [Eingabe  Password] / Ausgabe: falsch EEingabe.OnChange / [Eingabe  Password] / Ausgabe: falsch EEingabe.OnChange / [Eingabe  Password] / Ausgabe: falsch 1 2 3 EEingabe.OnChange / [Eingabe = Password] / Ausgabe: ok 4 EEingabe.OnChange / EEingabe.OnChange /

57 Aufgabe 6 - Lösungsvorschlag
// Datenmodell type tZustand = 0..4; var Password : integer; Eingabe : integer; Zustand : tZustand; // Datenverarbeitungsoperationen procedure DatenInitialisieren; begin randomize; Password := random(10); Zustand := 0; end; Password1

58 Aufgabe 6 - Lösungsvorschlag
// Ereignisbehandlungsmethoden procedure TForm1.FormCreate(Sender: TObject); begin // Aktualisierung des Datenmodells DatenInitialisieren; end; procedure TForm1.EEingabeChange(Sender: TObject); if Zustand < 3 then Eingabe := StrToInt(EEingabe.Text); if Eingabe = Password then Zustand := 4 else Zustand := Zustand + 1; // Aktualisierung der Anzeige if Zustand = 4 then PRueckmeldung.Caption := 'Ok!' PRueckmeldung.Caption := 'Falsch!'; Password1

59 Entwicklung von Delphi-Programmen
Teil 4 Entwicklung von Delphi-Programmen

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

61 Strukturierung: Model-View-Control
var Rechenzeichen: char; Zahl1, Zahl2, Ergebnis: integer; procedure AufgabeErzeugen; ... Model procedure ErgebnisBerechnen; ... Control Control View

62 Programmgestaltung 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;

63 Programmgestaltung implementation {$R *.DFM} // Datenmodell (Model)
const ... type var // Operationen zur Aktualisierung des Datenmodells procedure ...; begin ... end; function ...; // Ereignisbehandlungsmethoden (Control) procedure TForm1.???OnClick(Sender: TObject); begin // Aktualisierung des Modells (Model) // Aktualisierung der Anzeige (View) end; end.

64 Literaturhinweise 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 - Bähnisch: Praktische Informatik mit Delphi (2 Bd.), Cornelsen 2001. - Damann-Wemßen: Objektorientierte Programmierung mit Delphi, Band 1, Klett 2001.

65 Literaturhinweise Materialien im Internet
- IFB-Fortbildung: informatikag.bildung-rp.de/html/delphi_teil_1.html - Lessing-Gymnasium Plauen: - OSZ Berlin: oszhdl.be.schule.de/index.htm - Heidler: delphi ...


Herunterladen ppt "Ereignisgesteuerte Programmierung"

Ähnliche Präsentationen


Google-Anzeigen