На этом шаге рассмотрим типичные приемы моделирования семейства сигналов в UML.
В большинстве систем, управляемых событиями, события сигналов образуют иерархию. Например, автономный робот может различать внешние сигналы, такие как Collision (Столкновение), и внутренние, например HardwareFault (АппаратныйОтказ). Однако множества внешних и внутренних сигналов могут пересекаться. И даже внутри этих двух широких областей классификации можно обнаружить частные разновидности. К примеру, HardwareFault можно подразделить на BatteryFault (ОтказБатареи) и MovementFault (ОтказДвигательногоМеханизма). Допускается и дальнейшая специализация. Так, разновидностью сигнала MovementFault является MotorStall (ОстановЭлектромотора).
Моделируя подобным образом иерархии сигналов, можно специфицировать полиморфные события. Рассмотрим, к примеру, автомат, в котором некоторый переход срабатывает только при получении сигнала MotorStall. Поскольку этот сигнал является в иерархии листовым, то переход инициируется только им, так что полиморфизм отсутствует. Но предположим теперь, что вы построили автомат, в котором переход срабатывает при получении сигнала HardwareFault. В этом случае переход полиморфен: его вызывает как сам сигнал HardwareFault, так и любая его специализация (разновидность), включая BatteryFault, MovementFault и MotorStall.
Для моделирования семейства сигналов следует:
На рис. 1 приведена модель семейства сигналов, которые могли бы обрабатываться автономным роботом.
Рис.1. Моделирование семейства сигналов
Обратите внимание, что корневой сигнал RobotSignal (СигналРоботу) является абстрактным, то есть непосредственное создание его экземпляров невозможно. У этого сигнала есть две конкретные специализации (Collision и HardwareFault), одна из которых (HardwareFault) специализируется и дальше. Заметьте, что у сигнала Collision есть один параметр.
На следующем шаге рассмотрим типичные приемы моделирования аварийных ситуаций в UML.