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
ClassFieldMetaPropertyopisuje właściwość powiązaną z polem innego obiektu. - Klasa
ClassGetterSetterMetaPropertyopisuje 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
ClassFieldPropertysł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
ClassGetterSetterPropertysłuży do obsługi właściwości zdefiniowanych przy pomocy metody zapisującej i odczytującej jej wartość - oznaczonych kolejno adnotacjami@PropertySetteri@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
SimplePropertynie 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.
