Realisierung mit Delphi

Slides:



Advertisements
Ähnliche Präsentationen
Blue J.
Advertisements

Objektorientierte Programmierung
Programmierung II Prof. Dr. Michael Löwe
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Unter- und Oberklassen: Beispiel
Kapitel 4 Datenstrukturen
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Objektorientierter Entwurf (OOD) Übersicht
Stefanie Selzer - Pascal Busch - Michael Kropiwoda
Java: Objektorientierte Programmierung
Java: Grundlagen der Sprache
Java: Grundlagen der Objektorientierung
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
DVG Klassen und Objekte
© 2004 Pohlig - Taulien Swing Ereignissteuerung. © 2004 Pohlig - Taulien GK Informatik mit Java 2 Auf Button-Klick reagieren.
Kennlinie Lichtregelung in JavaNNS Version 1.1
1 Teil 4 Übung: Uhr. 2 Zielsetzung Ziel ist es, mit Hilfe objektorientierter Modellierung ein System zu entwickeln, mit dem eine einfache Uhr simuliert.
Delphi Eine objektorientierte Programmiersprache © Beushausen 2000.
Objektorientierte Modellierung
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
© Gabriele Sowada © Gabriele Sowada 2 Manuell Beispiel 1 demonstriert die Vorgehensweise bei der manuellen Programm- Eingabe am.
Eine Einführung in die Entwicklung ereignisgesteuerter Programme
Delphi II - OOP IFB Fortbildung
Steuerung externer Komponenten über ein USB-Interface.
Einführung in die Programmierung
Einführung / Geschichte Einführung / Geschichte Motivation Motivation Beispiel Beispiel Architektur / Komponenten Architektur / Komponenten Konfiguration.
Listen Klaus Becker KB Listen 2 Listen Ansgar A., Speyer Claudia B., Koblenz Knut B., Neustadt Annett B., Wörrstadt Stefani D., Bad Ems Jochen F.,
Grundkonzepte der objektorientierten Programmierung Teil 3
Generalisierung/Spezialisierung Subtypisierung/Vererbung
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die objektbasierte Programmierung mit Delphi
Grundkonzepte der objektorientierten Programmierung
MVC-Uhr Siehe auch K. Merkert HSG-Kaiserslautern
Grundkonzepte der objektorientierten Programmierung
Grundkonzepte der objektorientierten Programmierung mit Delphi
Konzepte der objektorientierten Programmierung
Erste Programme mit Delphi
Einführung in die Software-Entwicklung mit Delphi Teil 1
Gui-Objekte und Datenmodellobjekte
Bausteine zum objektorientierten Programmieren mit Delphi
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Analyse von Ablaufdiagrammen
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Grundlagen von Objekt-Pascal Erstellt von J. Rudolf überarbeitet von H.Brehm.
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
Java Programmierung.
Objectives Verstehen was unterDelegate verstanden wird
Erste Schritte in DELPHI
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Objektorientierte Modellierung mit UML
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
Java-Kurs Übung Besprechung der Hausaufgabe
Programmieren mit Delphi Informatik. Inhalt Projekt Reaktion Objekte im Programm Reaktion Klassen Klassen im Programm Reaktion Objekte verfügen über Methoden,
Objektorientierte (OO) Programmierung
Java Programme nur ein bisschen objektorientiert.
C++ FÜR cOMPUTERSPIELENTWICKLER
1 Grundsätze objektorientierter Programmierung. Dr. Wolfram Amme, Grundsätze objektorientierter Programmierung, Informatik II, FSU Jena, SS Objektorientierte.
Objektorientierte Programmierung
Implementieren von Klassen
 Präsentation transkript:

Realisierung mit Delphi Das MVC- Konzept (Model-View-Controller) Realisierung mit Delphi Speyer, 13.09.05 Helmut Paulus MPG Trier

Motivation Problematik der Softwareentwicklung Komplexität nimmt zu Pflege immer aufwändiger Lösungen: Objektorientierte Programmierung Entwurfsmuster für graphisch Benutzungsoberflächen MVC: Modell-Ansicht-Steuerung

Implementierung des Farbenmischers Überblick Grundlagen der OOP MVC-Architektur Implementierung des Farbenmischers

