Modellierung grafischer Objekte

Slides:



Advertisements
Ähnliche Präsentationen
Delphi-Schulung am Autor: Jörg Altegoer
Advertisements

Kritische Betrachtung
Die Definitionsphase -Objektorientierte Analyse - Das statische Modell
Unter- und Oberklassen: Beispiel
Objektorientierter Entwurf
Java: Objektorientierte Programmierung
Java2D Richard Göbel.
Java: Dynamische Datentypen
Java: Grundlagen der Objektorientierung
Abstrakte Klassen.
Ein Beispiel in Java.
Polymorphie (Vielgestaltigkeit)
Algorithmentheorie 04 –Hashing
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Programmieren mit JAVA
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.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
C++ Vererbung und Polymorphie
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
DVG Klassen und Objekte
1 Teil 4 Übung: Uhr. 2 Zielsetzung Ziel ist es, mit Hilfe objektorientierter Modellierung ein System zu entwickeln, mit dem eine einfache Uhr simuliert.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
Delphi II - OOP IFB Fortbildung
Entwurfs- und Implementationsdiagramme
Grundkonzepte der objektorientierten Programmierung Teil 3
Objektorientiertes Programmieren
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Objektorientierte Konzepte/UML Geoinformation I Vorlesung 2 WS 2000/2001.
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 Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Modellierung grafischer Objekte
Vererbung Helmut Paulus Speyer, 7./
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
EPROG Tutorium #5 Philipp Effenberger
EPROG Tutorium #3 Philipp Effenberger
SOFTWARE TECHNOLOGY 2009/2010 Faculty of Electrical Engineering and Technical Informatics Budapest University of Technology and Economics OO problems 1.
Objektorientierte Modellierung mit UML
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Einführung in die Programmierung mit Java
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 9. Vorlesung WS 2001/2002.
Objektorientierte Programmierung (OOP)
Abstrakte Klassen und das Interface-Konzept
Objektorientierte (OO) Programmierung
Vererbung. Klassen - Vererbung  Eine Klasse kann von einer Basisklasse abgeleitet werden  Die abgeleitete Klasse erbt die Eigenschaften und Methoden.
C++ FÜR cOMPUTERSPIELENTWICKLER
Tutorium Software-Engineering SS14 Florian Manghofer.
Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden.
1 Grundsätze objektorientierter Programmierung. Dr. Wolfram Amme, Grundsätze objektorientierter Programmierung, Informatik II, FSU Jena, SS Objektorientierte.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
OOP II.
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Einführung in die Programmierung mit Java
Implementieren von Klassen
 Präsentation transkript:

Modellierung grafischer Objekte Vererbung Modellierung grafischer Objekte Helmut Paulus Speyer, 3.-5.11.08

Vererbung Mit Hilfe von Vererbung ist es möglich, eine Klasse als Spezialfall einer allgemeineren Klasse zu definieren. Die Objekte der spezialisierten Klasse erben Merkmale und Methoden der allgemeinen Klasse, fügen Attribute oder Methoden hinzu oder erweitern Methoden bzw. implementieren sie neu. Vorteile: Grundlegende Attribute und Operationen werden nur einmal entwickelt Anpassung und Erweiterung unter geringem Aufwand (Wiederverwendbarkeit) Einheitlicher Zugriff auf verschiedene Objekttypen wird möglich (Polymorphismus) Klassenhierarchie Optimierung von Klassen durch Entwicklung einer Vererbungsstruktur

Klassenhierarchie Delphi’s Klassenhierarchie Alle Objekte sind Nachfahren eines Urobjekts - Klasse TObject. In TObject wird das grundlegende Verhalten, das allen Objekten in Delphi gemeinsam ist, realisiert. In der Klasse TObject wird das grundlegende Verhalten, das allen Objekten in Delphi gemeinsam ist, implementiert. TObject wird als direkte Basis für einfache Objekte verwendet. Wenn bei der Deklaration eines neuen Objekttyps kein Vorfahr angegeben wird, setzt Delphi als Vorfahr automatisch die Klasse TObject ein. Die Komponenten der Komponentenpalette sind alle Nachfahren der Klasse TComponent

