如何根据 PHP 中的现有类生成 UML 图?
11 回答
pear还提供了 PHP UML 工具。
PHP_UML:
- 可以在 1.4 版或 2.1 版(逻辑、组件和部署视图)中生成 UML/XMI 文件
- 可以生成 HTML 格式的 API 文档
- 可以从给定的 XMI 文件生成 PHP 代码(代码骨架)
- 可以将 UML/XMI 内容从 1.4 版转换到 2.1 版
通过以下方式在命令行上安装它:
$ pear install pear/php_uml
(这曾经是,$ pear install pear/php_uml-alpha
但包已经稳定了。)
生成你的 xmi:
$ phpuml -o project.xmi
我发现做 PHP 和 UML 的最好的(Windows)软件是Sparx Systems Enterprise Architect。除了众多的功能外,它还支持PHP的以下功能:
- 将面向对象的 PHP 逆向工程为 UML 类图
- 从 UML 类图生成 PHP 类定义
- 将 UML 类中所做的更改同步到相应的 PHP 类定义中
- 将 PHP 类定义中所做的更改同步到相应的 UML 类中
- 创建 UML 序列图以显示 PHP 类使用什么以及如何使用它们
- 以标准 RTF 和 HTML 格式生成 PHP 代码的详细文档
- 对模型执行代码工程以生成基础 PHP 页面。
不是免费的(199 美元),但绝对物有所值。
你试过Autodia了吗?上次我尝试它并不完美,但已经足够好了。
我是这样做的(直接从代码到 PDF 绘图,无需手动绘制任何东西):
- 使用BOUML进行“逆向工程 PHP 代码”[原文如此] 以提取类模型(BOUML 可从 Ubuntu 的“universe”存储库中获得)。这一步我强烈推荐 BOUML,因为与我尝试过的许多其他程序相比,它真的很快。此外,BOUML 似乎正确地提取了模型(对于 BOUML 甚至试图提取的部分)。
- 使用 BOUML 将模型导出为 XMI 1.4 文件
- 使用ArgoUML导入上述 XMI 文件(此步骤可以使用 webstart 版本)
- 从 ArgoUML 导出 XMI(我不知道输出是哪个 XMI 版本/变体,但它与 BOUML 的输出结果不同。argouml-graphviz 无法直接从 BOUML 处理 XMI 文件)。
- 使用argouml-graphviz将 ArgoUML 导出的 XMI 文件转换为点格式(由于使用 XSLT2,您可能需要使用saxon而不是 xsltproc 才能使其工作)
- 使用dot或fdp或sfdp来呈现类图。
下面是使用 fdp 输出 PDF 图表的合适命令行示例(假设 argouml-graphviz XLST 处理生成的 dot 文件保存为 xmi-model.dot):
fdp -Tpdf -Gmaxiter=1000 -Gmindist=0.5 -Gpackmode=node \
-Eweight=0.05 -Elen=1.0 -Eminlen=1.0 -Gsplines=true \
-Goverlap=false xmi-model.dot -oxmi-model.pdf
作为替代方案,您可以尝试PHP_UML或php2xmi而不是 BOUML 来执行“逆向工程”部分。我还没有尝试过。
(我使用“逆向工程”这个短语,因为似乎 UML 人在使用这些词的意思是从源代码中提取类和方法信息时。我个人会将这些词解释为从可执行二进制文件中提取信息或捕获的原始信息线数据。)
如果您更喜欢手工绘制类图(而不是使用计算机完成所有绘图),您可以使用 BOUML 或 ArgoUML 进行绘图。在这种情况下,通过 BOUML 使用“逆向工程”数据将有所帮助。
如果您希望从现有的 PHP 类轻松生成 UML,您可能需要考虑 PHPStorm 3.0 IDE。它在将现有代码复制到 UML 方面做得很好。
理论上,您可以使用 PhpStorm 使用 UML 可视化您的类。这一代不是很好,但你可以有效地重构东西,至少以一种很好的方式预览父级、实现、常量、属性、方法和它们的可见性。
情况
我想将现有组件之间的通信可视化给同事。
使用 PHPStorm 处理
https://blog.jetbrains.com/phpstorm/2017/09/uml-diagrams-in-phpstorm-2017-2/
优点
- 漂亮的用户界面,最终图表。
- 能够从图表重构代码。
- 可以添加注释。
- 类图很好地象征了私有/公共属性、构造函数、方法。
缺点
- 不支持 PHP 7。
- 痛苦地使用。无法调整生成的框的大小。
- 添加新关系时,以前的关系会随机丢失:O wtf?
- 重新启动 PhpStorm 会破坏图表
- 改变主意,无法使用关系
结果
无论如何,经过一段痛苦的工作后,我只能生成不相关的框,并且不得不使用额外的程序来链接关系。特别糟糕。但我相信一旦他们让它正常工作,这将是一个很棒的功能,因为随着代码的变化,图表会自动更新!
目前,不要将 PhpStorm 用于 UML 图。
您可以将 Visual Paradigm 用于 UML。这可能不是收入最高(699 美元)的产品,如果有人想尝试,这只是一个选择。它可以从 PHP 创建类图,反之亦然,不仅是 PHP,还有很多语言可供选择,例如 C#、C++、Ruby、Java、VB.NET、Python、Objective C、Perl 等。还有一个试用版可以查看。
老实说,首先你不应该从代码生成 UML 模型,而是从 UML 模型生成代码;)。
即使您在极少数情况下,当您需要进行逆向工程时,通常建议您手动完成或至少整理图表,因为自动生成的 UML 的视觉效果非常差(=信息)大部分时间都很有价值。
如果您只需要生成图表,最好问问自己为什么?谁是目标受众,目标是什么?自动生成的图表必须提供什么,哪些代码没有?
基本上我只接受这个问题的一个答案。它只是变得太大而且难以理解。
这也是首先从 UML 开始的一个原因,而不是开始编码;)它被称为分析,而且它正在下降,因为每个业务人员都认为它有点太贵了,而且没有必要。