第13回この記事は「こちら」に移動しました。浅海智晴2003/9/18前回までは4回にわたって、アソシエーションに関するUMLの部品について詳細な検討を行ってきました。そもそもその目的は、UMLアソシエーションとJavaのマッピングをスムーズに実現させることにあるのですが、これがなかなか難しい作業です。静的モデル:クラスにおけるUMLとJavaのマッピング(1)」)。クラスはUMLとJavaにおいて多少の機能差があるとはいえ、同じ部品が用意されているため、UMLのみにあるモデル要素のアソシエーション(Java側には直接対応する部品がない)と比べて楽な作業であるともいえます。それでは、いよいよ今回は、Java側のアソシエーションに関する部品の検討を行っていきましょう。3.アソシエーションに関するJavaの部品アソシエーションに関するJava側の部品は以下の4つです。配列コレクションライブラリ基本部品となるのはインスタンス変数とクラス変数です。多重度が2になるとインスタンス変数/クラス変数に加えて配列またはコレクションライブラリを併用します。静的モデル:クラスにおけるUMLとJavaのマッピング(2)」で説明したとおり、UMLの属性はJavaのインスタンス変数/クラス変数にマップされます。これまでの説明で、属性だけでなくアソシエーションもインスタンス変数/クラス変数にマップされることが分かりました。Javaプログラムで普通に利用されているインスタンス変数/クラス変数を、逆にUMLにマップする場合、属性とアソシエーションの両方が選択肢となるわけです。配列■■Javaの配列はUMLでは、属性またはアソシエーション・エンドの多重度として表現されることになります。配列に格納されているオブジェクトによって属性またはアソシエーション・エンドのどちらになるか決まります。コレクション■■Javaのコレクション機能は図1に示すCollection系のクラスと、図2に示すMap系のクラスから構成されます。大枠ではCollection系は多重度に、Map系は限定子に対応します。Collectionjava.util.Collectionは図1に示すCollection系のコレクション機能の基本となるインターフェイスです。java.util.Collectionには以下のサブインターフェイスがあります。java.util.Listjava.util.Setjava.util.SortedSetjava.util.Collectionとして以下の実装クラスが標準で用意されています。java.util.ArrayListjava.util.LinkedListjava.util.Vectorjava.util.Stackjava.util.HashSetjava.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での実装においては、以上の実装クラスを目的に応じて使い分けることになります。用途に応じて、これら以外の実装クラスを自作したり、ほかのクラスライブラリのものを利用する必要も出てきます。Listjava.util.Listとして以下の実装クラスが標準で用意されています。java.util.ArrayListjava.util.LinkedListjava.util.Vectorjava.util.Stack前述したとおりjava.util.Vectorとjava.util.Stackは、UMLの多重度をマッピングする目的にはあまりふさわしくないので、選択肢は以下の2つになります。java.util.ArrayListjava.util.LinkedListjava.util.ArrayListとjava.util.LinkedListの機能は前述したとおりです。Setjava.util.Setとして以下の実装クラスが標準で用意されています。java.util.HashSetjava.util.TreeSetjava.util.HashSetとjava.util.TreeSetの機能は前述したとおりです。SortedSetjava.util.SortedSetとして以下の実装クラスが標準で用意されています。java.util.TreeSetjava.util.TreeSetの機能は前述したとおりです。Mapjava.util.Mapは図2に示すMap系のコレクション機能の基本となるインターフェイスです。java.util.Mapとして以下の実装クラスが標準で用意されています。java.util.HashMapjava.util.TreeMapjava.util.WeakHashMapjava.util.IdentityHashMapjava.util.Hashtablejava.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での実装においては、以上の実装クラスを目的に応じて使い分けることになります。用途に応じて、これら以外の実装クラスを自作したり、ほかのクラスライブラリのものを利用する必要も出てきます。SortedMapjava.util.SortedMapとして以下の実装クラスが標準で用意されています。java.util.TreeMapjava.util.TreeMapの機能は前述したとおりです。以上、アソシエーションに関連するJava部品をまとめました。UMLのアソシエーションをJavaで実装するうえでの基本部品は、インスタンス変数とクラス変数です。アソシエーション・エンドの部品である多重度の実装には配列またはCollection系のコレクションライブラリを使用します。限定子の実装にはMap系のコレクションライブラリを使用します。次回はこれらの部品を組み合わせて、Javaプログラムを前提としたUMLアソシエーションのプロファイルについて考えていきましょう。おいてデジタルマーケティングの成果を出すポイントとは。View」を提供LINEは、コミュニケーションアプリ「LINE」のトークリスト最上部に動画広告を配信できる...日本企業のデータ分析はIT部門依存が顕著——MicroStrategy調べ「グローバルエンタープライズアナリティクス調査2020」の結果です。Inc.著作権はアイティメディア株式会社またはその記事の筆者に属します。(著作権について)当サイトに掲載されている記事や画像などの無断転載を禁止します。@IT情報マネジメント」「JOB@IT」「@ITハイブックス」「ITmedia」は、アイティメディア株式会社の登録商標です。当サイトに関するお問い合わせは「@ITへのお問い合わせ」をご覧ください。