72
Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

Embed Size (px)

Citation preview

Page 1: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

Einführung in dieSoftware-Entwicklung mit

Delphi Teil 1

Klaus Becker

2005

Page 2: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

2 Miniprojekt „chuck a luck“

1$ 1$ 1$ 1$1$ 1$ 1$

1$ 1$1

2

3

4

5

631$31$

Interaktive Systeme entwickeln Benutzungsoberfläche gestalten Ereignisverarbeitung konzipieren und implementieren Systeme modellieren und strukturieren

Page 3: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

3 Teil 1

Grafische Benutzungsoberfläche

Page 4: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

4 Das Würfelspiel „chuck a luck“

1$ 1$ 1$ 1$1$ 1$ 1$

1$1$ 1$

1

2

3

4

5

6

Einsatz zahlen und Zahl tippen

Würfel werfen

Gewinn verbuchen

Einsatz: 1 $

3

Gewinn:

0 Treffer: 1 Treffer: Einsatz + 1 $

2 Treffer: Einsatz + 2 $3 Treffer: Einsatz + 3 $

1$

1$

1$1$

3

Page 5: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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

Page 6: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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.

...

Page 7: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

7

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 Benutzungsschnittstelle dient als Mensch-Maschine-Schnittstelle.

Benutzungsoberfläche

Der erste Schritt besteht darin, eine Benutzungsoberfläche zu entwerfen und sie mit Hilfe der von Delphi vorgegebenen Komponentenpalette zu erstellen.

Page 8: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

8 GUI-Objekt

Eine Benutzungsoberfläche wird mit Hilfe von sog. GUI-Objekten aufgebaut. (GUI: Graphical User Interface)

GUI-Objekt

Die Eigenschaften eines Objekts kann man sich mit dem Objektinspektor anzeigen lassen.

GUI-Objekt

GUI-Objekt

GUI-Objekt

Page 9: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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

Im Objektinspektor werden Name und zugehörige Klasse eines Objekts in einem Fenster angezeigt.

PKonto: TPanel

Page 10: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

10 Aufbau und Zustand eines Objekts

PKonto: TPanel

Caption = ´Konto´Left = 223...

Klasse

Attribut Attributwert

Der Aufbau eines Objekts wird mit Hilfe von Attributen (Eigenschaften) festgelegt. Die Attributwerte legen den aktuellen Objektzustand fest.

Attribut

Attributwert

Um die Struktur von Objekten zu beschreiben, benutzen wir eine vereinfachende Darstellung. Man nennt eine solche Darstellung Objektdiagramm.

Name

Klasse

Name

Objektdiagramm

Page 11: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

11 Aufgabe

Erstellen Sie eine Benutzungsoberfläche, die aus folgendenden GUI-Objekten aufgebaut ist. Beachten Sie unbedingt den Hinweis auf der nächsten Folie.

PUeberschrift:

TPanelPKonto: TPanel

PWuerfel: TPanel

Pspielfeld: TPanel

PWuerfel1: TPanel PWuerfel2:

TPanel

PKontostand:

TPanel

PWuerfel3:TPanel

BWuerfelWerfen:

TButton

ESpielzahl: TEdit

FGUI: TFGUI

BEinsatzZahlen:TButton

BGewinnVerbuchen:

TButton

Page 12: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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: <ChuckALuck0>

2. Delphi starten

3. Datei Projekt speichern unter: <ChuckALuck0/...>

Page 13: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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-kaiserslautern.de/faecher/inf/material/misc/d6_2_d4.php

Page 14: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

14

„verwaltet“

Objekthierarchie

FGUI:TFGUI

PUeberschrift:TPanelPSpielfeld:TPanel

PWuerfel:TPanel

PKonto:TPanel

ESpielzahl:TEdit

......

...

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

Page 15: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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

Page 16: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

16 Delphi-Quelltext (Unit1.pas)

unit Unit1;interfaceuses ...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

Page 17: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

17 Kompilierung

Start

Beim Kompilieren wird ein Delphi-Projekt in lauffähigen Delphi-Code übersetzt (siehe Project1.exe). Dieser Code kann dann anschließend ausgeführt werden.

Page 18: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

18 Aufgabe

Testen Sie die Funktionalitäten des bisher entwickelten Programms. Was fällt auf?

Page 19: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

19 Teil 2

Ereignisse und ihre Verarbeitung

Page 20: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

20 Interaktion: Benutzer - Programm

Das erwartete Verhalten des Programms kann wie folgt beschrieben werden:

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“

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.

Page 21: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

21 Realisierung in Delphi

Doppel-Klick auf den Button erzeugt eine neue Prozedur.

Doppel-Klick

Prozedur zur Ereignisverarbeitung

Ereignis

Page 22: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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 simulierenwuerfel1 := random(6)+1;wuerfel2 := random(6)+1;wuerfel3 := random(6)+1;// Ausgabe: Aktualisierung der AnzeigePWuerfel1.Caption := IntToStr(wuerfel1);PWuerfel2.Caption := IntToStr(wuerfel2);PWuerfel3.Caption := IntToStr(wuerfel3);end;

Page 23: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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 übernehmenkonto := StrToInt(PKontostand.Caption);// Verarbeitung: Einsatz vom Konto abbuchenkonto := konto-1;// Ausgabe: Aktualisierung der AnzeigePKontostand.Caption := IntToStr(konto);end;

Page 24: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

24

Initialisierung des Zufallsgenerators

procedure TFGUI.FormCreate(Sender: TObject);beginrandomize;end;

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.

Page 25: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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)

Ereignisverarbeitung:Dieses Ereignis wird vom Betriebssystem an das Programm weitergegeben. Im Programm muss eine spezielle Prozedur „BWuerfelWerfenClick“ zur Verarbeitung des Ereignisses implementiert sein. Zur Ereignisverarbeitung in Delphi siehe K. Merkert: http://hsg.region-kaiserslautern.de/faecher/inf/material/ereignisse/index.php

Ereignis:Der Benutzer klickt auf den Button „Würfel werfen“ und löst hierdurch das Ereignis „BWuerfelWerfen.onClick“ aus.

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.

Ereignis:Das Formular wird von Delphi erzeugt und löst dabei das Ereignis „FGUI.onCreate“ aus.

Page 26: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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.

Page 27: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

27 Exkurs: Delphi-Grundlagen

procedure TFGUI.BEinsatzZahlenClick(Sender: TObject); var konto: integer;

begin// Eingabe: Kontostand übernehmenkonto := StrToInt(PKontostand.Caption);

// Verarbeitung: Einsatz vom Konto abbuchenkonto := konto-1;

// Ausgabe: Aktualisierung der AnzeigePKontostand.Caption := IntToStr(konto);

end;

Variablendeklaration

PKontostand: TPanel

Caption = ´99´...

konto:

konto: 100

konto: 99

DatentypBezeichner

PKontostand: TPanel

Caption = ´100´...

Variablen dienen dazu, Daten (eines festgelegten Datentyps) innerhalb eines Programms zwischenzuspeichern.

Page 28: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

28 Exkurs: Delphi-Grundlagen

procedure TFGUI.BEinsatzZahlenClick(Sender: TObject); var konto: integer;

begin// Eingabe: Kontostand übernehmenkonto := StrToInt(PKontostand.Caption);

// Verarbeitung: Einsatz vom Konto abbuchenkonto := konto-1;

// Ausgabe: Aktualisierung der AnzeigePKontostand.Caption := IntToStr(konto);end;

Wertzuweisung

konto:

konto: 100

konto: 99

Variablenzustand vorher

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.

Variablenzustand nachher

Page 29: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

29 Exkurs: Delphi-Grundlagen

procedure TFGUI.BEinsatzZahlenClick(Sender: TObject); var konto: integer;begin

// Eingabe: Kontostand übernehmenkonto := StrToInt(PKontostand.Caption);

// Verarbeitung: Einsatz vom Konto abbuchenkonto := konto-1;

// Ausgabe: Aktualisierung der AnzeigePKontostand.Caption := IntToStr(konto);

end;

string

Beachte: Bei einer Wertzuweisung müssen die Datentypen zusammenpassen.

Datentyp

integer

Typumwandlung

string integer

Typumwandlung

PKontostand: TPanel

Caption = ´100´...

PKontostand: TPanel

Caption = ´99´...

konto:

konto: 100

konto: 99

