Understand 4.0 マイナーバージョンアップ版では、UML シーケンスダイアグラムが、C 言語でも表示できるようになりました。
Understand の UML シーケンス図の仕様
- C 言語の UML シーケンス図では、ライフラインは、ファイルを表示します。
- 未解決の関数(定義元が見つからない関数、Unresolved Function)への呼び出しの場合、ライフラインはファイルではなく関数名を表示します。
例: UMLシーケンス図のグラフ例の strlen, printf 関数 - C++, Java, C#, Objective-C, VB.NET の UML シーケンス図は、ライフラインは、クラスを表示します。
- 未知の関数(宣言・定義いずれも見つからない関数、Unknown Function)への呼び出しは、表示されません。
例: サンプルコード aaa.c の func_e() の呼び出し部分 - 関数呼び出しを含まない制御構造は、複合フラグメント(alt, loop)が表示されません。
- 関数マクロは展開され、展開された関数がライフラインに表示されます。
- C/C++ 混在時の UML シーケンス図は、ライフラインには、C言語の場合はファイル名(未解決の関数への呼出しの場合は、関数名)、C++言語の場合はクラス名を混在して表示します。
UML シーケンス図の表示方法
- エンティティフィルター画面やソースエディターで、任意の関数やメソッドを選択します。
- 右クリック[グラフィカルビュー]-[UML Sequence Diagram]を選択します。
UML シーケンス図の表示例
サンプルソースコード
- aaa.c
#include <stdio.h>
#include <string.h>
#include “bar.h”
#define MAX 10void func_a(int altflag)
{
int value = 0;
char foo[] = “test”;
char* bar = “test”;
int i;if (bar != NULL) {
for (i=0; i < MAX; i++) {
if (strlen(foo) > 0) {
value = func_b();
}
}
}
value = func_b();if (altflag > 0) {
value++;
} else {
value–;
}if (altflag > MAX) {
value = func_b();
} else {
value = func_c();
}
func_d();
func_e();
printf(“%d”, value);
}
- bbb.c
#include “bar.h” {
int func_b () {
return func_c();
}
- ccc.c
#include “bar.h” {
int func_c () {
func_d();
return 1;
}
- ddd.c
void func_d () {
}
- bar.h
void func_a();
int func_b();
int func_c();
void func_d();
C 言語のシーケンス図対応は、日本のユーザー様からご要望を多く頂き、実現された機能です。
C 言語のソースも、シーケンス図を用いて、処理の流れを視覚的に表現できるようになりました。
是非、ご活用ください。