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