С++ для UML (инженер-реверс/разработка с круговым движением)
Я ищу инструмент, который может перепроектировать С++ на UML (и наоборот). Тем не менее, важнейшим требованием является то, что он может корректно анализировать методы (функции-члены), чтобы определить корректность зависимостей.
Подробнее:
В следующем коде ClassA зависит от ClassB, поэтому инструмент UML должен показать это пунктирной линией. Кажется, что очень мало инструментов, которые могут это сделать. Я пробовал Enterprise Architect, UMLStudio, Visual Paradigm, Borland Together, IBM Rational Architect и другие.
class ClassB
{
static void methodStatic() {}
void method() {}
};
class ClassA
{
void method()
{
ClassB::methodStatic();
ClassB c;
c.method();
}
};
Изменить: я также попробовал StarUML.
Обратите внимание, что Enterprise Architect практически идеален; он корректно идентифицирует зависимости от типов параметров метода и типов полей, а все другие функции разработки с круговым движением, похоже, работают хорошо. Однако он просто не определяет зависимости от тел метода, как в примере.
Ответы
Ответ 1
Есть несколько инструментов, которые позволяют графическое представление вашего кода. Например, Doxygen выполняет хорошую работу.
Однако код С++ (С++, являющийся языком мультипарадигмы) часто не соответствует типичным идиомам, описанным в UML. Скорее всего, ваш код на С++ не соответствует типичной диаграмме UML. Я думаю, это объясняет, почему нет действительно хороших инструментов UML для С++. По крайней мере, я еще не нашел.
Ответ 2
BOUML претендует на выполнение генерации кода на С++ и обратной инженерии.
Ответ 3
Я считаю, что starUML делает это. Лучше всего: это с открытым исходным кодом.
Ответ 4
Я бы сказал, для Enterprise Architect; запустите новый проект, щелкните его правой кнопкой мыши в проводнике проекта, Code Engineering, Import Source Directory. Получает все ваши классы и т.д. В UML, может упаковывать пространство имен или файлы и так далее. Очень хороший инструмент.
Файлы кода скелета могут быть созданы очень схожим образом...
Вы также можете создать документацию из UML (объедините ее со словом, и вы можете сделать свою документацию для вас, если вы сделали подходящие заметки в UML).
(Нет, я не работаю для них, просто использую его в данный момент... для создания UML из исходного кода на С++.)