第 111 回 配備のメタモデル 図10-04
図 1 0 − 0 4 は 、 配 備 の メ タ モ デ ル 図 で す 。 DeploymentTarget( 配 備 す る 場 所 を 示 す ) と DeployedArtifact( 配 備 さ れ る 内 容 物 ) は 、 配 備 ( Deployment) に よ っ て 関 連 付 け ら れ て い ま す 。 DeploymentTarget は配備を所有する形の定義です。 DeploymentTarget はプロパティと汎化関係を持ちますが、これにより DeploymentTarget は内部構造 を 持 つ こ と が で き ま す 。 ま た 、 DeploymentTarget と DeployedArtifact は 、 共 に InstanceSpecification と汎化関係を持ち、UML 図でインスタンスレベルでの表現を可能にします。
第 112 回 プロファイル ステレオタイプそのものは、キーワードをギュメで括って表現します。 ほとんどの場合、ステレオタイプは、標準ステレオタイプと呼ばれるあらかじめ UML で事前に定義されて いる種類のみを使用しますが、場合により自分固有のステレオタイプを付け加えたい事があります 。代表 的なケースとして、次のような場合が上げられます。 • 特定のプラットフォームやドメインに固有の専門用語を使用したい場合 • 別のシンボル、アイコンを使いたい場合 • 既存のメタモデルに、新たにセマンティクスを付け加えたい場合 • 既存のメタモデルに、制約を付け加えたい場合 • モデル変換の際に必要な情報を付け加えたい場合 プロファイリングは、メタモデル構造をいじりますが、その大前提として、 UML そのものの構造や振舞い は一切変えることはできません。(例えば、メタモデルの汎化関係のなかに新たなメタクラスを付け加え ると言った事はできません)。プロファイルは、あくまでも既存の UML の言語構造を温存し、その上に機 能を拡張するものです。
第 113 回 拡張 前回に述べましたように、プロファイルを用いた拡張は、既存の言語のルールはそのまま温存します。そ して、事前に定義されている UML 図の構成要素(エレメント)に新規に機能を付け加え、(同じ名前です と言語を変更してしまうので)別の名前を付けて言語体系に付け加えます 。この新たに付けられた名前を ステレオタイプ名と呼びます。 図I-02
図 I-02 で示される矢印は、拡張を表現します。ターゲット側に拡張される側の既存のエレメントを置き、 ソース側に拡張の結果生成される新たなステレオタイプを書きます。 拡張される側のエレメントは、クラス、コメントなどほとんど全ての UML エレメントが対象となりますが、
唯一例外があり、ステレオタイプ自身はプロファイルにより拡張することができません。
第 114 回 インタフェースの拡張例 図I-01
図 I-01 の(A)図は、メタクラス”Interface”を拡張し、"Remote"と言う名前のステレオタイプを定義して いることを示しています。この絵は、いわゆるメタモデル図であり、言語を拡張していることを示してい ます。この拡張により、ステレオタイプ<<Remote>>が、ユーザーモデル層で使用可能になります。 (B)図は、その表記例です。 この図中の 「テスト」と名付けられたエレメントは、 インターフェースの性質を引き継ぐと共に 、 「Remote」で定義された性質(メタ属性やアイコンなど)を継承します。
第 115 回 プロファイルと MOF プロファイルは元の言語体系を変えずに拡張のみを行なうのに対し、MOF は、基本的にメタモデルを自由 に変更する事が可能です。その意味で、MOF はプロファイルの機能を含むと言う言い方が出来ます。そし て事実、プロファイルで拡張したものを、MOF の表現で記述することが出来ます。 図I04
図 I04 は、インターフェースと言うメタクラスを拡張し、ホームと言うステレオタイプを拡張しています。 これと同等の表現を MOF モデルを使って書くと、図 I03 のようになります。MOF による拡張は、この図 に示されるように、コンポジット集約の形になります。元のメタクラス「インタフェース」がステレオタ イプ「ホーム」(これもメタクラスです)を占有し、かつステレオタイプ側から、コンポジット側 (元の メタクラス)への誘導可能性が必要になります。(つまり、両方向へ誘導可能) コンポジット側の多重度は 1 となりますが、[ホーム」側のインターフェースは、0..1 となっています。 前者は、コンポジット集約であることの制約により当然1ですが、後者は、0..1 以外の多重度を持つ場合 があります。 図I03
第 116 回 拡張(プロファイル・パッケージ) 第 115 回で述べましたように、プロファイリングによる拡張は、MOF のレベルではメタクラス間の関連で 表現され、関連であるために誘導可能性や多重度などの特性を持つことは先に見た通りです。そして、多 重度に関しデフォルト値を持ち、拡張される側の多重度は1、拡張する側のステレオタイプの多重度は 0..1 です。 また特に、拡張する側の多重度が1である場合がプロファイルで規定されており、図 I 05 の A 図のように MOF レベルで拡張する側(Bean)の多重度が1であるような場合、プロファイル・レベルでは B 図のよ うに拡張の矢印のそばに {required} と言うキーワードを付けて表現します。これは、Component のイ ンスタンスには、必ず Bean と言うステレオタイプのインスタンスが伴うことを示しています。この性質は、 JAVA Beans を定義する上で使用されています。 図I05
第 117 回 パッケージ(プロファイル) 図I06
図 I06 はプロファイル・パッケージの表示例です。この Home と言うステレオタイプには、アイコン”○” も定義されている。 図I07
図 I07 は、Java エンタープライズ・エディション用のプロファイルです。図で示されているように、 プロ ファイルでは、独立して一からメタモデルを構築することは許されず、何らかの元になるメタモデルが参照 されます。この例では、”Component”、”Artifact”、”Interface”が(元になる)参照されるメタクラス です。 図I08
また、参照されるメタモデルが、パッケージ内に無い場合は、他のパッケージからインポートしてきて利用 します。 図 I08 では、”Manufacturer”というプロファイル用パッケージが、JavaInteger や Color と言う型をイン ポートしている状態を表しています。また、”Factory”と言う名前の通常の(メタモデルではない)モデル パッケージに”Manufacturer”パッケージを適用(<<apply>>)しています。
この適用により、”Factory”パッケージでは、<<Device>>と言うステレオタイプや、”Volume”という タグ付き値(メタ属性)が、使用可能になります。
第 118 回 プロファイルの適用 図I09
図 I09 では、”Webshopping”と言うパッケージが、”Java”と”EJB”と言う 2 つのプロファイルパッケージ の 適 用 を 宣 言 し て い ま す 。 こ の ( < < apply > > と 言 う 依 存 関 係 で 示 さ れ る ) 適 用 宣 言 に よ り 、 ”Webshopping”パッケージ内では、Java と EJB パッケージ内の定義が適用されることになります。
第 119 回 ステレオタイプとアイコン ステレオタイプは通常ギュメ(<<と>>)でキーワードを囲んで形で表現しますが、アイコンを用いて もっと図形的な表現をすることが可能です。 図I10
図 I10 は、メタクラス"Class"を拡張して"Clock"と言う名前のステレオタイプを作っていますが、この時 に同時にアイコンも定義することが可能です。 図I11
図 I11 は、その表示オプションを示しています。 上段左の絵は、通常のステレオタイプの表現ですが、上段真ん中の絵は、ギュメで囲まれたキーワードの 代わりに、アイコン(時計のシンボル)で表現しています。また、上段右側は、四角形を用いずアイコン だけで表現しています。この表現が可能なのは、モデル要素が一つのステレオタイプのみの拡張である時 です。
下段のように、複数のステレオタイプの拡張である場合は、アイコンだけの表現は、許されません。また、 複数のアイコンを一つのステレオタイプに定義する事も可能ですが 、解り難くなるだけですので、通常は 避けた方が良いでしょう。 実は UML では、このステレオタイプによる拡張のアイコン表現を標準に含んでいます 。代表的なものは、 アクター表現のスティックマンです。これは、ステレオタイプ<<Actor>>に定義されたアイコンです。
第 120 回 メタモデルのインスタンス表現 図 I10 は、"Clock"と言うステレオタイプのメタモデル図です。 この図を、インスタンス表現すると、図 I12 のようになります。 図I12
図中 のすべてのクラス名には下線が引かれ、メタクラスのインスタンスである事を示しており、属 性"name"は、分類子名(クラス名等)を表しています。 図中に、"iscomposite"という属性があります。これは、 拡張(Extension)と言う概念が、コンポジット の性質を使って構成される事に起因します。ステレオタイプが定義されると、そのインスタンス(ここで は"Clock")は、拡張される側のメタクラス(ここでは"class")のインスタンスを(内部に)所有します。 これらの性質を 2 つのメタクラス、Property と ExtensionEnd を用いて表しています。 また、拡張の性質を表すメタクラス、Extension には、"isRequired"と言う論理値を持つ属性があり、こ の値が True であると、拡張される側の分類子は必ずステレオタイプで示される性質を持つ事になります。
第 121 回 ステレオタイプのメタ・レベル表現 メタ・レベルの図、メタクラス図です。あくまでも、メタクラス図を用いてインスタンス・レベルの表現 を行っているからです。 モデル・レベルの表現としては、下図 I14 のような風に書きます。この図では、"StopWatch"は、ステレ オタイプ"clock"に属する事を意味しています。 図I14
クラスが複数の上位クラスを多重継承出来るのと同様に、ステレオタイプは複数のメタクラスを拡張する 事が出来ます。 図I13
図 I13 では、ステレオタイプ"Clock"は、"Component"と"Class"と言う 2 つのメタクラスを拡張していま す。また、このメタモデル図では、<<metaclass>>と<<stereotype>>と言う二つのステレオタイ プを使っていますが、これらは、謂わば「メタ・ステレオタイプ」のようなものであり、メタメタ・レベ ルで拡張が定義されます。 また、"Creator"と謂うステレオタイプに{Required}と言う制約が付随しており、このパッケージ内で は、"Class"単体では使用出来ず、必ず"Creator"として使用される必要がある事を示しています。
最終回 メタ属性 UML2 では、タグ付き値はステレオタイプと必ず結びつけられる事が必須となり、名称もメタ属性と呼ばれ るようになりました。 図I15
図 I15 は、”clock(時計)”と言うステレオタイプに”resolution(精度)”と言うメタ属性が定義されている事 示しています。 上段の図は、モデル・レイヤーでの記述で、下段の図は、メタモデル・レイヤーの図(インスタンス表現) であり、ともに同じ事を表現しています。 図I16
図 I16 は、" creator”と”clock”と言う 2 つのステレオタイプを持つ”Stopwatch”のクラス図表現です。 この図のように、2 つのステレオタイプが個別にメタ属性を持つ場合もノートの記号を使って、それぞれの 値を指定する事が出来ます。