Delphi‘s Klassenhierarchie (Auszug) Klassen, die von TComponent abgeleitet sind, heißen Komponenten; viele davon stehen in der Komponentenpalette (VCL) der Entwicklungsumgebung zur Entwurfszeit zur Verfügung.

Anwendungsbeispiel 5 Aktivitäten: verschieben, drehen, skalieren, editieren

Erste OOA-Analyse Problem: Vielfalt der Objekte 6 TKreis TQuadrat TText TDreieck ... TRechteck TParallel Problem: Vielfalt der Objekte Optimierung: Entwicklung einer Klassenhierarchie

Klassenhierarchie 7 TGrafikObjekt TKreis TPolygon TText TLinie TRegNEck TRechteck TParallel

Anforderungen 8 Erzeugung und Verwaltung von grafischen Objekten unter-schiedlicher Form Fähigkeiten der Objekte frei verschiebbar (Maus) skalierbar drehbar

Einfaches Beispiel 9 Kreise und Rechtecke

Kreise und Rechtecke 10 TKreis xPos, yPos //Mittelpunkte Farbe // Füllfarbe Canvas //Zeichenflächenref. markiert // Markierungsflag Radius Create paint setzePos // verschieben skalieren //vergrößern TRechteck xPos, yPos //Mittelpunkte Farbe // Füllfarbe Canvas //Zeichenflächenref. markiert // Markierungsflag Breite, Laenge Create paint setzePos // verschieben skalieren //vergrößern Beide Klassen besitzen gleiche Attribute und Methoden gleicher Funktionalität. Das Gemeinsame muss nicht mehrmals implementiert werden!

Erste Modellierung der Klassen 11 Die Basisklasse enthält den gemeinsamen Kern aller grafischen Objektklassen. TGrafikObjekt xPos, yPos //Mittelpunkte Farbe // Füllfarbe Canvas //Zeichenflächenref. Markiert // Markierungsflag Create //Basiskonstruktor setzePos // verschieben ist ein Basisklasse abgeleitete Klassen (Unterklasse) Generalisierung Spezialisierung TKreis Radius paint skalieren //vergrößern TRechteck Breite, Laenge

Implementierung der Basisklasse 12 TGrafikObjekt - xPos : integer - yPos : integer - Farbe : TColor - markiert : boolean - Canvas : TCanvas + Create(CanRef : TCanvas; x, y : integer) + setzePos(x, y : integer); + gibX : integer + gibY : integer TGrafikObjekt = class private xPos : integer; yPos : integer; Farbe : TColor; markiert : boolean; Canvas : TCanvas; public constructor create(CanRef : TCanvas; x,y : integer); procedure setePos(x,y : integer); function gibX : integer; function gibY : integer; gibFarbe Farbe : Tcolor; procedure setzeFarbe(wert : TColor); end;

Implementierung der Basisklasse 13 TGrafikObjekt - xPos : integer - yPos : integer - Farbe : TColor - markiert : boolean - Canvas : TCanvas + Create(CanRef : TCanvas; x, y : integer) + gibX : integer + gibY : integer constructor TGrafikObjekt.create(CanRef : TCanvas; x,y : integer); begin xPos := x; yPos := y; canvas := CanRef; end; Die Objekte erhalten eine Referenz auf das Zeichenflächenobjekt des GUI-Objekts procedure TGrafikObjekt.setzePos(x, y : integer); begin xPos := x; yPos := y; end;

Implementierung der Klasse „TKreis“ 14 TGrafikObjekt ... TKreis = class( TGrafikObjekt ) //Basisklasse private radius : integer; public constructor create(CanRef : TCanvas; x,y : integer); procedure paint; procedure setAttribute(r : integer; f : TColor); function gibRadius : integer; procedure setzeRadius(wert : integer); end; ist ein TKreis radius : integer ... + paint + setAttribute( r : integer, f : TColor) + gibRadius : ineger + setzeRadius(wert : integer)

