![]() |
Звоните! (926)274-88-54 Бесплатная доставка. Бесплатная сборка. |
Ассортимент тканей График работы: Ежедневно. С 8-00 до 20-00. Почта: soft_hous@mail.ru |
![]() ![]() ![]() |
Читальный зал --> Диаграммы параллельных состояний Квалифицированные ассоциации 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 не позволяет какой бы то ни было Личности иметь более чем одну Работу в одной и той же Компании. Ее-
ООО «Мягкий Дом» - это Отечественный производитель мебели. Наша профильная продукция - это диваны еврокнижка. Каждый диван можем изготовить в соответствии с Вашими пожеланияи (размер, ткань и материал). Осуществляем бесплатную доставку и сборку. Звоните! Ежедневно! (926)274-88-54 Продажа и изготовление мебели. Копирование контента сайта запрещено. Авторские права защищаются адвокатской коллегией г. Москвы. |