この記事は「こちら」に移動しました。
連載

Javaオブジェクトモデリング

第13回
静的モデル:アソシエーションのJavaの部品

浅海智晴
2003/9/18

前回までは4回にわたって、アソシエーションに関するUMLの部品について詳細な検討を行ってきました。そもそもその目的は、UMLアソシエーションとJavaのマッピングをスムーズに実現させることにあるのですが、これがなかなか難しい作業です。以前検討した、UMLのクラスとJavaのクラスのマッピングも細かく考えていくと大変な作業でした(「第3回 静的モデル:クラスにおけるUMLとJavaのマッピング(1)」)。ですが、クラスはUMLとJavaにおいて多少の機能差があるとはいえ、同じ部品が用意されているため、UMLのみにあるモデル要素のアソシエーション(Java側には直接対応する部品がない)と比べて楽な作業であるともいえます。それでは、いよいよ今回は、Java側のアソシエーションに関する部品の検討を行っていきましょう。

3.アソシエーションに関するJavaの部品

 アソシエーションに関するJava側の部品は以下の4つです。

    インスタンス変数

    クラス変数

    配列

    コレクションライブラリ

  基本部品となるのはインスタンス変数とクラス変数です。 多重度が2になるとインスタンス変数/クラス変数に加えて配列またはコレクションライブラリを併用します。

■■3.1 インスタンス変数とクラス変数■■

 「第4回 静的モデル:クラスにおけるUMLとJavaのマッピング(2)」で説明したとおり、UMLの属性はJavaのインスタンス変数/クラス変数にマップされます。 そしてこれまでの説明で、属性だけでなくアソシエーションもインスタンス変数/クラス変数にマップされることが分かりました。 つまり、Javaプログラムで普通に利用されているインスタンス変数/クラス変数を、逆にUMLにマップする場合、属性とアソシエーションの両方が選択肢となるわけです。

■■3.2 配列■■

 Javaの配列はUMLでは、属性またはアソシエーション・エンドの多重度として表現されることになります。配列に格納されているオブジェクトによって属性またはアソシエーション・エンドのどちらになるか決まります。

■■3.3 コレクション■■

 Javaのコレクション機能は図1に示すCollection系のクラスと、図2に示すMap系のクラスから構成されます。大枠ではCollection系は多重度に、Map系は限定子に対応します。

図1 Javaコレクションライブラリ/Collection系

図2 Javaコレクションライブラリ/Map系

●3.3.1 Collection

 java.util.Collectionは図1に示すCollection系のコレクション機能の基本となるインターフェイスです。java.util.Collectionには以下のサブインターフェイスがあります。

    java.util.List

    java.util.Set

    java.util.SortedSet

 java.util.Collectionとして以下の実装クラスが標準で用意されています。

    java.util.ArrayList

    java.util.LinkedList

    java.util.Vector

    java.util.Stack

    java.util.HashSet

    java.util.TreeSet

 なお、java.util.Vectorは過去との互換性のために用意されているクラス、java.util.Stackはjava.util.Collectionとしてはあまり意味を持たないクラスなので、アソシエーション・エンドの多重度を実装する目的という意味では、以下のクラスが選択肢となってきます。

    java.util.ArrayListは、配列の機能のうえにjava.util.Listを実装した具象クラスです。全般的に良い性能を出します。

    java.util.LinkedListは、リンクを使ってjava.util.Listを実現した具象クラスです。要素の挿入や削除の実行速度が速い、ことが特徴です。

    java.util.HashSetは、ハッシュ法を用いて値の重複を検出する機能を持つjava.util.Setの具象クラスです。

    java.util.TreeSetは、バイナリツリーを用いて値の重複を検出する機能と値の順番に整列させる機能を両立させたjava.util.Sortedの具象クラスです。

 Javaでの実装においては、以上の実装クラスを目的に応じて使い分けることになります。 もちろん用途に応じて、これら以外の実装クラスを自作したり、ほかのクラスライブラリのものを利用する必要も出てきます。

●3.3.2 List

 java.util.Listとして以下の実装クラスが標準で用意されています。

    java.util.ArrayList

    java.util.LinkedList

    java.util.Vector

    java.util.Stack

 前述したとおりjava.util.Vectorとjava.util.Stackは、UMLの多重度をマッピングする目的にはあまりふさわしくないので、選択肢は以下の2つになります。

    java.util.ArrayList

    java.util.LinkedList

 java.util.ArrayListjava.util.LinkedListの機能は前述したとおりです。

●3.3.3 Set

 java.util.Setとして以下の実装クラスが標準で用意されています。

    java.util.HashSet

    java.util.TreeSet

 java.util.HashSetjava.util.TreeSetの機能は前述したとおりです。

●3.3.4 SortedSet

 java.util.SortedSetとして以下の実装クラスが標準で用意されています。

    java.util.TreeSet

 java.util.TreeSetの機能は前述したとおりです。

●3.3.5 Map

 java.util.Mapは図2に示すMap系のコレクション機能の基本となるインターフェイスです。java.util.Mapとして以下の実装クラスが標準で用意されています。

    java.util.HashMap

    java.util.TreeMap

    java.util.WeakHashMap

    java.util.IdentityHashMap

    java.util.Hashtable

    java.util.Properties

 なお、java.util.Hashtableは過去との互換性のために用意されているクラス、java.util.Properties、java.util.WeakHashMap、java.util.IdentifyHashMapの3つのクラスはjava.util.Collectionの機能よりも幅広い機能を持っているので、UMLの限定子をマッピングする目的にはあまりふさわしいクラスとはいえません。このため事実上の選択肢は以下の2つとなります。

    java.util.HashMapは、ハッシュ法を用いて値の検索を行う機能を持つjava.util.Mapの具象クラスです

    java.util.TreeMapは、バイナリツリーを用いて値の検索を行う機能と値の順番に整列させる機能を両立させたjava.util.SortedMapの具象クラスです

 Javaでの実装においては、以上の実装クラスを目的に応じて使い分けることになります。もちろん用途に応じて、これら以外の実装クラスを自作したり、ほかのクラスライブラリのものを利用する必要も出てきます。

●3.3.6 SortedMap

 java.util.SortedMapとして以下の実装クラスが標準で用意されています。

    java.util.TreeMap

 java.util.TreeMapの機能は前述したとおりです。

■■3.4 Java部品のまとめ■■

 以上、アソシエーションに関連するJava部品をまとめました。UMLのアソシエーションをJavaで実装するうえでの基本部品は、インスタンス変数とクラス変数です。アソシエーション・エンドの部品である多重度の実装には配列またはCollection系のコレクションライブラリを使用します。また、限定子の実装にはMap系のコレクションライブラリを使用します。

 次回はこれらの部品を組み合わせて、Javaプログラムを前提としたUMLアソシエーションのプロファイルについて考えていきましょう。

Javaオブジェクトモデリング INDEX


IT Architect 連載記事一覧


この記事に対するご意見をお寄せください managemail@atmarkit.co.jp

「ITmedia マーケティング」新着記事

DACと博報堂アイ・スタジオがコンテンツマーケティング支援チームを組成
デジタル・アドバタイジング・コンソーシアムと博報堂アイ・スタジオは、コンテンツマー...

「楽天市場」に企業のブランドサイトを設置、楽天データマーケティングが「RMP-Brand Gateway」を提供開始
楽天データマーケティングは「楽天市場」において、企業がブランドサイトを設置できる広...

広告配信のパフォーマンスを最大化する予算配分をAIで自動算出、サイバーエージェントがシステム提供
サイバーエージェントは、広告コンバージョン最大化を実現するAIシミュレーションシステ...