отношение ассоциации невозможно между
Отношения классов — от UML к коду
Введение
Диаграмма классов UML позволяет обозначать отношения между классами и их экземплярами. Для чего они нужны? Они нужны, например, для моделирования прикладной области. Но как отношения отражаются в программном коде? Данное небольшое исследование пытается ответить на этот вопрос — показать эти отношения в коде.
Сначала попробуем прояснить, как относятся друг к другу отношения между классами в UML. Используя различные источники удалось построить следующую структурную схему, демонстрирующую разновидности отношений:
Рис. 1 — Отношения между классами
Ассоциации имеют навигацию: двунаправленную или однонаправленную, указывающую на направление связи. То есть у каждого вида ассоциации еще есть два подвида, которое на рисунке не показаны.
1. Обобщение
Итак, наша цель — построить UML-диаграмму классов (Class Model), а затем отразить ее в объектно-ориентированном коде.
В качестве прикладной области возьмем отдел кадров некого предприятия и начнем строить его модель. Для примеров будем использовать язык Java.
Отношение обобщения — это наследование. Это отношение хорошо рассматривается в каждом учебнике какому-либо ООП языку. В языке Java имеет явную реализацию через расширение(extends) одного класса другим.
Рис. 2 — Отношение обобщения
Класс «Man»(человек) — более абстрактный, а «Employee»(сотрудник) более специализированный. Класс «Employee» наследует свойства и методы «Man».
Попробуем написать код для этой диаграммы:
2. Ассоциация
2.1 Бинарная
В модель добавили класс «IdCard», представляющий идентификационную карточку(пропуск) сотрудника. Каждому сотруднику может соответствовать только одна идентификационная карточка, мощность связи 1 к 1.
Рис. 3 — Бинарная ассоциация
В теле программы создаем объекты и связываем их:
Класс Employee имеет поле card, у которого тип IdCard, так же класс имеет методы для присваивания значения(setIdCard) этому полю и для
получения значения(getIdCard). Из экземпляра объекта Employee мы можем узнать о связанном с ним объектом типа IdCard, значит
навигация (стрелочка на линии) направлена от Employee к IdCard.
2.2 N-арная ассоциация
Представим, что в организации положено закреплять за работниками помещения. Добавляем новый класс Room.
Каждому объекты работник(Employee) может соответствовать несколько рабочих помещений. Мощность связи один-ко-многим.
Навигация от Employee к Room.
Рис. 4 — N-арная ассоциация
Теперь попробуем отразить это в коде. Новый класс Room:
Добавим в класс Employee поле и методы для работы с Room:
2.3 Агрегация
Введем в модель класс Department(отдел) — наше предприятие структурировано по отделам. В каждом отделе может работать один или более человек. Можно сказать, что отдел включает в себя одного или более сотрудников и таким образом их агрегирует. На предприятии могут быть сотрудники, которые не принадлежат ни одному отделу, например, директор предприятия.
Рис. 5 — Агрегация
Итак, наш класс, помимо конструктора и метода изменения имени отдела, имеет методы для занесения в отдел нового сотрудника, для удаления сотрудника и для получения всех сотрудников входящих в данный отдел. Навигация на диаграмме не показана, значит она является двунаправленной: от объекта типа «Department» можно узнать о сотруднике и от объекта типа «Employee» можно узнать к какому отделу он относится.
Так как нам нужно легко узнавать какому отделу относится какой-либо сотрудник, то добавим в класс Employee поле и методы для назначения и получения отдела.
2.3.1 Композиция
Предположим, что одним из требований к нашей системе является требование о том, чтоб хранить данные о прежней занимаемой должности на предприятии.
Введем новый класс «pastPosition». В него, помимо свойства «имя»(name), введем и свойство «department», которое свяжет его с классом «Department».
Данные о прошлых занимаемых должностях являются частью данных о сотруднике, таким образом между ними связь целое-часть и в то же время, данные о прошлых должностях не могут существовать без объекта типа «Employee». Уничтожение объекта «Employee» должно привести к уничтожению объектов «pastPosition».
Рис. 6 — Композиция
В класс Employee добавим свойства и методы для работы с данными о прошлой должности:
3. Зависимость
Для организации диалога с пользователем введем в систему класс «Menu». Встроим один метод «showEmployees», который показывает список сотрудников и их должности. Параметром для метода является массив объектов «Employee». Таким образом, изменения внесенные в класс «Employee» могут потребовать и изменения класса «Menu».
Рис. 7 — Зависимость
Заметим, что класс «Menu» не относится к прикладной области, а представляет собой «системный» класс воображаемого приложения.
Класс «Menu»:
4. Реализация
Реализация, как и наследование имеет явное выражение в языке Java: объявление интерфейса и возможность его реализации каким-либо классом.
Для демонстрации отношения «реализация» создадим интерфейс «Unit». Если представить, что организация может делиться не только на отделы, а например, на цеха, филиалы и т.д. Интерфейс «Unit» представляет собой самую абстрактную единицу деления. В каждой единице деления работает какое-то количество сотрудников, поэтому метод для получения количества работающих людей будет актуален для каждого класса реализующего интерфейс «Unit».
Рис. 8 — Реализация
Реализация в классе «Department»:
Как видим, реализация метода «getPersonCount» не совсем актуальна для класса «Department», так как он имеет метод «getEmployees», который возвращает
коллекцию объектов «Employee».
Выводы
Язык моделирования UML имеет набор отношений для построения модели классов, но даже такой развитой ООП язык, как Java имеет только две явные конструкции для отражения связей: extends(расширение) и interface/implements(реализация).
В результате моделирования получили следующую диаграмму:
Рис. 8 — Диаграмма классов
Литература
1) Г. Буч, Д. Рамбо, А. Джекобсон. Язык UML Руководство пользователя.
3) Эккель Б. Философия Java. Библиотека программиста. — СПб: Питер, 2001. — 880 с.
4) Орлов С. Технологии разработки программного обеспечения: Учебник. — СПб: Питер, 2002. — 464 с.
5) Мухортов В.В., Рылов В.Ю.Объектно-ориентированное программирование, анализ и дизайн. Методическое пособие. — Новосибирск, 2002.
Использование диаграммы классов UML при проектировании и документировании программного обеспечения
Предисловие
Парадигма объектно-ориентированного программирования (далее просто ООП) повсеместно используется при создании современного программного обеспечения. Модель объектов, заложенная в данную парадигму, способна достаточно точно описывать свойства и возможности сущностей реального мира. Разумеется, эти объекты не существуют обособленно друг от друга, они взаимодействуют друг с другом для достижения какой-то глобальной цели разрабатываемой системы.
Стандартная библиотека некоторого языка программирования – замечательный сборник полезных утилит. Однако разнообразие решаемых программистами задач так велико, что одной только стандартной библиотекой ограничиться не получится. Программисту часто приходится самому создавать необходимый ему набор функциональности. Это можно сделать, создав пакет функций или набор классов.
Создание собственных классов при разработке программы добавляет в проект новый уровень абстракции, который позволяет определить некоторый функционал системы и работать в дальнейшем только с ним.
Чем выше уровень абстракции, которым пользуется программист, тем выше уровень его продуктивности при разработке приложения.
Использование ООП может существенно упросить жизнь программисту. Это достигается за счёт сокрытия особенностей внутренней реализации классов. Программисту остаётся лишь пользоваться её удобствами. Кажется, что ООП – панацея от всех проблем. Однако на практике, если не иметь чёткого представления о том, какие классы нужно реализовать и как ими потом пользоваться, в результате может получиться очень запутанная система, которая начнёт порождать спагетти-коду (от англ. “spaghetti code”), который будет лишь мешаться, когда вы захотите добавить что-то новое в систему.
Чтобы избежать большинства проблем, возникающих при использовании ООП, нужно:
Иметь некоторый опыт создания программ и использования классов.
Строить структурные диаграммы классов.
Первое придёт со временем, а со вторым я могу вас познакомить прямо сейчас. Сегодня мы разберём диаграмму классов UML.
Комплект тестов для проверки знаний студентов
ГАПОУ ПО «Пензенский многопрофильный колледж»
Комплект тестов для проверки знаний студентов
по дисциплине МДК.04.01
для специальности 09.02.03 «Программирование в компьютерных системах»
углубленный уровень подготовки
Протокол № ____ от «__»_____________2015 г
Председатель цикловой комиссии
, преподаватель специальных дисциплин, ГАПОУ ПО Пензенский многопрофильный колледж отделение информационных технологий
1. Введение в UML 4
2. Моделирование использования 7
3. Моделирование структуры 8
4. Моделирование поведения 16
5. Дисциплина моделирования 29
Тема 1. Введение в UML
2. Модель UML состоит из (укажите лишнее):
3. Сущности UML подразделяются на (укажите лишнее)
4. Отношения UML подразделяются на (укажите лишнее)
5. Структурные сущности UML включают в себя (укажите лишнее)
Г) варианты использования
6. Поведенческие сущности UML включают в себя (укажите лишнее)
В) варианты использования
7. Сущностями UML являются (укажите лишнее)
Д) варианты использования
8. Группирующие сущности UML включают в себя
10.Отношения зависимости в UML являются
11.Отношения обобщения в UML являются
12. Отношения ассоциации (без дополнений) в UML являются
13. Отношения реализации в UML являются
14. Множество канонических диаграмм UML
A) определяется стандартом языка
Б) является соглашением пользователей языка
В) определяется производителями инструментов, поддерживающих UML
15. Множество канонических структурных диаграмм UML включает в себя (укажите лишнее)
A) Диаграммы классов
Б) Диаграммы использования
В) Диаграммы компонентов
Г) Диаграммы объектов
16. Множество канонических структурных диаграмм UML включает в себя
A) Диаграммы последовательности
Б) Диаграммы (кооперации) коммуникации
В) Диаграммы использования
Г) Диаграммы размещения
17. Множество канонических поведенческих диаграмм UML включает в себя (укажите лишнее)
A) Диаграммы состояний
Б) Диаграммы деятельности
В) Диаграммы последовательности
Г) Диаграммы потоков данных
18. Множество канонических поведенческих диаграмм UML включает в себя
A) Диаграммы классов
Б) Диаграммы компонентов
В) Диаграммы последовательности
Г) Диаграммы размещения (развертывания)
19. Множество канонических диаграмм UML включает в себя (укажите лишнее)
A) Диаграммы классов
Б) Диаграммы состояний
В) Диаграммы последовательности
Г) Диаграммы потоков данных
20. Канонические диаграммы использования предназначены для описания
21. Канонические диаграммы реализации предназначены для описания
22. Канонические диаграммы классов предназначены для описания
23. Канонические диаграммы взаимодействия предназначены для описания
24. Канонические диаграммы объектов предназначены для описания
25. Канонические диаграммы состояний предназначены для описания
26. Канонические диаграммы последовательности предназначены для описания
27. Канонические диаграммы кооперации предназначены для описания
28. Канонические диаграммы размещения предназначены для описания
29. Канонические диаграммы деятельности предназначены для описания
30. Канонические диаграммы компонентов предназначены для описания
Тема 2. Моделирование использования
1. На диаграмме использования UML применяют следующие основные типы сущностей
Б) Варианты использования
В) Действующие лица
2. На диаграмме использования UML применяют следующие основные типы отношений между действующими лицами
3. На диаграмме использования UML применяют следующие основные типы отношений между вариантами использования
4. На диаграмме использования UML применяют следующие основные типы отношений между действующими лицами и вариантами использования
5. Графический комментарий «границы системы» применяется на
A) Диаграммах классов
Б) Диаграммах использования
В) Диаграммах состояний
Г) Диаграммах деятельности
6. На рисунке следующие отношения являются недопустимыми на канонической диаграмме использования
7. На рисунке следующие отношения являются допустимыми
Тема 3. Моделирование структуры
1. На диаграмме классов UML применяют следующие основные типы сущностей
Б) Варианты использования
В) Действующие лица
2. На диаграмме классов UML применяют следующие основные типы отношений между классами
3 На диаграмме классов UML применяют следующие основные типы отношений между интерфейсами
4. На диаграмме классов UML применяют следующие основные типы отношений между интерфейсами и классами
5. На диаграмме компонентов UML применяют следующие основные типы сущностей
Б) Варианты использования
В) Действующие лица
6. На диаграмме размещения (развертывания) UML применяют следующие основные типы сущностей
Б) Варианты использования
В) Действующие лица
7. Чтобы показать, что класс является абстрактным, в UML применяется
A) Подчеркивание имени класса
Б) Курсивное начертание имени класса
В) Полужирное начертание имени класса
Г) Стереотип «abstract»
8. Имя стереотипа в UML выделяется
В) Полужирным начертанием
9. Дополнительные элементы нотации (украшения) пользователь UML может
А) включать или не включать в модель
Б) показывать или не показывать на диаграмме
В) устанавливать или не устанавливать в инструменте
10. Классификаторами в UML являются (укажите лишнее)
Е) действующее лицо
Ж) вариант использования
11. Если классификатор A является обобщением классификатора B, то
A) Всякий экземпляр классификатора A является экземпляром классификатора B
Б) Всякий экземпляр классификатора B является экземпляром классификатора A
В) Всякий прямой экземпляр классификатора B является косвенным экземпляром классификатора A
Г) Всякий косвенный экземпляр классификатора A является прямым экземпляром классификатора B
12. Если A, B, C, D — классификаторы, то следующие системы обобщений являются допустимыми
13. Если A, B, C, D — классификаторы, то следующие системы обобщений являются недопустимыми
14. Если имя атрибута классификатора подчеркнуто, то
А) этот атрибут не меняет своего значения
Б) этот атрибут является атрибутом объекта
В) все экземпляры данного классификатора имеют одно значение этого атрибута
Г) этот атрибут является ключевым
15. Кратность в UML является свойством (укажите лишнее)
Б) полюса ассоциации
16. Видимость в UML не является свойством
Б) полюса ассоциации
7. Имени в UML не имеют
18. Стандартными разделами класса в UML не являются
В) раздел атрибутов
19. Обязательными разделами класса в UML являются
В) раздел атрибутов
20. Стереотип не может быть указан для
В) Действующего лица
21. Если для операции класса указано свойство
А) операция реализует запрос к базе данных
Б) операция не имеет побочных эффектов
В) операция не может выполняться параллельно с другими операциями
А) образуется из имен ассоциированных классов
Б) образуется из имен ролей ассоциированных классов
В) указывается в виде текста над линией ассоциации
А) ни одного экземпляра классификатора на данном полюсе ассоциации не участвует в связях, порождаемых ассоциацией
Б) по меньшей мере один экземпляр классификатора на данном полюсе ассоциации участвует в связях, порождаемых ассоциацией
В) неопределенное количество экземпляров классификатора на данном полюсе ассоциации участвует в связях, порождаемых ассоциацией
24. Если кратность полюса ассоциации задана символами 0..1, то это означает, что
А) ни одного экземпляра классификатора на данном полюсе ассоциации не участвует в связях, порождаемых ассоциацией
Б) хотя бы один экземпляр классификатора на данном полюсе ассоциации участвует в связях, порождаемых ассоциацией
В) не более одного экземпляра классификатора на данном полюсе ассоциации участвует в связях, порождаемых ассоциацией
25. Если в ассоциации классификаторов A и B на полюсе А указан значок композиции (закрашенный ромбик), то это означает что
A) экземпляры класса B порождаются экземплярами класса A
Б) время жизни экземпляров класса B совпадает с временем жизни экземпляров класса A B) всякий прямой экземпляр класса B является косвенным экземпляром класса A
26. Если A, B, C, D — классы, то следующие системы композиций являются допустимыми:
27. Если A, B, C, D — классы, то следующие системы композиций являются недопустимыми
28. Если у полюса ассоциации указан квалификатор с кратностью 0..1, то это означает что A) кратность полюса равна 1
Б) кратность полюса равна 0
В) кратность полюса равна *
Г) кратность полюса неизвестна
29. На рисунке C является
A) именем ассоциации A–B
Б) примечанием к ассоциации A–B
В) классом ассоциации A–B
A) A является обобщением B
Б) A является композицией B
В) модель недопустима
33. На рисунке С является
35. Отношение обобщения невозможно между
Г) вариантами использования
Д) действующими лицами
36. Отношение ассоциации невозможно между
Г) вариантами использования
37. Отношение зависимости невозможно между
Г) вариантами использования
38. На канонических диаграммах классов не используются
39. На канонических диаграммах объектов используются
40. На канонических диаграммах компонентов не используются
41. На канонических диаграммах размещения не используются
Тема 4. Моделирование поведения
1. На диаграмме взаимодействия UML применяют следующие основные типы сущностей
Б) Варианты использования
В) Действующие лица
2. На диаграмме состояний UML применяют следующие основные типы сущностей
Б) Варианты использования
В) Действующие лица
3. На диаграмме деятельности UML применяют следующие основные типы сущностей
Б) Варианты использования
В) Действующие лица
4. На диаграмме последовательности UML применяют следующие основные типы сущностей
Б) Варианты использования
В) Действующие лица
5. На диаграмме кооперации (коммуникации) UML применяют следующие основные типы сущностей
Б) Варианты использования
В) Действующие лица
6. Графический комментарий «плавательные дорожки» применяется на
A) Диаграммах классов
Б) Диаграммах использования
В) Диаграммах состояний
Г) Диаграммах деятельности
7. На рисунке следующие сообщения являются недопустимыми на канонической диаграмме последовательности
8. На рисунке объект А
9. На рисунке объект В
10. На рисунке объект С
11. Если все простые состояния достижимы, и машина состояний завершает свою работу, то любое простое состояние обязательно имеет
А) Хотя бы один входящий переход
Б) Хотя бы один исходящий переход
В) Не более одного входящего перехода
Г) Не более одного исходящего перехода
12. Простое состояние не может иметь
А) Двух или более входящих переходов по одному событию
Б) Двух или более исходящих переходов по одному событию
В) Двух или более входящих спонтанных переходов без сторожевого условия
Г) Двух или более исходящих спонтанных переходов без сторожевого условия
13. Простой (несегментированный) спонтанный переход обязательно имеет
А) Ровно одно исходное состояние
Б) Ровно одно целевое состояние
В) Ровно одно событие перехода
Г) Ровно одно сторожевое условие
Д) Ровно одно действие на переходе
14. Сегментированный спонтанный переход может иметь
А) несколько начальных состояний
Б) несколько конечных состояний
В) несколько событий перехода
Г) несколько сторожевых условий
Д) несколько действий на переходе
15. Простой (несегментированный) переход по событию может иметь
А) несколько исходных состояний
Б) несколько целевых состояний
В) несколько событий перехода
Г) несколько сторожевых условий
Д) несколько действий на переходе
16. Простой (несегментированный) переход по событию обязательно имеет
А) ровно одно исходное состояние
Б) ровно одно целевое состояние
В) ровно одно событие перехода
Г) ровно одно сторожевое условие
Д) ровно одно действие на переходе
7. Модель считается противоречивой, если множество исходящих переходов простого состояния
Б) содержит переходы с разными событиями и совместными сторожевыми условиями
В) содержит переходы с одинаковыми событиями и совместными сторожевыми условиями
Г) содержит переходы с разными событиями и несовместными сторожевыми условиями Д) содержит переходы с одинаковыми событиями и несовместными сторожевыми условиями
18. Простое состояние не может содержать
А) действие при входе
Б) действие при выходе
В) сторожевое условие
Г) внутренний переход
19. Модель считается противоречивой, если для данного события множество исходящих переходов по этому событию с выполненными сторожевыми условиями
Б) содержит один элемент
В) содержит более одного элемента
20. Считается, что сторожевое условие else выполнено, если
А) все сторожевые условия на исходящих переходах для данного события из данного состояния выполнены
Б) все сторожевые условия на исходящих переходах для данного события из данного состояния не выполнены
В) хотя бы одно сторожевое условие на исходящих переходах для данного события из данного состояния выполнено
Г) хотя бы одно сторожевое условие на исходящих переходах для данного события из данного состояния не выполнено
21. При изображении сегментированного перехода на диаграмме состояний сегменты можно разделять следующими значками (укажите лишнее)
22. Корневой сегмент сегментированного перехода может содержать
Б) сторожевое условие
В) действие на переходе
23. Листовой сегмент сегментированного перехода может содержать
Б) сторожевое условие
В) действие на переходе
24. Сторожевые условия вдоль пути в сегментированном переходе соединены операцией А) ИЛИ
25. Если машина состояний на рисунке находится в состоянии 1 и происходит событие e1 и при этом условия x1 и x2 оба не выполняются, то
26. Если машина состояний на рисунке находится в состоянии 1 и происходит событие e1 и при этом условия x1 и x2 оба выполняются, то
27. Если машина состояний на рисунке находится в состоянии 1 и происходит событие e1, и при этом условие x1 выполняется, а условие x2 не выполняется, то
28. Если машина состояний на рисунке находится в состоянии 1 и происходит событие e2 и при этом условия x1 и x2 оба не выполняются, то
29. Если машина состояний на рисунке находится в состоянии 1 и происходит событие e2 и при этом условия x1 и x2 оба выполняются, то
30. Если машина состояний на рисунке находится в состоянии 1 и приходит последовательность событий e1, e2, то машина перейдет в состояние
31. Если машина состояний на рисунке находится в состоянии 1 и приходит последовательность событий e1, e2, e2, e1, то машина перейдет в состояние
32. Если машина состояний на рисунке находится в состоянии 1 и приходит последовательность событий e1, e1, e2, e2, то машина перейдет в состояние
33. Если машина состояний на рисунке находится в состоянии 1 и приходит последовательность событий e1, e1, e2, e2, e1, e1, e2, e2, то машина перейдет в состояние
34. В UML используются следующие типы событий (укажите лишнее)
Г) событие создания
Д) событие изменения
35. Событие таймера
А) возникает в заданный момент времени
Б) возникает по истечении заданного интервала времени
В) возникает периодически с заданным периодом
36. Событие изменения
А) возникает в заданный момент времени
Б) возникает при любом изменении значения заданного логического выражения
В) возникает при определенном изменении значения заданного логического выражения
37. Действие в UML может быть одного из следующих типов (укажите лишнее)
А) присваивание значения
В) создание объекта
Г) уничтожение объекта
Д) возврат значения
38. Если некоторая активность может быть прервана событием и может продолжаться неограниченно долго, то такая активность
А) называется в UML действием
Б) называется в UML деятельностью
В) не определяется и не используется в UML
39. Если некоторая активность не может быть прервана событием и может продолжаться неограниченно долго, то такая активность
А) называется в UML действием
Б) называется в UML деятельностью
В) не определяется и не используется в UML
40. Если некоторая активность не может быть прервана событием и не может продолжаться неограниченно долго, то такая активность
А) называется в UML действием
Б) называется в UML деятельностью
В) не определяется и не используется в UML
45. На рисунке допустимой последовательностью передачи сообщений является
46.На рисунке найдется допустимая последовательность передачи сообщений, если удалить сообщение
47. Дана машина состояний. Нарисуйте эквивалентную машину без составных состояний
48. Дана машина состояний. Нарисуйте эквивалентную машину без составных состояний
49. На канонических диаграммах деятельности не используются
50. На канонических диаграммах последовательности не используются
51. На канонических диаграммах кооперации не используются
52. На канонических диаграммах состояний не используются
Тема 5. Дисциплина моделирования
1. Графическая нотация UML 2 использует графический элемент, который не используется в UML 1.x
2. В графической нотации UML при изображении фигур имеет значение
В) Соотношение геометрических параметров (например, отношение длины к ширине)
Г) Взаимное положение фигур
3. В графической нотации UML при изображении линий имеет значение
В) Тип (прямая, ломаная, кривая)
Г) Стиль (сплошная, пунктирная, волнистая)
4. В графической нотации UML при изображении текстов имеет значение
A) Гарнитура шрифта (Times New Roman …)
Б) Начертание шрифта (полужирный …)
В) Цвет шрифта (черный …)
Г) Кегль шрифта (10 пунктов …)
5. Система программирования обязательно содержит
А) Транслятор языка программирования
Б) Графический редактор диаграмм
В) Символьный отладчик
6. Интегрированная среда разработки обязательно содержит
А) Транслятор языка программирования
Б) Графический редактор диаграмм
В) Символьный отладчик
7. CASE-средство обязательно содержит
А) Транслятор языка программирования
Б) Графический редактор диаграмм
В) Символьный отладчик
8. Приведенная на рисунке фигура является
9. Приведенная на рисунке фигура является
10. Приведенная на рисунке фигура является
11. Приведенная на рисунке фигура является
12. На обзорной диаграмме взаимодействия не используется значок
13. На диаграмме состояний не используется значок
14. На диаграмме деятельности не используется значок



































