Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Uml Book (Rus).doc
Скачиваний:
15
Добавлен:
11.08.2019
Размер:
58.74 Mб
Скачать

Структурные отношения

Отношения зависимости и обобщения применяются при моделировании клас­сов, которые находятся на разных уровнях абстракции или имеют различную значимость. Что касается отношения зависимости, один класс зависит от другого, но тот может ничего не «знать» о наличии первого. Когда речь идет об отношении обобщения, класс-потомок наследует своему родителю, но сам родитель о нем не осведомлен. Другими словами, отношения зависимости и обобщения являются односторонними.

Ассоциации предполагают участие равноправных классов. Если между двумя классами установлена ассоциация, то каждый из них каким-то образом зависит от другого, и навигацию можно осуществлять в обоих направлениях. В то время как зависимость - это отношение использования, а обобщение - отношение «являет­ся», ассоциации определяют структурный путь, обусловливающий взаимодей­ствие объектов данных классов. По умолчанию ассоциации являются двунаправ­ленными, но вы можете оставить только одно направление (см. главу 10).

Моделирование структурных отношений производится следующим образом:

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

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

3. Для каждой из определенных ассоциаций задайте кратность (особенно если она не равна *; то есть значению по умолчанию) и имена ролей (особенно если это помогает объяснить модель).

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

Как узнать, когда объекты данного класса должны взаимодействовать с объек­тами другого класса? Для этого рекомендуется воспользоваться CRC-карточка-ми и анализом прецедентов (см. главу 16). Эти методы очень помогают при рас­смотрении структурных и поведенческих вариантов функционирования системы. Если в результате обнаружится взаимодействие между классами, специфицируй­те ассоциацию.

На рис. 5.10 изображены классы, взятые из вузовской информационной систе­мы. В нижней части диаграммы находятся классы Студент, Курс и Преподава­тель. Между классами Студент и Курс существует ассоциация, показывающая, что студенты посещают курсы. Каждый студент может посещать любое число кур­сов, и на каждый курс может приходить любое количество студентов.

Аналогичным образом между классами Курс и Преподаватель определена ас­социация, показывающая, что преподаватель читает курс. Для каждого курса дол­жен быть хотя бы один преподаватель, и каждый преподаватель может вести лю­бое количество курсов (в том числе и ни одного).

Отношения между классом Вуз и классами Студент и Факультет слегка от­личаются Друг от друга, хотя оба являются отношениями агрегирования. В вузе

может быть любое количество студентов (включая ноль), и каждый студент может обучаться в одном или нескольких вузах; вуз может состоять из одного или несколь­ких факультетов, но каждый факультет принадлежит одному и только одному вузу. Отношение между классами Вуз и Факультет называют композитным аг­регированием (см. главу 10). В принципе можно было бы обойтись без отношений агрегирования и использовать простые ассоциации, определяя при этом Вуз как целое, а Студента и Факультет - как его части. Тем самым вы ясно показываете, какой из классов организационно стоит выше остальных. Так, вузы в какой-то степени определяются своими студентами и факультетами. В то же время студен­ты и факультеты вообще не могут существовать вне связи со своим вузом, и в ка­кой-то мере он формирует их облик.

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

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

Советы

При моделировании отношений в UML соблюдайте следующие правила:

  • используйте зависимость, только если моделируемое отношение не является структурным;

  • используйте обобщение, только если имеет место отношение типа «является»;

  • множественное наследование часто можно заменить агрегированием;

  • остерегайтесь циклических отношений обобщения;

  • поддерживайте баланс в отношениях обобщения: иерархия наследования не должна быть ни слишком глубокой (желательно не более пяти уровней), ни слишком широкой (лучше прибегнуть к промежуточным абстрактным классам);

  • применяйте ассоциации прежде всего там, где между объектами существуют структурные отношения.

При изображении отношений в UML руководствуйтесь нижеследующими ре­комендациями:

  • выбрав один из стилей оформления линий (прямые или наклонные), в даль­нейшем старайтесь его придерживаться. Прямые линии подчеркивают, что соединения идут от родственных сущностей к одному общему родителю. Наклонные линии позволяют существенно сэкономить пространство в слож­ных диаграммах. Если вы хотите привлечь внимание к разным группам от­ношений, применяйте одновременно оба типа линий;

  • избегайте пересечения линий;

  • показывайте только такие отношения, которые необходимы для понимания особенностей группирования элементов модели; скрывайте несущественные (особенно избыточные) ассоциации.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]