Implementierung der Klasse „TKreis“ 15 TGrafikObjekt ... constructor TKreis.create(CanRef : TCanvas; x,y : integer); begin inherited create(CanRef,x,y); //Konstruktor der Oberklasse radius := 10; end; Durch Aufruf des geerbten Konstruktors werden die Attribute des Basisobjekts initialisiert. Das abgeleitete Objekt enthält quasi ein Basisobjekt als Teilobjekt. ist ein TKreis - radius : integer + paint + setzeRadius(wert : integer) + setAttribute( r : integer, f : TColor)

Implementierung der Klasse „TKreis“ 16 TGrafikObjekt ... procedure TKreis.paint; var x1,y1,x2,y2 : integer; begin //umgebendes Rechteck x1 := xPos-radius; y1 := yPos-radius; x2 := xPos+radius; y2 := yPos+radius; with canvas do brush.color:= Farbe; ellipse(x1,y1,x2,y2); end; ist ein TKreis - Radius : integer + paint + setRadius(wert : integer) + setAttribute( r : integer, f : TColor) procedure TKreis.setAttribute(r : integer;f : TColor); begin radius := r; Farbe := f; end;

Vererbung und Zugriffsrechte 17 Elemente einer Klasse können in der Klassendeklaration vor dem Zugriff von außen geschützt werden (Geheimnisprinzip). Schutzebenen: public keine Zugriffsbeschränkung nach außen private Zugriff nur innerhalb einer Klasse protected Zugriff auch in abgeleiteten Klassen möglich Die Schutzebenen private und protected gelten allerdings nur für den Zugriff aus einer anderen Unit heraus. Vererbung der Zugriffsrechte Die Zugriffsrechte einer Klasse werden an abgeleitete Klassen vererbt. Schutzrechte können in einer abgeleiteten Klasse abgeschwächt, aber nicht verschärft werden.

„Ist ein“ - Beziehung 18 TGrafikObjekt ... Die Unterklassen beschreiben nur die Abweichungen von von der Oberklasse. Alles andere kann wiederverwendet werden, weil es in der Oberklasse vorliegt. Ein Objekt der Unterklasse hat somit ein Objekt der Oberklasse als Teilobjekt. Umgekehrt sind alle Objekte der Unterklasse eine Teilmenge der Objekte der Oberklasse. ist ein TKreis - radius : integer - setzeRadius(wert : integer) + paint + setAttribute( r : integer, f : TColor) Jeder Kreis ist ein GrafikElement Konsequenz: Zuweisungskompatibilität Einer Variablen vom Typ der Oberklasse kann eine Referenz auf ein Unterklassenobjekt zugewiesen werden.

Zuweisungskompatibilität 19 Konsequenz der „ist ein“ – Beziehung: Einer Objektvariablen einer Oberklasse können Objekte aller Unterklassen zugewiesen werden. Die Umkehrung gilt nicht. Beispiel: Var Kreis : TKreis; Rechteck : TRechteck Grafik : TGrafikObjekt; ... Kreis := TKreis.create(...); Rechteck := TRechteck.create(..); ... Möglich: Grafik := Kreis; Grafik.setzeFarbe(clred); Grafik := Rechteck; Nicht möglich: Grafik.setzeRadius(20) Grafik.setzeBreite(100); Hinweis: Grafik kann nur auf Methoden zugreifen, die in der Basisklasse deklariert sind.

Typumwandlung is - Operator : Typprüfung (Laufzeit) 20 is - Operator : Typprüfung (Laufzeit) Beispiel: Var Figur : TGrafikObjekt; Kreis : TKreis; ... if Figur is TKreis then TKreis(Figur).paint; Typumwandlung (type cast) - liefert true , wenn das Objekt Figur eine Instanz der angegebenen Klasse oder eines ihrer abgeleiteten Klassen ist as - Operator : Typumwandlung (Laufzeit) Beispiel: Kreis := Figur as TKreis; (Figur as TKreis).paint; - liefert eine Referenz auf ein Objekt vom Typ Kreis

