Как вы представляете вызов функции как оператор условия if на диаграмме последовательности? - PullRequest
2 голосов
/ 02 марта 2020

Недавно я рисовал диаграмму последовательности модуля, когда выполнял реверс-инжиниринг. Я столкнулся с оператором управления, и это похоже на

if (func_A() == True)
{
    DoSomeThing();
}
else
{
    DoSomeThingElse();
}

Проблема в том, как нарисовать условие?

Как я уже говорил, это обратный инжиниринг. Код не может быть изменен сейчас. Я нарисовал две диаграммы, и я не знаю, какой путь правильный,

Первый - это, я думаю, что это неправильно, потому что он не показывает вызов функции в виде сообщения от А до Б.

enter image description here

Это второй, показывает сообщение func_A.

enter image description here

Что вы думаете, чтобы сделать это правильно?

Ответы [ 2 ]

4 голосов
/ 02 марта 2020

Для завершения другого ответа в любом случае есть проблема во втором предложении, потому что мы не знаем, если в [func_A () == True] вы повторно используете значение, возвращенное предыдущим вызовом, или вы делаете второй вызов, чтобы избежать этого, добавьте явное возвращение на диаграмме:

enter image description here


Из каких вы знаете действия? Диаграмма последовательности представляет собой «просто» взаимодействие, в то время как действие является поведением и может быть более адаптированным:

enter image description here

2 голосов
/ 02 марта 2020

Это зависит. Если func_A является операцией, определенной в Object2, второе представление будет правильным. Первый не говорит, где определяется операция. Скорее всего (!) Можно интерпретировать func_A как операцию, локальную по отношению к ObjectA, что, по-видимому, говорит ваш код. (Кстати, у вас есть два совершенно разных набора объектов AB против 12 в ваших примерах.) Но это неясно. Таким образом, второй вариант является более явным (и правильным).

В любом случае я советую не переусердствовать с SD фрагментами, поскольку «графическое программирование» не облегчает чтение (мой практический опыт). Отлично показывать потоки сообщений в разных коллаборациях. Но когда дело доходит до условий, очень скоро становится грязно. Лучшим способом является создание различных подпрограмм или даже использование псевдокода, если условия слишком вложены. Во многих случаях такие условия if подходят для конечных автоматов.

...