Нужны сгенерированные UML-диаграммы для модулей плагина C ++ - PullRequest
2 голосов
/ 07 мая 2010

Мне нужны различные UML-диаграммы (последовательность / совместная работа, класс, пакет и системный компонент) из некоторых файлов C ++. Тем не менее, эти файлы являются плагинами в более крупной среде программирования. Я попытался сгенерировать UML из Rational Rose 7 (версия 2002 г.), но у меня нет особого опыта, и я не уверен, что RR просто не может создать диаграмму, я делаю что-то не так или диаграммы отображаются неправильно, потому что исходные файлы плагины вместо автономных программ. Я также попробовал Star Modeler с небольшим успехом, и, похоже, нет учебных пособий по созданию этих моделей.

Существует ли простой, пуленепробиваемый способ получения диаграмм UML для файлов C ++?

Ответы [ 3 ]

1 голос
/ 18 мая 2010

Большинство инструментов UML поддерживают только подмножество C ++. Любой инструмент UML, который не включает препроцессор C, пропустит значительное количество информации, и из-за сложности C ++ их очень легко спутать.

Основной вариант использования обратного инжиниринга в инструментах UML - это циклическое проектирование - сначала создайте модель UML, затем сгенерируйте код, затем немного, но не слишком измените его, затем снова импортируйте изменения.

Стоит также отметить, что в C ++ существует множество конструкций, которые просто не имеют прямого представления в UML. C ++ - это мультипарадигмальный язык; UML - это язык моделирования ОО. Существует много идиом C ++, которые отображаются на одни и те же конструкции UML (это составная * auto_ptr или значение? Является ли переменная-член std::vector<int> ассоциацией с параметризованным классом или свойством типа int[0..*])

Таким образом, короткий ответ - нет, нет простого, пуленепробиваемого способа получить UML-диаграммы из C ++.

0 голосов
/ 18 мая 2010

Если вы пользователь Windows, вы можете попробовать StarUML .Хотя, как говорит здесь , проект кажется мертвым, программа отлично работает на моем компьютере с Windows 7.

Я обнаружил, что StarUML может создать хорошую диаграмму классовклассы и их отношения наследования в наборе файлов исходного кода C ++.Тем не менее, я не смог заставить его создавать какие-либо связи между классами.Я все еще изучаю StarUML, так что, возможно, я делаю что-то не так.

Кроме того, я не думаю, что это может привести к обратному проектированию ничего, кроме диаграмм классов, но это может быть началом для вас.

0 голосов
/ 07 мая 2010

Я знаю, что это не ответ на вопрос, но вы можете что-то смоделировать с помощью graphviz dot. Чтобы мотивировать, вот скрипт 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 для своей оболочки, вы можете использовать его так:

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

Это приведет к png изображению зависимостей заголовка. Вы могли бы делать подобные вещи с наследованием классов. Вы можете использовать ctags для более сложных сценариев.

Конечный результат? Вы заново изобрели колесо и получили удовольствие от этого. : Р

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...