Praktikum SW 2 2013S Hinweise zu Übung 1.1 Properties Properties in Java sind ein standardisiertes Konzept, um Eigenschaften von Objekten mit Datenkapselung zu implementieren (siehe JavaBeans‐Standard http://www.oracle.com/technetwork/java/javase/documentation/spec‐136004.html). Properties werden mit Getter‐ und Setter‐Methoden implementiert: Getter: Öffentliche Methode beginnt mit „get“ (oder „is“ für Boolesche Properties) plus Name der Property (ersten Buchstabe groß). Methode hat keinen Parameter und einen Rückgabewert vom Typ der Property. Zum Beispiel: public void setName(String name) Setter: Öffentliche Methode beginnt mit „set“ plus Name der Property (ersten Buchstabe groß). Methode hat keinen Rückgabewert und einen Parameter vom Typ der Property. Zum Beispiel: public void setName(String name) Die beiden Methoden implementieren dann gemeinsam eine Property. Fehlt der Getter ist die Property nicht lesbar, fehlt der Setter ist die Property nicht schreibbar. Die Property hat dann folgende Eigenschaften: Name der Property: Name nach „get“ oder „set“ aber klein geschrieben. Zum Beispiel: Name der Property mit Getter und Setter wie oben ist "name" Typ der Property: Rückgabetyp des Getters und Typ des Parameters des Setters ergibt Typ der Property. Zum Beispiel: Typ der Property name ist String Praktikum SW 2 2013S Annotationen Verwenden Sie folgende Annotionen, um Objekteigenschaften zu kennzeichnen: @Render: soll anzeigen, dass eine Eigenschaft ausgegeben werden soll; damit sollten Getter annotiert werden. @Edit: soll anzeigen, dass eine Eigenschaft ediert werden kann; soll mit Setter verwendet werden. @Create: soll anzeigen, dass für eine Eigenschaft, deren Wert null ist, ein neues Objekt mit dem Standardkonstruktor erzeugt werden soll; soll mit Setter verwendet werden. Darstellung der Objekteigenschaften Um die durch Reflection gewonnenen Informationen darzustellen, sollten Sie zwei Klassen implementieren: ObjectInfo: Speichert Informationen über einen Objektwert. Ein ObjectInfo‐ Objekt speichert eine Referenz auf das Objekt plus eine Liste von Informationen über die Eigenschaften des Objects (PropertyInfos). PropertyInfo: Speichert die Informationen zu einer Eigenschaft eines Objects. Hat damit etwa folgende Informationen: - Name der Eigenschaft - Getter‐Methode - Setter‐Methode - Typ der Eigenschaft - Annotationen für die Eigenschaft (renderable, editable, creatable) - Wert der Eigenschaft - Wenn Wert ein Objekt, Zugriff auf die ObjectInfo des Objekts Die folgende Abbildung zeigt eine Beispielstruktur. Im oberen Teil ist ein Objektstruktur angedeutet (siehe Klasse Man in Beispiel‐Shapes). Im unteren Teil sieht man dann die Struktur der Informationsobjekte. :Point paul :Man Objects head body armLeft armRight ... name: String = .. radius: int = ... object x: int = .. y: int = .. pos :Circle color object :Color x: int = .. y: int = .. object :Point pos :Rect name: String width: int height: int x: int = ... y: int = ... color :Color x: int y: int Infos :ObjectInfo property[0] property[1] property[2] :PropertyInfo value name = "head" type = Circle.class getter = ... Setter = ... renderable = true ... :ObjectInfo property[1] property[2] :PropertyInfo name = "head" type = Circle.class getter = ... Setter = ... renderable = true ... property[0] :PropertyInfo :PropertyInfo value :ObjectInfo value :ObjectInfo value :ObjectInfo name = "name" type = String.class getter = ... Setter = ... renderable = true ... name = "Pos" type = Point.class getter = ... Setter = ... renderable = true ...