Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Delphi II - OOP IFB Fortbildung Objektorientiertes Programmieren in Delphi: Einführung in das Klassenkonzept Tobias Selinger 15. 4. 2008.

Ähnliche Präsentationen


Präsentation zum Thema: "Delphi II - OOP IFB Fortbildung Objektorientiertes Programmieren in Delphi: Einführung in das Klassenkonzept Tobias Selinger 15. 4. 2008."—  Präsentation transkript:

1 Delphi II - OOP IFB Fortbildung Objektorientiertes Programmieren in Delphi: Einführung in das Klassenkonzept Tobias Selinger

2 TS OOP mit Delphi 2 Drei Objekte... Pol-Ente blauer Jaguar roter Käfer Klasse: ? Objekte

3 TS OOP mit Delphi 3 Drei Objekte von einer gemeinsamen Klasse Objekte: Pol-Ente blauer Jaguar roter Käfer Klasse: ? TAuto

4 TS OOP mit Delphi 4 TAuto: Methoden? ? Was sollen Objekte der Klasse TAuto können? Welche Methoden können sie ausführen?

5 TS OOP mit Delphi 5 TAuto: Attribute? ? fahren tanken km-Stand angeben Tankinhalt angeben prüfen, ob Inspektion nötig ist Was sollen Objekte der Klasse TAuto können? Welche Methoden können sie ausführen? Welche Attribute besitzen sie?

6 TS OOP mit Delphi 6 TAuto: UML-Modell Attribute Methoden Was sollen Objekte der Klasse TAuto können? Welche Methoden können sie ausführen? Welche Attribute besitzen sie? UML-Modell: km-Stand Tankinhalt Modell fahren tanken km-Stand angeben Tankinhalt angeben prüfen, ob Inspektion nötig ist ? ?

7 TS OOP mit Delphi 7 TAuto: UML-Modell fahren tanken km-Stand angeben Tankinhalt angeben prüfen, ob Inspektion nötig ist km-Stand Tankinhalt Modell Beachte: Die Methode erzeuge ist ein sog. Konstruktor, der von der Klasse selbst ausgeführt wird! Bsp: neuesAuto := TAuto.erzeuge(Manta 08/15) Was sollen Objekte der Klasse TAuto können? Welche Methoden können sie ausführen? Welche Attribute besitzen sie? UML-Modell:

8 TS OOP mit Delphi 8 Zugriffsrechte und Notation Kapselung ( Geheimnisprinzip ) : Attribute sind generell privat. Zugriffe nur über Zugriffsmethoden. (z.B. gibKmstand ) private ( - ) Attribute Bei Methoden zusätzlich: ! für Aufträge (Prozeduren) ? für Anfragen (Funktionen) öffentliche (public) Methoden ( + ) Weitere Zugriffsrechte: ++ published ( = public + im Objekt- inspektor sichtbar) # protected ( = privat + vererbbar) Zugriffsrechte: UML-Modell:

9 TS OOP mit Delphi 9 TAuto in Delphi Delphi-Code : UML-Modell: per UML-Editor (z.B. UMLed ) automatisch erzeugbar bzw. rück-modellierbar !

10 TS OOP mit Delphi 10 MVC-Konzept (strikt) mit zwei Views Controller View 1View 2 Modell verwaltet das Modell & steuert die Views

11 TS OOP mit Delphi 11 MVC-Konzept mit kombiniertem GUI Modell Controller + View: GUI * Vorteil: nur ein GUI-Fenster nötig, einfacher Datenaustausch, schnell programmiert Nachteil: unflexibel & verstrickt, konzeptionelle Trennung nur im Kopf des Programmierers! (*) GUI: Graphical User Interface

12 TS OOP mit Delphi 12 MVC-Beispiel mit kombiniertem GUI: Auto Modell Controller + View (GUI) procedure TForm1.TankenButtonClick(Sender: TObject); begin auto.tanke(strToFloat(InputBox('Tanken', 'Menge: ', '30'))); aktualisiereAnzeige; end; 1 2 unitTAuto unit Unit1; uses... TAuto; 3