Grundlagen Objektorientierte Programmierung Teil 1 Grundlagen Objektorientierte Programmierung

Objektorientierte Programmierung Objekte im Sinne der Informatik Dinge der Welt Farbe RGB-Farbmodell Beispiel: Farbe rot = 23 gruen = 244 blau = 22

Objekte Farbe Attributwert Attribut Methoden Ein Objekt ist das Abbild eines realen oder gedachten Gegenstandes bzw. einer Person. Farbe Attributwert Attribut rot = 23 gruen = 25 blau = 255 setFarbe getFarbe toHTML ... Methoden Auftrag - Prozedur Anfrage - Funktion Die Methoden bestimmen das Verhalten des Objekts. Ein Objekt wird durch die Werte seiner Attribute festgelegt. Objekte sind autonome Bausteine, die bestimmte Teilaufgaben der Anwendung eigenständig erledigen.

Klassen und Objekte Klasse Objekte Klassen sind Baupläne von Objekten TFarbe rot setFarbe ist Instanz von Objekte Farbe1 rot = 23 setFarbe Farbe2 rot = 123 setFarbe Farbe3 rot = 233 setFarbe Klassen sind Baupläne von Objekten Objekte sind Instanzen (Exemplare) von Klassen.

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

Erzeugung von Objekten Objekte werden mit Konstruktoren erzeugt. TFarbe - Frot : integer - Fgruen :integer - Fblau : integer + constructor create + getRot : integer; + setRot(r : integer); Konstruktor Konstruktoren sind spezielle Methoden, die den Speicherbereich eines Objekts anlegen, die Attribute mit Standardwerten belegen, eine Referenz auf das Objekt zurückgeben.

Erzeugung eines Farbobjekts Das Objekt existiert noch nicht ! Deklaration der Objektvariablen nil Farbe1 = var Farbe1 : TFarbe; ... Farbe1 := TFarbe.create; Aufruf des Konstruktors (Der Klassenname wird vorangestellt) Klassenname Die Objektvariable erhält eine Referenz auf das Farbobjekt. :TFarbe Frot = 255 Fgruen = 255 Fblau = 255 Farbe1 =

Arbeiten mit Objekten Der Zugriff auf Objekte erfolgt mit Hilfe der Objektvariablen Schema: Objektvariable.Methode Das Formularobjekt ruft eine Methode des Farbobjekts auf. Beispiel: Farbe1.setFarbe(0,0,0) Ein Objekt kann eine Methode eines anderen Objekts nur aufrufen, wenn es dieses kennt, d. h. eine Referenz auf dieses Objekt besitzt. Kennt- Beziehung / Assoziation 2 Shape FarbForm Farbe1 1 Das Formularobjekt kennt 1 Farbobjekt und 2 Shape-Objekte.

Modell – Ansicht – Steuerung Model – View – Controller Teil 2 MVC-Architektur Modell – Ansicht – Steuerung Model – View – Controller

MVC-Farbenmischer Farbe Steuerung Modell rot = 23 gruen = 25 Ansicht Farbe rot = 23 gruen = 25 blau = 255 Modell

MVC-Prinzip Ziel: Trennung von Datenhaltung und -verarbeitung, Darstellung und Steuerung. Die Anwendung wird in drei Bereiche aufgeteilt: Modell Modellklasse: Interne Repräsentation der Daten mit Methoden zum Ändern und Abfragen View Ansicht, Darstellung: Ein Modell kann durch mehrere Views angezeigt werden, welche unterschiedliche Sichtweisen des Models darstellen. Controller Steuerung: Verarbeitung der Benutzereingaben View und Controller bilden zusammen die Benutzeroberfläche (GUI).

(graphical user interface) MVC-Architektur GUI (graphical user interface) Fachkonzept Controller Steuerung schreibt Model (Daten,Verarbeitung) liest View Ansicht informiert

Bedingungen Die interne Datenverarbeitung ist von der Benutzeroberfläche (GUI) gänzlich 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 ermöglichen.

Vorteile der MVC-Struktur Änderungen der Benutzeroberfläche haben daher keine Auswirkung auf die interne Verarbeitung der Daten und der Datenstruktur. Verbesserung der Wiederverwendbarkeit klare Strukturierung eines Programms Die Daten können gleichzeitig mehrfach auf unterschiedliche Weise dargestellt werden.

