2010-05-06 2 views
2

J'ai besoin de divers diagrammes UML (séquence/collaboration, classe, package et composant système) à partir de certains fichiers C++. Cependant, ces fichiers sont des plugins dans un cadre de programmation plus large. J'ai essayé de générer UML à partir de Rational Rose 7 (version 2002), mais je ne suis pas très expérimenté et je ne sais pas si RR ne peut pas produire le diagramme, je fais quelque chose de mal ou les diagrammes ne sont pas correctement rendus. plugins au lieu de programmes autonomes. J'ai également essayé Star Modeler avec peu de succès et il ne semble y avoir aucun tutoriel sur la façon de générer ces modèles.J'ai besoin de diagrammes UML générés pour les modules de plugins C++

Existe-t-il un moyen simple et infaillible d'obtenir des diagrammes UML pour les fichiers C++?

Répondre

0

Je sais que cela ne répond pas à la question, mais vous pouvez simuler quelque chose avec le point graphviz. Pour motiver, voici un script Ruby qui génère un script de points, qui lui-même peut être utilisé pour générer une image qui exprime les dépendances d'en-tête:

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 "}" 

Si le script est nommé headers.rb et que vous utilisez Bash pour votre shell Alors vous pouvez l'utiliser comme ça:

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

Cela se traduira par une image png des dépendances d'en-tête. Vous pourriez faire des choses similaires avec l'héritage de classe. Vous pourriez profiter des ctags pour des scénarios plus complexes.

Résultat final? Vous avez réinventé la roue et vous vous êtes amusé à le faire. : p

+0

Ceci est un peu utile, mais j'ai besoin de ces diagrammes formels UML, pas d'une maquette. – user334918

+0

Quelqu'un peut-il m'aider? Même quelque chose qui ne fait que des diagrammes de classe, ou un tutoriel sur la façon d'utiliser un programme pour obtenir ce dont j'ai besoin, serait très utile! – user334918

0

Si vous utilisez Windows, vous pouvez essayer StarUML. Bien que le discussion here dit, le projet semble être mort, le programme fonctionne très bien sur mon ordinateur Windows 7.

J'ai trouvé que StarUML peut produire un bon diagramme de classe des classes et de leurs relations d'héritage dans un ensemble de fichiers de code source C++. Cependant, je n'ai pas pu l'obtenir pour produire des liens d'association entre les classes. J'apprends toujours StarUML, donc je pourrais faire quelque chose de mal là-bas.

En outre, je ne pense pas qu'il puisse faire de l'ingénierie inverse, sauf des diagrammes de classes, mais cela pourrait être un début pour vous.

1

La plupart des outils UML ne prennent en charge qu'un sous-ensemble de C++. Tout outil UML qui n'inclut pas de préprocesseur C manquera une quantité importante d'informations, et en raison de la complexité de C++ il est très facile de les confondre. Le principal cas d'utilisation du reverse engineering dans les outils UML est l'ingénierie aller-retour - créez d'abord le modèle UML, puis générez du code, puis modifiez-le un peu mais pas trop, puis importez à nouveau les modifications.

Il est également important de noter qu'il existe de nombreuses constructions en C++ qui n'ont simplement aucune représentation directe dans UML. C++ est un langage multi-paradigme; UML est un langage de modélisation OO. Il y a beaucoup de C++ idiomes qui carte aux mêmes constructions UML (est un composite d'une auto_ptr ou une valeur? Est une variable membre std::vector<int> une association à une classe paramétrisé, ou une propriété de type int[0..*])

Donc, la réponse courte est Non, il n'y a pas de moyen simple et infaillible d'obtenir des diagrammes UML à partir de C++.

Questions connexes