13 TS OOP mit Delphi 13 Nützlich für kurze Dialoge (d.h. kleine Ein-/Ausgabefenster) sind die folgenden Prozeduren und Funktionen der Unit Dialogs (per uses einbinden!) : Ausgabefenster: ShowMessage ( ) zeigt eine einfache Meldung an: MessageDlg (,,,0) zeigt eine konfigurierbare Meldung an. Eingabefenster: InputBox (,, ) erfragt einen einzugebenden String: InputQuery (,, ) liefert true / false (für Erfolg / Abbruch) und belegt die Variable mit dem eingegebenen String. Exkurs: Nützliche Dialoge in Delphi mtWarning, mtError, mtInformation, mtConfirmation,... [ mbYes, mbNo, mbCancel, mbOK,... ]

14 TS OOP mit Delphi 14Delphi-tückisches Einige typische Delphi-Fehler: Element nicht bekannt: a) falsche Schreibweise (Tippfehler?) b) fehlende Zugriffsrechte? (privat?) c) zugehörige Unit nicht eingebunden? ( uses...; z.B. Dialogs oder eigene Unit ) Ausgabedatei kann nicht erstellt werden: a) läuft das Projekt gerade? ( Abbrechen! s.u.) b) fehlen Zugriffsrechte? (richtiger Ordner? eigene Kopie?) Programm-Absturz: a) bei Objektzugriff?entsprechendes Objekt vorher erzeugen! (nur Formularkomponenten werden automatisch erzeugt) b) bei Arrayzugriff?Indexbereich überprüfen! (Min/Max? Beginn mit 0?) Programm hängt: Abbrechen: Entweder im Delphi-Menü: Start – Programm zurücksetzen, oder im Taskmanager: laufendes Projekt suchen – dessen Task beenden!

15 TS OOP mit Delphi 15 Aufgaben zum Auto-Projekt Kopieren Sie den Ordner Auto-Aufgabe in Ihre eigenen Dateien. (Immer den ganzen Ordner!) Öffnen Sie das Projekt und lassen Sie sich auch die Auto-Unit anzeigen! (zu finden in der uses-Klausel, dann per Kontextmenü Datei beim Cursor öffnen) Bearbeiten Sie die folgenden Aufgaben (jeweils in der Haupt-Unit oder Auto-Unit): a)Fahren-Button: Ereignisprozedur ergänzen (vgl. Tanken-Button) ! b)fahre-Methode: Auch den km-Stand erhöhen! c)Auto-Modell: Zugriffsfunktion auf den Modellnamen hinzufügen ( - ist nötig für d) ! d)Erzeugen-Button: Auch den Modellnamen im GUI anzeigen! e)im Auto-Modell: Ein Attribut naechsteInspektionBeiKm hinzufügen und diesen Wert im Konstruktor mit 1000 initialisieren! Die Funktion istInspektionNoetig soll true liefern, falls der aktuelle km-Stand höher liegt! f)Fahren-Button:Jeweils überprüfen, ob eine Inspektion nötig ist und ggf. das Inspektionslabel (als Hinweis) sichtbar machen! Fahren Sie nur los, falls das Benzin ausreicht...! g)Inspektion-Button: Den Inspektions-Hinweis zurücknehmen (d.h. unsichtbar machen) und im Auto-Modell eine Methode macheInspektion aktivieren, die den km-Stand für die nächste Inspektion geeignet erhöht! h)im Auto-Modell:Ein Attribut Tankvolumen ergänzen und beim Erzeugen per Parameter festlegen! i)Per UML-Editor: Mittels UMLed ein UML-Diagramm der Auto-Klasse erzeugen!

16 TS OOP mit Delphi 16 Eine große Objekt-Familie

17 TS OOP mit Delphi 17 Normale Uhr und Spezialisierungen Normale Uhr : Uhrwerk / Zähler für Sek., Min., Std, 1/100,... Taktgenerator Stoppuhr Start, Stopp, Reset Alarm-Uhr Alarmzeit einstellen, Alarm an/aus Schach-Uhr Start, Stopp A, Stopp B Spezialisierungen:

18 TS OOP mit Delphi 18 Stoppuhr: Modularisierung? Aufteilung in Module?

19 TS OOP mit Delphi 19 Stoppuhr: Klassendiagramm Hundertstel Sekunden Erforderlich e Klassen? Taktgeber Uhrwerk

20 TS OOP mit Delphi 20 Stoppuhr: Klassendiagramm Uhrwerk Hundertstel Sekunden TUhrwerk TZähler TForm TTimer (Delphi-Komponente) modulo n

21 TS OOP mit Delphi 21 Stoppuhr: Klassendiagramm Uhrwerk Hundertstel Sekunden TUhrwerk TZähler TForm TTimer (Delphi-Komponente) modulo n

22 TS OOP mit Delphi 22 Stoppuhr: Klassendiagramm Uhrwerk Hundertstel Sekunden TUhrwerk TZähler TForm TTimer z.B. 07 z.B. 13:07 in ms (Delphi-Komponente) modulo n ?

23 TS OOP mit Delphi 23 Stoppuhr: Klassendiagramm Uhrwerk Hundertstel Sekunden TUhrwerk TZähler TForm TTimer z.B. 07 z.B. 13:07 in ms (Delphi-Komponente) modulo n ?

24 TS OOP mit Delphi 24 Stoppuhr: Klassendiagramm Uhrwerk Hundertstel Sekunden TUhrwerk TZähler TForm TTimer z.B. 07 z.B. 13:07 in ms modulo n (Delphi-Komponente)

25 TS OOP mit Delphi 25 Bilden Sie Zweier- oder Dreier-Teams zur Implementierung der Klassen (*): 1)Haupt-Unit mit Formular und Timer-Komponente (aus Registerkarte: System). 2)TUhrwerk. 3)TZaehler. Nutzen Sie für 2) und 3) den UML-Editor zur Erstellung der jeweiligen Klasse: -Erstellen Sie ein entsprechendes UML-Modell. -Exportieren Sie den zugehörigen Code in eine entsprechende Delphi-Unit. -Öffnen Sie diese Unit in Delphi und ergänzen Sie den nötigen Methoden-Code. -Speichern Sie ihre Unit in den Projekt-Ordner der Haupt-Unit, fügen Sie die Unit dem Projekt hinzu, und ergänzen Sie die nötigen uses-Deklarationen. Compilieren und testen Sie - viel Erfolg !! Aufgabe: Stoppuhr implementieren * Spezifikationsdetails: TForm1.initerzeugt das Uhrwerk TUhrwerk.tickeerhöht die Hunderstel und ggf. die Sekunden TUhrwerk.gibZeitliefert die Zeit als String im Format ss:hh TZaehler.gibStringwertliefert den Wert als zweistelligen String (z.B. 37, 07)

26 TS OOP mit Delphi 26 Aufgabe: Weitere Uhren modellieren 1.Entwickeln Sie in UML - zunächst auf Papier - geeignete Klassen für eine a) 24-Stunden-Uhr (mit Stell-Möglichkeit) b) Uhr mit Weckfunktion c) Schachuhr d)Countdown-Uhr (Tipp: TZaehler um eine Methode erniedrige erweitern!) 2.Implementieren Sie eine dieser Uhren! (Nutzen Sie den UML-Editor!) 3.Hausaufgabe: Realisieren Sie diese Uhr als analoge Zeigeruhr (d.h. mit alternativer View)!

27 TS OOP mit Delphi 27 Lösung: 24-Stunden-Uhr (UML)

28 TS OOP mit Delphi 28 Lösung: 24-Stunden-Uhr mit Alarm (UML) Die Klasse TZaehler wird unverändert benutzt!

