【问题标题】:How to model recursive calls in UML如何在 UML 中建模递归调用
【发布时间】:2011-01-19 17:22:59
【问题描述】:

我想在 UML 中为我的应用程序(用 Python 编写)的函数调用建模,但我遇到了两个问题。

首先是我尝试绘制序列图,但它是用于对对象的方法调用进行建模,并且我的应用程序是按程序编写的,即我实际拥有的唯一对象是我使用的库中的类型实例(例如 html5lib) .

第二个问题是有一些递归调用,我需要在 UML 图上建模,而序列图似乎不是这个问题的解决方案。

那么我应该使用哪个 UML 图?以及如何对递归调用进行建模,如下面的函数?

def node_preprocessing(node):
    global tags_remove, tags_special
    if node.nodeType==3: # Text node
        return preprocessing(node.wholeText)
    if node.nodeType==1 and node.tagName not in tags_remove: # Tag node
        if node.tagName in tags_special:
            return tags_special[node.tagName](node)
        return convert_tag(node) % u"".join(map(node_preprocessing, node.childNodes))
    return u""

另一方面,我不想准确地展示这个函数中发生的一切。只有它调用的东西(本身,预处理(文本),convert_tag(节点))和顺序。

ps。 tags_special 是 lambda 函数的 dict。我不需要对它们的调用进行建模。

【问题讨论】:

    标签: python recursion uml


    【解决方案1】:

    您可以轻松地为递归调用建模。您甚至不需要对象来使用序列图。但是如果你只对被调用的方法和它们的顺序感兴趣,我认为最合适的应该是通信图http://en.wikipedia.org/wiki/Communication_diagram。递归调用可以使用迭代 (*) 建模。在序列图中,可以使用循环分区对递归进行建模。

    【讨论】:

      【解决方案2】:

      UML 状态图可能很合适。 This example 有一些反身箭头,可能对显示递归有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多