Рабочие процессы блок-схемы
Блок-схемы лежат в основе широко известного принципа разработки программ. Действие «Блок-схема» обычно используется для реализации непоследовательных рабочих процессов, но если не требуются узлы FlowDecision
, то может использоваться для реализации последовательных рабочих процессов.
Структура рабочего процесса блок-схемы
Действие Flowchart представляет собой действие, содержащее набор действий, которые будут выполнены. Блок-схемы также содержат элементы управления потоком, такие как FlowDecision и FlowSwitch<T>, контролирующие выполнение между содержащимися действиями на основании значений переменных.
Типы узлов потока
Используются различные типы элементов в зависимости от типа управления потока, требуемого при выполнении элемента. К типам элементов блок-схемы относятся следующие:
FlowStep
- моделирует один шаг выполнения в блок-схеме.FlowDecision
- создает ветвь выполнения на основе логического условия, такого как If.FlowSwitch
- обеспечивает ветвление в ходе выполнения на основе переключателя с неперекрывающимися ветвями, такого как Switch<T>.
Каждая ссылка имеет свойство Action
, определяющее действие ActivityAction, которое может быть использовано для выполнения дочерних действий, а также одно или несколько свойств Next
, которые определяют элемент или элементы, выполняемые после завершения выполнения текущего элемента.
Создание базовой последовательности действий с узлом FlowStep
Для моделирования базовой последовательности, в которой поочередно выполняются два действия, используется элемент FlowStep
. В следующем примере используются два элемента FlowStep
для последовательного выполнения двух действий.
<Flowchart>
<FlowStep>
<Assign DisplayName="Get Name">
<Assign.To>
<OutArgument x:TypeArguments="x:String">[result]</OutArgument>
</Assign.To>
<Assign.Value>
<InArgument x:TypeArguments="x:String">["User"]</InArgument>
</Assign.Value>
</Assign>
<FlowStep.Next>
<FlowStep>
<WriteLine Text="Hello, " & [result]/>
</FlowStep>
</FlowStep.Next>
</FlowStep>
</Flowchart>
Создание условной блок-схемы с узлом FlowDecision
Чтобы смоделировать узел условного потока на блок-схеме рабочего процесса (т. е. создать ссылку, работающую аналогично символу принятия решения на стандартной блок-схеме), следует использовать узел FlowDecision. Для свойства Condition узла задано выражение, которое определяет условие, а для свойств True и False заданы экземпляры FlowNode, которые будут выполняться, если результатом вычисления выражения будет true
или false
. В следующем примере показано определение рабочего процесса, который использует узел FlowDecision.
<Flowchart>
<FlowStep>
<Read Result="[s]"/>
<FlowStep.Next>
<FlowDecision>
<IsEmpty Input="[s]" />
<FlowDecision.True>
<FlowStep>
<Write Text="Empty"/>
</FlowStep>
</FlowDecision.True>
<FlowDecision.False>
<FlowStep>
<Write Text="Non-Empty"/>
</FlowStep>
</FlowDecision.False>
</FlowDecision>
</FlowStep.Next>
</FlowStep>
</Flowchart>
Создание эксклюзивного коммутатора с помощью узла FlowSwitch
Чтобы смоделировать блок-схему, в которой на основе соответствующего значения выбирается один из взаимоисключающих вариантов пути, используется узел FlowSwitch<T>. Свойство Expression имеет значение Activity<TResult> с параметром типа Object, который определяет значение для сопоставления с выбираемыми элементами. Свойство Cases определяет словарь ключей и объектов FlowNode для сопоставления с условным выражением и набор объектов FlowNode, которые определяют направление выполнения в случае, если заданный вариант соответствует условному выражению. FlowSwitch<T> также определяет свойство Default, которое определяет направление выполнения при отсутствии соответствий условному выражению. В следующем примере показано, как определить рабочий процесс, который использует элемент FlowSwitch<T>.
<Flowchart>
<FlowSwitch>
<FlowStep x:Key="Red">
<WriteRed/>
</FlowStep>
<FlowStep x:Key="Blue">
<WriteBlue/>
</FlowStep>
<FlowStep x:Key="Green">
<WriteGreen/>
</FlowStep>
</FlowSwitch>
</Flowchart>