
28
композиции
,
объект
-
часть
может
принадлежать
только
единственному
целому
,
и
,
кроме
того
,
как
правило
,
жизненный
цикл
частей
совпадает
с
циклом
целого
:
они
живут
и
умирают
вместе
с
ним
.
Любое
удаление
целого
распространяется
на
его
части
.
Такое
каскадное
удаление
нередко
рассматривается
как
часть
определения
агрегации
,
однако
оно
всегда
подразумевается
в
том
случае
,
когда
множественность
роли
составляет
1
..
1
;
например
,
если
необходимо
удалить
Клиента
,
то
это
удаление
должно
распространиться
и
на
Заказы
(
и
,
в
свою
очередь
,
на
Строки
заказа
).
Обобщения
С
помощью
обобщений
(generalization)
показывают
связи
наследования
между
двумя
классами
.
Большинство
объектно
-
ориентированных
языков
непосредственно
поддерживают
концепцию
наследования
.
Она
позволяет
одному
классу
наследовать
все
атрибуты
,
операции
и
связи
другого
.
На
языке
UML
связи
наследования
называют
обобщениями
и
изображают
в
виде
стрелок
от
класса
-
потомка
к
классу
-
предку
:
Student
- name
- address
- studentID
+ // get tuition()
+ // add schedule()
+ // delete schedule()
(from Design Model)
FulltimeStudent
- gradDate
(from Design Model)
ParttimeStudent
- maxNumCourses
(from Design Model)
Рис
.
1
.
1
2.
Обобщение

29
Помимо
наследуемых
,
каждый
подкласс
имеет
свои
собственные
уникальные
атрибуты
,
операции
и
связи
.
Множественность
Множественность
(multiplicity)
показывает
,
сколько
экземпляров
одного
класса
взаимодействуют
с
помощью
этой
связи
с
одним
экземпляром
другого
класса
в
данный
момент
времени
.
Например
,
при
разработке
системы
регистрации
курсов
в
университете
можно
определить
классы
Course (
курс
)
и
Student
(
студент
).
Между
ними
установлена
связь
:
у
курсов
могут
быть
студенты
,
а
у
студентов
–
курсы
.
Вопросы
,
на
который
должен
ответить
параметр
множественности
: «
Сколько
курсов
студент
может
посещать
в
данный
момент
?
Сколько
студентов
может
за
раз
посещать
один
курс
?»
Так
как
множественность
дает
ответ
на
оба
эти
вопроса
,
её
индикаторы
устанавливаются
на
обоих
концах
линии
связи
.
В
примере
регистрации
курсов
мы
решили
,
что
один
студент
может
посещать
от
нуля
до
четырех
курсов
,
а
один
курс
могут
слушать
от
1
0
до
20
студентов
.
На
диаграмме
классов
это
можно
изобразить
,
как
показано
на
рис
.
1
.
1
3.
Course
Student
1
0..20
0..4
1
0..20
0..4
Рис
.
1
.
1
3.
Множественность
В
языке
UML
приняты
следующие
нотации
для
обозначения
множественности
:
Множественность
Значение
0..*
Ноль
или
больше
1
..*
Один
или
больше
0..
1
Ноль
или
один
1
..
1
(
сокращенная
запись
:
1
)
Ровно
один

30
Имена
связей
Связи
можно
уточнить
с
помощью
имен
связей
или
ролевых
имен
.
Имя
связи
–
это
обычно
глагол
или
глагольная
фраза
,
описывающая
,
зачем
она
нужна
.
Например
,
между
классом
Person (
человек
)
и
классом
Company
(
компания
)
может
существовать
ассоциация
.
Можно
задать
в
связи
с
этим
вопрос
,
является
ли
объект
класса
Person
клиентом
компании
,
её
сотрудником
или
владельцем
?
Чтобы
определить
это
,
ассоциацию
можно
назвать
«employs» (
нанимает
):
Company
Person
Employs
Рис
.
1
.
1
4.
Имя
связи
Имена
у
связей
определять
не
обязательно
.
Обычно
это
делают
,
если
причина
создания
связи
не
очевидна
.
Имя
показывают
около
линии
соответствующей
связи
.
Роли
Ролевые
имена
применяют
в
связях
ассоциации
или
агрегации
вместо
имен
для
описания
того
,
зачем
эти
связи
нужны
.
Возвращаясь
к
примеру
с
классами
Person
и
Company,
можно
сказать
,
что
класс
Person
играет
роль
сотрудника
класса
Company.
Ролевые
имена
–
это
обычно
имена
существительные
или
основанные
на
них
фразы
,
их
показывают
на
диаграмме
рядом
с
классом
,
играющим
соответствующую
роль
.
Как
правило
,
пользуются
или
ролевым
именем
,
или
именем
связи
,
но
не
обоими
сразу
.
Как
и
имена
связей
,
ролевые
имена
не
обязательны
,
их
дают
,
только
если
цель
связи
не
очевидна
.
Пример
ролей
приводится
ниже
:
Company
Person
+Employee
+Employer
Рис
.
1
.
1
5.
Ролевые
имена

3
1
1.6.
Диаграммы
состояний
Диаграммы
состояний
определяют
все
возможные
состояния
,
в
которых
может
находиться
конкретный
объект
,
а
также
процесс
смены
состояний
объекта
в
результате
наступления
некоторых
событий
.
Существует
много
форм
диаграмм
состояний
,
незначительно
отличающихся
друг
от
друга
семантикой
.
Наиболее
распространенная
форма
,
используемая
в
объектно
-
ориентированных
методах
,
впервые
применялась
в
методе
ОМТ
и
впоследствии
была
адаптирована
Гради
Бучем
.
На
рис
.
1
.
1
6
приводится
пример
диаграммы
состояний
для
банковского
счета
.
Из
данной
диаграммы
видно
,
в
каких
состояниях
может
существовать
счет
.
Можно
также
видеть
процесс
перехода
счета
из
одного
состояния
в
другое
.
Например
,
если
клиент
требует
закрыть
открытый
счет
,
он
переходит
в
состояние
«
Закрыт
».
Требование
клиента
называется
событием
(event),
именно
такие
события
и
вызывают
переход
из
одного
состояния
в
другое
.
Рис
.
1
.
1
6.
Диаграмма
состояний
для
класса
Account
Открыт
Превышение
кредита
entry:
Временно
заморозить
счет
do:
Послать
уведомление
клиенту
exit:
Разморозить
счет
Закрыт
entry:
Выдать
кредитную
карту
Снятие
денег
[
отрицательный
баланс
]
Вклад
денег
[
положительный
баланс
]
Клиент
требует
закрыть
счет
/
Сохранить
дату
закрытия
счета
Проверка
баланса
[
отрицательный
баланс
в
течение
более
30
дней
]

32
Если
клиент
снимает
деньги
с
открытого
счета
,
он
может
перейти
в
состояние
«
Превышение
кредита
».
Это
происходит
,
только
если
баланс
по
этому
счету
меньше
ноля
,
что
отражено
условием
[
отрицательный
баланс
]
на
нашей
диаграмме
.
Заключенное
в
квадратных
скобках
условие
(guard condition)
определяет
,
когда
может
или
не
может
произойти
переход
из
одного
состояния
в
другое
.
На
диаграмме
имеются
два
специальных
состояния
–
начальное
(start)
и
конечное
(stop).
Начальное
состояние
выделено
черной
точкой
,
оно
соответствует
состоянию
объекта
,
когда
он
только
что
был
создан
.
Конечное
состояние
обозначается
черной
точкой
в
белом
кружке
,
оно
соответствует
состоянию
объекта
непосредственно
перед
его
уничтожением
.
На
диаграмме
состояний
может
быть
одно
и
только
одно
начальное
состояние
.
В
то
же
время
,
может
быть
столько
конечных
состояний
,
сколько
вам
нужно
,
или
их
может
не
быть
вообще
.
Когда
объект
находится
в
каком
-
то
конкретном
состоянии
,
могут
выполняться
различные
процессы
.
В
нашем
примере
при
превышении
кредита
клиенту
посылается
соответствующее
сообщение
.
Процессы
,
происходящие
,
когда
объект
находится
в
определенном
состоянии
,
называются
действиями
(actions).
С
состоянием
можно
связывать
данные
пяти
типов
:
деятельность
,
входное
действие
,
выходное
действие
,
событие
и
история
состояния
.
Рассмотрим
каждый
из
них
в
контексте
диаграммы
состояний
для
класса
Account
системы
ATM.
Деятельность
Деятельностью
(activity)
называется
поведение
,
реализуемое
объектом
,
пока
он
находится
в
данном
состоянии
.
Например
,
когда
счет
находится
в
состоянии
«
Закрыт
»,
происходит
возврат
кредитной
карточки
пользователю
.
Деятельность
–
это
прерываемое
поведение
.
Оно
может
выполняться
до
своего
завершения
,
пока
объект
находится
в
данном
состоянии
,
или
может
быть
прервано
переходом
объекта
в
другое
состояние
.
Деятельность
изображают
внутри
самого
состояния
,
ей
должно
предшествовать
слово
do (
делать
)
и
двоеточие
.