Рис. 12.6. Составное состояние с вложенными параллельными подавтоматами
В некоторых случаях бывает желательно скрыть внутреннюю структуру составного состояния. Например, отдельный подавтомат может быть настолько большим по масштабу, что его визуализация затруднит общее представление диаграммы состояний. В подобной ситуации допускается не раскрывать на исходной диаграмме данное составное состояние, а указать в правом нижнем углу специальный символ (рис. 12.7).
Рис. 12.7. Пример составного состояния со скрытой внутренней структурой
В последующем диаграмма состояний для соответствующего подавтомата может быть изображена отдельно от основной с необходимыми комментариями. Таким образом при построении диаграмм состояний могут использоваться классические принципы декомпозиции и иерархического упорядочения.
Современные программы могут реализовывать очень сложную логику поведения отдельных своих компонентов. Для адекватного представления процесса изменения состояний семантики обычных простых переходов может оказаться недостаточно. С этой целью в UML специфицированы дополнительные обозначения для отображения сложных переходов.
В отдельных случаях переход может иметь несколько исходных или несколько целевых подсостояний. Такой переход получил название параллельный и может отображаться только для подсостояний параллельных подавтоматов. Графически такой переход изображается вертикальной или горизонтальной чертой (рис. 12.8). Если параллельный переход имеет две или более входящих дуг, то его называют соединением (англ. join). Если же он имеет две или более исходящих из него дуг, то его называют ветвлением (англ. fork). Текстовая спецификация параллельного перехода записывается рядом с чертой и относится ко всем входящим (исходящим) дугам.
Рис. 12.8. Параллельные переходы
На рис. 12.8 переход из состояния 1 выполняется параллельно в подсостояния 1 и 4, в то время как переход из состояния 2 – в подсостояния 1 и 3.