|Lemon Home Page |

コードの生成支援について

ここではパターンからコードを生成する理由と課題について 簡単に説明した後, その課題に対する解決策を提示する. そして,具体的なコード生成に 必要なユーザーからの情報と手順について説明を行う. なお,パターン内のクラスや関数の複製時に 考えないといけない問題については, 複数化の課題で議論する.

目次


コード生成支援を行う理由


コード生成支援における課題


多対多関係の実現

デザインパターンと生成されるクラス(群)との間には 次にあげるような関係が存在する.

このような関係を図で表すと, 以下のようになる.

Relationship between Role and Class

Relationship between Pattern and Set of Class

このような多対多の関係の存在は, デザインパターンとクラス(群)との間に 中間媒介者が必要であることを意味する. この中間媒介者として, Instantiated Pattern Structure (具体化されたデザインパターンの構造) を導入した. この具体化されたデザインパターンの構造を 以下では単に IPS と呼称する. IPS はデザインパターンを具体化したもの であると同時に, パターン内でのある役割を果たすクラス内での1部分 を表す.


構造情報と疑似コード

コード生成に必要な情報は,構造情報と疑似コードであり, 以下のようなものである.

構造記述は SGML によって行った. 疑似コードについては生成される コードに組み込むようにしたいため, 簡易言語を設計し, 設計支援時に解析して用いることにした. SGML を用いなかったのは, 記述が非常に繁雑になることと, 設計支援時以外には解析の必要は無く, 表示にはそのまま使用すれば良いと考えたためである.

詳細については,

  1. 構造記述について
  2. 疑似コードについて
で詳しく述べる.

コード生成のためのデータ構造

データ構造の対応図を以下に示す.

Correspondence among Pattern, IPS and Class


生成の流れ

言語の選択, アプリケーションの作成

デザインパターンの選択
α.デザインパターン ( PIML+疑似コード)

β.デザインパターンの内部形式

ユーザとの対話
言語非依存な情報の入力
(name etc.)

γ.< IPS (具体化されたパターン構造) >

特化
言語依存な情報の入力
(specifier etc.)

< アプリケーションの内部形式 >

ソースコード生成
δ.クラス (CIML)


ソースコードとして生成されるファイル

Generated Files

ユーザが必ず指定しなくてはならない識別子には以下の種類がある. 上から順に決定していくことになる. パターン内の全役割に対して最低でも1つのクラスが 割り当てられる必要がある. が,実際の支援では暫定的な名前をつけて それを変更するという形態を取っている.

例は主に PIML についてでも示した Iterator パターンです.

  1. 役割にクラスの識別子を割り当てる

    Aggregate に対して List, Iterator に対して Iterator など

  2. 関係に対して変数の識別子を割り当てる

    reference と aggregate 関係についてのみ

    inheritance, creation にラベルはない

  3. 関数の識別子を決定する

    Aggregate の CreateIterator に対して createIterator など

  4. 引数の識別子

    ConcreteIterator の ConcreteIterator(ConcreteAggregate aggr) の aggr (あまり重要ではない)

  5. 関数内部の識別子

    Composite パターンでの forall "g" in "children" の "g" など (あまり重要ではない)


Mika Ohtsuki <mika@db.is.kyushu-u.ac.jp>
Last modified: Wed Dec 10 13:56:53 JST 1997