Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 MVC-Uhr Speyer, 13.09.05 Helmut Paulus MPG Trier Siehe auch K. Merkert HSG-Kaiserslautern.

Ähnliche Präsentationen


Präsentation zum Thema: "1 MVC-Uhr Speyer, 13.09.05 Helmut Paulus MPG Trier Siehe auch K. Merkert HSG-Kaiserslautern."—  Präsentation transkript:

1 1 MVC-Uhr Speyer, Helmut Paulus MPG Trier Siehe auch K. Merkert HSG-Kaiserslautern

2 2 Modellierung der Klassen Klassendiagramm GUI-Klasse Ansicht, Steuerung (Unit: uUhrform.pas) Modell Datenklasse Fachkonzeptklasse (Unit: mTUhr.pas)

3 3 type TFUhr = class(TForm) Ed_H: TEdit; Ed_Min: TEdit; Btn_setzen: TButton; Btn_abfragen: TButton; Label1: TLabel; L_Anzeige: TLabel; procedure Btn_abfragenClick(Sender: TObject); procedure Btn_setzenClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private-Deklarationen} public { Public-Deklarationen} Uhr : TUhr; end; var UhrForm: TUhrForm; Formularklasse: TUhrForm Referenzvariable für das Uhrenobjekt Uhr <- nil Referenzvariable für das Formularobjekt TFUhr wird von TForm abgeleitet

4 4 Implementierung procedure TUhrForm.FormCreate(Sender: TObject); begin Uhr := TUhr.create; end; procedure TUhrForm.FormDestroy(Sender: TObject); begin Uhr.Free end; Fensterereignisse Zerstörung des Objekts (Speicherfreigabe) Erzeugung des Uhrenobjekts Variable Uhr erhält einen Zeiger auf das Objekt

5 5 procedure TUhrForm.Btn_abfragenClick(Sender: TObject); var h,min : integer; sh,smin : string; begin h := Uhr.GetH; min := Uhr.GetMin; sec := Uhr.getSec; if length(sh) = 1 then sh := '0'+sh; if length(smin) = 1 then smin := '0'+smin; if length(ssec) = 1 then ssec := '0'+ssec; L_Anzeige.caption := sh+':'+smin; end; procedure TUhrForm.Btn_setzenClick(Sender: TObject); var h,min : integer; begin h := StrToInt(Ed_H.text); min := StrToInt(Ed_Min.text); Uhr.SetH(h); Uhr.SetMin(min); end; Implementierung Abfragen der Uhrendaten Ansicht aktualisieren Speichern der Uhrendaten Controller-Ereignisse Uhr anzeigen Uhr setzen

6 6 Uhr mit Ereignis

7 7 Ein Ereignis für das Uhrobjekt Das Uhrobjekt soll die Ansicht über Datenänderungen informieren. Dazu wird ein Ereignis implementiert, das bei Datenänderung ausgelöst wird, also in den set-Methoden. Das Modell erhält einen Methodenzeiger, der mit einer Methode des Formulars verknüpft werden kann. Die Schritte (1) – (3) erfolgen im Modellobjekt, Schritt (4) im Formular. Die Implementation erfordert in vier Schritte: 1. Vereinbarung eines Methodenzeiger-Typs 2. Vereinbarung eines Methodenzeigers 3. Aufruf der Ereignisprozedur über den Methodenzeiger 4. Zuweisung einer Ereignisprozedur

8 8 type TOnChanged = procedure of object; (1.) TUhr = Class.... public... OnChanged : TOnChanged; (2.) end; Ereignis: OnChanged vom Typ TChangeEvent Implementation des Ereignisses 1.Deklaration eines Methodenzeigertyps (hier: für eine Prozedur ohne Parameter) 2.Deklaration einer Referenzvariablen vom Typ des Methodenzeigers Methode ohne Parameterliste

9 9 procedure TUhr.setH(wert : integer); begin FH := wert; //GUI informieren if assigned(OnChanged) then OnChanged; (3) end; Wirkung: Das Modellobjekt ruft eine Methode des GUI-Objekts auf, wenn sich seine Daten ändern. Auslösen des Ereignisses Modell: 3. Ereignis auslösen

10 10 type TUhrForm = class(TForm)... private Uhr : TUhr; procedure updateView; public... end; Ereignisbearbeitungsmethode procedure TUhrForm.updateView; begin //wird vom Modell aufgerufen... end; Implementierung: Ereignismethode vom Typ des Methodenzeigers GUI-Klasse:

11 11 procedure TUhrForm.FormCreate(Sender: TObject); begin Uhr := TUhr.create; Uhr.OnChanged := updateViews; (4) end; 4. Verknüpfen des Methodenzeigers mit OnCreate -Ereignis Setzen des Methodenzeigers GUI-Klasse:

12 12 Uhr mit Timer

13 13 Modell-Klasse Das Uhrenobjekt erhält eine private Timerkomponente, die die Zeit im Sekundentakt erhöht. Klassendiagramm Das Uhrenobjekt ist für die Erzeugung und Zerstörung des Timerobjekts zuständig. Hat - Beziehung -Timer : Referenz auf das Timerobjekt -!ticke : Ereignismethode (OnTimer) OnTimer - Ereignis

14 14 uses extctrls; type TUhr = Class private FH : integer; Fmin : integer; FSec : integer; Timer : TTimer; private procedure ticke(Sender:TObject); public constructor create; destructor destroy; override;... end; Implementierung Objektreferenz wegen TTimer Ereignismethode des Timers

15 15 constructor TUhr.create; begin Timer := TTimer.create(nil); with Timer do begin interval := 1000; enabled := true; OnTimer := ticke end; destructor TUhr.destroy; begin Timer.free; inherited destroy; end; Implementierung Methodenzeiger mit der Ereignismethode verknüpfen Erwartet wird eine Referenz auf den Besitzer der Komponente: Objekt vom Typ TComponent oder nil. Freigabe des Objekts Aufruf des Destruktors der Basiskalsse TObject TUhr ist unmittelbar von TObject abgeleitet und kann daher nicht Besitzer (owner) einer Komponente sein.


Herunterladen ppt "1 MVC-Uhr Speyer, 13.09.05 Helmut Paulus MPG Trier Siehe auch K. Merkert HSG-Kaiserslautern."

Ähnliche Präsentationen


Google-Anzeigen