![]() |
[1999 年 4 月号] |
[Happy Squeaking!!]
4.自分を変えるオブジェクト
4.2 インターセッション
「メタモデリング」によって作られた「メタモデル」は、世界をモデリングするための堅牢な基盤を与えます。さらに、メタモデルを自由に変更可能にすることで、世界を様々に構成し直すことが可能になります。
江戸時代から明治時代への「文明開化」による日本社会の組み替えは、私達がコントロールできるものではありませんが、ことソフトウェアに関しては、意図的にメタモデルを変更可能にすることによって、後の柔軟性、拡張性を持たせることができます。
ここで、最近はやりのXMLについてみてみましょう。XMLは、"eXtensible Markup Language"の略です。いったい何がExtensible(拡張可能)なのでしょうか。HTMLではタグの要素は「HTML3.2仕様」といった形で定められ、自由な変更は不可能でした。(ブラウザメーカによる勝手な拡張はあったにせよ)。一方でXMLは、何が「タグの要素となるのか」というメタモデルを自ら定義できる機能を持っています。これによりHTMLでは実現し得なかった、任意の意味をもった構成要素を文章に持たせることが可能になりました。
XMLでは、タグの意味を定めるためにDTD(Document Type Definition)という言語が使われており、これがメタモデルを提供する役割を果たしています。例えば、本の情報を格納するページのフォーマットを規定する際に、DTDで以下のように定義することができます。
<!DOCTYPE bookInfo [ <! ELEMENT bookInfo(title, author, isbn, commentList) > <!ELEMENT title (#PCDATA) > <!ELEMENT author (#PCDATA) > <!ELEMENT isbn (#PCDATA) > <!ELEMENT commentList (comment+) > <!ELEMENT comment (#PCDATA) > ] >
DTDは、本情報の文書には、「タイトル、著者、ISBN、(コメント(複数))」が要素としてあることが定められています。このDTDにもとづき、XMLの実際の文書は、以下のようになります。
<? xml version=1.0" ?> <bookInfo> <title> Smalltalk Best Practice Patterns</title> <author>Kent Beck</author> <isbn>0-13-476904-X</isbn> <commentList> <comment>筆者のコンサルティング経験の中で生まれたSmalltalkの デザインパターンを平易に紹介。</comment> </bookInfo>
HTMLはいわば世界が固定された世界です。HTML3.2ならばHTML3.2の世界で、それに準拠したタグ内に実際のデータが埋め込まれていくのみです。HTML3.2を守らず勝手なタグを付け加えても、Webブラウザ側ではそれが何を意味するかがわからない(メタモデル、およびそれを表すメタ情報がない)ので、適切な表示などの処理を行なうことができません。XMLであれば、文書を構成する要素をDTDという形式で与えることによって、文書に新たな意味を持った要素を自由に追加でき、後の検索、表示の手がかりにしていくことができるのです。
また、オブジェクト指向分析設計の際に使われるモデリング表記法として、皆さんおなじみのUMLがありますが、やはりモデルの要素を定めるメタモデルがきちんと定められています。(具体的には「クラス」や「関連」といったものがメタモデルになります)。また、新たなモデル要素の追加に対し、ステレオタイプという仕組みによって、対処することができるようになってもいます。その例として、ObjectTime社のUMLのリアルタイム拡張 (ROOM)があります。capsule、port、connectorという三つの新たなモデル要素が、ステレオタイプを使うことでUMLのメタモデルに追加され、結果としてリアルタイム分野でのモデリング記述能力を増大させています。本来リアルタイムシステム用でないUMLも、ステレオタイプという、メタモデル追加の仕組みを用意しておいたことにより、リアルタイム用に容易にカスタマイズ、発展されていくことができたのです。これもメタモデルの組み替えの有効性を示しているといえるでしょう。
このように、システムに対し、単にメタ情報を尋ねてその値を取り出すだけでなく、得られたメタ情報を利用して自身の値を書き換えたり、メタ情報を構成するメタモデルを変更していくことが可能であれば、柔軟性、拡張性において非常に強力になります。
こうした機能は、「イントロスペクション」に対して「インターセッション」と呼ばれます。インターセッションは、「調停、とりなし」といった意味です。オブジェクト指向の世界では、通常のオブジェクトとメタ情報を表現するオブジェクトが互いに関わり合い、自らの環境を変化させていけることを指しています。
「イントロスペクション」に加え、「インターセッション」がサポートされることで、オブジェクトは、真に自律的な、よりエージェント化されたものへ進化していくことができるようになります。「インターセッション」と「イントロスペクション」はまとめて「リフレクション」と呼ばれます。リフレクション機能により、システムが自らの状態を察知し、それに合せて変容していくというエージェントシステムは、まだ実験的と思われていますが、次の潮流であることは間違い有りません。
「リフレクション」がフルサポートされたオブジェクト指向言語は、まださほどないのが現状です。が、Squeakはかなりいい線までいっているといえます。以下、例をみてみることにしましょう。
© 1999-2001 OGIS-RI Co., Ltd. |
|