Я должен указать для класса Employee, что каждого сотрудника можно четко идентифицировать по его личному номеру. Я не знаю, думаю ли я слишком сложно, потому что у меня нет реального представления.
Атрибуты: final int personelNumber ...
Я должен указать для класса Employee, что каждого сотрудника можно четко идентифицировать по его личному номеру. Я не знаю, думаю ли я слишком сложно, потому что у меня нет реального представления.
Атрибуты: final int personelNumber ...
Вам даже не нужно ограничение OCL, чтобы выразить это в UML. В метаклассе Property есть свойство isID
, которое обеспечивает это:
Из спецификации UML 2.5 § 9.5.3 (стр. 111)
Свойство может быть помечено через свойство isID как являющееся (частью) идентификатора (если есть) для классификаторов, членом которых оно является. Интерпретация этого остается открытой, но это может быть сопоставлено с такими реализациями, как первичные ключи для таблиц реляционной базы данных или атрибуты ID в XML. Если несколько свойств помечены как isID (возможно, в обобщающих классификаторах), то именно комбинация кортежей (свойство, значение) логически обеспечит уникальность для любого экземпляра. Следовательно, нет необходимости в какой-либо спецификации порядка, и некоторые значения свойства могут быть пустыми. Если свойство является многозначным, включаются все значения.
Обозначение этого свойства похоже на обозначения других ограничений с использованием {id}
после имени и типа атрибута.
<prop-modifier>
- person Geert Bellekens; 04.10.2019
Вы не предоставляете свою метамодель и четко указываете каждому сотруднику, что их личный номер является однозначным и поэтому обязательно уникальным. Предположительно, в какой-то области, такой как Company, personelNumber должен быть уникальным, поэтому ответ часто бывает примерно таким.
context Company
inv UniquePersonelNumber: employees->isUnique(personelNumber)
Два альтернативных выражения OCL можно найти в следующем вопросе: Почему allInstance не для isUnique?
В вашем случае это будет:
context Employee
inv personalNumberUnique : Employee.allInstances() -> isUnique(personalNumber)