PIML 生成機構の実装方針を主に述べる. PIML 生成機構は,パターンの記述を GUI によって支援し, PIML ファイルの生成(と登録)を行うためのものである.
PIML 生成の流れは,以下のようなものである.
オブジェクト Pattern が生成される (各項目のオブジェクトの生成は遅延して, 入力の無いものについては生成しないとする).
各項目( PatternIntentなど) に入力されたものについてのみ 項目を生成し説明文をセットする. これは,表示においてないものについては目次を生成しないようにす るためである.
項目として生成された PatternStructure を下に向かって具体化していく.
名前を入力されるとともに Role を生成する.
4種の関係を生成,集約と参照は名前を入力してその名前で RoleRelation を生成する.
関数名の入力により, RoleOperation を生成する. 返り値の型,抽象などの設定を行う.
変数名の入力により, RoleOperationArgument を生成する. 型の設定を行う.
枠に名前を指定できるようにすれば,OMT 図表示のクラスが使用でき るはず.
パターンは一覧から選べると嬉しい. 選んだパターンにコメントをつけるという形態がいいのでは.
PatternVisitor を継承(implements) した PIMLGenerator (名前は適 当に)を作成し,以下の関数を実装する.
詳しくは,lemon.piml パッ ケージ の PatternVisitor を参照のこと. Visitor パターン を用いて変換手続きの一局集中を図っていることに 注意.
まだ,リポジトリへのインターフェースは確定していないが, lemon.cmngr.ComponentManager を介して行なうようにするのが望ましい. 具体的には, lemon.cmngr.ComponentManager に パターンの ID と,保存する文字列を引数とするような savePattern というインターフェースを追加し, lemon.cmngr.LocalComponentManager と URLComponentManager で実装する. URLComponentManager では,じかにデータ書き出しは行なえないので, CGI を呼び出して POST Method を実行するのが良いと思われる. ただし,この場合保存を行なう CGI を別途用意する必要がある. CGI の実装には,lemon.cmngr.LocalComponentManager を利用するのがいい だろう.
PIML -> PatternComponent への変換は今まで用意したので, PatternComponent -> PIML への逆変換システムが欲しい.
PIML -> PatternComponent 変換摸式図を以下に示す
後は,入力部とオブジェクト生成の連係をきちんとすればよい.
IPS 生成機構で用いたように, デフォルトの木構造を最初に生成した方が楽であるかもしれない. が,要素間に特に制約がないので,入力とともに生成しても問題は少 ないとは思う.
の Attribute の設定には,setAttribute 関数を利 用するのが楽だと思う.どのように用いられているかは, lemon.piml.PIMLParser のソースを見て欲しい.
設定の変更が,いくつかのオブジェクトに影響をもたらすような場合, オブジェクト間の影響をきちんとしておくのは当然であるが, 表示はそれを反映する必要がある. 通常,これには 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 を分けたい ところである.
以上のように現状のシステムを利用・拡張しなければならないので, lemon パッケージを CVS リポジトリからチェックアウトし, ソースコードを覗いて理解を図ること. 分からない場合は質問すること.
この機構はシステムとして組み込まれて行かなければならないので, lemon.pimlgen など(名称募集)のパッケージを作成し, 統合を図ること. 難しい場合は手伝うので,助けを求めること.