Моделирования uml


Download 1.84 Mb.
Pdf ko'rish
bet82/115
Sana16.06.2023
Hajmi1.84 Mb.
#1489923
1   ...   78   79   80   81   82   83   84   85   ...   115
Bog'liq
ivanov novikov unificirovannii jazik modelirovanija uml 2011


разделе, позволяют задавать структуру автомата. Но основная 
семантическая нагрузка при описании поведения падает на переходы 
различных типов. Помимо структурных составляющих — исходного 
и целевого состояний — переход может быть нагружен событием 
перехода, сторожевым условием и действиями на переходе.
В UML используются четыре типа событий: 
- событие вызова,
- событие сигнала,
- событие таймера, 
- событие изменения. 
Событие вызова (call event) — это событие, возникающее при 
вызове метода класса.
Если событие вызова используется как событие перехода в 
машине состояний, описывающей поведение класса, то класс должен 
иметь соответствующую операцию. Событие вызова — наиболее 
часто используемый тип событий перехода. В большей части 
рассмотренных 
примеров 
в 
качестве 
событий 
перехода 
использовались именно события вызова. Поскольку событие 
вызова — это вызов метода, то оно может иметь аргументы, как 
всякий вызов метода. Значения аргументов могут использоваться в 
действиях перехода. Если метод возвращает значение, то этот факт 
отмечается с помощью действия возврата в последовательности 
действий данного перехода.
Проиллюстрируем вышесказанное на примере информационной 
системы отдела кадров. Определим в классах 
Person
и 
Position
операции, приведенные на рис. 4.13. 
Операция 
hasPosition()
класса 
Person
проверяет, занимает 
ли 
сотрудник 
какую-нибудь 
должность, 
а 
операция 
assign()
переводит сотрудника на новую должность 
newPos
и 
возвращает значение 
true
, если перевод успешно произведен.


157
Рис. 4.13. Операции, определенные в классах Person и Position 
Операция 
isFree()
класса 
Position
проверяет, свободна ли 
должность, и операция 
occupy()
позволяет назначить сотрудника на 
должность и в случае успешного завершения возвращает значение 
true

Тогда типичное поведение операции 
assign()
можно описать 
диаграммой состояний, приведенной на рис. 4.14. 
Employed
Unemployed
fire()
hire()
assign(newPos)[newPos.isFree()]/
newPos.occupy(self),return(true)
Applicant
hire()
1
Рис. 4.14. Событие вызова 
На этом рисунке наибольшее внимание заслуживает переход из 
состояния 
Employed
в себя. Давайте разбираться. По событию 


158
assign()
данный переход возбуждается, но для того, чтобы этот 
переход 
завершился 
должно 
быть 
выполнено 
условие 
newPos.isFree()
. Если должность свободна (
newPos.isFree()
вернул 
true
), 
то 
тогда 
осуществляется 
вызов 
метода 
newPos.occupy(self), 
а 
вызов 
метода 
assign(newPos)
возвращает 
true
(1 на рис. 4.14). 

Download 1.84 Mb.

Do'stlaringiz bilan baham:
1   ...   78   79   80   81   82   83   84   85   ...   115




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling