モデルに対してメタモデルという概念がある
前回「ソフトウェアは知識の結晶」はソクラテス式対話編その2として「知識」とは何かについて考えてみました。
今回はUML2仕様書を題材にして「メタモデル」を読みながら、あらためて「知識とは何か?」について考えてみたいと思います。
[登場人物]
司会 UMLは知識を表現するための1つの道具です。UMLで表現されたモデルは知識の結晶です。
ソクラテス そのモデルを作成するために知識というものもある。これは前回の「(1)学習と実践を繰り返して体で覚える」ものであり、それが「(2)仕事の原動力」であり、その仕事には「(3)知識を結晶化させる人と結晶を解放して利用する人」がいる。
司会 つまりそれはUMLを活用するための知識、開発にUMLを有効利用するための知識というものですね。
某 ところでUMLという知識表現の道具はどんなふうに作られているのでしょう。そこではどんな知識が表現できるのでしょうか。
司会 UML仕様書をちょっと読んでみましょう。モデルを表現するモデルを「メタモデル」と呼び、UMLの仕様書の位置付けはメタモデルです。
ちょっと乱暴な言い方ですがUMLの仕様書はUMLをベースにして書かれています。もしこれからUMLを勉強しようという人がUMLの仕様書を開くと、そこにはたくさんのクラス図があり、そもそもクラス図に出てくる基本的な「クラス」や「関連」、「汎化関係」などの意味が分からないとUMLの仕様書も読めないことになり困ってしまいます。
オブジェクト指向開発ではモデリングという言葉がよく出てきます。モデリングとはモデルを作成することです。「モデル」を日本語で表すなら「模型」ですが、普通英語のままモデルという言葉が使われています。例えば、要求モデルにユースケース図を使用します。分析モデルや設計モデルには構造を表すクラス図と振る舞いを表すシーケンス図やステートマシン図を使用します。
UMLのモデルに使用される要素、例えばユースケース図では「アクター」と「ユースケース」、クラス図では「クラス」と「関連」などを定義しているUML仕様書自体も一種のモデルで、モデルを書くためのモデルです。それをメタモデルと呼びます。
某 広辞苑(第4版)には「メタ」はギリシャ語で「間に、後に、越える」とあります。メタモデルとはモデルを超えるモデルという意味でしょうか。
司会 モデルを定義するためのモデル、モデルの上位概念がメタモデルです。ではメタモデルのさらに上位概念というものも考えられそうですが、それはメタメタモデルと呼べばよいのでしょうか? さらに、その上位概念はメタメタメタ……と無限にあるのでしょうか? これではUMLの仕様書がいつまでたっても完成しません。UMLにはM0〜M3の4つのメタ階層が定義されています(図1)。M3がメタメタモデルでそれが最上位です。
M0はモデリングの対象となる現実世界です。
M1はシステム開発で一般的に使用されるモデルで、ユースケース図、クラス図、シーケンス図などのダイアグラムで表現された個々の具体的なモデルはここに位置付けられます。
M2はM1レベルのモデル作成に使用できるモデル要素やその使用方法のルールである文法を定義するためのモデルで、UML仕様書はここに位置付けられます。UML2の13のダイアグラムもすべてここに定義されています。
M3は一番上のメタモデルです。M2がメタモデルなので、メタメタモデルと呼ぶこともあります。UML仕様書作成に使用できる要素や文法のための基本的な定義やルールを表したモデルです。UML仕様の上位に位置しMOF(Meta Object Facility)と呼ばれ、UMLとは別の仕様として定義されています。UMLに関してこれより上のメタモデルはありません。
某 それで一応一安心ですが、そうすると最上位は自己完結している必要がありますね。
ソクラテス 自然言語と数学が究極のメタモデルといえる。自然言語も数学もそれ自体で自己完結している。
司会 UML2には13のダイアグラムが定義されています。仕様書にはこれを汎化関係で表現したメタモデルがあります(図2)。上から見ていくとダイアグラムはまず構造図(Structure Diagram)と振る舞い図(Behavior Diagram)の2種類に大きく分類されています。代表的なクラス図は構造図の一種に位置付けられています。構造図は6つ、振る舞い図は4つの相互作用図(Interaction Diagram)とそれ以外の3つの計7つ、合計6+7で13個のダイアグラムが定義されていることがこのメタモデルから分かります。
某 つまりUMLで表現できる知識とは、結局これら13のダイアグラムに凝縮されるというわけですね。
司会 UMLはOMGという団体で標準化を行っています。仕様書はそのホームページから誰でも自由にダウンロードすることができます。そこではUML2の仕様書として次の4つが登録されています。MOFはここには含まれません。
(1)はUMLでモデリングを行うための仕様です。クラス図など13のダイアグラムの書き方はここに定義されています。開発者向けのUML解説書はこれがベースです。
(2)は(1)を定義するためのベースとなる仕様で、一般のUMLユーザーには直接関係のないものです。
(3)はUMLのダイアグラムだけでは表現できない制約条件を式として記述するためのものです。
(4)はUMLツール間でクラス図などのダイアグラムを交換するための仕様の一部です。データ形式はMOF仕様に含まれるXMI(XML Metadata Interchange)仕様により交換可能ですが、ダイアグラムのレイアウト情報はXMIにはありません。UMLツールに必要なレイアウト情報を交換するための仕様がDIです。
クラス、アクター、ユースケースなどUMLのダイアグラムで使用されるモデル要素はUML仕様の中ではすべて「クラス」として定義されています。通常のモデル(メタ階層M1)で使用されるクラスと混乱を避けるため、メタモデル(メタ階層M2)の中のクラスを「メタクラス」と呼びます。これらメタクラスの定義にメタクラス間の関連や汎化関係が使用されています。すべてのメタクラスの汎化関係としての最上位にあるメタクラスは“Element”としてインフラストラクチャ仕様のパッケージ“Core”の中に定義されています。すべてのメタクラスは汎化関係でこの“Element”の子孫です。
UMLダイアグラムに特に関係の深いメタクラスの中で、まず分類子(Classifier)と特性(Features)について見ていきましょう。
UML仕様書には「分類子はインスタンスの分類、つまり共通の特性(features)を持つインスタンスの集合を表す」(Infra9.4.1)とあります。
クラス図で使用される“Class”、ユースケース図で使用される“Actor”、“UseCase”はすべて分類子の一種です。メタクラス“Classifier”のメタモデルとしてのサブクラスとして定義されています。
ちょっと違和感がありますが “Association”(関連)も分類子です。ちなみにM1レベルでの関連のインスタンスはリンクなので、共通の特性を持つリンクの集合を表すものが関連です。
UML仕様書には「特性は、分類子のインスタンスの振る舞いまたは構造の特徴(characteristics)を言明する」(Infra9.4.2)とあります。
クラスは属性と操作を持ちます。これはUML仕様書から簡略化して図3のようなメタモデルで表すことができます。メタクラス“Features”は“StructualFeature”と“BehavioralFeature”の2つに分類されます。前者のサブクラスに“Property”、後者のサブクラスに“Operation”が定義されています。メタクラス“Class”は属性として“Property”を持ち、操作として“Operation”を持ちます。
仕様書には「プロパティ(property)は、クラスの属性を表す型を持つ要素である」(Infra10.2.5)、「操作(operation)はクラスに所有され、そのクラスのインスタンスのコンテキストから呼び出される」(Infra10.2.3)とあります。
図3の抽象/具象はインスタンスを持つかどうか、ここでインスタンスとはM1レベルのモデル要素です。つまり抽象メタクラスである分類子/特性などを直接クラス図に使うのではなく、そのサブクラスに位置付けられ、具象メタクラスであるクラス/プロパティ/操作をモデリングで使用します。
某 モデルに対してメタモデルという概念があることが分かりました。
司会 UMLによるモデリングとは、UML仕様書に定義されているメタモデルをベースにして知識を結晶化させる作業ということになります。
某 つまり知識を表現するためには、知識をどのように表現するのかという知識が必要ということですね。そうするとモデリングを行う人は、この膨大な仕様書を読まなければならないのでしょうか。
司会 例えばUML2準拠のツールを開発する人には絶対に必要ですが、そのツールを使ってモデリングを行う人には現実問題として一般的解説書で十分です。モデリングを続けてゆくうちにだんだんと体がメタモデルを覚えていきます。
某 それが冒頭の「(2)仕事の原動力」となっていくわけですね。
司会 メタモデルはメタ知識とでも呼べばよいのでしょうか。知識とメタ知識について考えていきたいと思います。
ソクラテス 「産婆の術」でそれを引き出していこう。UMLのモデルが「知識の結晶」なら、UML仕様書は「メタ知識の結晶」と呼べる。
司会 どうもありがとうございます。では次回もUML2仕様書を題材にしてメタモデル、メタ知識について考えてみたいと思います。よろしくお願いします。
河合 昭男(かわい あきお)
大阪大学理学部数学科卒業、日本ユニシス株式会社にてメインフレームのOS保守、性能評価の後、PCのGUI系基本ソフト開発、クライアント/サーバシステム開発を通してオブジェクト指向分析・設計に携わる。
オブジェクト指向の本質を追究すべく1998年に独立後、有限会社オブジェクトデザイン研究所設立。 OO/UML 関連の教育コース講師・教材開発、Rational University認定講師、東京国際大学非常勤講師。 ホームページ:「オブジェクト指向と哲学」
Copyright © ITmedia, Inc. All Rights Reserved.