代码之家  ›  专栏  ›  技术社区  ›  Neel Basu

用序列图绘制调用流会导致歧义

  •  4
  • Neel Basu  · 技术社区  · 14 年前

    我想画一个序列图

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

    到目前为止,我已经想出了这些。

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

    相反,它看起来像是B.run()连续调用B.m1()和B.m2()。

    -------------编辑----------------

    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 回复  |  直到 5 年前
        1
  •  6
  •   Kamran Khan    14 年前

    您可以在B.m2()上添加一个小条,然后放置一个自指箭头, for example

    alt text

    Self message vs recursive call

    alt text

        2
  •  1
  •   sfinnie    14 年前

    uml规范允许可视化地显示嵌套调用:被调用的生命线应该覆盖在调用生命线上。例如,请参阅determineAvailableReport()调用 this example

    你的工具是否支持它当然是另一回事。。。

        3
  •  0
  •   Jnana    6 年前

    void ObjectA::MessageOne()
    {
        MessageTwo();
    }
    
    void ObjectA::MessageTwo()
    {
       MessageThree();
    }
    
    void ObjectA::MessageThree()
    {
       // TODO
    }
    

    使用EnterpriseArchitect,如下图所示,如果选择MessageThree()call,您将获得一个选项来提高激活级别。

    enter image description here

    -&燃气轮机; 箭头)您将得到满足调用堆栈序列图的精确图(如下所示)。

    enter image description here