|Lemon Home Page|

表示について(ユーザーインターフェース)


表示機構が必要な理由

本研究では, PIML という SGML で デザインパターンの説明文,構造情報,疑似コードなどを統合化して 取り扱っている. これは,主に情報の流通・管理・処理のためである. しかし, 実際の利用において,特に閲覧を行なう場合には, 説明文は項目毎に, 構造情報は図として表示されることが望ましい. PIML で記述されたデザインパターンを解析し, 整形して出力する機構が必要となる.

パターン文書の検索と閲覧には WWW ブラウザを用いるとした. これは,広域ネットワーク分散環境での遠隔閲覧の道具立てとして, すでに広く普及しているからである. 具体的には,HTML の生成と Java Applet による OMT 図生成を行なう.


表示のための課題

表示において課題となるのは,

  1. 目次の生成
  2. 説明項目の切り出し
  3. 他のソフトウェア部品との連係の実現
  4. OMT 図の生成
である.第1 の課題は,PIML 文書においてはタグによって パターン記述項目の構造が表現されているので, 目次に相当する部分は PIML 文書からそのタグを抜き出すことで動的に構成する. また,構造 <strcuture> 以外の記述項目では, 該当部分の記述についてテキストの前後に HTML タグを付けることで行う.

第3の課題は, 特に他パターンや他記述項目のページ(将来的にはソースコード部品など) へのリンクをどのように実現するかということである. ページは動的に生成されるため, WWW における通常の HTML ページと異なり, リンクを絶対パス URL のアンカーとして埋め込むことができない. また,ページ生成の cgi-bin 呼出しを PIML 文書に埋め込むことも, その cgi-bin の URL が必要となり,不可能である. そこで「抽象アンカー」の機構を考案した. これは,PIML 文書にはアンカーを識別子の形で埋め込んでおいて, HTML 化の際に, その識別子をパラメータとする cgi-bin 呼出しに変換するという機構である. このページ生成 cgi-bin を呼び出すことで HTML 化手続きが起動され, 識別子に対応するページが新たに生成されて表示される. これを例で示す.例中の "##識別子##" が 抽象アンカーであり, "p:" はそれがパターン文書であることを表す. なお,この表記法については引き続き検討を進めている.

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>


表示の流れ

具体的な解析と生成は以下のようになる.

  1. PIMLファイルを読み込む
  2. トークンの切り出し
  3. 構文解析
  4. 必要な部分の抽出

HTMLの作成

PIMLの中でIntent(目的),Motivation(動機)などHTMLで紹介する項目は HTMLで書いてあるので, 構文解析し必要な部分を取り出すとこれらの項目はほぼHTML化されている. これに前後に<HTML>や<title>などの付け足したいタグを加える.

さらに Related Pattern(関連パターン)などでは, 文中に他のデザインパターンを見に行くタグが必要になる. 本システムはCGIによって起動されるため, これを実現するためにはCGIの呼び出しタグが必要である. しかし,CGI呼び出しタグをPIMLの中に埋め込んでしまうのはCGIプログラムが移 動したときなど,環境に依存してしまい不適切である.

よって,PIMLの中で特殊文字 ## で囲まれた文字列はCGIの呼び出しタグに置換 するという作業を行っている.


OMT図の自動生成

OMT 図の生成は,おおむね次の手順に従ってシステムが自動的に行う.
  1. 名称・関係・「抽象」か否か・配置などの情報を PIML の構造定 義から抽出する.
  2. それぞれの箱の大きさを内部に記入すべき文字列とフォントの大 きさから割り出す.
  3. 上で述べた配置情報,箱の大きさ,および適切なマージン値から 箱の最適な絶対位置を定める.
  4. 適切な折れ線形状の決定や線の重なりの回避を行った上で,箱を 矢印で結ぶ.
OMT図の自動生成については先ほどの 解析の流れのなかで構文解析のときに配置情報の部分を解析しながら, Roleに対応するOMT図の箱を作って配置している. 配置情報はOMT図全体を2次元の行列と考え, 行列の行と列の大きさと,各Roleの位置から成っていることは説明した.

配置が終わったら, 箱をフォントの大きさと文字数から箱の大きさを計算し, 各行の箱の最大の高さと,各列の箱の最大の幅でもって整地をし, 具体的な座標を箱に与えjava.awtの機能を利用して画面に表示する.

最後に,箱同士をそれに対応する関係の線でつなげる.


Iterator パターン


Jun'ichi Segawa <segawa@db.is.kyushu-u.ac.jp>
Last modified: Mon Dec 15 17:19:41 JST 1997