Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка, страница 12
Описание файла
DJVU-файл из архива "Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка", который расположен в категории "". Всё это находится в предмете "объектно-ориентированный анализ и проектирование" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр DJVU-файла онлайн
Распознанный текст из DJVU-файла, 12 - страница
(Вообще говоря, в некоторых странах столиц может быть несколько, например в Нидерландах и Швейцарии. Если это важно, модель можно изменить, поменяв кратность или создав отдельную ассоциацию для каждого типа столиц.) На рис. 3.9 приведен пример кратности нуль-или-один. Одно из окон рабочей станции может быть выделено для сообщений об ошибках.
Однако можно и не выделять такого окна. (Слово сопэо!в на диаграмме — это название полюса ассоциации. См. раздел 3.2.3.) Не следует пугать кратность с количеством элементов. Кратность (пш1бр! юйу)— это ограничение на размер совокупности, а количество элементов (сагд!па!Ву)— это число элементов, которые фактически входят в совокупность. Следовательно, кратность ограничивает количество элементов. 52 Глава 3 ° Моделирование классов Диеерамма классов серне~сну Соипну пате 1 Нее сервеl 1 пате Диаеремме объеягпое Рис.
3.8. Кратность определяет количество экземпляров одного класса, которые могут быть связаны с экземпляром другого класса Рис. 3.9. Участие объекта в ассоциации не является обязательным Диееремме «лессое Диееремме объемное Рис. 3.10. Пара обьектов может иметь только одну связь для данной ассоциации Диеерамме «лессое Диееремме объеигпое Рнс 3.11. Несколько связей между двумя обьектами можно смоделировать несколькими ассоциациями Кратность зависит от предположений и от определенных разработчиком границ задачи. Нечеткие требования часто затрудняют определение кратности. Не следует сильно беспокоиться о правильных значениях кратности на начальных этапах разработки системы.
Сначала следует определить классы и ассоциации, а затем указывать кратность. Если кратность не указана на диаграмме, она считается неопределенной. Кратность «много» указывает, что объект может быть связан с произвольным количеством объектов. Однако для каждой ассоциации между конкретной парой объектов может существовать только одна связь (за исключением мультимножеств и последовательностей — см.
раздел 3.2.5). Если между двумя объектами должно быть две связи, необходимо создать две ассоциации (рис. 3.10 и 3.11). 3.2. Концепции связи и ассоциации 53 Кратность часто показывает скрытые допущения, на которых основана модель. Например, какую кратность имеет ассоциация работает на между Человеком и Компанией? Один-к-многим или многие-к-многим? Все зависит от контекста. Приложение для вычисления налогов, подлежащих уплате, должно допускать занятость одного человека в нескольких компаниях. С другой стороны, с точки зрения профсоюза занятость на других работах может не иметь значения. Диаграммы классов позволяют выявить эти скрытые предположения и проанализировать их.
Сильнее всего отличаются друг от друга значения «один» и «много». Недооценивая кратность, вы можете ограничить гибкость приложения. Например, многие программы не позволяют указывать несколько телефонных номеров для одного человека. С другой стороны, переоценка кратности вызывает дополнительные расходы и требует указания дополнительной информации для того, чтобы различать членов множества. В настоящей иерархической организации «босс» должен иметь кратность «нуль или один», и не следует тратить ресурсы на несугцествующую матричную систему управления. 3.2.3. Имена полюсов ассоциации Кратность неявно подразумевает наличие полюсов ассоциации (аьаосгавоп епг!). Например, ассоциация один-к-многим имеет два полюса, у одного из которых указана кратность «один», а у другого — «много».
Концепция полюса ассоциации — одна из важнейших в ()!»П.. Полюс ассоциации может иметь не только кратность, но и свое собственное нмя. (В главе 4 рассматриваются дополнительные свойства полюсов ассоциации.) Имена полюсов ассоциаций часто присутствуют в описаниях задач в виде существительных. Имя полюса указывается около конца ассоциации (рис.
3.12). На нашем рисунке Регхол (Человек) и Сатрапу (Компания) участвуют в ассоциации 1(гогкзрог (РаботаетНа). Человек по отношению к компании является сотрудником (ешр!оуее), а компания по отношению к человеку — работодателем (егпр!оуег). Использование имен полюсов ассоциаций не является обязательным, но чаще всего оказывается проще указывать имена полюсов вместо имен ассоциаций или, по крайней мере, вместе с ними.
евргоуее евргоуег 4ое Оое З1вр1ех Магу Вгочгп Зхпр1ех ареал Зв1та цпдео УУ1ааега Рис. 3.12. Каждый полюс ассоциации может иметь имя Имена полюсов ассоциаций особенно удобны для прослеживания ассоциаций, потому что каждый из них может рассматриваться как псевдоатрибут. Каждый полюс бинарной ассоциации ссылается на объект или множество объектов, связанных с исходным объектом. С точки зрения исходного объекта, прослеживание 54 Глава 3 ° Моделирование классов ассоциации — это операция, которая возвращает связанные с ним объекты.
Имя полюса ассоциации — это средство для прослеживания ассоциации без явного ее указания. В разделе 3.5 мы расскажем о прослеживании ассоциаций в моделях классов более подробно. Имена полюсов ассоциаций обязательны для установления ассоциаций между двумя объектами одного и того же класса. Например, на рис. 3.13 имена гопгаглет и сопгелгз позволяют различить два случая использования класса Оггесгогу(Каталог), который имеет ассоциацию с самим собой. Каталог может содержать вложенные каталоги и даже может содержаться сам в себе. Имена полюсов ассоциаций позволяют различать между собой разные ассоциации между одними и темп же классами.
На рис. 3.13 каждый каталог имеет ровно одного пользователя, который является владельцем, и множество пользователей, которые имеют право работать с каталогом. Если между парой классов существует только одна ассоциация, имени классов может быть вполне достаточно, поэтому имена полюсов можно не указывать. аигпопа Рнс. 3.13. Имена полюсов ассоциации Имена полюсов позволяют унифицировать несколько ссылок на один и тот же класс. При построении диаграмм классов следует корректно использовать имена полюсов ассоциаций и не вводить отдельный класс для каждой ссылки (рис. 3.14). В некорректной модели Человек с Ребенком может быть представлен двумя экземплярами; один для родителя и один для ребенка. В корректной модели экземпляр Человека принилгает участие в двух и более связях: дважды в качестве родителя и произволыюе количество раз в качестве ребенка.
В корректной модели нужно показать, что ребенок не обязательно должен иметь родителя, чтобы рекурсия могла быть прервана. рагепГ Регеоп 0..2 сым Нелрееильнея модель Прееильнея модель Рис. 3.14. Моделирование ссылок на один и тот же класс Поскольку имена полюсов ассоциации позволяют отличать объекты друг от друга, все имена на дальнем полюсе ассоциации, прикрепленной к некоторому классу, должны быть уникальными. Хотя имя ставится около целевого объекта ассоциации, фактически оно является псевдоатрибутом исходного класса, а потому 3.2. Концепции связи и ассоциации 55 должно быть уникально внутри него.
По той же причине имя полюса ассоциации не должно совпадать с именем какого-либо атрибута исходного класса. 3.2.4. Упорядочение Достаточно часто объекты у полюса ассоциации с обозначением кратности «много» не имеют никакого выраженного порядка. В этом случае их можно рассматривать как множество. На рис.
3.15 изображен экран рабочей станции с перекрывающимися окнами. Каждое окно присутствует на экране не более, чем в одном экземпляре. Окна имеют явный порядок, и в каждой конкретной точке экрана видимо только одно из них (верхнее). Упорядочение является внутренним свойством ассоциации. Упорядоченность множества объектов можно указать при помощи слова (огс(егес(), которое ставится около соответствующего полюса ассоциации. Рис.
3.15. Упорядочение объектов у полюса ассоциации 3.2.5. Мультимножества и последовательности Бинарная ассоциация обычно позволяет создать между парой объектов не более одной связи. Однако указав около полюса ассоциации слова /Ьаф или (зедиелсе), вы можете разрешить создание множества связей между двумя объектами.
Мультимножество (Ъай) — это совокупность элементов, в которой допускается наличие дубликатов. Последовательность (зеццепсе) — это упорядоченная совокупность элементов, в которой также допускается наличие дубликатов. Маршрут на рис. 3.16 — это последовательность аэропортов, причем один и тот же аэропорт можно посетить несколько раз.
Обозначения )Ьаф и (зедиепсе), как и (оя)егер), применимы только к бинарным ассоциациям. Рис. 3.16. Пример последовательности В ()МЕ1 не допускалось создание множества связей между двумя объектами. Некоторые разработчики моделей неправильно понимали это требование в случае упорядоченных полюсов ассоциаций и создавали некорректные модели, допуская возможность существования нескольких связей между двумя объектами. В ()МЕ2 разработчик получает возможность ясно выразить свои мысли.
Если около полюса указано слово 1Ьаф или 1зециелсе), связей между двумя объектами может быть несколько. Если же этих указаний нет, связь может быть только одна. Обратите внимание, что разница между 1огг(егео) и (зедиелсе) состоит в том, что первое обозначение запрещает наличие дубликатов, а второе — разрешает. 56 Глава 3 ° Моделирование классов Последовательность — это упорядоченное мультимножество, тогда как упорядоченность подразумевается по отношению к обычному множеству. 3.2.6.
Классы ассоциаций Подобно тому, как объекты класса могут быть описаны при помощи атрибутов, связи ассоциации также могут быть описаны атрибутами. 1)М1. позволяет представлять информацию такого характера при помощи классов ассоциаций. Класс ассоциации — это ассоциация, которая одновременно является классом. Подобно связям ассоциации, экземпляры класса ассоциации обладают индивидуальностью, связанной с теми объектами, между которыми они проводятся.
Подобно обычным классам, классы ассоциаций могут иметь атрибуты и операции и участвовать в ассоциациях. Классы ассоциаций присутствуют в формулировке задачи в виде наречий или получаются абстрагированием известных значений. На рис. 3.17 ассеззРеттгзиол (разрешениеДоступа) является атрибутом АссезяЫеВу (Доступно).
Данные в нижней части рисунка показывают возможные значения каждой связи. В 1)М1. класс ассоциации обозначается прямоугольником, прикрепленным к ассоциации пунктирной линией. Аеаееегшеву ессезеРегпиееюп lегсдеппсар геегг зоьп оое /еГ«деппсер геегЬгепте Магу Вгоегп /изгтпоетзоогп геагГ-апге Зоил Оое Рис. 3.17. Связи ассоциации могут обладать атрибутами Основанием для введения классов ассоциаций послужила возможность создания ассоциаций типа многие-ко-многим. Атрибуты таких ассоциаций без всяких сомнений являются принадлежностью связей и не могут быть приписаны ни к одному из объектов-участников. На рис.