如何在UML中建模递归调用

时间:2011-01-19 17:23:00

标签: python recursion uml

我想用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 。我不需要对它们进行建模。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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