Page 30: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

30 Exkurs: Delphi-Grundlagen

procedure TFGUI.BWuerfelWerfenClick(Sender: TObject); var wuerfel1: integer; wuerfel2: integer; wuerfel3: integer;begin// Verarbeitung: Würfeln simulierenwuerfel1 := random(6)+1;wuerfel2 := random(6)+1;wuerfel3 := random(6)+1;// Ausgabe: Aktualisierung der AnzeigePWuerfel1.Caption := IntToStr(wuerfel1);PWuerfel2.Caption := IntToStr(wuerfel2);PWuerfel3.Caption := IntToStr(wuerfel3);end;

Deklarationsteil

Anweisungsteil

Prozedur-Deklaration

Variablendeklaration

Anweisung

Kommentar

Beachte: Erst deklarieren, dann benutzenAlle Variablen (Prozeduren etc.) müssen zuerst deklariert werden, bevor sie benutzt werden können.

Page 31: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

31 Exkurs: Delphi-Grundlagen

procedure TFGUI.BWuerfelWerfenClick(Sender: TObject); var wuerfel1: integer; wuerfel2: integer; wuerfel3: integer;begin// Verarbeitung: Würfeln simulierenwuerfel1 := random(6)+1;wuerfel2 := random(6)+1;wuerfel3 := random(6)+1;// Ausgabe: Aktualisierung der AnzeigePWuerfel1.Caption := IntToStr(wuerfel1);PWuerfel2.Caption := IntToStr(wuerfel2);PWuerfel3.Caption := IntToStr(wuerfel3);end;

Beachte: SyntaxregelnDamit der Delphi-Compiler das Programm in Maschinencode übersetzen kann, müssen die für die Programmiersprache Delphi geltenden Syntaxregeln eingehalten werden.

Semikolon als Trennsymbol

Schlüsselwort

Vordefinierte Bezeichner

Page 32: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

32 Exkurs: Delphi-Grundlagen

procedure TFGUI.BGewinnVerbuchenClick(Sender: TObject); var wuerfel1, wuerfel2, wuerfel3: integer; spielzahl: integer; konto: integer; treffer: integer;begin// Eingabe: spieldaten übernehmenspielzahl := StrToInt(ESpielzahl.Text);konto := StrToInt(PKontostand.Caption);wuerfel1 := StrToInt(PWuerfel1.Caption);wuerfel2 := StrToInt(PWuerfel2.Caption);wuerfel3 := StrToInt(PWuerfel3.Caption);// Verarbeitung: Treffer und neuen Kontostand bestimmentreffer := 0;if spielzahl = wuerfel1 then inc(treffer);if spielzahl = wuerfel2 then inc(treffer);if spielzahl = wuerfel3 then inc(treffer);if treffer > 0 then konto := konto+treffer+1;// Ausgabe: Aktualisierung der AnzeigePKontostand.Caption := IntToStr(konto);end;

Sequenz

Wertzuweisung

Fallunterscheidung

Page 33: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

33

for ... to ... do begin ... end;

Exkurs: Delphi-Grundlagen

Kontrollstrukturen dienen dazu, den genauen Ablauf der Verarbeitung festzulegen. Wichtige Kontrollstrukturen sind Sequenz(bildung), Fallunterscheidung und Wiederholung.

Sequenz

begin ...end;

if ... then begin ... end;

Einseitige Fallunterscheidung

if ... then begin ... endelse begin ... end;

while ... do begin ... end;

Wiederholung mit

Anfangsbedingung

repeat ...until ...;

Zweiseitige Fallunterscheidung

ZählschleifeWiederholung

mitEndbedingung

Page 34: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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.

Page 35: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

35 Teil 4

Datenmodellierung

Page 36: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

36 Initialisierung des Kontostands

Die Initialisierung des Kontostands soll im Programm selbst erfolgen.

procedure TFGUI.BEinsatzZahlenClick(Sender: TObject); var konto: integer;beginkonto := 100;// Eingabe: Kontostand übernehmenkonto := StrToInt(PKontostand.Caption);// Verarbeitung: Einsatz vom Konto abbuchenkonto := konto-1;// Ausgabe: Aktualisierung der AnzeigePKontostand.Caption := IntToStr(konto);end;

