
78
:CourseOffering
: Student
: RegisterForCourses
Form
: Registration
Controller
:Schedule
:Student
Студент
хочет
удалить
график
Студент
удаляется
из
списков
курсов
,
на
которые
он
был
записан
1
: // delete schedule( )
5: // request schedule delete confirmation( )
6: // confirm schedule deletion( )
4: // display schedule(Schedule)
2: // get current schedule(Student, forSemester)
7: // delete current schedule( )
3: // get schedule(forSemester)
8: // delete schedule(forSemester)
9: // delete( )
1
0: // remove student(Schedule)
Система
запрашивает
подтверждение
Рис
. 3.
1
0.
Диаграмма
последовательности
Register for Courses – Basic
Flow (Delete Schedule)
Соотнесение
сообщений
с
операциями
1
.
Щелкните
правой
кнопкой
на
сообщении
1
, // register for courses.
2.
В
открывшемся
меню
выберите
пункт
<new operation>.
Появится
окно
спецификации
операции
.
3.
В
поле
имени
оставьте
имя
сообщения
– // register for courses.
4.
Нажмите
на
кнопку
ОК
,
чтобы
закрыть
окно
спецификации
операции
и
вернуться
на
диаграмму
.
5.
Повторите
действия
1
– 4,
пока
не
соотнесете
с
операциями
все
остальные
сообщения
.

79
Выполните
аналогичные
действия
для
создания
диаграмм
последовательности
,
показанных
на
рис
. 3.8 – 3.
11
.
Обратите
внимание
,
что
на
диаграмме
рис
. 3.
11
появился
объект
нового
класса
PrimarySheduleOfferingInfo (
класса
ассоциаций
,
описывающего
связь
между
классами
Shedule
и
OfferingInfo),
который
нужно
предварительно
создать
.
:PrimarySchedule
OfferingInfo
: Course
Offering
: Student
:RegisterFor
CoursesForm
:Registration
Controller
:Schedule
:Student
Повторяется
для
каждого
курса
из
графика
1
: // submit schedule( )
2: // submit schedule( )
4: // submit( )
7: // still open?( )
9: // add student(Schedule)
6: // has pre-requisites
(CourseOffering)
8: // any conflicts?( )
5: // is selected?( )
1
0: // mark as enrolled in( )
3: // save( )
[ has pre-requisites, course offering
open, and no schedule conflicts ]
[ is selected ]
Рис
. 3.
11
.
Диаграмма
последовательности
Register for Courses – Basic
Flow (Submit Schedule)
Создание
примечаний
Чтобы
поместить
на
диаграмму
примечание
:
1
.
Нажмите
на
панели
инструментов
кнопку
Note.
2.
Щелкните
мышью
в
том
месте
диаграммы
,
куда
собираетесь
поместить
примечание
.
3.
Выделив
новое
примечание
,
введите
туда
текст
.

80
4.
Чтобы
прикрепить
примечание
к
элементу
диаграммы
,
на
панели
инструментов
нажмите
кнопку
Anchor Notes To Item (
Прикрепить
примечания
к
элементу
).
5.
Нажав
левую
кнопку
мыши
,
проведите
указатель
от
примечания
до
элемента
диаграммы
,
с
которым
оно
будет
связано
.
Между
примечанием
и
элементом
возникнет
штриховая
линия
.
6.
Чтобы
создать
примечание
-
ссылку
на
другую
диаграмму
(
как
это
сделано
на
диаграмме
рис
. 3.7
и
других
),
создайте
пустое
примечание
(
без
текста
)
и
перетащите
на
него
из
браузера
нужную
диаграмму
.
Кроме
примечаний
,
на
диаграмму
можно
поместить
также
и
текстовую
область
.
С
ее
помощью
можно
,
например
,
добавить
к
диаграмме
заголовок
.
Чтобы
поместить
на
диаграмму
текстовую
область
:
1
.
На
панели
управления
нажмите
кнопку
Text Box.
2.
Щелкните
мышью
внутри
диаграммы
,
чтобы
поместить
туда
текстовую
область
.
3.
Выделив
эту
область
,
введите
в
неё
текст
.
Создание
кооперативной
диаграммы
Для
создания
кооперативной
диаграммы
достаточно
открыть
диаграмму
последовательности
и
нажать
клавишу
F5.
Определение
обязанностей
(responsibilities),
атрибутов
и
ассоциаций
классов
Обязанность
(responsibility) –
действие
,
которое
объект
обязан
выполнять
по
запросу
других
объектов
.
Обязанность
преобразуется
в
одну
или
более
операций
класса
на
шаге
проектирования
.
Обязанности
определяются
,
исходя
из
сообщений
на
диаграммах
взаимодействия
,
и
документируются
в
классах
в
виде
операций
«
анализа
»,
которые

