|
第3回
本節ではUMLの “クラス”として、以下の3つの分類子の構造について見ていきます。
クラスは分類子の一種であり、クラス図における中核的なモデル要素です。 ●2.1.1 アイコン UMLでは、クラスを示すアイコンは、前回ご紹介したとおり図3に示したものです。文章ではなく図なので、大量の情報がコンパクトにまとめられています。
クラスアイコンは、複数の区画から構成されます。1番上にあるのが「名前区画(name compartment)」です。その下に、属性用の「並び区画(list compartment)」、オペレーション用の並び区画が続いています。並び区画は利用者の目的によっていくつ使ってもよいのですが、属性用とオペレーション用のものがUMLの標準仕様で定義されています。 ●2.1.2 メタモデル クラスアイコンから分かるUMLクラスのメタモデルは図4となります。このメタモデルを前提に、UMLクラスの構成について調べていきましょう。なお、このメタモデルは本連載の説明用のもので、UMLの定義する正式なメタモデルとは異なっています。
図4のUMLクラスのメタモデルは、UMLクラスが以下の構造になっていることを示しています。
UMLのクラスはオブジェクト指向という観点から見るとオーソドックスな構成になっています。ステレオタイプや要素プロパティといった拡張機構を使って、クラスをチューニングして使用することが前提になっているわけです。 ●2.1.3 ステレオタイプ 下記の表にUMLの標準仕様で定められているクラス用の標準ステレオタイプを示します。下記の表では、ステレオタイプとその意味に加えて、UML1.3およびUML1.4での定義状況、Javaでの利用とその理由を示しています。
これらの標準ステレオタイプから、Java向けの設計モデルで利用するものを絞り込みます。 typeとimplementationClass(UML 1.4ではimplementation)は、分析レベルのクラス(type)と設計レベルのクラス(implementationClass)を対比させる場合に使用するステレオタイプです。Javaの設計モデルに直接利用することはあまりないので、本連載の検討対象とはしません。 metaClassは、「そのインスタンスがクラスであるクラス」、すなわちメタクラスを示すステレオタイプです。Javaではjava.lang.Classがこのメタクラスに相当します。Smalltalkなどの言語ではメタクラスを操作することでさまざまなテクニックを用いることができるのですが、Javaではメタクラスを直接操作するような処理を行うことができないため、設計モデルの作成においてはあまり重要度の高いモデル要素ではありません。 powertypeは、「そのインスタンスがほかのタイプのサブタイプであるタイプ」、すなわちパワータイプを示すステレオタイプです。分析レベルのステレオタイプなので、本連載の検討対象外です。 processは “重要な実行コンテキスト”というと分かりにくいですが、UNIXにおけるプロセスに相当する実行単位を示すステレオタイプです。Javaのクラスには直接相当する機能がないので、本連載の検討対象外です。 threadはUNIXにおけるスレッドに相当する実行単位を示すステレオタイプです。Javaではjava.lang.Treadを用いて実現することができます。。 utilityは、インスタンスオブジェクトを持たず、クラススコープのオペレーションや属性を持つクラスです。Javaで直接相当する言語仕様はありませんが、Javaで実装することは可能です。 auxilityとfocusはUML 1.4で新規に導入されたステレオタイプです。この2つのステレオタイプはJavaの設計モデルでも利用できますが補助的に用いられるものであり、UMLとJavaとのマッピングには影響を与えないと考えられるので、本連載の検討対象とはしません。 以上の検討の結果、本連載で検討対象とするクラス用ステレオタイプは以下のものとなります。
●2.1.4 プロパティ UMLの仕様上は要素プロパティにはタグ付き値(tagged value)と制約(constraint)が格納されますが、これらを総称して本連載では「プロパティ」と呼ぶことにします。下記の表にUMLの標準仕様で定められているクラス用のプロパティを示します。表では、ステレオタイプとその意味に加えて、UML1.3およびUML1.4での定義状況、Javaでの利用とその理由を示しています。
activeは、スレッドを内蔵したオブジェクトであり、いわゆるアクティブオブジェクトを示します。Javaではマルチスレッドによる実装で実現することができます。 rootは、クラスがルートクラスであることを示します。Javaではjava.lang.Objectがすべてのクラスのルートクラスなので、rootの性質を指定できる対象となります。 leafは、クラスがサブクラスを持たない継承の末端にあることを示します。Javaでは修飾子finalで表現することができます。 abstractは、クラスが抽象クラスであることを示します。Javaでは修飾子abstractで表現することができます。 persistenceは、オブジェクトの永続性に関する状態を示します。値としてtransitoryまたはpersistentを指定します。transitoryは永続化対象外のオブジェクト、persistentは永続化対象のオブジェクトを示します。 semanticsは、メタレベルの情報であり、Javaとのマッピングには無関係なので、本連載では検討対象外とします。 以上の検討の結果、本連載で検討対象とするクラス用プロパティは以下のものとなります。
●2.1.5 Javaで利用するUMLクラスの種類 UMLにおける “クラス”は、ステレオタイプやプロパティによってさまざまな意味や機能を付加することができます。UMLの “クラス”であるクラス、インターフェイス、例外とステレオタイプの関係は下記の表に示しました。インターフェイスと例外にmetaClass、 thread、 utilityというステレオタイプを使用することはないので、結果として以下の種類の“クラス”が利用可能ということになります。
UMLの“クラス”であるクラス、インターフェイス、例外とプロパティの関係は次の表に示します。クラスはすべてのプロパティを設定可能です。インターフェイスは意味的にはrootとleafが設定可能になります。例外は基本的にはクラスと同様ですが指定して意味があるプロパティはroot、leaf、abstractとなります。
|
[an error occurred while processing this directive] |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||