Fragen und Probleme Wie erreicht man die Entkopplung? Wie greifen View und Controller auf die Daten zu? Wie können die Views aktualisiert werden, wenn das Modell keinen Zugriff auf sie hat? Wie erfahren die Views, dass sich die Daten des Modells geändert haben?

Realisierung in Delphi Entkopplung: GUI- und Modellklassen in verschiedenen Units halten View und Controller in einem Formular (uGUI.pas) unterbringen Modell-Klasse in einer eigenen Unit (uModell.pas) speichern Datenzugriff: Die GUI-Klasse erhält eine Referenz auf das Modell-Objekt. Der Datenzugriff erfolgt mit Lese- und Schreibmethoden, die das Modell zur Verfügung stellt (z. B. setAttribut() bzw. getAttribut(), Zugriff über Properties). Aktualisierungsmöglichkeiten: Die Views fragen (evtl. permanent) das Modell ab. (Polling) Die Views werden durch Ereignisse des Modells über Datenänderungen informiert und aktualisieren sich daraufhin. (Selbstdefinierte Ereignisse) Benachrichtigung mittels Beobachter-Muster (Observer-Pattern)

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

Spezifikation/Implementierung der Modell-Klasse Festlegung von: Zugriffsrechten (- private; + public) Datentypen Signaturen (Parameter der Methoden) unit uFarbModell ... type TFarbe = Class private Frot, Fblau, Fgruen : integer; public constructor create; procedure setFarbe(r, g, b : integer); function getFarbe : integer function getrot : integer function getgruen: integer function getblau : integer end; Implementierung: (Unit: uFarbModell.pas) TFarbe - Frot : integer - Fgruen :integer - Fblau : integer; + constructor create + getFarbe : integer; + setFarbe(r, g, b : integer) + getrot : integer + getgruen: integer + getblau : integer

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

Benutzeroberfläche GUI (Formular-Unit): GUI-Objekte: TLabel TEdit TButton TShape

Zeiger auf ein Farbobjekt Objektverwaltung Das 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; Modell-unit-einbinden kennt Zeiger auf ein Farbobjekt Referenzattribute

Objekterzeugung/-zerstörung Die GUI-Objekte, die zur Entwurfzeit ins Formular eingefügt wurden, werden automatisch erzeugt und zerstört. Das Farbobjekt muss zur Laufzeit erzeugt und zerstört werden. procedure TFarbForm.FormCreate(...); begin Farbe := TFarbe.create; ... end; Erzeugung mit dem OnCreate-Ereignis Zeiger auf ein Farbobjekt (kennt-Beziehung) Zerstörung mit dem OnDestroy-Ereignis procedureTFarbForm.FormDestroy(...); begin Farbe.Free; end; Speicherbereich freigeben

Ereignisgesteuerter Ablauf Szenario: Der Ok_Button (‚übernehmen‘) wird gedrückt: Aktionen: Werte der Eingabefenster lesen. Farbobjekt aktivieren (Farbe.setFarbe(r,g,b)); Shapes aktualisieren sich (updateViews) Wer macht was?

Aktualisierung der Views Ereignisprozedur //Datenfluss: Controller  Modell procedure TFarbForm.okBtnClick(Sender: TObject); //Modelldaten schreiben var 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 Abfragen end; //Datenfluss: Modell  View procedure TFarbForm.updateViews; //Modelldaten lesen begin FarbBox.brush.color := Farbe.getFarbe; KFarbBox.brush.color := clwhite - Farbe.getFarbe; end; Listing uForm über Download-Link

Aufgaben I Testen Sie das Programm ‚Farben0’ und verfolgen Sie den Ablauf mit Hilfe des Einzelschritt-Modus. Erweitern Sie das Farbenmodell um folgende Methoden TFarbe.getKomplement (Komplementärfarbe) TFarbe.toHTML (HTML- Code) Bsp.: #AFB055, verwenden Sie die Funktion InttoHex() Binden Sie beide Methoden in die Anwendung ein. Entwickeln Sie eine zweite Benutzungsoberfläche, die die RGB-Farben einzeln anzeigt. (z. B.: in drei Shape-Komponenten) Binden Sie das Farbmodell an die entwickelte Benutzeroberfläche an.

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

