繁体   English   中英

需要为C ++插件模块生成UML图

[英]Need generated UML diagrams for C++ plugin modules

我需要一些C ++文件中的各种UML图(顺序/协作,类,包和系统组件)。 但是,这些文件是较大编程框架中的插件。 我曾尝试从Rational Rose 7(2002版)生成UML,但我经验不足,并且不确定RR是否无法生成该图,我做错了还是由于源文件不正确而无法正确显示图。插件而不是独立程序。 我也尝试过Star Modeler,但收效甚微,而且似乎没有关于如何生成这些模型的教程。

是否有一种简单的,防弹的方法来获取C ++文件的UML图?

大多数UML工具仅支持C ++的子集。 任何不包含C预处理程序的UML工具都将丢失大量信息,并且由于C ++的复杂性,很容易使它们混淆。

UML工具中逆向工程的主要用例是往返工程-首先创建UML模型,然后生成代码,然后对其进行一些微调,但不要过多,然后再次导入更改。

还要注意的是,C ++中有很多很多构造,它们在UML中根本没有任何直接表示。 C ++是一种多范例语言。 UML是一种OO建模语言。 有许多C ++习惯用法映射到相同的UML构造(复合是auto_ptr还是一个值? std::vector<int>成员变量是与参数化类的关联,还是类型为int[0..*]的属性int[0..*]

因此,简短的答案是“否”,没有简单,可靠的方法可以从C ++获取UML图。

我知道这不能回答问题,但是您可以使用graphviz点模拟某些内容。 为了激发起见,这是一个生成点脚本的Ruby脚本,该脚本本身可用于生成表示标头依赖项的图像:

puts "digraph {"
ARGV.each_index do |i|
  File.open ARGV[i] do |f|
    while line = f.gets
      if line =~ /^#\s*include\s*[<"](.*)[>"]/
        puts "  \"#{File.basename ARGV[i]}\"->\"#{$1}\";"
      end
    end
  end
end
puts "}"

如果脚本名为headers.rb,并且您正在使用Bash作为Shell,则可以这样使用它:

ruby headers.rb *.cc |dot -Tpng >header_deps.png

这将导致头依赖项的png图像。 您可以使用类继承来做类似的事情。 在更复杂的情况下,您可以利用ctags。

最终结果? 您重新发明了轮子,并且玩得很开心。 :p

如果您是Windows用户,则可以尝试StarUML 尽管正如这里讨论所说,该项目似乎已经死了,但是该程序在我的Windows 7计算机上可以正常运行。

我发现StarUML可以在一组C ++源代码文件中生成类及其继承关系的良好类图。 但是,我无法获得它以在类之间产生任何关联链接。 我仍在学习StarUML,所以在那儿我可能做错了什么。

另外,除了类图之外,我认为它不能对任何其他东西进行逆向工程,但这可能是您的起点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM