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
:
- Klasa
ClassFieldMetaProperty
opisuje właściwość powiązaną z polem innego obiektu. - 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:
- 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 klasyjava.lang.reflect.Field
. - 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 klasajava.lang.reflect.Method
. - 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.