ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 22.04.2024

Просмотров: 323

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Скачано с сайта http://ivc.clan.su

Технология разработки программного обеспечения

17

Кратность присутствует в каждой форме отношении часть целого и ставится на

стороне частей. Если еѐ значение не указано, то предполагается, что в отношении участвует много частей и одно целое.

В UML агрегация обозначается линией с полым ромбом около полюса целого, у композиции ромб закрашен (рис. 1-10).

Рис. 1-10. Обозначение

агрегации и композиции

Из диаграммы видно, что в одном вагоне много грузов (при потере вагона не обязательно исчезнут все грузы), на одном предприятии много отделов (при ликвидации предприятия отделы перестают существовать).

На рис. 1-11 показан пример агрегации, где тепловоз (агрегат) состоит из секций (частей) и дизелей (частей). Каждый дизель (как агрегат) имеет в своѐм составе топливные насосы (части). По свойству транзитивности насосы – части тепловоза. По свойству асимметричности агрегации тепловоз не является частью топливных насосов.

Рис. 1-11. Агрегация

Обобщение (generalization) является частным случаем ассоциации и обозначает отношение типа общее – частное (is – a).

Обобщение указывает на наличие общих характеристик между классами. Класс, имеющий наиболее общие для некоторой группы классов характеристики, называется суперклассом, а его специализированная версия – подклассом. Открытые и защищѐнные атрибуты и операции суперкласса наследуются всеми подклассами. Любой подкласс может добавлять уточняющие характеристики к унаследованным. Дополнительные атрибуты и/или операции в подклассах могут отсутствовать.

Отношение обобщения не является набором связей между объектами, поэтому направление и кратность для обобщения не указываются.

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

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

Довбуш Г.Ф., ПГУПС, кафедра ИВС, 2010/2011


Скачано с сайта http://ivc.clan.su

Технология разработки программного обеспечения 18

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

В UML обобщение обозначается линией с треугольником на конце. Вершина треугольника направлена в сторону суперкласса (рис. 1-12).

Рис. 1-12. Обобщение

Первый уровень иерархии на диаграмме содержит класс Вагон, являющийся суперклассом для двух классов второго уровня: Грузовой вагон и Пассажирский вагон. Оба класса наследуют от суперкласса Вагон защищѐнные атрибуты (модель и кон-

струкционная скорость), а также имеют дополнительные. Грузовой вагон служит суперклассом для классов третьего уровня иерархии: Цистерна и Платформа. К их закрытым атрибутам добавляются атрибуты классов Грузовой вагон и Вагон.

Дискриминатор (discriminator) показывает признак, указывающий, по какому свойству объектов сделано обобщение. На рис. 1-13 показано обобщение с указанием дискриминаторов.

Довбуш Г.Ф., ПГУПС, кафедра ИВС, 2010/2011

Скачано с сайта http://ivc.clan.su

Технология разработки программного обеспечения

19

 

Рис. 1-13. Обобщение с указанием дискрими-

наторов

Зависимость (dependency) – это однонаправленное отношение использования между двумя классами. На одном конце отношения находится зависимый класс, на втором – независимый.

Объект-клиент зависимого класса для своего корректного функционирования пользуется услугами объекта-сервера независимого класса. Зависимость отражает связь между объектами по применению, когда изменение поведения сервера может повлиять на поведение клиента.

В UML отношение зависимости изображается пунктирной стрелкой, всегда направленной в сторону независимого класса (рис. 1-14).

Рис. 1-14. Зависимость

На диаграмме показана зависимость просмотра тех или иных передач от выбора телевизионного канала зрителем. Объект-клиент просмотр использует объект-сервер канал для реализации операции показать ( ). Состояние просмотра зависит от канала, номер которого может изменяться. Выбранный канал передаѐтся операции показать ( ) как фактический параметр (канал : Канал). Результатом выполнения операции объектом просмотр станет смена его состояния.

Довбуш Г.Ф., ПГУПС, кафедра ИВС, 2010/2011


Скачано с сайта http://ivc.clan.su

Технология разработки программного обеспечения 20

Класс ассоциации (association class) позволяет назначить для ассоциации атрибуты и операции, которые являются принадлежностью связей и не могут быть приписаны ни к одному из объектов-участников.

Для одной ассоциации может существовать только один класс ассоциации. Важная особенность класса ассоциации заключается в том, что для объектов-участников создаѐтся только один объект этого класса.

Обозначается класс ассоциации как обычный класс, соединѐнный пунктирной линией с той ассоциацией, которую он уточняет (рис.1-15).

Рис. 1-15. Обозначение класса ассоциации

Основанием для введения классов ассоциации послужили ассоциации с кратностью многие–ко–многим, где возникает неоднозначность в определения атрибутов клас- сов-участников. Например, в сессию основной экзамен по дисциплине проводится для студента один раз. Между классами Студент и Дисциплина существует ассо-

