
83
классами
построим
три
новых
диаграмм
классов
в
кооперации
Register for
Courses
пакета
Use-Case Realization – Register for Courses (
рис
. 3.
1
4 – 3.
1
6).
Рис
. 3.
1
4.
Диаграмма
Entity Classes (
классы
-
сущности
)
Добавлены
два
новых
класса
–
подклассы
FulltimeStudent (
студент
очного
отделения
)
и
ParttimeStudent (
студент
вечернего
отделения
).
Рис
. 3.
1
5.
Диаграмма
CourseOfferingInfo
FulltimeStudent
gradDate
<<entity>>
ParttimeStudent
maxNumCourses
<<entity>>
Student
name
address
studentID
<<entity>>
Schedule
<<entity>>
0..n
1
0..n
1
CourseOffering
<<entity>>
0..n
0..4
0..n
+primaryCourses
0..4
0..n
0..2
0..n
+alternateCourses
0..2
Schedule
<<entity>>
CourseOffering
<<entity>>
0..n
0..4
0..n
+primaryCourses
0..4
0..n
0..2
0..n
+alternateCourses
0..2
PrimaryScheduleOfferingInfo
grade
// is enrolled in?()
// mark as enrolled in()
// mark as committed()
<<entity>>
ScheduleOfferingInfo
status
// mark as selected()
// mark as cancelled()
// is selected?()
<<entity>>

84
На
данной
диаграмме
показаны
классы
ассоциаций
,
описывающие
связи
между
классами
Schedule
и
CourseOffering
и
добавлен
суперкласс
ScheduleOfferingInfo.
Данные
и
операции
,
содержащиеся
в
этом
классе
(status –
курс
включен
в
график
или
отменен
),
относятся
как
к
основным
,
так
и
к
альтернативным
курсам
,
в
то
время
как
оценка
(grade)
и
окончательное
включение
курса
в
график
могут
иметь
место
только
для
основных
курсов
.
Рис
. 3.
1
6.
Полная
диаграмма
классов
VOPC (
без
атрибутов
и
операций
)
Создание
ассоциаций
Ассоциации
создают
непосредственно
на
диаграмме
классов
.
Панель
инструментов
диаграммы
классов
содержит
кнопки
для
создания
как
одно
-
,
так
и
двунаправленных
ассоциаций
.
Чтобы
на
диаграмме
классов
создать
ассоциацию
:
1
.
Нажмите
на
панели
инструментов
кнопку
Association.
2.
Проведите
мышью
линию
ассоциации
от
одного
класса
к
другому
.
Чтобы
задать
возможности
навигации
по
ассоциации
:
1
.
Щелкните
правой
кнопкой
мыши
на
связи
с
того
конца
,
на
котором
хотите
показать
стрелку
.
2.
В
открывшемся
меню
выберите
пункт
Navigable.
PrimaryScheduleOfferingInfo
<<entity>>
ScheduleOfferingInfo
<<entity>>
CourseOffering
<<entity>>
RegisterForCoursesForm
<<boundary>>
Student
<<entity>>
Schedule
<<entity>>
0..n
1
0..n
1
0..n
0..4
0..n
+primaryCourses
0..4
0..n
0..2
0..n
+alternateCourses
0..2
RegistrationController
<<control>>
1
1
1
1
0..
1
0..
1
0..
1
+registrant
0..
1
0..
1
0..
1
0..
1
+currentSchedule
CourseCatalogSystem
<<boundary>>
0..n
1
0..n
1
FulltimeStudent
<<entity>>
ParttimeStudent
<<entity>>

85
Чтобы
создать
рефлексивную
ассоциацию
:
1
.
На
панели
инструментов
диаграммы
нажмите
кнопку
Association.
2.
Проведите
линию
ассоциации
от
класса
до
какого
-
нибудь
места
вне
класса
.
3.
Отпустите
кнопку
мыши
.
4.
Проведите
линию
ассоциации
назад
к
классу
.
Создание
агрегаций
1
.
Нажмите
кнопку
Aggregation
панели
инструментов
.
2.
Проведите
линию
агрегации
от
класса
-
части
к
целому
.
Чтобы
поместить
на
диаграмму
классов
рефлексивную
агрегацию
:
1
.
На
панели
инструментов
диаграммы
нажмите
кнопку
Aggregation.
2.
Проведите
линию
агрегации
от
класса
до
какого
-
нибудь
места
вне
класса
.
3.
Отпустите
кнопку
мыши
.
4.
Проведите
линию
агрегации
назад
к
классу
.
Создание
обобщений
При
создании
обобщения
может
потребоваться
перенести
некоторые
атрибуты
или
операции
из
одного
класса
в
другой
.
Если
,
например
,
понадобится
перенести
их
из
подкласса
в
суперкласс
Employee,
в
браузере
для
этого
достаточно
просто
перетащить
атрибуты
или
операции
из
одного
класса
в
другой
.
Не
забудьте
удалить
другую
копию
атрибута
из
второго
подкласса
,
если
он
имеется
.
Чтобы
поместить
обобщение
на
диаграмму
классов
:
1
.
Нажмите
кнопку
Generalization
панели
инструментов
.
2.
Проведите
линию
обобщения
от
подкласса
к
суперклассу
.
Спецификации
связей
Спецификации
связей
касаются
имен
ассоциаций
,
ролевых
имена
,
множественности
и
классов
ассоциаций
.
Чтобы
задать
множественность
связи
:
1
.
Щелкните
правой
кнопкой
мыши
на
одном
конце
связи
.
2.
В
открывшемся
меню
выберите
пункт
Multiplicity.
3.
Укажите
нужную
множественность
.
4.
Повторите
то
же
самое
для
другого
конца
связи
.

