本研究では, PIML という SGML で デザインパターンの説明文,構造情報,疑似コードなどを統合化して 取り扱っている. これは,主に情報の流通・管理・処理のためである. しかし, 実際の利用において,特に閲覧を行なう場合には, 説明文は項目毎に, 構造情報は図として表示されることが望ましい. PIML で記述されたデザインパターンを解析し, 整形して出力する機構が必要となる.
パターン文書の検索と閲覧には WWW ブラウザを用いるとした. これは,広域ネットワーク分散環境での遠隔閲覧の道具立てとして, すでに広く普及しているからである. 具体的には,HTML の生成と Java Applet による OMT 図生成を行なう.
表示において課題となるのは,
第3の課題は,
特に他パターンや他記述項目のページ(将来的にはソースコード部品など)
へのリンクをどのように実現するかということである.
ページは動的に生成されるため,
WWW における通常の HTML ページと異なり,
リンクを絶対パス URL のアンカーとして埋め込むことができない.
また,ページ生成の cgi-bin 呼出しを PIML 文書に埋め込むことも,
その cgi-bin の URL が必要となり,不可能である.
そこで「抽象アンカー」の機構を考案した.
これは,PIML 文書にはアンカーを識別子の形で埋め込んでおいて,
HTML 化の際に,
その識別子をパラメータとする cgi-bin 呼出しに変換するという機構である.
このページ生成 cgi-bin を呼び出すことで HTML 化手続きが起動され,
識別子に対応するページが新たに生成されて表示される.
これを例で示す.例中の "##識別子##
" が
抽象アンカーであり,
"
Iterator パターンの「関連パターン」の記述 [Gamma]
Related Patterns
Composite: Iterators are often applied to ...
対応する PIML の記述:
<related_patterns>
##p:Composite##: Iterators are often applied to ...
生成される HTML ページ:
<head> Related Patterns </head>
<body> ...
<a href="http://webserver/cgi-bin/getcompo?
pattern&Composite&index"> Composite </a>:
Iterators are often applied to ...
第4の課題の特に大きな問題は, 本来構造情報は要素と関連のみであり, 配置情報を含んでいなかったものをどう扱うかと いうものであった.
一般に図の自動生成においては,構成要素の自動最適配置が大きな研究 課題となっている. しかし本研究では,デザインパターンで記述される 構造は要素数が少ないこと, 変更は稀であることなどを考慮して, デザインパターンの記述時に配置情報もあらかじめ記述しておき, それを用いることとした. このために,PIML の中に配置情報を表すための layout タグを導入し, 2次元配列と要素がそのどの位置に置かれるのかを 記述できるようにした.
<layout rows=行数(縦方向の箱数) columns=列数(横方向の箱数)> <box name=役割名1 row="1" column="1"> <box name=役割名2 row="2" column="1"> <box name=役割名3 row="1" column="3"> ... </layout>
具体的な解析と生成は以下のようになる.
さらに Related Pattern(関連パターン)などでは, 文中に他のデザインパターンを見に行くタグが必要になる. 本システムはCGIによって起動されるため, これを実現するためにはCGIの呼び出しタグが必要である. しかし,CGI呼び出しタグをPIMLの中に埋め込んでしまうのはCGIプログラムが移 動したときなど,環境に依存してしまい不適切である.
よって,PIMLの中で特殊文字 ## で囲まれた文字列はCGIの呼び出しタグに置換 するという作業を行っている.
配置が終わったら, 箱をフォントの大きさと文字数から箱の大きさを計算し, 各行の箱の最大の高さと,各列の箱の最大の幅でもって整地をし, 具体的な座標を箱に与えjava.awtの機能を利用して画面に表示する.
最後に,箱同士をそれに対応する関係の線でつなげる.
例 Iterator パターン