29 TS OOP mit Delphi 29 Lösung: 24-Stunden-Uhr mit Alarm (alle Klassen)

30 TS OOP mit Delphi 30 Lösung: Schach-Uhr (UML) Tipp zur Implementierung: Zwei 24-Std-Uhrwerke erzeugen, dann das aktuelle Uhrwerk jeweils mit dem entsprechenden Uhrwerk belegen und ticken lassen! UhrA UhrB aktuelleUhr

31 TS OOP mit Delphi 31 Vererbung: Alarmuhr erstmal ohne... Vergleich ? doppelter Code !

32 TS OOP mit Delphi 32 Vererbung: Alarmuhr erstmal ohne... Besser geht es mit Vererbung... Ohne Vererbung: Die komplette bisherige Klasse T24StdUhrwerk plus weiterem Code für die Alarm-Funktion. Nachteil: Code-Duplikation!

33 TS OOP mit Delphi 33 Alarmuhr mit Vererbung Ohne Vererbung: Die komplette bisherige Klasse T24StdUhrwerk plus weiterem Code für die Alarm-Funktion. Nachteil: Code-Duplikation! Mit Vererbung: Durch T24StdUhrwerk als Oberklasse ist nur noch der Code für die Alarm-Funktion nötig! Unterklasse (erbt von...) protected (vererbbar) Oberklasse (vererbt an)

34 TS OOP mit Delphi 34 Alarmuhr mit Vererbung in Delphi: protected (vererbbar) Delphi-Code für Vererbung: Oberklasse ruft die ererbte erzeuge-Methode auf Mit Vererbung: Durch T24StdUhrwerk als Oberklasse ist nur noch der Code für die Alarm-Funktion nötig!

35 TS OOP mit Delphi 35 Stoppuhr mit integriertem Timer ? TUhrwerk TForm TTimer

36 TS OOP mit Delphi 36 Stoppuhr mit integriertem Timer TUhrwerk TForm TTimer mit TStoppUhr

37 TS OOP mit Delphi 37 Stoppuhr: Implementierung des Timers Der Timer: Einfach im Konzept, aber tückisch in der Implementierung: constructor TStoppuhr.erzeuge;...Timer := TTimer.Create(nil); Timer.Enabled := false; Timer.OnTimer := TimerTick; procedure TStoppUhr.TimerTick(Sender: TObject); begin ticke; end; der Timer-Konstruktor verlangt einen Eigentümer die Ereignisprozedur wird hier nur als Name eingetragen, aber hier mit Sender-Parameter deklariert! Aufruf der eigentlichen Stoppuhr-Methode! Und nicht vergessen, die Timer-Unit einzubinden: uses ExtCtrls;

38 TS OOP mit Delphi 38 Stoppuhr: Kommunikation mit GUI Kommunikation - oder: Wie erfährt das GUI von der aktuellen Zeit ? Schritte für Mögl.2: Mögl.1:Das GUI fragt ständig nach der Zeit (Polling)! Öde Endlosschleife... Mögl.2: Das Modell (Stoppuhr) informiert das GUI über Änderungen! Die Stoppuhr muss hierfür auf das Anzeigefeld zugreifen. (Das verletzt allerdings die Unabhängigkeit der Stoppuhr...) ein privates Attribut für (einen Zeiger auf) das GUI-Anzeigefeld einbauen beim Erzeugen (einen Zeiger auf) dieses Anzeigefeld mitgeben Und nicht vergessen, für TEdit die Standard-Unit einzubinden: uses StdCtrls

39 TS OOP mit Delphi 39 Stoppuhr: Kommunikation mit GUI Schritte für Mögl.2: im GUI: Und nicht vergessen, für TEdit die Standard-Unit einzubinden: uses StdCtrls in TStoppuhr:

