UML ассоциативный класс - уточняющий - PullRequest
3 голосов
/ 10 марта 2012

Я читаю "UML дистиллированный" Мартина Фаулера, и во время чтения об уроках ассоциации я получил эту цитату:

What benefit do you gain with the association class to offset the extra notation you have to
remember? The association class adds an extra constraint, in that there can be only one instance of
the association class between any two participating objects.

Тогда был пример, но я хочу убедиться, что я правильно понял, если, например, я получил:

 ---------            ---------
|         |*        *|         |
| CLASS A |----------| CLASS B |
|         |     |    |         |
 ---------      |     ---------
                |
          ______|______
         |             |
         |             |
         |  CLASS C    |
         |             |
         |_____________|

тогда для каждой отдельной пары (экземпляр A, экземпляр B) существует только один экземпляр класса C.

Таким образом, если бы я взял A1, A2, B1, B2-экземпляры, то для (A1, B1) (A1, B2) (A2, B1) (A2, B2) я бы получил 4 экземпляра C, не меньше, больше ничего?

Ответы [ 4 ]

0 голосов
/ 29 декабря 2017

Ассоциация в UML представлена ​​(имеет) логический смысл (UML не является инструментом для моделирования базы данных!).Ассоциация опишет возможный логический факт.Например, два человека A и B могут быть женаты, мы можем изобразить это как ассоциацию, она представляет значение как «мы знаем, что существует логическая связь между человеком A и человеком B».Если мы знаем, что это такое, мы рисуем ассоциацию классов [свидетельство о браке] как материализованный факт.

0 голосов
/ 15 сентября 2015

Ваши рассуждения верны: если у класса ассоциации нет одного или обоих концов ассоциации, помеченных {nonunique}, то это подразумевает ограничение, что между одними и теми же объектами может быть только одна связь (как объяснил Мартин Фаулер).

Обратите внимание, однако, что опция неуникальных связей заканчивается только в UML 2 (в 2005 году), а книга Мартина Фаулера (с 2003 года) ссылается на UML 1.x.

Некоторые примеры могут помочь.Например, ассоциация LandPurchase между Person и PieceOfLand может быть смоделирована как класс ассоциации UML (с уникальными связями по умолчанию), так как между человеком и участком земли может быть только одна ссылка на покупку.Ассоциация ProductPurchase между Person и Product может быть смоделирована как класс ассоциации, только если конец ассоциации на стороне Product помечен как {nonunique}, поскольку между одним и тем же лицом может быть более одной ссылки на покупку.и тот же продукт (как тип).Например, я могу купить более одного автомобиля Tesla Model S (если бы у меня были деньги).

Аналогично, в случае Appointment между Person и Doctor, поскольку один и тот же человекможет иметь более одной встречи с одним и тем же врачом, конец ассоциации на стороне Doctor должен быть отмечен как {nonunique}.

0 голосов
/ 16 сентября 2015

Из спецификации UML 2.5:

Обратите внимание, что когда один или несколько концов AssociationClass имеют isUnique = false, возможно связать несколько экземпляров тот же набор экземпляров конечных классов.

г. Фаулер, возможно, неправильно понял факты. Нет никаких дополнительных ограничений, только возможность хранить дополнительные значения свойств.

Когда isUnique = false, дополнительные свойства позволяют, например, моделировать несколько посещений одного и того же врача в разные даты или несколько покупок одного и того же продукта в разные даты.

0 голосов
/ 10 марта 2012

Это было бы правильно, без какого-либо намерения смешивать понятия здесь, но это похоже на Таблицы в базе данных, где:

A 1-* C
B 1-* C

Где C можно рассматривать как результат разрыва отношений между многимимежду A и B.

Для каждой строки на B может существовать только 1 и только 1 строка C, и эта конкретная строка (на C) может относиться только к 1 строке на A. Следовательно, для каждой пары уникальныхстроки на A и B могут существовать только на 1 строку на C или на ноль, потому что * означает 0 или более.

...