1 / 15

MVC-Uhr

MVC-Uhr. Siehe auch K. Merkert HSG-Kaiserslautern. Speyer, 13.09.05. Helmut Paulus MPG Trier. Modellierung der Klassen. Klassendiagramm. Modell Datenklasse Fachkonzeptklasse (Unit: mTUhr.pas). GUI-Klasse Ansicht, Steuerung (Unit: uUhrform.pas). Formularklasse: TUhrForm. type

gage
Download Presentation

MVC-Uhr

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. Formularklasse: TUhrForm 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; varUhrForm: TUhrForm; TFUhr wird von TForm abgeleitet Referenzvariable für das Uhrenobjekt Uhr <- nil Referenzvariable für das Formularobjekt

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

  5. Implementierung Controller-Ereignisse 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; Uhr anzeigen Abfragen der Uhrendaten Ansicht aktualisieren Uhr setzen Speichern der Uhrendaten

  6. Uhr mit Ereignis

  7. Die Implementation erfordert in vier Schritte: Vereinbarung eines Methodenzeiger-Typs Vereinbarung eines Methodenzeigers Aufruf der Ereignisprozedur über den Methodenzeiger Zuweisung einer Ereignisprozedur 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.

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

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

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

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

  12. Uhr mit Timer

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

  14. Implementierung 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; wegen TTimer Objektreferenz Ereignismethode des Timers

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

More Related