40 TS OOP mit Delphi 40 Aufgaben: Stoppuhr mit Timer 1.Erstellen Sie eine Kopie des bisherigen Stoppuhr-Ordners und integrieren Sie dort einen Timer in die Stoppuhr-Klasse. 2.Testen Sie die Funktion mittels a) manuellem Polling (Abfrageknopf auf GUI) b) zyklischem Polling (Schleife oder weiterer Timer im GUI) 3.Implementieren Sie den direkten Zugriff der Stoppuhr auf das GUI-Anzeigefeld! 4.Bewerten Sie die Vor- und Nachteile dieser Verfahren!

41 TS OOP mit Delphi 41 Ticketautomat: Formular...

42 TS OOP mit Delphi 42 Ticketautomat:... mit GUI-Klasse...

43 TS OOP mit Delphi 43 Ticketautomat:... und Modell-Klasse Aufrufe

44 TS OOP mit Delphi 44 Ticketautomat: Beziehung? Aufrufe GUI-Klasse Fach-Klasse Beziehung?

45 TS OOP mit Delphi 45 Ticketautomat: Assoziation Aufrufe GUI-Klasse Fach-Klasse kennt-Beziehung: Assoziation

46 TS OOP mit Delphi 46 Ticketautomat: 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

47 TS OOP mit Delphi 47Benutzer-Dialog Wer – d.h. welche Klasse? – führt den Dialog mit dem Benutzer ? GUI-Klasse oderFachklasse ?

48 TS OOP mit Delphi 48Benutzer-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

49 TS OOP mit Delphi 49Benutzer-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 Beispiel:- 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;

50 TS OOP mit Delphi 50 Zum 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 Dialogs folgende unabhängige Prozeduren und Funktionen: Ausgabefenster: ShowMessage ( ) zeigt einen String an. Eingabefenster: InputBox (,, ) liefert den eingegebenen String. InputQuery (,, ) liefert Erfolg (true/false) und belegt ggf. die Variable mit der Benutzer-Eingabe.

51 TS OOP mit Delphi 51 Ü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, 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 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?

52 TS OOP mit Delphi 52 Modellierung von 17 und 4 17 und 4 : beteiligte Objekte ?

53 TS OOP mit Delphi und 4 genauer...?

54 TS OOP mit Delphi und 4 Bank Kartenstapel Spieler 1 Spieler 2 Spieler 3 Karten Klassenbildung?

55 TS OOP mit Delphi 55 T 17 und 4 Bank Kartenstapel Spieler 1 Spieler 2 Spieler 3 Karten TSpieler TKartenstapel TKarte TBank Beteiligte Klassen:

56 TS OOP mit Delphi 56 typNr6 farbNr4 gibFarbe Kreuz gibName Dame gibPunkte 3 17 und 4: Modellierung der Spielkarten typNr: farbNr: Beispiel:

57 TS OOP mit Delphi 57 Modellierung des Kartenstapels Methoden?

58 TS OOP mit Delphi 58 1.Verwenden von gegebenen Klassen: Spielkarten ziehen Vorgabe: nur diese beiden Klassen. Beginnen Sie ein neues Projekt und ent- wickeln Sie ein GUI für folgende Aufgaben: a)Per Knopfdruck eine bestimmte Spielkarte erzeugen und anzeigen! (Deklarieren Sie die verwendeten Klassen (Units) mittels uses..., und die Spielkarte als privates Attribut der GUI-Klasse TForm1) b)Einen Kartenstapel erzeugen, und auf Knopfdruck nacheinander einzelne Karten ziehen und anzeigen! c)Diesen Stapel mischen und in einer Listbox eine komplette Ziehung anzeigen! Aufgaben: GUI für erste Tests