Ereignisse Ereignis: Zustandsänderung eines Objekts, die mit einer Ereignisprozedur verknüpft ist. Realisierung in Delphi mit Hilfe von Methodenzeigern: Referenzen auf Methoden anderer Objekte Button Formular OnClick ButtonClick() Methodenzeiger Sender Empfänger Mit dem Aufruf von OnClick wird die Formularmethode ButtonClick() aktiviert. Die Verarbeitung wird an andere Objekte delegiert.

Methodenzeiger-Mechanismus Die GUI-Komponenten von Delphi verfügen über eine Vielzahl von Methodenzeigern die mit Ereignissen verknüpft werden können. Beispiel: Onclick Der 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): Button.Onclick := Buttonclick; Methodenname Methodenzeiger haben wie - andere Variablen auch - einen Datentyp. Dieser bestimmt, mit welchen Typen von Methoden der Zeiger verknüpft werden kann.

Deklaration von Methodenzeigertypen Beispiele: type 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 Var Onclick : TNotifyEvent; Ereignis : TMyEreignis; Variablendeklaration:

Ein Ereignis für das Farbobjekt Das Farbobjekt soll die Views über Datenänderungen informieren. Dazu wird ein Ereignis implementiert, das bei Datenänderung ausgelöst wird, also in der setFarbe-Methode. Dazu braucht das Modell einen Methodenzeiger, der mit der updateViews- Methode des Formulars verknüpft werden kann. Die Implementation erfordert in vier Schritten: Vereinbarung eines Methodenzeiger-Typs Vereinbarung eines Methodenzeigers Aufruf der Ereignisprozedur über den Methodenzeiger Zuweisung einer Ereignisprozedur Die Schritte (1) – (3) erfolgen in der Modell-Unit, Schritt (4) in der Formular-Unit.

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

Auslösen des Ereignisses Modell: procedure 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 auslösen Das Modell ruft eine Methode des GUI-Objekts auf, wenn sich seine Daten ändern.

Ereignisbearbeitungsmethode type TFarbForm = class(TForm) ... private Farbe : TFarbe; procedure updateViews; public end; Ereignismethode vom Typ des Methodenzeigers procedure TFarbForm.updateViews; begin //wird vom Modell aufgerufen FarbBox.brush.color := Farbe.getFarbe; ... end; Implementierung:

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

Nachrichtenaustausch :TFarbForm :TFarbe ... :TButton :TShape Start des Programms Oncreate() create() Button wird gedrückt ButtonClick() setFarbe() updateViews getFarbe() Brush.Color := ... Ablauf: OkButton wird geklickt (Sequenzdiagramm)

Aufgaben II Farbenmischer Implementieren Sie das Ereignis ‚Onchanged’. Testen Sie das Programm und verfolgen Sie den Ablauf mit Hilfe des Einzelschritt-Modus. Die Version Farben3 kann 2 GUIs gleichzeitig darstellen. Untersuchen Sie, wie das 2. Formular eingebunden ist und den Benachrichtungsmechanismus. MVC-Uhr  Entwerfen Sie das Modell (Klasse: TUhr - mTUhr.pas) einer Digitaluhr, die Uhr soll noch nicht selbständig laufen. Entwerfen Sie ein Formular (GUI) (TUhrform - uUhrForm.pas) mit der Möglichkeit, die Zeit (h:min) zu setzen und abzufragen. Die Zeit soll mit Hilfe Schaltfläche jeweils um eine Sekunde erhöht werden. Entwickeln Sie dazu eine Methode. Analysieren Sie das Projekt ‚Uhr mit Ereignis’. Erweitern Sie das Uhrobjekt so, dass die Ansicht über Datenänderungen mit Hilfe eines Ereignisses informiert wird.

Literatur und Links Helmut Balzert: Lehrbuch der Software-Technik Siegfried Spolwig: www.oszhdl.be.schule.de\gymnasium\faecher\informatik\index.htm K. Merkert: Hohenstaufen-Gymnasium Kaiserlautern http://hsg.region-kaiserslautern.de/faecher/inf/index.php UML-Werkzeug: UML-Editor : UMLed.exe http://www.kubitz-online.de