ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

RDBに入れたクラス図からのプログラム自動生成を考える(Javaの場合)

2009-08-10 13:32:48 | Weblog

 シリーズ「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等各種ダイアグラムのエラーチェック体系化」の中で展開していく(画面定義書のところ)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

UML等各種ダイアグラムのエラーチェック体系化(その16:クラス図をRDBに)

2009-08-10 09:05:08 | Weblog

 シリーズ「UML等各種ダイアグラムのエラーチェック体系化」です。

 現在「いろんなダイアグラムをRDBにいれよう!」化計画、
 をやっていて、
 前回までで、ダイアグラムをRDBにいれる入れ方をかきました。

 今回から、具体的なダイアグラムをいれていきます。
 まずは、クラス図です。

 なお、ここで書いたとおり、いままでのまとめは

こちら
システム開発における「最小単位」とその連結法
http://www.geocities.jp/xmldtp/index_system.htm

(更新しました!!15回までの分が入ってます)




■クラス図

まず、クラス図とは。をまとめておきます。

クラス図は、ここにあるように、クラス(四角形であらわされる)と関係(線)であらわされます。

 クラスは、クラス名、属性(プロパティ。今回、このRDBに入れるときの用語で、属性って言う言葉を使っているので、以下、プロパティと書きます)、メソッドから成り立ちます。この間を線をひきます。

 関係には、
 ・リンク
 ・関連
 ・集約
 ・コンポジション
 ・汎化・特化
 ・実現
などがあります。




■RDBに入れる

まず、ノードとアーク(リレーション)にわけます。
ノード:クラス
アーク:関係

そうすると、ノードが属性を項目としたテーブルを持つことになりますが、ここで属性は、
・クラス名
・プロパティ
・メソッド
です。このうち、プロパティとメソッドは複数の値を持ちますので、プロパティテーブルとメソッドテーブルにわかれますが、メソッドの引数は、複数の値をとりますので、さらに、引数テーブルになります。

 また、関係には、さまざまな種類がありますので、関係テーブルには、その種類をもつことになります。
 そして、元、先カーディナリティ、場合によっては、関連の名前とか、関連の端に名前をつけることもあるかもしれない

まとめると、こんなかんじ。

クラステーブル(クラスID,クラス名)
プロパティテーブル(クラスID,プロパティID,プロパティ名、可視性(スコープ)、
          型、初期値、その他の特性)
メソッドテーブル(クラスID,メソッドID,メソッド名、可視性(スコープ)、
          型、戻り値)
引数テーブル(クラスID,メソッドID,引数ID,引数名、可視性(スコープ)、型)
関連テーブル(関連ID,元クラスID,先クラスID,種別、
       元カーディナリティ、先カーディナリティ、
       (関連名、元関連名、先関連名、グループID))

*関連テーブルの種別は、リンク、汎化・特化、集約などを、番号化して設定
 カーディナリティは、1、N、などを設定(元、先両方ありえる)
 関連名が()になっているのは、場合によってはいる?ってこと。
 グループIDについては、別の機会に詳しく説明します。
 必要ないかも・・・




こんなかんじ。

次回からも、いろんなダイアグラムを紹介して、それをRDBに入れることなどについて述べていきます。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする