Звоните! 
 (926)274-88-54 
 Бесплатная доставка. 
 Бесплатная сборка. 
Ассортимент тканей

График работы:
Ежедневно. С 8-00 до 20-00.
Почта: soft_hous@mail.ru
Читальный зал -->  Диаграммы параллельных состояний 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [ 31 ] 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

Квалифицированные ассоциации 107

зультате Пограничные Колли являются Животными . Объединение первых трех фраз дает Шеп является Животным . Чем дальше, тем лучше. Теперь попробуем 1 и 4: Шеп является Породой Собак . Сочетание фраз 2 и 5 дает Пограничный Колли является Биологическим Видом . Это уже не так хорошо.

Почему некоторые из этих фраз можно комбинировать, а другие нельзя? Потому что некоторые фразы представляют собой классификацию (объект Шеп является экземпляром типа Пограничный Колли), а другие - обобщение (тип Пограничный Колли является подтипом типа Собака). Обобщение транзитивно, а классификация - нет. Если обобщение следует за классификацией, то в этом направлении их можно комбинировать, а если наоборот, то нельзя.

Смысл сказанного заключается в том, что с отношением является следует обращаться весьма осторожно. Его использование может привести к неверному применению подклассов и ошибочным результатам. В приведенном примере хорошими тестами для проверки подтипов могут служить следующие фразы: Собаки являются разновидностью Животных и Каждый экземпляр Пограничного Колли является экземпляром Собаки .

Квалифицированные ассоциации

Квалифицированная ассоциация в языке UML эквивалентна таким известным понятиям в языках программирования, как ассоциативные массивы (associative arrays), схемы (тарв) и словари.

На рис. 6.13 показан способ представления ассоциации между Заказом и Строкой Заказа, в котором используется квалификатор. Квалификатор указывает, что в соответствии с Заказом для каждого экземпляра Продукта может существовать одна Строка Заказа.


0..1

позиция заказа

Строка Заказа

количество:Число

Рис. 6.13. Квалифицированная ассоциация

С концептуальной точки зрения этот пример показывает, что отдельный Заказ не может содержать две Строки Заказа для одного и того же Продукта. С точки зрения спецификации данная квалифицированная ассоциация может повлечь создание интерфейса следующего вида:

Class Order {

public OrderLine getLineltem(Product aProduct);

public void addLineltem(Number amount, Product forProduct) ;



Таким образом, любой доступ к заданной Позиции Заказа требует подстановки некоторого Продукта в качестве аргумента. Кратность 1 означает, что для каждого Продукта должна существовать только одна Позиции Заказа; кратность * означает, что для Продукта может существовать несколько Строк Заказа, однако соответствующий доступ к Позициям Заказа все равно выполняется на основе индексов, образованных с помощью Продукта.

С точки зрения реализации для этой цели можно предложить использовать ассоциативный массив или другую аналогичную структуру данных для хранения строк заказа.

Class Order {

private Map lineltems ;

В ходе концептуального моделирования я использую конструкцию квалификатора только для того, чтобы показать ограничения относительно отдельных позиций - единственная Строка Заказа для каждого Продукта в Заказе . В моделях уровня спецификации нужен квали-фикатор, чтобы показать наличие интерфейса для поиска по ключу. Лично меня вполне устраивает одновременное использование как квалифицированной, так и неквалифицированной ассоциации, если при этом существует подходящий интерфейс.

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

Класс-ассоциация

Классы-ассоциации позволяют дополнительно определять для ассоциаций атрибуты, операции и другие свойства, как это показано на рис. 6.14.

Личность

работодатель

0..1

Компания

Работа

период:интервалВремени

Класс-ассоциация

Рис. 6.14. Класс-ассоциация

Из данной диаграммы видно, что Личность может работать только в одной Компании. При этом необходимо каким-то образом хранить информацию относительно периода времени, в течение которого каждый служащий работает в каждой Компании.



Класс-ассоциация

Это можно сделать, добавив в данную ассоциацию атрибут интер-валВремени . Можно было бы включить этот атрибут в класс Личность, однако на самом деле он характеризует не Личность, а ее отношение к Компании, которое будет изменяться при смене работодателя.

На рис. 6.15 показан другой способ представления данной информации: преобразование Работы в отдельный самостоятельный класс. (Обратите внимание, как при этом изменили свои значения соответствующие кратности.) В данном примере каждый из классов в первоначальной ассоциации обладал однозначным концом ассоциации по отношению к классу Работа. После преобразования конец ассоциации работодатель становится производным, хотя это можно не показывать вовсе.

/работодатель

Личность

1 0..1

Работа

период:интервалВремени

0..1

Компания

Рис. 6.15. Преобразование класса-ассоциации в обычный класс

Что же полезного может дать класс-ассоциация в качестве компенсации за необходимость помнить еще один вариант уже описанной нотации? Класс-ассоциация дает возможность определить дополнительное ограничение, согласно которому двум участвующим в ассоциации объектам может соответствовать только один экземпляр класса-ассоциации. Мне кажется, что необходимо привести еще один пример.

Посмотрим на две диаграммы, изображенные на рис. 6.16. Форма этих диаграмм практически одинакова. Однако мы можем представить себе некоторую Личность, работающую в одной и той же Компании в различные периоды времени, т. е. он или она увольняется с работы, а позже вновь восстанавливается. Это означает, что Личность в течение некоторого времени может иметь более чем одну ассоциацию Работа с одной и той же Компанией. Что же касается классов Личность и Квалификация, трудно представить себе ситуацию, когда Личность могла бы обладать более чем одним уровнем Компетентности в рамках одной и той же Квалификации. Действительно, такую ситуацию, по всей видимости, следует рассматривать как ошибку.

В языке UML разрешается использовать только второй вариант. Для каждой комбинации Личности и Квалификации может существовать только одна Компетентность.

Верхняя диаграмма на рис. 6.16 не позволяет какой бы то ни было Личности иметь более чем одну Работу в одной и той же Компании. Ее-



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [ 31 ] 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57



ООО «Мягкий Дом» - это Отечественный производитель мебели. Наша профильная продукция - это диваны еврокнижка. Каждый диван можем изготовить в соответствии с Вашими пожеланияи (размер, ткань и материал). Осуществляем бесплатную доставку и сборку.



Звоните! Ежедневно!
 (926)274-88-54 
Продажа и изготовление мебели.


Копирование контента сайта запрещено.
Авторские права защищаются адвокатской коллегией г. Москвы
.