Digitaltechnik Weiterbildungslehrgang XII – Kurs 4 Tobias Selinger 14./15. November 2013.
Delphi II - OOP IFB Fortbildung Grundkonzepte der OOP: Beziehungen zwischen Objekten Bsp:...
-
Upload
swanhilde-lauterbach -
Category
Documents
-
view
107 -
download
1
Transcript of Delphi II - OOP IFB Fortbildung Grundkonzepte der OOP: Beziehungen zwischen Objekten Bsp:...
Delphi II - OOPDelphi II - OOP
IFB Fortbildung
Grundkonzepte der OOP: Beziehungen zwischen Objekten
Bsp: Ticketautomat – Stoppuhr - Kontoverwaltung
7.11.2006
Tobias Selinger
2
TS
OO
P m
it D
elp
hi
Ticketautomat: FormularTicketautomat: Formular
3
TS
OO
P m
it D
elp
hi
Ticketautomat: Formular-KlasseTicketautomat: Formular-Klasse
4
TS
OO
P m
it D
elp
hi
Ticketautomat: KlassendiagrammTicketautomat: Klassendiagramm
Aufrufe
5
TS
OO
P m
it D
elp
hi
Ticketautomat: Beziehung?Ticketautomat: Beziehung?
Aufrufe
GUI-Klasse
Fach-KlasseBeziehung?
6
TS
OO
P m
it D
elp
hi
Ticketautomat: AssoziationTicketautomat: Assoziation
Aufrufe
GUI-Klasse
Fach-Klasse„kennt“-Beziehung:Assoziation
7
TS
OO
P m
it D
elp
hi
Ticketautomat: UnitsTicketautomat: Units
Aufrufe
GUI-Klasse
Fach-Klasse
unit Unit1;uses Windows, Forms, ...
mTTicketautomat;type
TForm1 = class(TForm)unit mTTicketautomat;Uses Dialogs, SysUtils;type
TTicketautomat = class
„kennt“-Beziehung:Assoziation
8
TS
OO
P m
it D
elp
hi
Benutzer-DialogBenutzer-Dialog
Wer – d.h. welche Klasse? – führt den Dialog mit dem Benutzer ?
GUI-Klasse oder Fachklasse ?
9
TS
OO
P m
it D
elp
hi
Benutzer-DialogBenutzer-Dialog
Wer – d.h. welche Klasse? – führt den Dialog mit dem Benutzer ?
Die GUI-Klasse: - Buttons, Edit-Felder, Dialog-Boxen etc. (typischerweise) - Ereignisbehandlungs-Prozeduren
- Aufruf der Methoden der bekannten Fachklasse- Behandeln / Anzeigen der Rückgabewerte
10
TS
OO
P m
it D
elp
hi
Benutzer-DialogBenutzer-Dialog
Wer – d.h. welche Klasse? – führt den Dialog mit dem Benutzer ?
Die GUI-Klasse: - Buttons, Edit-Felder, Dialog-Boxen etc. (typischerweise) - Ereignisbehandlungs-Prozeduren
- Aufruf der Methoden der bekannten FachklasseBeispiel: - Behandeln / Anzeigen der Rückgabewerte
procedure TForm1.GeldEinwerfenButtonClick(Sender: TObject);var betrag: integer;begin betrag := strtoint(InputBox('Geld einwerfen', 'Betrag', '0')); Automat.geldEinwerfen(betrag); AktuelleAnzahlungEdit.Text:=inttostr(Automat.gibAktuelleAnzahlung);end;
11
TS
OO
P m
it D
elp
hi
Zum Testen: Dialoge innerhalb der FachklasseZum Testen: Dialoge innerhalb der Fachklasse
Mitunter kann es hilfreich sein, eine Fachklasse alleine zu testen,d.h. a la BlueJ unabhängig von einer GUI-Klasse.
Für kurze Dialoge (kleine Ein-/Ausgabefenster) bietet die Unit Dialogsfolgende „unabhängige“ Prozeduren und Funktionen:
Ausgabefenster:
ShowMessage (<Nachricht>) zeigt einen String an.
Eingabefenster:
InputBox (<Titel>, <Frage>, <Defaultwert>) liefert den eingegebenen String.
InputQuery (<Titel>, <Frage>, <String-Variable>) liefert Erfolg (true/false) und belegt ggf. die Variable mit der Benutzer-Eingabe.
12
TS
OO
P m
it D
elp
hi
Übung zum Ticketautomat und UML-Editor: Einnahmen Übung zum Ticketautomat und UML-Editor: Einnahmen abholenabholen
Kopieren und öffnen Sie das Delphi-Projekt „Ticketautomat“.
Starten Sie auch den UML-Editor und importieren Sie die beteiligten Klassen des Ticketautomaten (TForm1 und TTicketautomat, inkl. Code).
Ergänzen Sie (im UML-Editor) die Methode EinnahmenAbholen, diedem Automatenbetreiber zur Entnahme der gesamten Einnahmen dient.
Exportieren Sie (im UML-Editor) nun die veränderte Klasse nach Delphi, d.h. überschreiben Sie die zugehörige Unit-Datei.
Aktualisieren Sie (in Delphi) die veränderte Klasse, undergänzen Sie die Implementierung der Methode EinnahmenAbholen:- Erfragen und prüfen Sie den korrekten Zugangscode- Setzen Sie die Einnahmen auf Null, bzw. geben Sie eine Meldung „Zugriff verweigert“ aus.
Fügen Sie Ihrem Formular einen entsprechenden Button mit Ereignisbehandlungsprozedur hinzu,speichern Sie Ihre Delphi-Dateien und die (aktualisierte) UML-Datei,und testen Sie!
Zusatz: Wie könnte man ein Parkticket in der GUI-Listbox ausgeben?
13
TS
OO
P m
it D
elp
hi
Stoppuhr: Modularisierung?Stoppuhr: Modularisierung?
Aufteilung in Module?
14
TS
OO
P m
it D
elp
hi
Stoppuhr: KlassendiagrammStoppuhr: Klassendiagramm
Stoppuhr (ohne GUI)
HundertstelSekunden
Erforderliche Klassen?
15
TS
OO
P m
it D
elp
hi
Stoppuhr: KlassendiagrammStoppuhr: Klassendiagramm
Stoppuhr (ohne GUI)
HundertstelSekunden
16
TS
OO
P m
it D
elp
hi
Stoppuhr: KlassendiagrammStoppuhr: Klassendiagramm
Stoppuhr (ohne GUI)
HundertstelSekunden
17
TS
OO
P m
it D
elp
hi
Stoppuhr: KlassendiagrammStoppuhr: Klassendiagramm
Stoppuhr (ohne GUI)
HundertstelSekunden
18
TS
OO
P m
it D
elp
hi
Stoppuhr: KlassendiagrammStoppuhr: Klassendiagramm
Stoppuhr (ohne GUI)
HundertstelSekunden
19
TS
OO
P m
it D
elp
hi
Stoppuhr: KlassendiagrammStoppuhr: Klassendiagramm
Stoppuhr (ohne GUI)
HundertstelSekunden
20
TS
OO
P m
it D
elp
hi
Stoppuhr: KlassendiagrammStoppuhr: Klassendiagramm
Stoppuhr (ohne GUI)
HundertstelSekunden
21
TS
OO
P m
it D
elp
hi
Stoppuhr: KlassendiagrammStoppuhr: Klassendiagramm
Beziehung? Beziehung?
22
TS
OO
P m
it D
elp
hi
Stoppuhr: KlassendiagrammStoppuhr: Klassendiagramm
Assoziation:„kennt“
Aggregation:„hat“
23
TS
OO
P m
it D
elp
hi
Übung: StoppuhrÜbung: Stoppuhr
Definieren Sie im UML-Editor die Klasse TZaehler.
Exportieren Sie die zugehörige Delphi-Unit unter dem DateinamenmTZaehler.pas in einen neuen Ordner namens „Stoppuhr“.
Beginnen Sie ein neues Delphi-Projekt und speichern Sie alle Projekt-Dateien ebenfalls in diesem Ordner.
Fügen Sie Ihrem Projekt die Zähler-Unit hinzu.(Projekt – Hinzufügen... oder Ansicht – Projektverwaltung... )
Implementieren Sie die Zähler-Methoden!
Erstellen Sie ein einfaches GUI zum Testen der Zähler-Klasse(z.B. für Zähler erzeugen, Wert anzeigen, erhöhen). Testen Sie!
Kopieren und öffnen Sie das Delphi-Projekt „Stoppuhr“,fügen Sie Ihre Zähler-Klasse hinzu und testen Sie!
Erweiterung 1: Fügen Sie einen Highscore für die Bestzeit hinzu!
Erweiterung 2: Entwickeln Sie eine 24-Stunden-Uhr mit Weckzeit!
24
TS
OO
P m
it D
elp
hi
KontoverwaltungKontoverwaltung
25
TS
OO
P m
it D
elp
hi
KontoverwaltungKontoverwaltung
26
TS
OO
P m
it D
elp
hi
KontoverwaltungKontoverwaltung
Problem: gegenseitige „kennt“-Beziehungen!
(Überkreuz-Referenz mehrererUnits in Delphi nicht erlaubt!)
Lösung:a) Mehrere Klassen in eine Unitb) Redesign mit „Koppel“-Klassen