59 TS OOP mit Delphi 59 Aufgabe: Entwurf von TSpieler 2.Entwurf einer neuen Klasse TSpieler für das Spiel 17 und 4 : Attribute: karte (die aktuell gezogene) und summe (aller bisherigen Kartenpunkte), jeweils inklusive Lese-Methoden Methoden:erzeuge (Konstruktor), zieheKarte. a)Erstellen Sie diese Klasse zunächst auf Papier, dann im UML-Editor, und exportieren Sie die zugehörige Unit in Ihren Projektordner. b)Binden Sie diese Klasse in Ihr Projekt ein (uses...), und ergänzen Sie die Implementierung der Methoden. c)Per Knopfdruck soll der Spieler eine Karte ziehen. Testen Sie! d)Erweitern Sie die Klasse TSpieler um die Angabe eines Namens! e)Erweitern Sie TSpieler um die Methode hatSichUeberreizt (liefert true, falls die Summe 21 übersteigt). Prüfen Sie beim Ziehen einer Karte (im GUI), ob sich der Spieler dadurch überreizt hat, und deaktivieren Sie ggf. den Ziehe-Button!

60 TS OOP mit Delphi 60 3.Assoziation: Bekanntmachen bzw. Zuordnen von Objekten Ein zweiter Mitspieler soll den gleichen Kartenstapel mitbenutzen. Aufgabe: Assoziation des Kartenstapels Spieler 1 benutzterStapel verwendeStapel(stapel) Spieler 2 benutzterStapel verwendeStapel(stapel) Kartenstapel Schreib-Methode für das (private!) Attribut Erweitern Sie TSpieler um das Assoziations-Attribut und die zugehörige Methode, erzeugen Sie zwei Spieler und einen Kartenstapel, und ordnen Sie diesen Stapel beiden Spielern zu. Testen Sie!

61 TS OOP mit Delphi 61 Aufgabe: Bank-Klasse (mit Vererbung) 4.Vererbung: Spezialisierung von Objekten bzw. Klassen Die Bank ist ein besonderer Spieler mit erweiterten Fähigkeiten: Sie verwaltet die Mitspieler, bestimmt den Gewinner, und hat ihre eigene Zug-Strategie (nur Ziehen, falls Summe < 17). Definieren Sie diese Klasse TBank im UML-Editor, und ergänzen Sie den exportierten Code-Rahmen. Testen Sie! TSpieler ist eine Spezialisierung von Die Klasse TBank erbt von ihrer Oberklasse TSpieler alle Attribute und Methoden. Ggf. müssen ererbte Methoden neu definiert (überschrieben) werden!

62 TS OOP mit Delphi und 4: Klassendiagramme

63 TS OOP mit Delphi 63 Stoppuhr: Klassendiagramm Sekunden Stoppuhr (ohne GUI) Hundertstel

64 TS OOP mit Delphi 64 Stoppuhr: Klassendiagramm Sekunden Stoppuhr (ohne GUI) Hundertstel

65 TS OOP mit Delphi 65 Stoppuhr: Klassendiagramm Sekunden Stoppuhr (ohne GUI) Hundertstel

66 TS OOP mit Delphi 66 Stoppuhr: Klassendiagramm Beziehung?

67 TS OOP mit Delphi 67 Stoppuhr: Klassendiagramm Assoziation: kennt Aggregation: hat

68 TS OOP mit Delphi 68 Übung: Stoppuhr Definieren Sie im UML-Editor die Klasse TZaehler. Exportieren Sie die zugehörige Delphi-Unit unter dem Dateinamen mTZaehler.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!

69 TS OOP mit Delphi 69Kontoverwaltung

70 TS OOP mit Delphi 70Kontoverwaltung

71 TS OOP mit Delphi 71Kontoverwaltung Problem: gegenseitige kennt- Beziehungen! (Überkreuz-Referenz mehrerer Units in Delphi nicht erlaubt!) Lösung: a) Mehrere Klassen in eine Unit b) Redesign mit Koppel-Klassen


Herunterladen ppt "Delphi II - OOP IFB Fortbildung Objektorientiertes Programmieren in Delphi: Einführung in das Klassenkonzept Tobias Selinger 15. 4. 2008."

Ähnliche Präsentationen


Google-Anzeigen