|
|||
まずはクラス | |||
まず,口座というクラスを考えます.属性として, 「残高」,操作として,「預け入れる()」と「引き出す()」を持っています. 図1 : 口座クラス このクラスをじっくり見て下さい.このような,クラスのUML表記を一般化 して,「クラスとは何か」を考えて見ましょう. クラスは1つの名前を 持ち、属性および操作 をそれぞれ複数持っています.これは,次のようなUMLクラス図で表現できます. 図2 : クラスをUMLで表現する(メタモデル) もう少し分析してみましょう.操作も属性もクラスに属する要素で あり,クラスを特徴付けるものです.可視性などの共通の属性もあるでしょう.よって,操作と属性を汎化して特徴としましょう. また,クラスは名前を持ちますが, 操作も属性も名前を持ってい ます.UMLのすべての要素を表すモデル要素という 抽象クラスを導入して,名前をそのクラスの属性とします.さらに,残高クラス には出て来ませんが, クラスとよく似たものに,インター フェイスがあります.どちらも,特徴のリ ストを持っていますが,インターフェイスには実装がありません.クラスとインターフェイスを 汎化したものを,新しくクラシファイアと名づけ ることにしましょう.これらをUMLクラス図で表現すると,以下のようになります. 図3 : さらに分析したクラス(メタモデル) このように,UMLをUMLを使ってより正確に定義して行くことができます. クラスの周辺についてのみ分析を行いましたが, クラス図だけでも,関連, 集約, 多重度などなど,まだまだ分析しなけ ればならないモデル要素があります. | |||
UML1.4メタモデルさて,こうやって作られたUMLのモデルを, メタモデルと読んでいます. メタとは, 一段高い階層という意味です.UML 自身を,UML 自身で 定義したモデルと言うことができます. 図4に,クラス周辺の正式なメタモデル図を示します. ここで,「正式な」とは,「UML 1.4 として定義されている」,という意味です. この部分は,UML1.4メタモデルの中の,コア(Core)パッケー ジ-バックボーンと呼ばれている部分(の一部)です. |
図4 : UML メタモデル(コアパッケージ - バックボーン) |
この図を読み取ることは,UML の良い勉強になります.UML を読む勉強と UML を知る勉強です.これから,以下が読み取れます.
どうでしょうか.UML の構造がより明確になっています.これも,UMLの表現能力の高さの現れだと言えます. | ||||||
モデル階層 | ||||||
では,UMLモデルの,このメタ構造はどの ようになっているのでしょうか.「モデル」と言った場合,次のレベルが 考えられます. 一番下が,現実のユーザオブジェクトレベル(M0), その上が,ユーザが作った UML モデルレベル(M1), そして,その上が,UML 自身をUMLで分析したメタモデル(M2)です. M0, M1, M2 は3層の階層構造となります. 例えば,先程の「口座」クラスを考えて見ましょう. 図1(再掲) : 口座クラス(M1) これが,一般的にUMLクラス図と言われているものです.これは, 3階層の真ん中,M1 となります. この図は,UMLのユーザのあるモデルを示しています. 次に,実際のインスタンスレベル(具体的なオブジェクト)では, この状況はどのようになるでしょうか.M1 の下にある,M0 を考えます. このモデルのオブジェクトモデル(データの一例)としては, 以下の「佐藤さんの口座例」が考えられます. 図5 : 口座のオブジェクトモデル(M0) この例では,佐藤さんの口座として,残高2,000円の状態をもった あるオブジェクトが示されています. これは,UMLのオブジェクト図として表されています. これは先のモデルの一つのデータ例,インスタンス例ということができますし, 逆に,先のモデルは,このようなデータを一般的に記述したものということができます. 最後に,M1の上のM2 です. さまざまなユーザのクラス図をさらに一般化して, UMLで表しているのがメタモデル(M2)でした.このメタモデルは, 例えば以下のように表現されます. 図2(再掲) : クラスをUMLで表現する(メタモデル M2) ここでも,先のモデル(口座モデル - M1)は,UMLメタモデル(M2)の一つのデータ例, インスタンス例といえますし,逆に,メタモデルは,モデルを一般的に 記述したものということができます. 最後に,これらの階層を表して見ます.この階層は, 「実例モデル」←→「一般化モデル」の階層となります.
階層を上に上がる方向をメタといいます.つま り,現在の階層をモデル化して一般化したものがメタ です.階層を下に下がる方向がインスタンス化です.モデルの一つの 実例が下にあると考えられます.これは,実例(インスタ ンス)と抽象化(クラス)の関係とも捉えられます. |
メタモデルの上は? |
メタモデルをさらに一般化することはできるでしょうか?それは何でしょう? 答えはイエスで,このモデルをメタメタモデルと呼びます.しかし, ここまで来るとその実質上の意味を捉えることが難しくなります. UMLでは,ユーザオブジェクト,モデル,メタモデル,メタメタモデル の4階層で,UML自身を正確に定義しようとしています. Kenji Hiranabe <hiranabe@esm.co.jp> Last modified: Mon Nov 25 19:03:56 2002 |