8
1
появляются
там
автоматически
в
процессе
построения
диаграмм
взаимодействия
(
соотнесения
сообщений
с
операциями
).
Так
,
диаграмма
классов
VOPC (classes only) (
рис
. 3.6)
после
построения
диаграмм
взаимодействия
в
упражнении
8
должна
принять
вид
,
изображенный
на
рис
. 3.
1
2.
Рис
. 3.
1
2.
Диаграмма
классов
VOPC (classes only)
с
операциями
«
анализа
»
Атрибуты
классов
анализа
определяются
,
исходя
из
знаний
о
предметной
области
,
требований
к
системе
и
глоссария
.
Упражнение
9.
Добавление
атрибутов
к
классам
Настройка
1
.
В
меню
модели
выберите
пункт
Tools > Options.
2.
Перейдите
на
вкладку
Diagram.
3.
Убедитесь
,
что
переключатель
Show All Attributes
помечен
.
4.
Убедитесь
,
что
переключатели
Suppress Attributes
и
Suppress
Operations
не
помечены
.
CourseOffering
// add student()
// remove student()
// close registration()
// get number of students()
// cancel()
// still open?()
// add professor()
// close()
// save()
<<entity>>
PrimaryScheduleOfferingInfo
// is selected?()
// mark as enrolled in()
<<entity>>
RegisterForCoursesForm
// submit schedule()
// display course offerings()
// update schedule()
// delete schedule()
// confirm schedule deletion()
// request schedule delete confirmation()
// display schedule()
// register for courses()
// display possible operations()
// save schedule()
// create schedule()
// select 4 primary and 2 alternate offerings()
// display blank schedule()
// update offering selections()
<<boundary>>
CourseCatalogSystem
// get course offerings()
<<boundary>>
RegistrationController
// get course offerings()
// get current schedule()
// delete current schedule()
// submit schedule()
// is registration open?()
// save schedule()
// create schedule with offerings()
// update schedule with new selections()
<<control>>
Student
// get tuition()
// add schedule()
// get schedule()
// delete schedule()
// has pre-requisites()
<<entity>>
Schedule
// commit()
// select alternate()
// remove offering()
// level()
// cancel()
// get cost()
// delete()
// submit()
// save()
// any conflicts?()
// create with offerings()
// update with new selections()
<<entity>>

82
Добавление
атрибутов
1
.
Щелкните
правой
кнопкой
мыши
на
классе
Student.
2.
В
открывшемся
меню
выберите
пункт
New Attribute.
3.
Введите
новый
атрибут
address
4.
Нажмите
клавишу
Enter.
5.
Повторите
шаги
1
– 4,
добавив
атрибуты
name
и
studentID.
6.
Добавьте
атрибуты
к
классам
CourseOffering, Shedule
и
PrimaryScheduleOfferingInfo,
как
показано
на
рис
. 3.
1
3.
Рис
. 3.
1
3.
Классы
с
операциями
«
анализа
»
и
атрибутами
Связи
между
классами
(
ассоциации
)
определяются
на
основе
диаграмм
взаимодействия
.
Если
два
объекта
взаимодействуют
(
обмениваются
сообщениями
),
между
ними
должна
существовать
связь
(
путь
взаимодействия
).
Для
ассоциаций
задаются
множественность
и
,
возможно
,
направление
навигации
.
Могут
использоваться
множественные
ассоциации
,
агрегации
и
классы
ассоциаций
.
Упражнение
10.
Добавление
связей
Добавим
связи
к
классам
,
принимающим
участие
в
варианте
использования
Register for Courses.
Для
отображения
связей
между
Schedule
semester
// commit()
// select alternate()
// remove offering()
// level()
// cancel()
// get cost()
// delete()
// submit()
// save()
// any conflicts?()
// create with offerings()
// update with new selections()
<<entity>>
PrimaryScheduleOfferingInfo
grade
// is selected?()
// mark as enrolled in()
<<entity>>
Student
address
name
studentID
// get tuition()
// add schedule()
// get schedule()
// delete schedule()
// has pre-requisites()
<<entity>
>
CourseOffering
/ numStudents : Int
days : Enum
endTime : Time
number : String = "
1
00"
startTime : Time
// add student()
// remove student()
// close registration()
// get number of students()
// cancel()
// still open?()
// add professor()
// close()
// save()
<<entity>>