Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
ru:rule:structured_diagram [2024-08-25 19:06] – [0-TBD Следуйте принципам структурного моделирования] Anatoly Belaychukru:rule:structured_diagram [2024-11-27 15:47] (текущий) – [✘ Как НЕ надо] Anatoly Belaychuk
Строка 1: Строка 1:
-====== 0-TBD Следуйте принципам структурного моделирования ======+====== Следуйте правилам структурного моделирования ======
  
 {{tag>подпроцесс развилка цикл}} {{tag>подпроцесс развилка цикл}}
- 
-{{:ru:v_razrabotke.png?nolink&200|}} 
  
 Используйте структурные блоки и подпроцессы. Используйте структурные блоки и подпроцессы.
Строка 346: Строка 344:
   <bpmndi:BPMNDiagram id="BpmnDiagram_1">   <bpmndi:BPMNDiagram id="BpmnDiagram_1">
     <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_02spwhn">     <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_02spwhn">
 +      <bpmndi:BPMNShape id="Gateway_15k0q64_di" bpmnElement="Gateway_078sx6b">
 +        <omgdc:Bounds x="245" y="135" width="50" height="50" />
 +      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_120ghig_di" bpmnElement="Activity_120ghig">       <bpmndi:BPMNShape id="Activity_120ghig_di" bpmnElement="Activity_120ghig">
         <omgdc:Bounds x="320" y="230" width="100" height="80" />         <omgdc:Bounds x="320" y="230" width="100" height="80" />
Строка 354: Строка 355:
       <bpmndi:BPMNShape id="Activity_0fkht20_di" bpmnElement="Activity_0fkht20">       <bpmndi:BPMNShape id="Activity_0fkht20_di" bpmnElement="Activity_0fkht20">
         <omgdc:Bounds x="560" y="230" width="100" height="80" />         <omgdc:Bounds x="560" y="230" width="100" height="80" />
-      </bpmndi:BPMNShape> 
-      <bpmndi:BPMNShape id="Gateway_15k0q64_di" bpmnElement="Gateway_078sx6b"> 
-        <omgdc:Bounds x="245" y="135" width="50" height="50" /> 
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Gateway_17pm0bl_di" bpmnElement="Gateway_1ueoerv">       <bpmndi:BPMNShape id="Gateway_17pm0bl_di" bpmnElement="Gateway_1ueoerv">
Строка 362: Строка 360:
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_0aai754_di" bpmnElement="Activity_0aai754">       <bpmndi:BPMNShape id="Activity_0aai754_di" bpmnElement="Activity_0aai754">
-        <omgdc:Bounds x="320" y="20" width="100" height="80" />+        <omgdc:Bounds x="320" y="50" width="100" height="80" />
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="Flow_0e02mrs_di" bpmnElement="Flow_0e02mrs">       <bpmndi:BPMNEdge id="Flow_0e02mrs_di" bpmnElement="Flow_0e02mrs">
         <omgdi:waypoint x="270" y="135" />         <omgdi:waypoint x="270" y="135" />
-        <omgdi:waypoint x="270" y="60" /> +        <omgdi:waypoint x="270" y="90" /> 
-        <omgdi:waypoint x="320" y="60" />+        <omgdi:waypoint x="320" y="90" />
       </bpmndi:BPMNEdge>       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_0mh672n_di" bpmnElement="Flow_0mh672n">       <bpmndi:BPMNEdge id="Flow_0mh672n_di" bpmnElement="Flow_0mh672n">
Строка 383: Строка 381:
       </bpmndi:BPMNEdge>       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_05ddike_di" bpmnElement="Flow_05ddike">       <bpmndi:BPMNEdge id="Flow_05ddike_di" bpmnElement="Flow_05ddike">
-        <omgdi:waypoint x="420" y="60" /> +        <omgdi:waypoint x="420" y="90" /> 
-        <omgdi:waypoint x="610" y="60" />+        <omgdi:waypoint x="610" y="90" />
         <omgdi:waypoint x="610" y="135" />         <omgdi:waypoint x="610" y="135" />
       </bpmndi:BPMNEdge>       </bpmndi:BPMNEdge>
Строка 401: Строка 399:
 </bpmnio> </bpmnio>
  
