Title: Delphi II - OOP
1Delphi II - OOP
- IFB Fortbildung
- Grundkonzepte der OOP Beziehungen zwischen
Objekten - Bsp Ticketautomat Stoppuhr - Kontoverwaltung
- 7.11.2006
- Tobias Selinger
2Ticketautomat Formular
3Ticketautomat Formular-Klasse
4Ticketautomat Klassendiagramm
Aufrufe
5Ticketautomat Beziehung?
GUI-Klasse
Fach-Klasse
Beziehung?
Aufrufe
6Ticketautomat Assoziation
GUI-Klasse
kennt-Beziehung Assoziation
Fach-Klasse
Aufrufe
7Ticketautomat Units
GUI-Klasse
- unit Unit1
- uses
- Windows, Forms, ... mTTicketautomat
- type
- TForm1 class(TForm)
kennt-Beziehung Assoziation
Fach-Klasse
- unit mTTicketautomat
- Uses
- Dialogs, SysUtils
- type
- TTicketautomat class
Aufrufe
8Benutzer-Dialog
- Wer d.h. welche Klasse? führt den Dialog
mit dem Benutzer ? - GUI-Klasse oder Fachklasse ?
9Benutzer-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
10Benutzer-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.Textinttostr(Automat.gibAk
tuelleAnzahlung)end
11Zum 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 (ltNachrichtgt) zeigt einen String
an. - Eingabefenster
- InputBox (ltTitelgt, ltFragegt, ltDefaultwertgt)
liefert den eingegebenen String. - InputQuery (ltTitelgt, ltFragegt, ltString-Variablegt)
liefert Erfolg (true/false) und belegt ggf.
die Variable mit der Benutzer-Eingabe.
12Übung zum Ticketautomat und UML-Editor Einnahmen
abholen
- 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?
13Stoppuhr Modularisierung?
Aufteilung in Module?
14Stoppuhr Klassendiagramm
Stoppuhr (ohne GUI)
Hundertstel
Sekunden
Erforderliche Klassen?
15Stoppuhr Klassendiagramm
Stoppuhr (ohne GUI)
Hundertstel
Sekunden
16Stoppuhr Klassendiagramm
Stoppuhr (ohne GUI)
Hundertstel
Sekunden
17Stoppuhr Klassendiagramm
Stoppuhr (ohne GUI)
Hundertstel
Sekunden
18Stoppuhr Klassendiagramm
Stoppuhr (ohne GUI)
Hundertstel
Sekunden
19Stoppuhr Klassendiagramm
Stoppuhr (ohne GUI)
Hundertstel
Sekunden
20Stoppuhr Klassendiagramm
Stoppuhr (ohne GUI)
Hundertstel
Sekunden
21Stoppuhr Klassendiagramm
22Stoppuhr Klassendiagramm
23Ü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!
24Kontoverwaltung
25Kontoverwaltung
26Kontoverwaltung
Problem gegenseitige kennt-Beziehungen! (Überkr
euz-Referenz mehrererUnits in Delphi nicht
erlaubt!)
Lösunga) Mehrere Klassen in eine Unitb)
Redesign mit Koppel-Klassen