連載
Javaオブジェクトモデリング
第4回
静的モデル:クラスにおけるUMLとJavaのマッピング(2)
5.属性のマッピング |
本節では属性のマッピングについて検討します。
■■5.1 属性の種類■■
UMLの属性に対応するJavaのモデル要素は変数です。しかしJavaの変数には、UMLの属性に対応しないものもあり、UML属性とJava変数の対応は少しややこしくなっています。 UML属性とJava変数の関係を整理すると図7となります。
図7 UML属性とJava変数の関係 |
UMLの属性はJavaのインスタンス変数およびクラス変数に対応します。インスタンススコープを持ったUML属性がJavaインスタンス変数、クラススコープを持ったUML属性がJavaクラス変数となります。Javaの変数にはインスタンス変数とクラス変数以外にもいくつかあります。Javaの変数のコンストラクタパラメタとメソッドパラメタは、UMLのオペレーションパラメタに対応します。
ローカル変数と例外ハンドリングパラメタには、UMLに直接対応するモデル要素はありません。しかし、どちらもメソッドの実装に使用されるものであり、UMLの仕様外の部分となるので問題はありません。
問題があるのはJavaの定数です。Javaの定数はfinalとstaticの修飾子を伴った変数の形を取りますが、意味的にはまったく別物であり、定数として独立して考えた方がよいのです。
■■5.2 部品のマッピング■■
UML属性の部品とJava属性の部品の対応関係は図8となります。
図8 UML属性とJava属性のマッピング(クリックすると拡大します) |
●5.2.1 共通の部品
属性名、型、可視性、初期値はUMLの部品とJavaの部品がそのまま対応します。
UMLのスコープはJavaのstaticの有無に対応します。Javaではstaticで修飾された属性のスコープはクラススコープ、staticで修飾されていない属性のスコープはインスタンススコープになりますが、これがそのままUMLのスコープの定義に対応します。
●5.2.2 要検討の部品
マッピングに検討が必要な部品は以下のものです。
- 多重度
- 順序性
- changeability
changeabilityは、属性の変更可能性に関するプロパティで、changeable、frozen、addOnlyのいずれかの値を取ります。changeableはJavaの通常のインスタンス変数/クラス変数と同じ意味を持ちます。frozenはJavaのfinalとは若干意味が異なります。addOnlyはJavaに対応する機能はありません。
●5.2.3 Javaのみの部品
Javaのみの部品として、以下の3つの修飾子が挙げられます。
final | 変数の更新は不可 |
transient | 直列化対象でない |
volatile | マルチスレッドによる同期対象 |
transientとvolatileは、UMLにはまったく存在しないJava独自の機能です。UMLで表現する場合には、ユーザー定義のステレオタイプまたはプロパティを用いる必要があります。Javaのfinalは、UMLのchangeabilityとの関係が発生します。
Javaのfinalは変数の値は変更されないということを意味します。Javaの変数にはintやfloatなどプリミティブ型のデータの値またはjava.lang.Stringなどのオブジェクトへの参照が格納されます。このことからJavaのfinalは以下の意味を持っていることになります。
- 変数がプリミティブ型の場合、値は変更されない
- 変数がオブジェクトへの参照の場合:
-
-オブジェクトがイミュータブルオブジェクト(不変オブジェクト)の場合、値は変更されない
-オブジェクトがイミュータブルオブジェクトでない場合、オブジェクトへの参照情報は変更されない
●5.2.4 UMLのみの部品
UMLのみに存在する部品として以下のものを挙げることができます。
- persistence
つまり、Javaでの実装を想定した設計モデルでは、あえて使う必要はないと思われます。もちろん、必要に応じて設計モデルで使用し、Javaでの実装の時点で、対応するアルゴリズムを手動で実装するという方法はあります。
2/5
|
Javaオブジェクトモデリング 第4回 | |
“クラス”のマッピング | |
属性のマッピング | |
オペレーションのマッピング | |
サンプルプロファイル | |
マッピング例 |
Javaオブジェクトモデリング INDEX |
IT Architect 連載記事一覧 |
アーキテクチャ 新着記事
@IT情報マネジメント 新着記事
この記事に対するご意見をお寄せください managemail@atmarkit.co.jp