AgE 2.7 : WlasciwosciObiektowPodstawoweKlasy

Podstawowe klasy

Właściwości obiektów opierają się o dwie podstawowe klasy Property i MetaProperty oraz ich klasy pochodne - wszystkie przedstawione na poniższym diagramie.

Klasa MetaProperty

Klasa MetaProperty opisuje właściwość za pomocą następujących pól:

  • name - nazwa właściwości,
  • propertyClass - typ właściwości, czyli klasa której obiekty mogą być wartościami właściwości,
  • isWritable - flaga informująca czy właściowość może być modyfikowana,
  • isMonitorable - flaga informująca czy właściowość może być monitorowana.

Dodatkowo klasa zawiera pole type, które sygnalizuje czy dana właściwość może być automatycznie inicjalizowana za pomocą mechanizmu konfiguracji. Wartość tego pola określa klasę, której instancje można przypisać do danej właściwości. W przypadku list lub zbiorów jego znaczenie jest inne i oznacza klasę elementów, które są przechowywane w kolekcji. Domyślną wartością tego pola jest klasa Null.class, co oznacza, że dane pole nie jest auto-konfigurowalne.

Platforma jAgE dostarcza dwa rozszerzenia klasy MetaProperty:

  1. Klasa ClassFieldMetaProperty opisuje właściwość powiązaną z polem innego obiektu.
  2. Klasa ClassGetterSetterMetaProperty opisuje właściwość powiązaną z innym obiektem za pomocą metod typu get i set.

Pojedynczy obiekt przechowujący metadane nie jest powiązany z żadnym konkretnym obiektem właściwości, a także nie jest w żaden sposób modyfikowalny, dzięki czemu może być dzielony przez wiele obiektów właściwości.

Klasa Property

Klasa Property reprezentuje pojedynczą instancję właściwości opisaną przez MetaProperty. Implementuje metody umożliwiające monitorowanie zmian wartości właściwości oraz definiuje abstrakcyjne metody pozwalające na ustawienie i odczytanie wartości oraz pobranie opisu właściwości. To w jaki sposób należy wykonywać te czynności opisują klasy pochodne. Platforma jAgE posiada trzy domyślne implementacje:

  1. Klasa ClassFieldProperty służy do obsługi właściwości zdefiniowanych przy pomocy adnotacji pola klasy (@PropertyField. Wartość właściwości przechowywana jest w polu obiektu, a operacje dokonywane są z wykorzystaniem klasy java.lang.reflect.Field.
  2. Klasa ClassGetterSetterProperty służy do obsługi właściwości zdefiniowanych przy pomocy metody zapisującej i odczytującej jej wartość - oznaczonych kolejno adnotacjami @PropertySetter i @PropertyGetter. Za przechowywanie wartości właściwości odpowiedzialna jest obiekt posiadający metody typu get i set (najczęsciej jest to jego pole o nazwie analogicznej do nazw metod). Do operacji na wartości właściwości wykorzystywana jest klasa java.lang.reflect.Method.
  3. Klasa SimpleProperty nie musi być powiązana z żadnym obiektem, i sama przechowuje swoją wartość. Jest ona głównie używana w mechanizmie zapytań, kiedy zależy nam na serializacji pojedynczego obiektu właściwości, bez całego grafu innych obiektów, z którymi ta właściwość jest powiązana.

Attachments:

org.jage.property.png (image/png)