Version 1

Vorsicht: nicht korrekt!

Page 37: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

37 Initialisierung des Kontostands

Die Initialisierung des Kontostands soll im Programm selbst erfolgen.

procedure TFGUI.BEinsatzZahlenClick(Sender: TObject); var konto: integer;begin// Verarbeitung: Einsatz vom Konto abbuchenkonto := konto-1;// Ausgabe: Aktualisierung der AnzeigePKontostand.Caption := IntToStr(konto);end;

Version 2

procedure TFGUI.FormCreate(Sender: TObject); var konto: integer;beginrandomize;konto := 100;PKontostand.Caption := IntToStr(konto);end;

Vorsicht: nicht korrekt!

Page 38: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

38 Initialisierung des Kontostands

unit Unit1;interfaceuses ...type TFGUI = class(TForm) PUeberschrift: TPanel; ... private { Private-Deklarationen } konto: integer; public { Public-Deklarationen } end;var FGUI: TFGUI;...

procedure TFGUI.FormCreate(Sender: TObject);beginrandomize;konto := 100;PKontostand.Caption := IntToStr(konto);end;

procedure TFGUI.BEinsatzZahlenClick (Sender: TObject);begin// Verarbeitung: Einsatz abbuchenkonto := konto-1;// Ausgabe: Aktual. der AnzeigePKontostand.Caption := IntToStr(konto);end;

Version 3

Korrekt!

Page 39: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

39 Attribut als globale Variable

unit Unit1;interfaceuses ...type TFGUI = class(TForm) PUeberschrift: TPanel; ... private { Private-Deklarationen } konto: integer; public { Public-Deklarationen } end;var FGUI: TFGUI;...

procedure TFGUI.FormCreate(Sender: TObject);beginrandomize;konto := 100;PKontostand.Caption := IntToStr(konto);end;

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

Page 40: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

40 Datenmodell zur Miniwelt

1$ 1$ 1$ 1$1$ 1$ 1$

1$ 1$1

2

3

4

5

631$31$

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.

Page 41: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

41 Datenmodell zur Miniwelt

spielzahl: integer;wuerfel1: integer;wuerfel2: integer;wuerfel3: integer;konto: integer;

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.

Page 42: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

42

procedure TFGUI.BGewinnVerbuchenClick(Sender: TObject); var treffer: integer;begin...if treffer > 0 then konto := konto+treffer+1;...end;

Lokale Variable

Lokale Variable

Eine lokale Variable ist eine Variable, die innerhalb einer Prozedur deklariert ist und auch nur innerhalb dieser Prozedur zugreifbar ist.

„Globale Variable“

type TFGUI = class(TForm) ... private { Private-Deklarationen } ... konto: integer; public { Public-Deklarationen } end;

Page 43: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

43 Aufgabe

Verändern Sie das Programm so, dass das Datenmodell mit Hilfe von Formular-Attributen implementiert wird.

Page 44: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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 BetragErweitern Sie schrittweise das bestehende Chuck-A-Luck-System.

Page 45: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

45 Teil 5

Zustandsbasierte Modellierung

Page 46: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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 zahlenZahl tippen (z. B. 1)Solange Würfel werfen, bis die getippte Zahl fälltGewinn verbuchen

Page 47: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

47

Zustandsbasierte Ablaufmodellierung

Auslösendes Ereignis

BEinsatzZahlen.onClick

RGSpielfeld.onClick

BWuerfelWerfen.onClick

BGewinnVerbuchen.onClick

Ausgelöste Aktion(en)

Einsatz vom Konto abbuchen

Spielzahl festlegen

Würfelwerfen simulieren

Gewinn ermitteln und auf dem Konto verbuchen

AktuellerZustand

bereit

einsatzgezahlt

gewürfelt

NeuerZustand

einsatzgezahlt

einsatzgezahlt

gewürfelt

bereit

Einsatz zahlen und Zahl tippen

Würfel werfen

Gewinn verbuchen

Page 48: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

48

Zustandsbasierte Ablaufmodellierung

Einsatz zahlen und Zahl tippen

Würfel werfen

Gewinn verbuchen

BEinsatzZahlen.onClick / Einsatz vom Konto

abbuchen

bereiteinsatzgezahlt

RGSpielfeld.onClick / Spielzahl festlegen

BGewinnVerbuchen.onClick /Gewinn ermitteln und auf dem Konto

verbuchen

BWuerfelWerfen.onClick/Würfelwerfen simulieren

gewürfelt

Page 49: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

49 Zustandsbasierte Modellierung

Auslösendes Ereignis

BEinsatzZahlen.onClick

RGSpielfeld.onClick

BWuerfelWerfen.onClick

BGewinnVerbuchen.onClick

Ausgelöste Aktion(en)

Einsatz vom Konto abbuchen

Spielzahl festlegen

Würfelwerfen simulieren

Gewinn ermitteln und auf dem Konto verbuchen

AktuellerZustand

bereit

einsatzgezahlt

gewürfelt

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.

Page 50: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

50 Zustandsbasierte Modellierung

BEinsatzZahlen.onClick / Einsatz vom Konto

abbuchen

bereiteinsatzgezahlt

RGSpielfeld.onClick / Spielzahl festlegen

BGewinnVerbuchen.onClick /Gewinn ermitteln und auf dem Konto

verbuchen

BWuerfelWerfen.onClick/Würfelwerfen simulieren

gewürfelt

Zustand

Zustandsautomat

Zustands-übergang

Auslösendes Ereignis

Ausgelöste Aktion(en)

Anfangs-zustand

Page 51: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

51 Ansatz: GUI-Objekte (de)aktivieren

procedure TFGUI.BEinsatzZahlenClick(Sender: TObject);begin// Aktualisierung des Datenmodellskonto := konto-1;// Aktualisierung der AnzeigePKontostand.Caption := IntToStr(konto);// Aktualisierung der KontrolleBEinsatzZahlen.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.

Page 52: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

52 Aufgabe

Modifizieren Sie das Chuck-A-Luck-System so, dass es das gewünschte Ablaufverhalten zeigt.

Page 53: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

53 Ansatz: Datenmodell erweitern

procedure TFGUI.BEinsatzZahlenClick(Sender: TObject);beginif zustand = bereit then begin // Aktualisierung des Datenmodells konto := konto-1; zustand := einsatzgezahlt; // Aktualisierung der Anzeige PKontostand.Caption := IntToStr(konto); end;end;

Wir erweitern das Datenmodell um eine Variable zur Beschreibung des Spielzustands.

spielzahl: integer;wuerfel1: integer;wuerfel2: integer;wuerfel3: integer;konto: integer;zustand: tZustand;

type tZustand = (bereit, einsatzgezahlt, gewuerfelt);type TFGUI = class(TForm) ...

Page 54: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

54 Aufgabe

Modifizieren Sie das Chuck-A-Luck-System so, dass es das gewünschte Ablaufverhalten zeigt.

Page 55: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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.

Page 56: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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;

Page 57: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

57 Zustandsbasierte Modellierung

BSpielen.onClick / Einsatz vom Konto

abbuchen

bereiteinsatzgezahlt

RGSpielfeld.onClick / Spielzahl festlegen

BSpielen.onClick /Gewinn ermitteln und auf Konto

verbuchen

BSpielen.onClick/Würfelwerfen simulieren

gewürfelt

Beachte: Das gleiche Ereignis führt hier zu unterschiedlichen Aktionen.

Page 58: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

58 Strukturierung der Lösung

procedure TFGUI.BSpielenClick(Sender: TObject); var treffer: integer;begin// Aktualisierung der Kontrollecase zustand of bereit: begin BSpielen.Caption := 'Würfel werfen'; ... end; einsatzgezahlt: ... gewuerfelt: ... end;// Aktualisierung des Datenmodellscase zustand of bereit: begin konto := konto-1; zustand := einsatzgezahlt; end; einsatzgezahlt: ... gewuerfelt: ... end;// Aktualisierung der AnzeigePKontostand.Caption := IntToStr(konto);PWuerfel1.Caption := IntToStr(wuerfel1);PWuerfel2.Caption := IntToStr(wuerfel2);PWuerfel3.Caption := IntToStr(wuerfel3);end;

Page 59: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

59 Teil 6

Zusammenfassung

Page 60: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

60 Benutzungsoberfläche

Die Mensch-Maschine-Interaktion wird wesentlich durch die GUI-Objekte zur Gestaltung der Benutzungsoberfläche bestimmt.

PUeberschrift:

TPanelPKonto: TPanel

PWuerfel: TPanel

Pspielfeld: TPanel

PWuerfel1: TPanel PWuerfel2:

TPanel

PKontostand:

TPanel

PWuerfel3:TPanel

BWuerfelWerfen:

TButton

ESpielzahl: TEdit

FGUI: TFGUI

BEinsatzZahlen:TButton

BGewinnVerbuchen:

TButton

Page 61: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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: integer;begin// Eingabe: Spieldaten übernehmenspielzahl := StrToInt(ESpielzahl.Text);konto := StrToInt(PKontostand.Caption);wuerfel1 := StrToInt(PWuerfel1.Caption);wuerfel2 := StrToInt(PWuerfel2.Caption);wuerfel3 := StrToInt(PWuerfel3.Caption);// Verarbeitung: Treffer und neuen Kontostand bestimmentreffer := 0;if spielzahl = wuerfel1 then inc(treffer);if spielzahl = wuerfel2 then inc(treffer);if spielzahl = wuerfel3 then inc(treffer);if treffer > 0 then konto := konto+treffer+1;// Ausgabe: Aktualisierung der AnzeigePKontostand.Caption := IntToStr(konto);end;

Page 62: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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;

Datenmodell

GUI-Objekte

Page 63: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

63

procedure TFGUI.BGewinnVerbuchenClick(Sender: TObject); var treffer: integer;begin// Eingabe: Datenmodell aktualisierenspielzahl := StrToInt(ESpielzahl.Text);konto := StrToInt(PKontostand.Caption);wuerfel1 := StrToInt(PWuerfel1.Caption);wuerfel2 := StrToInt(PWuerfel2.Caption);wuerfel3 := StrToInt(PWuerfel3.Caption);// Verarbeitung: Daten verarbeitentreffer := 0;if spielzahl = wuerfel1 then inc(treffer);if spielzahl = wuerfel2 then inc(treffer);if spielzahl = wuerfel3 then inc(treffer);if treffer > 0 then konto := konto+treffer+1;// Ausgabe: Anzeige aktualisierenPKontostand.Caption := IntToStr(konto);end;

Trennung: GUI – Datenmodell

Die Trennung zwischen GUI und Datenmodell sollte sich auch im Programmtext widerspiegeln.

Page 64: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

64 Zustandsbasierte Modellierung

Zustandsbasierte Modellierung ist eine wichtige Technik, um komplexere (reaktive) Systeme zu entwerfen.

BEinsatzZahlen.onClick / Einsatz vom Konto

abbuchen

bereiteinsatzgezahlt

RGSpielfeld.onClick / Spielzahl festlegen

BGewinnVerbuchen.onClick /Gewinn ermitteln und auf Konto

verbuchen

BWuerfelWerfen.onClick/Würfelwerfen simulieren

gewürfelt

Page 65: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

65 Teil 7

Vertiefende Übungen

Page 66: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

66 Aufgabe

Entwickeln Sie ein einfaches Eingabe-Ausgabe-System zur Berechnung des BMI-Indexes.Eingaben: Körpergröße, GewichtAusgaben: BMI-Index, ...

Page 67: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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 <-Button

Mausklick auf >>-Button

Mausklick auf >>-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.

Page 68: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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

Page 69: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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/Ziegenproblem/Ziegen.html

Page 70: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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

Page 71: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

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_teil_1.html

K. Merkert:http://hsg.region-kaiserslautern.de/faecher/inf/material/delphi/index.php

R. Mechling:http://www.gk-informatik.de/

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

Hessischer Bildungsserver:http://www.bildung.hessen.de/abereich/inform/skii/material/delphi/index.htm

Page 72: Einführung in die Software-Entwicklung mit Delphi Teil 1 Klaus Becker 2005

72 Literaturhinweise

S. Spolwig: http://oszhdl.be.schule.de/gymnasium/faecher/informatik/delphi/index.htm

Weitere Hinweise unter:

http://www.delphi-source.de

Einsteiger-Tutorial

http://www.delphi-treff.de/content/tutorials/einsteigerkurs/

...