从Python源代码生成UML图的最佳方法是什么?
一位同事想从大量的Python源代码中生成UML类图。他主要关注的是类之间的继承关系,对组合关系也有一点兴趣,但对那些只是Python基本类型的类属性不太在意。
这些源代码相对简单,并没有什么特别复杂的地方,比如没有使用什么花哨的元类魔法。(大部分代码是来自Python 1.5.2时代,偶尔夹杂一些“现代”的2.3左右的内容。)
有什么好的现成解决方案可以推荐吗?
9 个回答
14
有些表现良好的程序可以用图表表示,但一般情况下是做不到的。因为在Python中,程序运行时可以扩展对象,而且任何类型的对象都可以被赋值给任何实例变量。要弄清楚一个对象可以包含哪些类(也就是组合),就需要完全理解程序在运行时的行为。
Python的 metaclass(元类)功能意味着,要理解继承结构,也需要对程序的运行时行为有全面的了解。
为了证明这些事情是不可能的,你可以这样推理:如果真的存在这样的UML图表生成器,那么你可以拿一个任意的程序,把“停止”语句转换成会影响UML图的语句,然后用这个图表生成器来解决“停机问题”,而我们都知道这是不可能的。