Statische Methoden 21 Statische Bindung: Beim Compilieren wird die Sprungadresse der Methode festgelegt; dazu muss schon zu diesem Zeitpunkt der Objekttyp bekannt sein. Die bisher definierten Methoden sind statisch gebunden. Kreis.paint; //paint-Methode des Kreisobjekts Rechteck.paint; //paint-Methode des Rechteckobjekts Der Klassentyp des Objekts bestimmt, welche Methode aufgerufen wird. Problem: Dieses Verhalten ist unerwünscht, wenn sich erst zur Laufzeit entscheidet, welcher Objekttyp aktuell vorliegt.

Statische Methoden Beispiel: 22 Beispiel: Zur Laufzeit werden verschiedene Grafikobjekte (Kreise, Rechtecke) erzeugt und in einem Array gespeichert: Var Figur : array[1..10] of GrafikElement; Ziel: Einheitlicher Zugriff auf die paint-Methode for i := 1 to 10 do Figur[i].paint; Da zur Compilierzeit noch nicht feststeht, welche Objekttypen an den einzelnen Stellen des Arrays gespeichert sind, kann erst zur Laufzeit festgestellt werden, welche Objektmethode aufgerufen werden muss. Dazu müsste der aktuelle Objekttyp für die Auswahl der Methode maßgebend sein. Die Methoden müssen dynamisch gebunden werden!

Überschreiben von Methoden 23 Dynamische Bindung: TGrafikObjekt = class private ... public procedure paint;virtual; end; paint wird in der Basisklasse als virtuelle Methode deklariert (virtual) TKreis = class(TGrafikObjekt) private ... public procedure paint;override; end; paint wird in der Unterklasse Überschrieben (override) und neu implementiert. Wirkung: Die neudefinierte Methode ersetzt nun die alte überall, d.h. auch in ererbten Methoden, die die überschriebene Methode verwenden.

Verhalten virtueller Methoden 24 Dynamische Bindung / late binding Var Figur : Array[1..10] of GrafikElement; Figur[5].paint; //Aufruf der virtuellen Methode Der Typ des aktuellen Objekts bestimmt zur Laufzeit die Methode. Die Referenz auf das Objekt enthält Information über den Typ des übergebenen Objekts. Dadurch kann die zum Objekt passende Methode aufgerufen werden.

Polymorphismus Merkmale Empfehlung 25 Das Konzept der dynamischen Bindung heißt in der OOP Polymorphismus (Vielgestaltigkeit). Merkmale Bei polymorphen Objektenvariablen entscheidet sich erst zur Laufzeit, welcher Klasse das Objekt angehört. Eine in einer Basisklasse als virtual deklarierte Methode definiert eine Schnittstelle für alle abgeleiteten Klassen, auch wenn diese noch nicht festgelegt sind. Ein Programm, das virtuelle Methoden einer Basisklasse enthält kann sehr leicht um abgeleitete Klassen erweitert werden, weil sichergestellt ist, dass stets die richtige Methode aufgerufen wird. Empfehlung Statische Methoden einer Basisklasse sollten nicht überschrieben werden. Wenn Überschreiben notwendig erscheint, sollte die Methode als virtual deklariert werden.

Abstrakte Klassen 26 Die Basisklasse TGrafikObjekt muss die Methode paint enthalten, kann sie aber nicht sinnvoll implementieren, weil diese Klasse zu allgemein ist. Die Implementation kann also entfallen. Dazu wird die virtuelle Methode der Basisklasse zusätzlich als abstract deklariert. TGrafikObjekt = class ... procedure paint;virtual;abstract; end; TGrafikObjekt als abstrakte Klasse Merkmale: Abstrakte Klassen enthalten mindestens eine abstrakte virtuelle Methode, die überschrieben werden muss. Von abstrakten Klassen können keine Instanzen gebildet werden. Abstrakte Klasse bilden eine gemeinsame Schnittstelle für alle Unterklassen.

