Das MVC- Konzept (Model-View-Controller) Realisierung mit Delphi

  • View
    80

  • Download
    0

Embed Size (px)

DESCRIPTION

Das MVC- Konzept (Model-View-Controller) Realisierung mit Delphi. Helmut Paulus MPG Trier. Speyer, 16.05.07. berblick. Grundlagen der OOP MVC-Architektur Implementierung des Farbenmischers. Motivation. Problematik der Softwareentwicklung Komplexitt nimmt zu - PowerPoint PPT Presentation

Transcript

  • Das MVC- Konzept (Model-View-Controller)

    Realisierung mit Delphi

    Speyer, 16.05.07Helmut Paulus MPG Trier

  • berblickGrundlagen der OOPMVC-ArchitekturImplementierung des Farbenmischers

  • MotivationProblematik der SoftwareentwicklungKomplexitt nimmt zu Pflege immer aufwndigerLsungen:Objektorientierte ProgrammierungEntwurfsmuster fr graphisch BenutzungsoberflchenMVC: Modell-Ansicht-Steuerung

  • Teil 1Grundlagen Objektorientierte Programmierung

  • Objektorientierte ProgrammierungDinge der WeltObjekte im Sinne der Informatik

  • ObjekteEin Objekt wird durch die Werte seiner Attribute festgelegt. AttributwertAttributFarberot = 23gruen = 25blau = 255Ein Objekt ist das Abbild eines realen oder gedachten Gegenstandes bzw. einer Person. Objekte sind autonome Bausteine, die bestimmte Teilaufgaben der Anwendung eigenstndig erledigen.

  • Klassen und ObjekteKlassen sind Bauplne von ObjektenObjekte sind Instanzen (Exemplare) von Klassen.ObjekteKlasseist Instanz von

  • GeheimnisprinzipAuf die Eigenschaftswerte wird nicht direkt sondern nur ber besondere Lese- und Schreibmethoden zugegriffen.Bei Delphi gibt es einen speziellen property- Mechanismus, ber den durch Zuweisung auf die Eigenschaftswerte zugegriffen werden kann.TFarbe- Frot : integer- Fgruen :integer- Fblau : integer+ getRot : integer;+ setRot(r : integer);Die innere Strukturwird verborgen.Zugriffsmethoden

  • Erzeugung von ObjektenKonstruktoren sind spezielle Methoden, dieden Speicherbereich eines Objekts anlegen, die Attribute mit Standardwerten belegen, eine Referenz auf das Objekt zurckgeben. KonstruktorObjekte werden mit Konstruktoren erzeugt.

  • Erzeugung eines Farbobjektsvar Farbe1 : TFarbe;......Farbe1 := TFarbe.create;

    KlassennameAufruf des Konstruktors(Der Klassenname wird vorangestellt)

  • Arbeiten mit ObjektenDer Zugriff auf Objekte erfolgt mit Hilfe der Objektvariablen Schema: Objektvariable.Methode

  • Teil 2MVC-Architektur

  • MVC-Farbenmischer

  • MVC-PrinzipZiel: Trennung von Datenhaltung und -verarbeitung, Darstellung und Steuerung. Die Anwendung wird in drei Bereiche aufgeteilt: View und Controller bilden zusammen die Benutzeroberflche (GUI).

  • MVC-ArchitekturModel(Daten,Verarbeitung)ControllerSteuerungViewAnsichtinformiert

  • BedingungenDie interne Datenverarbeitung ist von der Benutzeroberflche (GUI) gnzlich abgekoppelt.Das Modell kennt weder View noch Controller. Das bedeutet: In den Datenklassen werden keine View oder Controllermethoden aufgerufen!View und Controller kennen das Modell und lesen und schreiben die Daten.Zwischen den GUI-Objekten und dem MODEL-Objekt werden Verbindungen hergestellt, um einen Datenaustausch zu ermglichen.

  • Vorteile der MVC-Strukturnderungen der Benutzeroberflche haben daher keine Auswirkung auf die interne Verarbeitung der Daten und der Datenstruktur.Verbesserung der Wiederverwendbarkeit klare Strukturierung eines Programms Die Daten knnen gleichzeitig mehrfach auf unterschiedliche Weise dargestellt werden.

  • Fragen und ProblemeWie erreicht man die Entkopplung? Wie greifen View und Controller auf die Daten zu? Wie knnen die Views aktualisiert werden, wenn das Modell keinen Zugriff auf sie hat? Wie erfahren die Views, dass sich die Daten des Modells gendert haben?

  • Realisierung in DelphiAktualisierungsmglichkeiten:Die Views fragen (evtl. permanent) das Modell ab. (Polling)Die Views werden durch Ereignisse des Modells ber Datennderungen informiert und aktualisieren sich daraufhin. (Selbstdefinierte Ereignisse)Benachrichtigung mittels Beobachter-Muster (Observer-Pattern)Entkopplung:GUI- und Modellklassen in verschiedenen Units haltenView und Controller in einem Formular (uGUI.pas) unterbringenModell-Klasse in einer eigenen Unit (uModell.pas) speichernDatenzugriff:Die GUI-Klasse erhlt eine Referenz auf das Modell-Objekt. Der Datenzugriff erfolgt mit Lese- und Schreibmethoden, die das Modell zur Verfgung stellt (z. B. setAttribut() bzw. getAttribut(), Zugriff ber Properties).

  • Teil 3Implementierung des Farbmischers (1.Variante: Abfragen)

  • Spezifikation/Implementierung der Modell-KlasseFestlegung von:Zugriffsrechten (- private; + public)DatentypenSignaturen (Parameter der Methoden)

  • Implementation der Methodenconstructor TFarbe.create;begin Frot := 255; Fgruen:= 255; Fblau := 255;end;function TFarbe.getFarbe : Integer;begin result := Fblau*256*256+FGruen*256+Frot;end;procedure TFarbe.setFarbe(r,g, b : integer);begin Frot := r mod 256; Fgruen := g mod 256; Fblau := b mod 256;end; (Listing uFarbModell)

  • BenutzeroberflcheGUI (Formular-Unit):GUI-Objekte:

    TLabelTEditTButton

    TShape

    TButton

  • ObjektverwaltungDas Formular verwaltet die GUI-Objekte und das Modellobjekt. Uses ..., uFarbModell;TFarbForm = class(TForm) Farbmischer: TGroupBox; Label1: TLabel; rotEd: TEdit; okBtn: TButton; Ansicht: TGroupBox; Label7: TLabel; endBtn: TButton; FarbBox: TShape; ...private { Private-Deklarationen } Farbe : TFarbe; ...ReferenzattributeZeiger auf ein FarbobjektkenntModell-unit-einbinden

  • Objekterzeugung/-zerstrungDie GUI-Objekte, die zur Entwurfzeit ins Formular eingefgt wurden, werden automatisch erzeugt und zerstrt.Das Farbobjekt muss zur Laufzeit erzeugt und zerstrt werden.

  • Ereignisgesteuerter AblaufSzenario:Der Ok_Button (bernehmen) wird gedrckt:Aktionen:Werte der Eingabefenster lesen.Farbobjekt aktivieren (Farbe.setFarbe(r,g,b));Shapes aktualisieren sich (updateViews)Wer macht was?

  • Aktualisierung der Views//Datenfluss: Modell Viewprocedure TFarbForm.updateViews;//Modelldaten lesenbegin FarbBox.brush.color := Farbe.getFarbe; KFarbBox.brush.color := clwhite - Farbe.getFarbe;end;//Datenfluss: Controller Modellprocedure TFarbForm.okBtnClick(Sender: TObject);//Modelldaten schreibenvar r, g, b : integer;begin r := strtoint(rotEd.text); g := strtoint(gruenEd.text); b := strtoint(blauEd.text); Farbe.setFarbe(r,g,b); //Werte speichern updateViews; //Aktualisierung durch Abfragenend;EreignisprozedurListing uFarbForm

  • Aufgaben ITesten Sie das Programm Farben0 und verfolgen Sie den Ablauf mit Hilfe des Einzelschritt-Modus. Erweitern Sie das Farbemodell um folgende MethodenTFarbe.getKomplement (Komplementrfarbe) TFarbe.toHTML (HTML- Code) Bsp.: #AFB055, verwenden Sie die Funktion InttoHex()Binden Sie beide Methoden in die Anwendung ein. Entwickeln Sie eine zweite Benutzungsoberflche, die die RGB-Farben einzeln anzeigt. (z. B.: in drei Shape-Komponenten) Binden Sie das Farbmodell an die entwickelte Benutzeroberflche an.

  • Teil 4Implementierung des Farbmischers (2.Variante: Selbstdefiniertes Ereignis)

  • EreignisseEreignis: Zustandsnderung eines Objekts, die mit einer Ereignisprozedur verknpft ist.Realisierung in Delphi mit Hilfe von Methodenzeigern: Referenzen auf Methoden anderer ObjekteMit dem Aufruf von OnClick wird die Formularmethode ButtonClick() aktiviert. Die Verarbeitung wird an andere Objekte delegiert.

  • Methodenzeiger-MechanismusBeispiel: OnclickDer OnClick-Zeiger hat, wenn er nicht gesetzt ist, den Wert nil.Die Zuweisung einer Methode erfolgt entweder im Objektinspektor oder durch eine Zuweisung zur Laufzeit (z.B. in FormCreate):Die GUI-Komponenten von Delphi verfgen ber eine Vielzahl von Methodenzeigern die mit Ereignissen verknpft werden knnen.Methodenzeiger haben wie - andere Variablen auch - einen Datentyp. Dieser bestimmt, mit welchen Typen von Methoden der Zeiger verknpft werden kann.

  • Deklaration von Methodenzeigertypentype TNotifyEvent = procedure(Sender : TObject) of Object; Standardtyp (von Delphi vordefiniert) Methoden mit einem Parameter vom Typ TObject z. B. Onclick- Ereignis TMyEreignis = procedure of Object; // Methoden ohne Parameter Beispiele:

  • Ein Ereignis fr das FarbobjektDas Farbobjekt soll die Views ber Datennderungen informieren. Dazu wird ein Ereignis implementiert, das bei Datennderung ausgelst wird, also in der setFarbe-Methode. Dazu braucht das Modell einen Methodenzeiger, der mit der updateViews- Methode des Formulars verknpft werden kann.Die Schritte (1) (3) erfolgen in der Modell-Unit, Schritt (4) in der Formular-Unit.

  • Implementation des Ereignisses type TChangeEvent = procedure of object; (1.)

    TFarbe = Class .... public ... OnChanged : TChangeEvent; (2.) end;Ereignis: OnChanged vom Typ TChangeEvent Deklaration eines Methodenzeigertyps (hier: fr eine Prozedur ohne Parameter)Deklaration einer Referenzvariablen vom Typ des Methodenzeigers

  • Auslsen des Ereignissesprocedure TFarbe.setFarbe(r,g, b : integer);begin Frot := r mod 256; Fgruen := g mod 256; Fblau := b mod 256; //GUI informieren if assigned(OnChanged) then OnChanged; (3)end;3. Ereignis auslsenDas Modell ruft eine Methode des GUI-Objekts auf, wenn sich seine Daten ndern.Modell:

  • Ereignisbearbeitungsmethodetype TFarbForm = class(TForm) ... private Farbe : TFarbe; procedure updateViews; public ... end;Ereignismethode vom Typ des Methodenzeigers

  • Setzen des Methodenzeigersprocedure TFarbForm.FormCreate(Sender: TObject);begin Farbe := TFarbe.create; Farbe.OnChanged := updateViews; (4)end;4. Setzen des Methodenzeigers mit OnCreate-EreignisDer Typ der Methode muss mit dem Typ des Methodenzeigers bereinstimmen.

  • NachrichtenaustauschAblauf: OkButton wird geklickt (Sequenzdiagramm) :TFarbe:TShape:TFarbForm:TButtonOncreate()create()Buttonwird gedrcktButtonClick()setFarbe()updateViewsBrush.Color := ...getFarbe()...Start desProgramms