Как смоделировать партнерство? - PullRequest
0 голосов
/ 04 марта 2019

Я хотел бы смоделировать партнерство между двумя людьми.Моей первой идеей было использовать Ассоциацию.Концы объединения должны быть названы по-разному.Поэтому мне понадобятся две роли: partner1 и partner2.Это, в свою очередь, позволяет каждому человеку иметь двух партнеров.Не совсем то, что я хотел.partnership Моя вторая попытка - использовать атрибут partner.Здесь проблема в том, что партнером одного человека должен быть этот человек, но модель этого не учитывает.Конечно, мы могли бы использовать ограничение с этим эффектом, но я бы предпочел решение с графической нотацией.

Третий вариант (предложенный в комментарии ниже) использует дополнительный класс Partnership.Это работает, но если у него нет каких-либо атрибутов, это только делает модель более сложной, чем необходимо.

Наиболее элегантным решением будет ассоциация, в которой оба member ends будут одинаковыми partner Свойство,Однако это недопустимо, поскольку конечное свойство элемента уникально.Поэтому он не может содержать одно и то же свойство дважды.Это ошибка в спецификации?Это действительно такой редкий случай?Это происходит со всеми рекурсивными Ассоциациями, где роль одинакова с обеих сторон.

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Это пример симметричной частичной ассоциации.Такая связь может быть смоделирована только с помощью подходящего ограничения, как показано в следующей модели:

enter image description here

Прикрепленное явное ограничение / инвариант можетИзбегать только в том случае, если было бы определено соответствующее ключевое слово ограничения, которое будет использоваться в стереотипе ассоциации, таком как «симметричный».К сожалению, в UML 2.5 такой стереотип отсутствует, но мы можем добавить его следующим образом:

enter image description here

[Я только прочиталкомментарий от "bruno" выше после отправки моего ответа.«Бруно» правильно указал на необходимость основной части ограничения: self.partner.partner = self.]

0 голосов
/ 06 марта 2019

Элегантное решение, упомянутое в вопросе, будет выглядеть следующим образом: Person with partner attribute Оно не выглядит сильно отличающимся от других решений, но на самом деле невозможно с текущим UML, так как свойство end элементаимеет isUnique=true: Metamodel Я думаю, это ошибка спецификации.Это, безусловно, можно исправить (показано синим цветом).Тем не менее, кажется, что эта ошибка не была замечена очень часто.Будет ли это исправление достаточно полезным, чтобы стоить усилий?

Если за этот ответ проголосуют, я подам вопрос.

0 голосов
/ 04 марта 2019

Как насчет этой конструкции: enter image description here?

У пары есть ровно 2 человека, связанных.У класса не должно быть никаких дополнительных свойств.Тем не менее, вы можете подумать о дате, когда он был создан.В случае брака может быть указано лицо, дающее фамилию, и т. Д. Возможно, в этом партнерстве есть и другие аспекты, поскольку вам, похоже, это необходимо.

Теперь, почему я использовал составную агрегацию?В основном композиция означает, что растворение составляющего элемента также устранит составные элементы.Так что это выглядит довольно католично, не так ли?Да и позор мне.Однако должно быть что-то, выражающее «человек может быть составлен только для одной пары».И это то, что комбинированное агрегирование также говорит (на моей любимой странице 110):

Составное агрегирование - это сильная форма агрегации, которая требует, чтобы объект части включался не более чем в один составной объект одновременно.Если составной объект удаляется, все его экземпляры, которые являются объектами, удаляются вместе с ним.

Итак, вместо этого должна использоваться общая композиция

Указывает, чтоСвойство имеет общую семантику агрегации.Точная семантика общего агрегирования варьируется в зависимости от области приложения и моделирующего устройства.

с объяснением моделирования, объясняющим, что каждый элемент должен использоваться только один раз в совместно используемом составе.

Конечно, простойАссоциация с ограничением будет лучше всего.Тем не менее, я оставлю диаграмму для развлечения читателей.

PS Прочтение различных комментариев заставляет меня думать, что семантика Partnership (и это варианты братства) гораздо более чувствительна к социальным аспектам.чем интуитивно начинает думать.Таким образом, настоящий «ответ» должен быть следующим: сначала определить социальный контекст для Partnership.

...