-Процесс отработает нормально (не зависнет), но чтобы быть в этом уверенным, придется задуматься:+===== Примечания ===== 
 + 
 +Фундаментом разработки программного обеспечения является [[wpru>Структурное программирование]] - 
 +набор правил, благодаря которым облегчается понимание программного кода, сокращается число ошибок, упрощается отладка и последующая модификация. 
 +Структурное программирование запрещает произвольную передачу управления (оператор goto),  
 +требуя компоновать программный код из структурных блоков (последовательность, ветвление, цикл), которые могут вкладываться друг в друга. 
 +Кроме того, к принципам структурного программирования относится разработка сверху вниз и выделение повторяющихся фрагментов в подпрограммы (процедуры, функции). 
 + 
 +Модель бизнес-процесса тоже является своего рода "программой", но только не для компьютера, а для организации, и существующей в виде диаграммы, а не текста программного кода. 
 +Но проблемы читаемости, легкости тестирования и последующей модификации для моделей процессов даже более актуальны,  
 +поскольку они должны быть понятны не только профессионалам (как в случае программного кода), но и людям бизнеса - владельцам, участникам и другим заинтересованным сторонам. 
 + 
 +Поэтому принципы структурного программирования следует применять и к моделированию процессов, с учетом некоторых особенностей: 
 + 
 +  * набор структурных блоков здесь шире, см. [[#как надо]] 
 +  * аналогом goto здесь является поток управления, не являющийся элементом какого-либо структурного блока 
 +  * как и в структурном программировании, блоки могут вкладываться друг в друга 
 +  * как и в структурном программировании, моделировать процессы следует сверху вниз с использованием подпроцессов и вызовов повторно-используемых действий 
 + 
 +В отличие от программирования, принципы структурного моделирования - это рекомендация, а не требования. 
 +Бывают сценарии, когда от них можно отступить, если это позволяет адекватно отобразить сложную логику, сделать схему процесса более компактной и понятной, см. [[#исключения]]. 
 +Принципы структурного моделирования очерчивают для аналитика "безопасную зону": пока вы им следуете -  
 +в частностиу каждой расходящейся развилки есть парная к ней сходящаяся, и развилки аккуратно вложены одна в другую - вы можете быть уверены, что схема корректна. 
 +Если приходится от этих принципах отступать, то ответственность за корректность и читаемость диаграммы полностью ложиться на вас, как на автора. 
 +Такая гибкость является сильной стороной BPMN. 
 + 
 +Для сравнения, в нотации BPEL принципы структурного моделирования реализованы жестко - отступить от них невозможно технически. 
 +Например, если у расходящейся развилки нет парной сходящейся, то такая модель в этой нотации будет синтаксически некорректной. 
 +Из-за такой жесткости BPEL проиграл в популярности BPMN. 
 +Оказалось, что авторы и пользователи графических схем процессов ценят возможность соединить потоком управления произвольные элементы на диаграмме, которую предоставляет BPMN. 
 +Главное этой возможностью не злоупотреблять. 
 +===== Исключения =====
  
 <bpmnio type="bpmn"> <bpmnio type="bpmn">
 <?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
 <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="http://bpmn.io" exporterVersion="0.10.1"> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="http://bpmn.io" exporterVersion="0.10.1">
-  <process id="Process_02spwhn"> +  <process id="Process_1i233bj"> 
-    <parallelGateway id="Gateway_078sx6b"> +    <startEvent id="Event_163b7zd"> 
-      <outgoing>Flow_0e02mrs</outgoing> +      <outgoing>Flow_0n8m9ix</outgoing> 
-      <outgoing>Flow_0mh672n</outgoing>+    </startEvent> 
 +    <task id="Activity_0hrif2x"> 
 +      <incoming>Flow_0n8m9ix</incoming> 
 +      <incoming>Flow_1xhg72f</incoming> 
 +      <outgoing>Flow_17pu7ob</outgoing> 
 +    </task> 
 +    <sequenceFlow id="Flow_0n8m9ix" sourceRef="Event_163b7zd" targetRef="Activity_0hrif2x" /> 
 +    <exclusiveGateway id="Gateway_16o8o9p"> 
 +      <incoming>Flow_17pu7ob</incoming> 
 +      <outgoing>Flow_13c21vj</outgoing> 
 +      <outgoing>Flow_0tg8ddl</outgoing> 
 +    </exclusiveGateway> 
 +    <sequenceFlow id="Flow_17pu7ob" sourceRef="Activity_0hrif2x" targetRef="Gateway_16o8o9p" /> 
 +    <task id="Activity_1clpbmc"> 
 +      <incoming>Flow_13c21vj</incoming> 
 +      <outgoing>Flow_0ehog1r</outgoing> 
 +    </task> 
 +    <sequenceFlow id="Flow_13c21vj" sourceRef="Gateway_16o8o9p" targetRef="Activity_1clpbmc" /> 
 +    <exclusiveGateway id="Gateway_14dqayh"> 
 +      <incoming>Flow_0ehog1r</incoming> 
 +      <outgoing>Flow_1gx84dc</outgoing> 
 +      <outgoing>Flow_106bg20</outgoing> 
 +    </exclusiveGateway> 
 +    <sequenceFlow id="Flow_0ehog1r" sourceRef="Activity_1clpbmc" targetRef="Gateway_14dqayh" /> 
 +    <endEvent id="Event_06rmoif"> 
 +      <incoming>Flow_1gx84dc</incoming> 
 +    </endEvent> 
 +    <sequenceFlow id="Flow_1gx84dc" sourceRef="Gateway_14dqayh" targetRef="Event_06rmoif" /> 
 +    <exclusiveGateway id="Gateway_1bkljxx"> 
 +      <incoming>Flow_0tg8ddl</incoming> 
 +      <incoming>Flow_106bg20</incoming> 
 +      <outgoing>Flow_1xhg72f</outgoing> 
 +    </exclusiveGateway> 
 +    <sequenceFlow id="Flow_0tg8ddl" sourceRef="Gateway_16o8o9p" targetRef="Gateway_1bkljxx" /> 
 +    <sequenceFlow id="Flow_106bg20" sourceRef="Gateway_14dqayh" targetRef="Gateway_1bkljxx" /> 
 +    <sequenceFlow id="Flow_1xhg72f" sourceRef="Gateway_1bkljxx" targetRef="Activity_0hrif2x" /> 
 +  </process> 
 +  <bpmndi:BPMNDiagram id="BpmnDiagram_1"> 
 +    <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_1i233bj"> 
 +      <bpmndi:BPMNShape id="Activity_0hrif2x_di" bpmnElement="Activity_0hrif2x"> 
 +        <omgdc:Bounds x="320" y="80" width="100" height="80" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Gateway_16o8o9p_di" bpmnElement="Gateway_16o8o9p" isMarkerVisible="true"> 
 +        <omgdc:Bounds x="465" y="95" width="50" height="50" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Activity_1clpbmc_di" bpmnElement="Activity_1clpbmc"> 
 +        <omgdc:Bounds x="550" y="80" width="100" height="80" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Gateway_14dqayh_di" bpmnElement="Gateway_14dqayh" isMarkerVisible="true"> 
 +        <omgdc:Bounds x="685" y="95" width="50" height="50" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Event_06rmoif_di" bpmnElement="Event_06rmoif"> 
 +        <omgdc:Bounds x="772" y="102" width="36" height="36" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Gateway_1bkljxx_di" bpmnElement="Gateway_1bkljxx" isMarkerVisible="true"> 
 +        <omgdc:Bounds x="465" y="5" width="50" height="50" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Event_163b7zd_di" bpmnElement="Event_163b7zd"> 
 +        <omgdc:Bounds x="242" y="102" width="36" height="36" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNEdge id="Flow_0n8m9ix_di" bpmnElement="Flow_0n8m9ix"> 
 +        <omgdi:waypoint x="278" y="120" /> 
 +        <omgdi:waypoint x="320" y="120" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_17pu7ob_di" bpmnElement="Flow_17pu7ob"> 
 +        <omgdi:waypoint x="420" y="120" /> 
 +        <omgdi:waypoint x="465" y="120" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_13c21vj_di" bpmnElement="Flow_13c21vj"> 
 +        <omgdi:waypoint x="515" y="120" /> 
 +        <omgdi:waypoint x="550" y="120" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0ehog1r_di" bpmnElement="Flow_0ehog1r"> 
 +        <omgdi:waypoint x="650" y="120" /> 
 +        <omgdi:waypoint x="685" y="120" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_1gx84dc_di" bpmnElement="Flow_1gx84dc"> 
 +        <omgdi:waypoint x="735" y="120" /> 
 +        <omgdi:waypoint x="772" y="120" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0tg8ddl_di" bpmnElement="Flow_0tg8ddl"> 
 +        <omgdi:waypoint x="490" y="95" /> 
 +        <omgdi:waypoint x="490" y="55" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_106bg20_di" bpmnElement="Flow_106bg20"> 
 +        <omgdi:waypoint x="710" y="95" /> 
 +        <omgdi:waypoint x="710" y="30" /> 
 +        <omgdi:waypoint x="515" y="30" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_1xhg72f_di" bpmnElement="Flow_1xhg72f"> 
 +        <omgdi:waypoint x="465" y="30" /> 
 +        <omgdi:waypoint x="370" y="30" /> 
 +        <omgdi:waypoint x="370" y="80" /> 
 +      </bpmndi:BPMNEdge> 
 +    </bpmndi:BPMNPlane> 
 +  </bpmndi:BPMNDiagram> 
 +</definitions> 
 +</bpmnio> 
 + 
 +<bpmnio type="bpmn"> 
 +<?xml version="1.0" encoding="UTF-8"?> 
 +<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="http://bpmn.io" exporterVersion="0.10.1"> 
 +  <process id="Process_1i233bj"> 
 +    <parallelGateway id="Gateway_0oi9i0o"> 
 +      <outgoing>Flow_0lj9dyc</outgoing> 
 +      <outgoing>Flow_00jrems</outgoing>
     </parallelGateway>     </parallelGateway>
-    <task id="Activity_0aai754"> +    <task id="Activity_1hal76q"> 
-      <incoming>Flow_0e02mrs</incoming> +      <incoming>Flow_0lj9dyc</incoming> 
-      <outgoing>Flow_05ddike</outgoing>+      <outgoing>Flow_071haj2</outgoing>
     </task>     </task>
-    <sequenceFlow id="Flow_0e02mrs" sourceRef="Gateway_078sx6b" targetRef="Activity_0aai754" /> +    <sequenceFlow id="Flow_0lj9dyc" sourceRef="Gateway_0oi9i0o" targetRef="Activity_1hal76q" /
-    <task id="Activity_120ghig"> +    <sequenceFlow id="Flow_071haj2" sourceRef="Activity_1hal76q" targetRef="Gateway_1l1jd6x" /> 
-      <incoming>Flow_0mh672n</incoming> +    <parallelGateway id="Gateway_1l1jd6x"> 
-      <outgoing>Flow_0ny7lm8</outgoing>+      <incoming>Flow_071haj2</incoming> 
 +      <outgoing>Flow_0f5trtv</outgoing> 
 +      <outgoing>Flow_0chqe1h</outgoing> 
 +    </parallelGateway
 +    <task id="Activity_0bj6qfa"> 
 +      <incoming>Flow_0f5trtv</incoming> 
 +      <outgoing>Flow_0enxt25</outgoing>
     </task>     </task>
-    <sequenceFlow id="Flow_0mh672n" sourceRef="Gateway_078sx6b" targetRef="Activity_120ghig" /> +    <sequenceFlow id="Flow_0f5trtv" sourceRef="Gateway_1l1jd6x" targetRef="Activity_0bj6qfa" /> 
-    <sequenceFlow id="Flow_0ny7lm8" sourceRef="Activity_120ghig" targetRef="Gateway_1w2e8qr" /> +    <sequenceFlow id="Flow_0enxt25" sourceRef="Activity_0bj6qfa" targetRef="Gateway_00n1v4l" /
-    <task id="Activity_0fkht20"> +    <parallelGateway id="Gateway_00n1v4l"> 
-      <incoming>Flow_0s1uvcp</incoming> +      <incoming>Flow_0enxt25</incoming> 
-      <outgoing>Flow_0fniklm</outgoing>+      <incoming>Flow_0k7r1mv</incoming> 
 +    </parallelGateway
 +    <task id="Activity_1lpdz6f"> 
 +      <incoming>Flow_00jrems</incoming> 
 +      <outgoing>Flow_1g2lqx6</outgoing>
     </task>     </task>
-    <sequenceFlow id="Flow_0s1uvcp" sourceRef="Gateway_1w2e8qr" targetRef="Activity_0fkht20" /> +    <sequenceFlow id="Flow_00jrems" sourceRef="Gateway_0oi9i0o" targetRef="Activity_1lpdz6f" /> 
-    <sequenceFlow id="Flow_05ddike" sourceRef="Activity_0aai754" targetRef="Gateway_1ueoerv" /> +    <sequenceFlow id="Flow_1g2lqx6" sourceRef="Activity_1lpdz6f" targetRef="Gateway_0t27naq" /> 
-    <sequenceFlow id="Flow_0j1b3ve" sourceRef="Gateway_1w2e8qr" targetRef="Gateway_1ueoerv" /> +    <parallelGateway id="Gateway_0t27naq"> 
-    <sequenceFlow id="Flow_0fniklm" sourceRef="Activity_0fkht20" targetRef="Gateway_1ueoerv" /> +      <incoming>Flow_1g2lqx6</incoming> 
-    <parallelGateway id="Gateway_1ueoerv"> +      <incoming>Flow_0chqe1h</incoming> 
-      <incoming>Flow_05ddike</incoming> +      <outgoing>Flow_05h70bw</outgoing>
-      <incoming>Flow_0j1b3ve</incoming> +
-      <incoming>Flow_0fniklm</incoming>+
     </parallelGateway>     </parallelGateway>
-    <parallelGateway id="Gateway_1w2e8qr"> +    <task id="Activity_1w0cvhy"> 
-      <incoming>Flow_0ny7lm8</incoming> +      <incoming>Flow_05h70bw</incoming> 
-      <outgoing>Flow_0s1uvcp</outgoing> +      <outgoing>Flow_0k7r1mv</outgoing> 
-      <outgoing>Flow_0j1b3ve</outgoing>+    </task> 
 +    <sequenceFlow id="Flow_05h70bw" sourceRef="Gateway_0t27naq" targetRef="Activity_1w0cvhy" /> 
 +    <sequenceFlow id="Flow_0k7r1mv" sourceRef="Activity_1w0cvhy" targetRef="Gateway_00n1v4l" /> 
 +    <sequenceFlow id="Flow_0chqe1h" sourceRef="Gateway_1l1jd6x" targetRef="Gateway_0t27naq" /> 
 +  </process> 
 +  <bpmndi:BPMNDiagram id="BpmnDiagram_1"> 
 +    <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_1i233bj"> 
 +      <bpmndi:BPMNShape id="Gateway_0dswxnz_di" bpmnElement="Gateway_0oi9i0o"> 
 +        <omgdc:Bounds x="255" y="125" width="50" height="50" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Gateway_0qpi0u3_di" bpmnElement="Gateway_00n1v4l"> 
 +        <omgdc:Bounds x="685" y="125" width="50" height="50" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Activity_1lpdz6f_di" bpmnElement="Activity_1lpdz6f"> 
 +        <omgdc:Bounds x="330" y="40" width="100" height="80" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Gateway_1i2ei57_di" bpmnElement="Gateway_0t27naq"> 
 +        <omgdc:Bounds x="475" y="55" width="50" height="50" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Activity_1w0cvhy_di" bpmnElement="Activity_1w0cvhy"> 
 +        <omgdc:Bounds x="560" y="40" width="100" height="80" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Activity_1hal76q_di" bpmnElement="Activity_1hal76q"> 
 +        <omgdc:Bounds x="330" y="180" width="100" height="80" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Gateway_0hggxgh_di" bpmnElement="Gateway_1l1jd6x"> 
 +        <omgdc:Bounds x="475" y="195" width="50" height="50" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Activity_0bj6qfa_di" bpmnElement="Activity_0bj6qfa"> 
 +        <omgdc:Bounds x="560" y="180" width="100" height="80" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNEdge id="Flow_00jrems_di" bpmnElement="Flow_00jrems"> 
 +        <omgdi:waypoint x="280" y="125" /> 
 +        <omgdi:waypoint x="280" y="80" /> 
 +        <omgdi:waypoint x="330" y="80" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0k7r1mv_di" bpmnElement="Flow_0k7r1mv"> 
 +        <omgdi:waypoint x="660" y="80" /> 
 +        <omgdi:waypoint x="710" y="80" /> 
 +        <omgdi:waypoint x="710" y="125" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0chqe1h_di" bpmnElement="Flow_0chqe1h"> 
 +        <omgdi:waypoint x="500" y="195" /> 
 +        <omgdi:waypoint x="500" y="105" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0lj9dyc_di" bpmnElement="Flow_0lj9dyc"> 
 +        <omgdi:waypoint x="280" y="175" /> 
 +        <omgdi:waypoint x="280" y="220" /> 
 +        <omgdi:waypoint x="330" y="220" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0enxt25_di" bpmnElement="Flow_0enxt25"> 
 +        <omgdi:waypoint x="660" y="220" /> 
 +        <omgdi:waypoint x="710" y="220" /> 
 +        <omgdi:waypoint x="710" y="175" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_1g2lqx6_di" bpmnElement="Flow_1g2lqx6"> 
 +        <omgdi:waypoint x="430" y="80" /> 
 +        <omgdi:waypoint x="475" y="80" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_05h70bw_di" bpmnElement="Flow_05h70bw"> 
 +        <omgdi:waypoint x="525" y="80" /> 
 +        <omgdi:waypoint x="560" y="80" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_071haj2_di" bpmnElement="Flow_071haj2"> 
 +        <omgdi:waypoint x="430" y="220" /> 
 +        <omgdi:waypoint x="475" y="220" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0f5trtv_di" bpmnElement="Flow_0f5trtv"> 
 +        <omgdi:waypoint x="525" y="220" /> 
 +        <omgdi:waypoint x="560" y="220" /> 
 +      </bpmndi:BPMNEdge> 
 +    </bpmndi:BPMNPlane> 
 +  </bpmndi:BPMNDiagram> 
 +</definitions> 
 +</bpmnio> 
 + 
 +<bpmnio type="bpmn"> 
 +<?xml version="1.0" encoding="UTF-8"?> 
 +<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="http://bpmn.io" exporterVersion="0.10.1"> 
 +  <process id="Process_1i233bj"> 
 +    <parallelGateway id="Gateway_0oi9i0o"> 
 +      <outgoing>Flow_0lj9dyc</outgoing> 
 +      <outgoing>Flow_00jrems</outgoing>
     </parallelGateway>     </parallelGateway>
 +    <task id="Activity_1hal76q">
 +      <incoming>Flow_0lj9dyc</incoming>
 +      <outgoing>Flow_071haj2</outgoing>
 +    </task>
 +    <sequenceFlow id="Flow_0lj9dyc" sourceRef="Gateway_0oi9i0o" targetRef="Activity_1hal76q" />
 +    <sequenceFlow id="Flow_071haj2" sourceRef="Activity_1hal76q" targetRef="Gateway_1l1jd6x" />
 +    <task id="Activity_1lpdz6f">
 +      <incoming>Flow_00jrems</incoming>
 +      <outgoing>Flow_1g2lqx6</outgoing>
 +    </task>
 +    <sequenceFlow id="Flow_00jrems" sourceRef="Gateway_0oi9i0o" targetRef="Activity_1lpdz6f" />
 +    <sequenceFlow id="Flow_1g2lqx6" sourceRef="Activity_1lpdz6f" targetRef="Gateway_0t27naq" />
 +    <exclusiveGateway id="Gateway_1l1jd6x">
 +      <incoming>Flow_071haj2</incoming>
 +      <outgoing>Flow_1dzriz5</outgoing>
 +      <outgoing>Flow_1xcw0k4</outgoing>
 +    </exclusiveGateway>
 +    <exclusiveGateway id="Gateway_0t27naq">
 +      <incoming>Flow_1g2lqx6</incoming>
 +      <outgoing>Flow_1w4p2q1</outgoing>
 +      <outgoing>Flow_1ppaez3</outgoing>
 +    </exclusiveGateway>
 +    <sequenceFlow id="Flow_1w4p2q1" sourceRef="Gateway_0t27naq" targetRef="Event_1w42t7g" />
 +    <endEvent id="Event_1w42t7g">
 +      <incoming>Flow_1w4p2q1</incoming>
 +      <incoming>Flow_1dzriz5</incoming>
 +      <terminateEventDefinition id="TerminateEventDefinition_1unxigt" />
 +    </endEvent>
 +    <sequenceFlow id="Flow_1dzriz5" sourceRef="Gateway_1l1jd6x" targetRef="Event_1w42t7g" />
 +    <sequenceFlow id="Flow_1ppaez3" sourceRef="Gateway_0t27naq" targetRef="Gateway_0k1m3o9" />
 +    <parallelGateway id="Gateway_0k1m3o9">
 +      <incoming>Flow_1ppaez3</incoming>
 +      <incoming>Flow_1xcw0k4</incoming>
 +    </parallelGateway>
 +    <sequenceFlow id="Flow_1xcw0k4" sourceRef="Gateway_1l1jd6x" targetRef="Gateway_0k1m3o9" />
   </process>   </process>
   <bpmndi:BPMNDiagram id="BpmnDiagram_1">   <bpmndi:BPMNDiagram id="BpmnDiagram_1">
-    <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_02spwhn"> +    <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_1i233bj"> 
-      <bpmndi:BPMNShape id="Gateway_15k0q64_di" bpmnElement="Gateway_078sx6b"> +      <bpmndi:BPMNShape id="Gateway_0dswxnz_di" bpmnElement="Gateway_0oi9i0o"> 
-        <omgdc:Bounds x="245" y="135" width="50" height="50" />+        <omgdc:Bounds x="255" y="125" width="50" height="50" />
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_0aai754_di" bpmnElement="Activity_0aai754"> +      <bpmndi:BPMNShape id="Activity_1hal76q_di" bpmnElement="Activity_1hal76q"> 
-        <omgdc:Bounds x="320" y="20" width="100" height="80" />+        <omgdc:Bounds x="330" y="180" width="100" height="80" />
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_120ghig_di" bpmnElement="Activity_120ghig"> +      <bpmndi:BPMNShape id="Activity_1lpdz6f_di" bpmnElement="Activity_1lpdz6f"> 
-        <omgdc:Bounds x="320" y="230" width="100" height="80" />+        <omgdc:Bounds x="330" y="40" width="100" height="80" />
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_0fkht20_di" bpmnElement="Activity_0fkht20"> +      <bpmndi:BPMNShape id="Gateway_1yo9xyz_di" bpmnElement="Gateway_1l1jd6x" isMarkerVisible="true"> 
-        <omgdc:Bounds x="560" y="230" width="100" height="80" />+        <omgdc:Bounds x="475" y="195" width="50" height="50" />
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Gateway_17pm0bl_di" bpmnElement="Gateway_1ueoerv"> +      <bpmndi:BPMNShape id="Gateway_0k3jdwc_di" bpmnElement="Gateway_0t27naq" isMarkerVisible="true"> 
-        <omgdc:Bounds x="585" y="135" width="50" height="50" />+        <omgdc:Bounds x="475" y="55" width="50" height="50" />
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Gateway_15jfxiy_di" bpmnElement="Gateway_1w2e8qr"> +      <bpmndi:BPMNShape id="Event_1syedrw_di" bpmnElement="Event_1w42t7g"> 
-        <omgdc:Bounds x="465" y="245" width="50" height="50" />+        <omgdc:Bounds x="482" y="132" width="36" height="36" />
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="Flow_0e02mrs_di" bpmnElement="Flow_0e02mrs"> +      <bpmndi:BPMNShape id="Gateway_1fuwhec_di" bpmnElement="Gateway_0k1m3o9"> 
-        <omgdi:waypoint x="270" y="135" /> +        <omgdc:Bounds x="565" y="125" width="50" height="50" /> 
-        <omgdi:waypoint x="270" y="60" /> +      </bpmndi:BPMNShape> 
-        <omgdi:waypoint x="320" y="60" />+      <bpmndi:BPMNEdge id="Flow_0lj9dyc_di" bpmnElement="Flow_0lj9dyc"> 
 +        <omgdi:waypoint x="280" y="175" /> 
 +        <omgdi:waypoint x="280" y="220" /> 
 +        <omgdi:waypoint x="330" y="220" />
       </bpmndi:BPMNEdge>       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_0mh672n_di" bpmnElement="Flow_0mh672n"> +      <bpmndi:BPMNEdge id="Flow_071haj2_di" bpmnElement="Flow_071haj2"> 
-        <omgdi:waypoint x="270" y="185" /> +        <omgdi:waypoint x="430" y="220" /> 
-        <omgdi:waypoint x="270" y="270" /> +        <omgdi:waypoint x="475" y="220" />
-        <omgdi:waypoint x="320" y="270" />+
       </bpmndi:BPMNEdge>       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_0ny7lm8_di" bpmnElement="Flow_0ny7lm8"> +      <bpmndi:BPMNEdge id="Flow_00jrems_di" bpmnElement="Flow_00jrems"> 
-        <omgdi:waypoint x="420" y="270" /> +        <omgdi:waypoint x="280" y="125" /> 
-        <omgdi:waypoint x="465" y="270" />+        <omgdi:waypoint x="280" y="80" /> 
 +        <omgdi:waypoint x="330" y="80" />
       </bpmndi:BPMNEdge>       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_0s1uvcp_di" bpmnElement="Flow_0s1uvcp"> +      <bpmndi:BPMNEdge id="Flow_1g2lqx6_di" bpmnElement="Flow_1g2lqx6"> 
-        <omgdi:waypoint x="515" y="270" /> +        <omgdi:waypoint x="430" y="80" /> 
-        <omgdi:waypoint x="560" y="270" />+        <omgdi:waypoint x="475" y="80" />
       </bpmndi:BPMNEdge>       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_05ddike_di" bpmnElement="Flow_05ddike"> +      <bpmndi:BPMNEdge id="Flow_1w4p2q1_di" bpmnElement="Flow_1w4p2q1"> 
-        <omgdi:waypoint x="420" y="60" /> +        <omgdi:waypoint x="500" y="105" /> 
-        <omgdi:waypoint x="610" y="60" /> +        <omgdi:waypoint x="500" y="132" />
-        <omgdi:waypoint x="610" y="135" />+
       </bpmndi:BPMNEdge>       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_0j1b3ve_di" bpmnElement="Flow_0j1b3ve"> +      <bpmndi:BPMNEdge id="Flow_1dzriz5_di" bpmnElement="Flow_1dzriz5"> 
-        <omgdi:waypoint x="490" y="245" /> +        <omgdi:waypoint x="500" y="195" /> 
-        <omgdi:waypoint x="490" y="160" /> +        <omgdi:waypoint x="500" y="168" />
-        <omgdi:waypoint x="585" y="160" />+
       </bpmndi:BPMNEdge>       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_0fniklm_di" bpmnElement="Flow_0fniklm"> +      <bpmndi:BPMNEdge id="Flow_1ppaez3_di" bpmnElement="Flow_1ppaez3"> 
-        <omgdi:waypoint x="610" y="230" /> +        <omgdi:waypoint x="525" y="80" /> 
-        <omgdi:waypoint x="610" y="185" />+        <omgdi:waypoint x="590" y="80" /> 
 +        <omgdi:waypoint x="590" y="125" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_1xcw0k4_di" bpmnElement="Flow_1xcw0k4"> 
 +        <omgdi:waypoint x="525" y="220" /> 
 +        <omgdi:waypoint x="590" y="220" /> 
 +        <omgdi:waypoint x="590" y="175" />
       </bpmndi:BPMNEdge>       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>     </bpmndi:BPMNPlane>
Строка 497: Строка 763:
 </definitions> </definitions>
 </bpmnio> </bpmnio>
-===== Примечания ===== 
- 
-Фундаментом разработки программного обеспечения является [[wpru>Структурное_программирование]] - 
-набор правил, благодаря которым облегчается понимание программного кода, сокращается число ошибок, упрощается отладка и последующая модификация. 
-Структурное программирование запрещает произвольную передачу управления (оператор goto),  
-требуя компоновать программный код из структурных блоков - последовательность, ветвление, цикл, которые могут вкладываться друг в друга. 
-Кроме того, к принципам структурного программирования относится разработка сверху вниз и выделение повторяющихся фрагментов в подпрограммы (процедуры, функции). 
- 
-Модель бизнес-процесса является своего рода "программой", только не для компьютера, а для организации, и исходно существующей в виде диаграммы, а не сплошного кода. 
-Проблемы читаемости, легкости тестирования и последующей модификации для моделей процессов даже более актуальны,  
-поскольку они должны быть понятны не только профессионалам (как в случае программного кода), но и людям бизнеса - владельцам, участникам и другим заинтересованным сторонам. 
- 
-Поэтому принципы структурного программирования следует применять и к моделированию процессов, с учетом некоторых особенностей: 
- 
-  * набор структурных блоков здесь шире (см. [[#как_надо]]) 
-  * аналогом goto здесь является поток управления, не являющийся элементом какого-то структурного блока 
-  * как и в структурном программировании, блоки могут вкладываться друг в друга 
-  * как и в структурном программировании, моделирование процесса следует вести сверху вниз, используя подпроцессы и вызов повторно-используемых действий 
- 
-В отличие от программирования, принципы структурного моделирования - это рекомендация, а не требования. 
-В некоторых случаях отступление от них делает схему процесса более компактной и понятной. 
-Существуют сценарии (см. [[#исключения]]), в которых  
- 
-Структурное моделирование - по умолчанию 
-===== Исключения ===== 
- 
-Исключения из указанного выше правила (если есть) 
  
 ===== Смотри также ===== ===== Смотри также =====
  
-Тут ссылки на страницы со схожим контентом (этот раздел опционален)+  * [[do_not_save_on_gateways]]
  
 ===== Автор(ы) ===== ===== Автор(ы) =====
  
-Тут подпись + --- //[[user:bell|Anatoly Belaychuk]] 2024-08-25 19:54//