Прежде всего, диаграмма последовательности - это объектно-ориентированное понятие.Он предназначен для быстрой передачи сообщений между объектами в объектно-ориентированной программе последовательным образом, что должно помочь понять временное взаимодействие между объектами.Таким образом, не имеет смысла говорить о диаграммах последовательности в контексте процедурного языка, такого как C.
Когда речь идет о C ++, диаграммы последовательности определяются в общем смысле спецификацией UML, котораяодинаково для всех объектно-ориентированных языков.UML считается концепцией более высокого уровня из исходного кода, которая выглядит одинаково для всех языков, а процесс преобразования исходного кода в UML называется обратным инжинирингом кода.Существуют инструменты, которые позволяют преобразовывать исходный код Java, C ++ и других языков в диаграммы UML, которые показывают отношения между классами, например Enterprise Architect, Visual Paradigm и IBM Rational Software Architect.
Однако диаграмма последовательностиэто особый вид UML-диаграммы, и оказывается, что обратное проектирование диаграммы последовательности является довольно сложной задачей.Во-первых, если вы хотите сгенерировать диаграмму последовательности с помощью статического анализа, один из первых вопросов, на которые вы должны ответить, заключается в том, будет ли когда-либо возвращаться результат с учетом двух объектов и сообщения, передаваемого между ними.Это означает, что для данного метода вам придется проанализировать его алгоритм и выяснить, зацикливается ли он вечно или возвращается.Это известно как проблема остановки , и было доказано, что она неразрешима в компьютерной науке.Это означает, что для создания диаграммы последовательности с помощью статического анализа вам придется пожертвовать точностью.Динамический анализ работает, фактически выполняя код и отображая взаимодействия между объектами во время выполнения.Это представляет свои собственные проблемы.Во-первых, вам нужно будет применить код.Тогда отфильтровывание интересующих вас взаимодействий из библиотечных и системных вызовов и других ошибок, присутствующих в коде, было бы невозможным без вмешательства пользователя.
Это не означает, что создание инструмента, который бы создавал пригодные для использования диаграммы последовательности, невозможно, но рыночный интерес, по-видимому, был недостаточно сильным, чтобы оправдать усилия, и, кроме нескольких исследовательских работ на эту темуКак и CPP2XMI , мне неизвестны какие-либо коммерчески доступные инструменты для преобразования C ++ в диаграммы последовательности.
Сложность проблемы заключается в том, что C ++ является одним из наиболее сложных объектно-ориентированныхязыков, поэтому даже если кто-то изобрел хороший способ обратного конструирования диаграмм последовательности, C ++ будет последним языком, который получит лечение.Пример: Visual Paradigm предлагает элементарную поддержку для преобразования Java-кода в диаграммы последовательности , но не для C ++.
Даже если такой инструмент существовал для C ++, печальная правда в том, что если вашКод C ++ достаточно сложен, чтобы вы могли использовать инструмент для создания диаграммы последовательности вместо того, чтобы делать это вручную, тогда он, скорее всего, слишком сложен для инструмента, чтобы дать вам что-нибудь полезное, и вам все равно придется все исправлять самостоятельно.