Delphi II OOP IFB Fortbildung Grundkonzepte der OOP
Delphi II - OOP IFB Fortbildung Grundkonzepte der OOP: Beziehungen zwischen Objekten Bsp: Ticketautomat – Stoppuhr - Kontoverwaltung 7. 11. 2006 Tobias Selinger
OOP mit Delphi 2 TS Ticketautomat: Formular
OOP mit Delphi 3 TS Ticketautomat: Formular-Klasse
Ticketautomat: Klassendiagramm OOP mit Delphi 4 TS Aufrufe
Ticketautomat: Beziehung? OOP mit Delphi 5 TS GUI-Klasse Beziehung? Aufrufe Fach-Klasse
Ticketautomat: Assoziation OOP mit Delphi 6 TS GUI-Klasse „kennt“-Beziehung: Assoziation Aufrufe Fach-Klasse
Ticketautomat: Units OOP mit Delphi 7 GUI-Klasse unit Unit 1; uses Windows, Forms, . . . „kennt“-Beziehung: m. TTicketautomat; Assoziation type TForm 1 TS Fach-Klasse unit m. TTicketautomat; Uses Dialogs, Sys. Utils; type TTicketautomat = class(TForm) Aufrufe
Benutzer-Dialog 8 Wer – d. h. welche Klasse? – führt den Dialog mit dem Benutzer ? OOP mit Delphi GUI-Klasse TS oder Fachklasse ?
Benutzer-Dialog 9 Wer – d. h. welche Klasse? – führt den Dialog mit dem Benutzer ? Die GUI-Klasse: OOP mit Delphi (typischerweise) TS - Buttons, Edit-Felder, Dialog-Boxen etc. Ereignisbehandlungs-Prozeduren Aufruf der Methoden der bekannten Fachklasse Behandeln / Anzeigen der Rückgabewerte
Benutzer-Dialog 10 Wer – d. h. welche Klasse? – führt den Dialog mit dem Benutzer ? Die GUI-Klasse: (typischerweise) Buttons, Edit-Felder, Dialog-Boxen etc. Ereignisbehandlungs-Prozeduren Aufruf der Methoden der bekannten Fachklasse Behandeln / Anzeigen der Rückgabewerte OOP mit Delphi Beispiel: - procedure TForm 1. Geld. Einwerfen. Button. Click(Sender: TObject); var betrag: integer; begin betrag : = strtoint(Input. Box('Geld einwerfen', 'Betrag', '0')); Automat. geld. Einwerfen(betrag); Aktuelle. Anzahlung. Edit. Text: =inttostr(Automat. gib. Aktuelle. Anzahlung); end; TS
11 Zum Testen: Dialoge innerhalb der Fachklasse Mitunter kann es hilfreich sein, eine Fachklasse alleine zu testen, d. h. a la Blue. J unabhängig von einer GUI-Klasse. Für kurze Dialoge (kleine Ein-/Ausgabefenster) bietet die Unit Dialogs folgende „unabhängige“ Prozeduren und Funktionen: OOP mit Delphi Ausgabefenster: Show. Message (<Nachricht>) zeigt einen String an. Eingabefenster: Input. Box (<Titel>, <Frage>, <Defaultwert>) liefert den eingegebenen String. Input. Query (<Titel>, <Frage>, <String-Variable>) liefert Erfolg (true/false) und belegt ggf. die Variable mit der Benutzer-Eingabe. TS
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 (TForm 1 und TTicketautomat, inkl. Code). OOP mit Delphi Ergänzen Sie (im UML-Editor) die Methode Einnahmen. Abholen, die dem 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, und ergänzen Sie die Implementierung der Methode Einnahmen. Abholen: - 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! TS Zusatz: Wie könnte man ein Parkticket in der GUI-Listbox ausgeben?
13 Stoppuhr: Modularisierung? OOP mit Delphi Aufteilung in Module? TS
14 Stoppuhr: Klassendiagramm OOP mit Delphi Stoppuhr (ohne GUI) TS Sekunden Hundertstel Erforderliche Klassen?
15 Stoppuhr: Klassendiagramm OOP mit Delphi Stoppuhr (ohne GUI) TS Sekunden Hundertstel
16 Stoppuhr: Klassendiagramm OOP mit Delphi Stoppuhr (ohne GUI) TS Sekunden Hundertstel
17 Stoppuhr: Klassendiagramm OOP mit Delphi Stoppuhr (ohne GUI) TS Sekunden Hundertstel
18 Stoppuhr: Klassendiagramm OOP mit Delphi Stoppuhr (ohne GUI) TS Sekunden Hundertstel
19 Stoppuhr: Klassendiagramm OOP mit Delphi Stoppuhr (ohne GUI) TS Sekunden Hundertstel
20 Stoppuhr: Klassendiagramm OOP mit Delphi Stoppuhr (ohne GUI) TS Sekunden Hundertstel
OOP mit Delphi 21 TS Stoppuhr: Klassendiagramm Beziehung?
OOP mit Delphi 22 TS Stoppuhr: Klassendiagramm Assoziation: „kennt“ Aggregation: „hat“
23 Übung: Stoppuhr Definieren Sie im UML-Editor die Klasse TZaehler. Exportieren Sie die zugehörige Delphi-Unit unter dem Dateinamen m. TZaehler. pas in einen neuen Ordner namens „Stoppuhr“. OOP mit Delphi 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 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! TS
OOP mit Delphi 24 TS Kontoverwaltung
OOP mit Delphi 25 TS Kontoverwaltung
Kontoverwaltung OOP mit Delphi 26 Problem: gegenseitige „kennt“Beziehungen! TS (Überkreuz-Referenz mehrerer Units in Delphi nicht erlaubt!) Lösung: a) Mehrere Klassen in eine Unit b) Redesign mit „Koppel“-Klassen
- Slides: 26