Aufgaben 1 27 Entwickeln Sie ein Programm, das mehrere grafische Objekte anzeigt. (Verwenden Sie die Units uGrafikObjekt.pas, uKreis.pas, uRechteck.pas.) Ergänzen Sie die Objekte um die Funktion „gibFlaeche“. Der Zugriff soll polymorph erfolgen. Ergänzen Sie die boolesche Funktion enthaelt(x, y : integer) , die prüft ein Punkt(x,y) innerhalb der Figur liegt. Der Zugriff soll polymorph erfolgen. Ein Ball soll über den Bildschirm laufen. Entwickeln Sie die Klasse TBall. Nutzen Sie dabei Vererbung. Zur Animation kann ein Timer-Objekt (Klasse TTimer, s. Delphi-Hilfe) benutzt werden. Eine Bank verfügt über Sparkonten, Girokonten und Festgeldkonten. Während Girokonten überzogen werden können, dürfen Sparkonten keinen negativen Stand aufweisen. Bei Festgeldkonten wird eine Strafgebühr fällig, wenn ein Betrag vor Ende der vereinbarten Laufzeit abgehoben wird. Der Auszahlungsaufruf soll für alle Kontotypen einheitlich sein. Entwickeln Sie eine geeignete Vererbungsstruktur (UML) Entwickeln Sie eine abstrakten Oberklasse für alle Listen.

Anhang 28 Objektverwaltung

Objektverwaltung Realisierung Aufgaben eines Objektverwalters 29 Aufgaben eines Objektverwalters Referenzen unterschiedlicher Objekttypen speichern Einfügen, entfernen von Referenzen Zugriff auf einzelne Objekte oder alle ermöglichen Zeichnen aller Objekte Realisierung Speicher (lineare Liste) Array of TGrafikObjekt (dyn. Array) Lineare Liste entwickeln Vorhandene Container – Objekte nutzen oder anpassen (TList) Methoden Einfügen Entfernen Verschieben (innerhalb der Liste) Objekt an bestimmter Position ermitteln Zeichnen

Klassendiagramm 30 TGUI TVerwalter - objekt : array of TGrafikObjekt * aktObjekt : TGrafikObjekt vw : TVerwalter FormCreate(...) FormPaint(...) FormMouseDown(...) FormMouseMove(...) zeichneAlles TVerwalter - objekt : array of TGrafikObjekt + gibAnzahl : integer; + fuegeEin(obj : TGrafikObjekt); + gibObjekt( index : integer); + gibObjektBei(x, y : integer) : TGrafikObjekt + entferne(Objekt : TGrafikObjekt) 1 * Der Verwalter hat ein dyn. Array zur Aufnahme der Elemente TGrafikObjekt #Markiert : boolean; #Farbe : Tcolor xPos : integer yPos : integer # zeichneMarke + paint gibObjektBei(x,y) - Element an der Position (x, y) der Zeichenfläche

Problem: Objekt auswählen 31 Objekt an der Stelle (x, y) Algorithmus: function TVerwalter.gibObjektAt(x, y : integer): TGrafikObjekt; var i : integer; begin result := nil; for i := 0 to High(Objekt) do if Objekt[i].enthaelt(x,y) then result := Objekt[i]; //tausche(i,letzt); end; Liste der Objekte durchlaufen und Abstand zum übergebenen Punkt (x,y) berechnen Abstandsbedingung prüfen Referenz des letzten gefundenen Objekts zurückgeben evtl. gefundenes Objekt ans Ende der Liste setzen, damit es als letztes gezeichnet wird und damit alle anderen überdeckt.

Zusammenfassung OOD- Klassendiagramm 32 1. Optimierung der Klassenstruktur Verwaltungs - Klassen hinzufügen Komplexe Klassen zerlegen 2. Optimierung der Attribute 3. Optimierung der Operationen 4. Optimierung der Vererbungsstruktur Abstrakte Operationen für einheitliche Schnittstellen Abstrakte Oberklassen bilden Polymorphismus maximieren Vererbungshierarchie komprimieren Existierende Klassen wiederverwenden

Aufgaben 2 Erweiterung des Programms GraphObjekt 33 Erweiterung des Programms GraphObjekt Objektverwalter einbinden (Klasse TVerwalter (Unit: uGraphikObjekt) Objekte mit der Maus über den Bildschirm ziehen Farbe oder Größe einer mit Maus gewählten Figur ändern Mit Hilfe der Maus beliebig viele Objekte interaktiv erzeugen