Рисование потока вызовов с диаграммой последовательности приводит к неоднозначности - PullRequest
4 голосов
/ 21 сентября 2010

Я хочу нарисовать диаграмму последовательности, где

A -> B.run()
B.run() -> B.m1()
B.m1() -> B.m2()

До сих пор я придумал это.

http://i51.tinypic.com/eja5bl.jpg http://i52.tinypic.com/1449s3.jpg

Но здесь я не могу ясно сказать, что B.m2 () вызывается B.m1 (). Скорее, он выглядит как B.run (). Вызывает B.m1 () и B.m2 () последовательно.

------------- РЕДАКТИРОВАТЬ ----------------

Это то, что я сейчас нарисовал http://i55.tinypic.com/21276kk.jpg

http://i55.tinypic.com/21276kk.jpg Хорошо, моя текущая диаграмма хорошо?Что я хочу, так это(Поток вызовов)

SpiritAdapter -> SpiritEngine::run(spirit:string, method:string, args[])
SpiritEngine::run(spirit:string, method:string, args[]) -> SpiritEngine::executeLogic(spirit:string, method:string, args[])
SpiritEngine::executeLogic(spirit:string, method:string, args[]) -> SpiritEngine::spirit(spirit:string, method:string, args[])
SpiritEngine::spirit(spirit:string, method:string, args[]) -> new SpiritAbstractor
SpiritEngine::executeLogic(spirit:string, method:string, args[]) -> SpiritAbstractor::method(args)
SpiritEngine::run(spirit:string, method:string, args[]) -> SpiritEngine::storeXDO()

Ответы [ 3 ]

6 голосов
/ 21 сентября 2010

Вы можете добавить небольшую полоску над B.m2 () и затем поместить самонаправленную стрелку, , например, .

.

alt text

Само сообщение против рекурсивного вызова

alt text

1 голос
/ 21 сентября 2010

Спецификация uml позволяет визуально отображать вложенный вызов: вызываемая линия жизни должна быть наложена на вызывающую линию жизни. Смотрите, например Вызов defineAvailableReport () в в этом примере .

Если ваш инструмент поддерживает это, конечно, другое дело ...

0 голосов
/ 03 сентября 2018

Допустим, у ObjectA есть 3 метода: MessageOne (), MessageTwo () и MessageThree ().

А соотношение между ними показано ниже

void ObjectA::MessageOne()
{
    MessageTwo();
}

void ObjectA::MessageTwo()
{
   MessageThree();
}

void ObjectA::MessageThree()
{
   // TODO
}

Используя Enterprise Architect, как показано на рисунке ниже, если вы выберете функцию MessageThree (), вы получите возможность повысить уровень активации.

enter image description here

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

enter image description here

...