циация многие–ко–многим: один студент экзаменуется по многим дисциплинам, и

по одной дисциплине – много студентов. Полученные студентом оценки не могут быть атрибутами ни одного названного класса. На рис. 1-16 показана диаграмма с классом ассоциации для регистрации результатов экзаменов. Дата и оценка экзамена конкретного студента по конкретной дисциплине хранятся объектом класса ассоциации экзамен. Для каждой пары объектов студент – дисциплина будет существовать один объект экзамен.

Рис. 1-16. Диаграмма с классом ассоциации

для регистрации результатов экзаменов

Класс ассоциации может участвовать в другой ассоциации, как показано на рис. 1- 17. Теперь объект экзамен знает об объекте преподаватель, чтобы сохранить данные о педагоге, принявшем у студента экзамен по дисциплине. Так как не все преподаватели участвуют в приѐме экзаменов, для объектов класса определена роль

экзаменатор.

Довбуш Г.Ф., ПГУПС, кафедра ИВС, 2010/2011


Скачано с сайта http://ivc.clan.su

Технология разработки программного обеспечения

21

 

Рис. 1-17. Класс ассоциа-

ции как участник другой ассоциации

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

Если требуется создание нескольких или многих объектов для одной и той же пары участников, используется отдельный класс. Пусть необходимо регистрировать результаты не только основного экзамена, но ещѐ двух дополнительных, которые могут сдавать некоторые студенты. Для решения задачи класс ассоциации преобразован в обычный класс, как показано на рис. 1-18.

Рис. 1-18. Диаграмма с

обычным классом для регистрации результатов экзаменов

Здесь класс Экзамен уже не является классом ассоциации. Это обычный класс, который участвует в трѐх следующих ассоциациях:

1.Студент – Экзамен: Один студент не сдаѐт экзаменов вообще или экзаменуется не более трѐх раз.

2.Дисциплина – Экзамен: По одной дисциплине проводится много экзаменов.

3.Преподаватель – Экзамен: Один преподаватель (являющийся экзаменатором) принимает много экзаменов.

Для делегирования композиция и обобщение используются совместно, что повышает устойчивость системы. Пример делегирования показан на рис. 1-19.

Довбуш Г.Ф., ПГУПС, кафедра ИВС, 2010/2011

Скачано с сайта http://ivc.clan.su

Технология разработки программного обеспечения

22

 

Рис. 1-19. При-

мер делегирования

Наличие отношений между классами добавляет в классы дополнительные атрибуты, которые, как правило, реализуются посредством указателей.

Отношения между актѐрами и вариантами использования

Отношение между актѐром и прецедентом называют коммуникативной ассоциаци-

ей (communicate association).

Обычно отношение направлено от актѐра к прецеденту (рис. 1-20).

Рис. 1-20. Коммуникативная ассоциация

Между прецедентами существует отношение зависимости двух типов:

1.Включение (include relationship).

2.Расширение (extend relationship).

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

Довбуш Г.Ф., ПГУПС, кафедра ИВС, 2010/2011


Скачано с сайта http://ivc.clan.su

Технология разработки программного обеспечения 23

дент никогда не существует автономно, он всегда рассматривается как часть базозового прецедента.

В UML отношение включения обозначается в виде зависимости со стереотипом <<include>>, которая направлена от базового к включаемому прецеденту. Пример отношения включения показан на рис. 1-21.

Рис. 1-21. Пример включения

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

что базовый прецедент не полон без включаемого прецедента.

Отношение расширения добавляет к базовому прецеденту дополнительное поведение другого прецедента.

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

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

Расширение применяется для моделирования:

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

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

3.Частей прецедента, которые актѐр воспринимает как необязательное поведение системы.

Базовый прецедент в отношении расширения дополняется одной или несколькими точками расширения (extension points).

Довбуш Г.Ф., ПГУПС, кафедра ИВС, 2010/2011

Скачано с сайта http://ivc.clan.su

Технология разработки программного обеспечения 24

В UML отношение расширения изображается в виде зависимости со стереотипом <<extend>>, которая направлена от расширяющего прецедента к базовому. На рис. 1-22 показаны примеры отношения расширения.

Рис. 1-22. Примеры

расширения

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

Отношения между компонентами и пакетами

Между компонентами и пакетами существуют только зависимости.

Если компонента зависит от второй, а вторая от первой, между ними будет существовать два отношения зависимости (рис. 1-23).

Рис. 1-23. Отношения между

компонентами

В модели пакетов следует избегать циклических зависимостей. Если один пакет зависит от другого и наоборот, то лучше перестроить отношения зависимости. Следует или объединить пакеты в один, или попытаться вынести общие элементы в отдельный пакет так, как показано на рис. 1-24.

Рис. 1-24. Устранение

Довбуш Г.Ф., ПГУПС, кафедра ИВС, 2010/2011