Когда в разных учебниках написано по-разному - я стараюсь найти и прочитать первоисточник.
В данном случае найти его не сложно. Это стандарт OMG
http://www.omg.org/spec/UML/2.4.1/
Страница 400, рисунок 12.106
In the example below, either one or both of the behaviors, Buy Item or Make Item could have been invoked. As each
completes, control is passed to Ship Item. That is, if only one of Buy Item or Make Item completes, then Ship Item is
invoked only once; if both complete, Ship Item is invoked twice.
Промежуточный вывод.
Развилка Decision / Merge разбивает поток на 2 независимых пути.
Схождение на Merge не ожидает поступления всех разведенных потоков (в отличии от Join, который ждёт или всех потоков данных или части данных + команды от потока управления), а пропускает дальше первого добежавшего.
Таким образом, в Вашем примере с выходом без Merge на Final формальных ошибок нет. В любом случае после Decision вида (IF/ELSE ) гарантированно останется жить только один из потоков. Второго ждать не надо.
Однако.
Ваш вопрос - о программной реализации. И здесь о чем поговорить.
1. Как аналитик программиста, Вы фактически заставили меня использовать явный или неявный GOTO. Вы вышибли меня из основного потока программы в две процедуры обработки IF/ELSE и не сказали где вернуться обратно в основной поток, заказав сразу идти на выход, причем на ОДИН. Значит если писать код добуквенно - я буду ВЫНУЖДЕН встроить выход в один из потоков, а из второго прыгать на него прямым переходом, явным или неявным (за второе хоть не засмеют). Для простенькой программы, где в параллельных потоках выполняется по 1 действию - это не критично. Но такая радость бывает только на контрольной по информатике в 6 классе. Для и получить за такую контрольную можно только "3".
2. Вы не дали мне как программисту сообщить Вам (или пользователю, или тестировщику ... ) причину выхода. В общем это не совсем комильфо. Если Вы навсегда развели потоки - дайте им отдельные выходы. Это позволит встроить в процедуру завершения программы сообщение, лог или что-то ещё.
Уже вывод.
Правило хорошего тона. Порвал потоки на логическом "или" - сведи их обратно на том же "или", или заверши раздельно.
PS
Использование Правил хорошего тона в реальной жизни обязательным не является.
ПППС
Давайте напишу на свободном языке программный код по Вашей схеме
НачатьИнициировать условиеЕСЛИ
условие ВЫПОЛНЕНО
Делать раз
Поставить метку 1
завершить процессИНАЧЕ
Делать два
Перейти на метку 1
...
На этом всё.
По Вашей схеме - выхода из IF/ELSE нет. Выход из программы - в одной из веток