86
Чтобы
задать
имя
связи
:
1
.
Выделите
нужную
связь
.
2.
Введите
ее
имя
.
Чтобы
задать
связи
ролевое
имя
:
1
.
Щелкните
правой
кнопкой
мыши
на
ассоциации
с
нужного
конца
.
2.
В
открывшемся
меню
выберите
пункт
role Name.
3.
Введите
ролевое
имя
.
Чтобы
задать
элемент
связи
(
класс
ассоциаций
):
1
.
Откройте
окно
спецификации
требуемой
связи
.
2.
Перейдите
на
вкладку
Detail.
3.
Задайте
элемент
связи
в
поле
Link Element.
Задание
для
самостоятельной
работы
Выполнить
анализ
варианта
использования
Close Registration
и
построить
соответствующие
диаграммы
взаимодействия
и
классов
.
3.6.
Проектирование
системы
3.6.1.
Проектирование
архитектуры
Цели
проектирования
архитектуры
системы
:
•
анализ
взаимодействий
между
классами
анализа
,
выявление
подсистем
и
интерфейсов
;
•
уточнение
архитектуры
с
учетом
возможностей
повторного
использования
;
•
идентификация
архитектурных
решений
и
механизмов
,
необходимых
для
проектирования
системы
.
Вводятся
глобальные
пакеты
:
•
базисные
(foundation)
классы
(
списки
,
очереди
и
т
.
д
.);
•
обработчики
ошибок
(error handling classes);
•
математические
библиотеки
;
•
утилиты
;
•
библиотеки
других
поставщиков
.
Определяются
проектные
классы
(design classes):

87
•
класс
анализа
отображается
в
проектный
класс
,
если
он
простой
или
представляет
единственную
логическую
абстракцию
;
•
сложный
класс
анализа
может
быть
разбит
на
несколько
классов
,
преобразован
в
пакет
или
в
подсистему
.
Примеры
возможных
подсистем
:
•
классы
,
обеспечивающие
сложный
комплекс
услуг
(
например
,
обеспечение
безопасности
и
защита
);
•
граничные
классы
,
реализующие
сложный
пользовательский
интерфейс
или
интерфейс
с
внешними
системами
;
•
различные
продукты
:
коммуникационное
ПО
(middleware,
поддержка
COM/CORBA),
доступ
к
базам
данных
,
типы
и
структуры
данных
(
стеки
,
списки
,
очереди
),
общие
утилиты
(
математические
библиотеки
),
различные
прикладные
продукты
.
Принятие
решения
о
преобразовании
класса
в
подсистему
определяется
опытом
и
знаниями
архитектора
проекта
.
Соглашения
по
проектированию
интерфейсов
:
•
Имя
интерфейса
:
короткое
(
одно
-
два
слова
),
отражающее
его
роль
в
системе
.
•
Описание
интерфейса
:
должно
отражать
его
обязанности
(
размер
–
небольшой
абзац
).
•
Описание
операций
:
имя
,
отражающее
результат
операции
,
ключевые
алгоритмы
,
возвращаемое
значение
,
параметры
с
типами
.
•
Документирование
интерфейса
:
характер
использования
операций
и
порядок
их
выполнения
(
показывается
с
помощью
диаграмм
последовательности
),
тестовые
планы
и
сценарии
и
так
далее
.
Вся
эта
информация
объединяется
в
специальный
пакет
со
стереотипом
<<subsystem>>,
который
содержит
элементы
,
образующие
подсистему
,
диаграммы
последовательности
и
/
или
кооперативные
диаграммы
,
описывающие
взаимодействие
элементов
при
реализации
операций
интерфейса
,
и
другие
диаграммы
.