シリーズ「UML等各種ダイアグラムのエラーチェック体系化」のティーブレイクとして(って、今、お昼食べたばっかじゃんという批判は置いておいて)、いまさっき、クラス図をRDBに入れたので、その図から、プログラムは、どこまで自動生成できるか考えてみる。生成言語はJavaとする(Java以外の言語でも、できると思うけど)
まず、クラステーブルからクラスはわかるので・・・
1.クラステーブルのレコード分、以下の処理を行う
1-1.クラス名を取り出し、クラス名.javaをファイル名としてWriteOpenし、
class クラス名を書く。
1-2.関係テーブルを検索し、種別が「汎化・特化」で、先クラスIDが自分の
ものを検索し、存在すれば、その元クラスIDをクラステーブルから検索、
クラス名を取得して、 extends その(元)クラス名 を書きだす。
該当クラスの有無にかかわらず、すべて、クラスが始まる開き中カッコ
{
を書きだす。
1-3.レコードのクラスIDを元に、プロパティテーブルを検索。
プロパティ分、フィールド書き出し
スコープ 型 プロパティ名(=初期値);
例:public int myProp;
*ってことは、スコープは、public,privateだけじゃなくって、
public static finalとか、staticか、finalかもわかる必要がある。
この部分の拡張必要
1-4.レコードのクラスIDを元に、メソッドテーブルを検索、
メソッド分、以下の処理を行う
1-4-1.メソッドの最初の部分書き出し
スコープ 戻り値(の型) メソッド名
例:public String myMethod(
*ってことは、スコープは、public,privateだけじゃなくって、
public staticとか、staticかもわかる必要がある。
1-4-2.クラスID,メソッドIDから引数テーブルを検索、
引数分、以下の処理を行う
型 引数名,または)
*最後は)それ以外は,
*改行しないで行う
1-4-3.以下のことを書く
{
return 戻り値に応じた値;
}
*戻り値に応じた値とは、
基本データ型の場合には、0など、その型の適当な値
それ以外(クラス)の場合はnull
1-5.終わりにクラスの閉じかっこ
}
を書き、ファイルクローズ
この操作で書けないものについて考えると、
まず、packageがある。
これは、自動生成プログラムを起動するときに引数として渡し、1-1でファイルOpen後に書き出すことも考えられるが、将来的に、配置図やコンポーネント図がRDB化された場合(ある制約をつけてということになるかと思うが)そこから取ってこれる「かも」しれない。
つぎに、importがある。
プログラム内部処理がわかれば、そこで使われるメソッドがわかり、そこから何をimportすればよいかがわかる。しかし、結論的に言うと、これはクラス図をどんなに分析しても出てこない。
クラス図は手順が表現できないため、これを行うには、それを表現できるダイアグラム(流れ図など)と結合させないといけない。
しかし、実は、それをする前に、クラス図は、ある条件から自動的に生成され、プログラムも自動生成できてしまう。
その話は、今後、「UML等各種ダイアグラムのエラーチェック体系化」の中で展開していく(画面定義書のところ)