如何在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""
另一方面,我并不想详细展示这个函数里发生的所有事情。我只想显示它调用了哪些东西(比如它自己、preprocessing(text)、convert_tag(node))以及它们的调用顺序。
补充说明:tags_special是一个字典,里面存放的是一些lambda函数。我不需要把它们的调用也画出来。
2 个回答
0
一个UML状态图可能是个不错的选择。这个例子中有一些反向箭头,可能对展示递归很有帮助。
2
你可以很简单地模拟递归调用。其实你不需要用到对象就可以使用时序图。不过如果你只关心被调用的方法和它们的顺序,我觉得最合适的就是通信图。你可以在这里了解更多:http://en.wikipedia.org/wiki/Communication_diagram。递归调用可以用迭代来表示。在时序图中,递归可以通过循环分区来表示。