|Lemon HomePage| PIML について|  

PIML 生成支援機構について


PIML 生成支援機構はなぜ必要か


支援のための課題


実装の方針

PIML 生成機構の実装方針を主に述べる. PIML 生成機構は,パターンの記述を GUI によって支援し, PIML ファイルの生成(と登録)を行うためのものである.

PIML 生成の流れは,以下のようなものである.

  1. パターンの名前と別名の入力

    オブジェクト Pattern が生成される (各項目のオブジェクトの生成は遅延して, 入力の無いものについては生成しないとする).

  2. 各説明項目の入力

    各項目( PatternIntentなど) に入力されたものについてのみ 項目を生成し説明文をセットする. これは,表示においてないものについては目次を生成しないようにす るためである.

  3. 構造についての入力を促す

    項目として生成された PatternStructure を下に向かって具体化していく.

    1. 役割を追加する

      名前を入力されるとともに Role を生成する.

    2. 関係を追加する

      4種の関係を生成,集約と参照は名前を入力してその名前で RoleRelation を生成する.

    3. 役割に関数を追加する

      関数名の入力により, RoleOperation を生成する. 返り値の型,抽象などの設定を行う.

    4. 関数に変数を追加する

      変数名の入力により, RoleOperationArgument を生成する. 型の設定を行う.

    型の設定には,デフォルト値(void, int などの Basic と役割名) が選択できると嬉しい.

  4. レイアウトについて入力を促す

    枠に名前を指定できるようにすれば,OMT 図表示のクラスが使用でき るはず.

  5. 他のパターンとの関係について入力を促す

    パターンは一覧から選べると嬉しい. 選んだパターンにコメントをつけるという形態がいいのでは.

  6. 生成された Pattern を頂点とする木構造に対して Visitor を走らせ て PIML を生成する

    PatternVisitor を継承(implements) した PIMLGenerator (名前は適 当に)を作成し,以下の関数を実装する.

    1. visitPattern(Pattern target)
    2. visitPatternIntent(PatternIntent target)
    3. ... 以下 説明項目 を visit するための関数
    4. visitPatternStructure(PatternStructure target)
    5. ... 以下 構造情報の木構造を visit するための関数

    詳しくは,lemon.piml パッ ケージPatternVisitor を参照のこと. Visitor パターン を用いて変換手続きの一局集中を図っていることに 注意.

  7. 確定したものについて,リポジトリへの登録を行なう

    まだ,リポジトリへのインターフェースは確定していないが, lemon.cmngr.ComponentManager を介して行なうようにするのが望ましい. 具体的には, lemon.cmngr.ComponentManager に パターンの ID と,保存する文字列を引数とするような savePattern というインターフェースを追加し, lemon.cmngr.LocalComponentManager URLComponentManager で実装する. URLComponentManager では,じかにデータ書き出しは行なえないので, CGI を呼び出して POST Method を実行するのが良いと思われる. ただし,この場合保存を行なう CGI を別途用意する必要がある. CGI の実装には,lemon.cmngr.LocalComponentManager を利用するのがいい だろう.


実装上の注意点

  1. 実装に何を望むか

    PIML -> PatternComponent への変換は今まで用意したので, PatternComponent -> PIML への逆変換システムが欲しい.

    PIML -> PatternComponent 変換摸式図を以下に示す

    後は,入力部とオブジェクト生成の連係をきちんとすればよい.

  2. 入力機構とオブジェクト生成の連係

    IPS 生成機構で用いたように, デフォルトの木構造を最初に生成した方が楽であるかもしれない. が,要素間に特に制約がないので,入力とともに生成しても問題は少 ないとは思う.

    の Attribute の設定には,setAttribute 関数を利 用するのが楽だと思う.どのように用いられているかは, lemon.piml.PIMLParser のソースを見て欲しい.

  3. オブザーバパターンの導入

    設定の変更が,いくつかのオブジェクトに影響をもたらすような場合, オブジェクト間の影響をきちんとしておくのは当然であるが, 表示はそれを反映する必要がある. 通常,これには MVC モデルと呼ばれるパターン(アーキテクチャに分類されて いる)を用いて対処する.

    実際には MVC はいくつかのデザインパターンから構成されている. どのような構成かは文献 "A System of Patterns" の第5章 あたりを参照してもらうとして, 現時点の問題は,その一つのデザインパターンであるオブザーバパターンを実 現しようとしたとき,Java で既に用意されている java.util.Observer およ び,java.util.Observable がそのまま使えると,非常に簡便なのであるが, PatternComponent を interface として設計しなかったために, PatternComponent のサブクラス群を Observable に指定することができない という事実がある.Java では class を2つ継承できないという制限による.

    よって,MVC を実現するためには, どちらかの実装を選択しなければならない.

    個人的な趣味は前者によって,PatternComponent 以下のクラス群を再設計し スリム化したいところではある.lemon.piml パッケージは最初のモジュール であるため非常に汚い.デフォルト値を返すような設計の変数は abstract にしてしまって構わない. できれば,PatternStructure 以下とそれ以外は Visitor を分けたい ところである.


実装者への要求

  1. lemon パッケージを理解すること

    以上のように現状のシステムを利用・拡張しなければならないので, lemon パッケージを CVS リポジトリからチェックアウトし, ソースコードを覗いて理解を図ること. 分からない場合は質問すること.

  2. パッケージとして統合すること

    この機構はシステムとして組み込まれて行かなければならないので, lemon.pimlgen など(名称募集)のパッケージを作成し, 統合を図ること. 難しい場合は手伝うので,助けを求めること.


Mika Ohtsuki <mika@db.is.kyushu-u.ac.jp>

Last modified: Fri Dec 12 14:09:15 JST 1997