Как указать уникальный идентификатор класса

Я должен указать для класса Employee, что каждого сотрудника можно четко идентифицировать по его личному номеру. Я не знаю, думаю ли я слишком сложно, потому что у меня нет реального представления.

Атрибуты: final int personelNumber ...


person M. Schwarze    schedule 03.10.2019    source источник
comment
Здравствуйте, M.Schwarze. Пожалуйста, отметьте один из ответов как принятый или объясните, что вам еще непонятно.   -  person www.admiraalit.nl    schedule 17.10.2019


Ответы (3)


Вам даже не нужно ограничение OCL, чтобы выразить это в UML. В метаклассе Property есть свойство isID, которое обеспечивает это:

Из спецификации UML 2.5 § 9.5.3 (стр. 111)

Свойство может быть помечено через свойство isID как являющееся (частью) идентификатора (если есть) для классификаторов, членом которых оно является. Интерпретация этого остается открытой, но это может быть сопоставлено с такими реализациями, как первичные ключи для таблиц реляционной базы данных или атрибуты ID в XML. Если несколько свойств помечены как isID (возможно, в обобщающих классификаторах), то именно комбинация кортежей (свойство, значение) логически обеспечит уникальность для любого экземпляра. Следовательно, нет необходимости в какой-либо спецификации порядка, и некоторые значения свойства могут быть пустыми. Если свойство является многозначным, включаются все значения.

Обозначение этого свойства похоже на обозначения других ограничений с использованием {id} после имени и типа атрибута.

введите здесь описание изображения

person Geert Bellekens    schedule 04.10.2019
comment
Правильно, но UML не определяет нотацию для этого свойства, так как бы вы визуализировали значение этого свойства на диаграмме классов? - person www.admiraalit.nl; 04.10.2019
comment
@www.admiraalit.nl На самом деле в спецификациях также указывается обозначение. Я отредактировал свой ответ, чтобы включить это. - person Geert Bellekens; 04.10.2019
comment
Спасибо. Какой раздел спецификации UML описывает эту нотацию? - person www.admiraalit.nl; 04.10.2019
comment
@www.admiraalit.nl §9.5.4, на той же странице. См. <prop-modifier> - person Geert Bellekens; 04.10.2019

Вы не предоставляете свою метамодель и четко указываете каждому сотруднику, что их личный номер является однозначным и поэтому обязательно уникальным. Предположительно, в какой-то области, такой как Company, personelNumber должен быть уникальным, поэтому ответ часто бывает примерно таким.

context Company
inv UniquePersonelNumber: employees->isUnique(personelNumber)
person Ed Willink    schedule 03.10.2019

Два альтернативных выражения OCL можно найти в следующем вопросе: Почему allInstance не для isUnique?

В вашем случае это будет:

context Employee
inv personalNumberUnique : Employee.allInstances() -> isUnique(personalNumber)
person www.admiraalit.nl    schedule 04.10.2019
comment
Спасибо, вы правы. Я удалю часть UML своего ответа. - person www.admiraalit.nl; 04.10.2019