Классы
Классы представляют собой категории/типы сущностей (объектов), которые могут присутствовать в предметной области. Классы определяют, какие свойства присущи их объектам, а также какими отношениями они могут связаны.
Пример класса:
//Класс с именем "Element"
class Element {
//Свойство класса, с именем "countOfTokens" и типом int в диапазоне 1-2
class prop countOfTokens: int[1,2] ;
//Свойство объектов класса, с именем state и типом State (это enum)
obj prop state: State ;
//Отношение, которую могут иметь объекты класса с именем "has",
// связывает объекты данного класса с объектами типа Token как "один-ко-многим"
rel has(Token) : {1 -> *} ;
}
В коде классы представлены классом ClassDef.
Состав базовой хранимой информации:
- Имя класса (
ClassDef.name) - Имя родительского класса (
ClassDef.parentName) - Определяемый данным классом набор свойств (
ClassDef.declaredProperties) - Определенные для класса значения свойств (
ClassDef.definedPropertyValues) - Определяемый данным классом набор отношений (
ClassDef.declaredRelationships) - Связанные с классом метаданные (
ClassDef.metadata)
Наследование
Подобно классам в ООП языках, классы в нашей модели домена могут указывать родительский класс, от которого они наследуются (поля ClassDef.parentClassName и ClassDef.parentClass). Такой класс может быть только один - множественное наследование в системе не поддерживается.
//Родительский класс Animal, имеет свойство age
class Animal {
obj prop age: int[0, 100] ;
}
//Дочерний класс Pet, наследуется от Animal
//имеет свойство родительского класса, а также добавляет свое свойство и отношения
class Pet : Animal {
obj prop name: string ;
rel hasOwner(Human) {* -> 1} ;
}
В случае наследования, дочерний класс получает все свойства и отношения, определенные в его родителе (и родителях родителя).
В общем, стандартная модель наследования ООП классов, знакомая из, например, Java (за исключением правил наследования классовых свойств)
Корректность данных (валидация)
Корректность класса состоит из:
- Корректности всех объявлений и значений свойств;
- Корректности всех объявлений отношений;
- А также собственной корректности класса, описанной ниже.
Полнота
В случае указания родительского класса, он должен присутствовать в модели.
Валидность
В цепочке наследования класса не должно быть рекурсии (т.е. класс не может быть дочерним/родительским для самого себя).