第4回 オブジェクトをUMLで表現する 河合昭男 (有)オブジェクトデザイン研究所 2003/1/8 前回まで3回にわたって、主に実際の人間社会を題材にオブジェクト指向の考え方についてお話をしてきました。今回からUMLを用いてもう1歩、オブジェクト指向の世界に踏み込んでみたいと思います。UMLの仕様詳細を説明するのではなく、最低限必要なところから少しずつ説明していきます。今回はUMLで最も基本的なクラス図について説明をします。クラス図は抽象的なものなので、補助的に具体的なオブジェクト図を描いてクラス図の意味を確認することが大切です。
【UMLとは】 UMLとは、Unified Modeling Languageの略で、統一モデリング言語と訳されています。「統一」+「モデリング」+「言語」と3つのキーワードがあります。 1990年代前半、さまざまなオブジェクト指向の開発方法論(Methodology)が提唱され、普及の阻害要因になっていました。Rational社のBoochが統一を仕掛けたのですが、開発方法論、特に開発プロセスの統一は難しく、表記法のみ統一したものがUMLです。つまりオブジェクト指向による「モデリング」のための表記法を「統一」ものがUMLです。 【UMLは言語】 UMLを「言語」と呼ぶことに少し抵抗を感じるかも分かりません。日本語や英語のような自然言語は単語で構成されていますが、UMLはクラスやオブジェクトのようなモデル要素で構成されています。また、自然言語における文法のような役割として、UMLにもモデル要素の組み合わせルールがあります。自然言語では、単語を文法にのっとって構成することで文章を作成しますが、UMLでは、モデル要素をルールに従って組み合わせることで、クラス図やシーケンス図などのダイアグラムを作り出します。
【UMLは難しい? 簡単?】 UMLは「難しい?」「簡単?」という議論がありますが、単語数(モデル要素)は少ないですし、最低限のルールを理解することも難しくありません。問題はダイアグラムです。自然言語の文章でも上手・下手があり、人に感銘を与える文章や直木賞を受賞できるような文章はちょっとやそっとでは書けません。クラスを関連で結べばクラス図になるわけですが、ダイアグラムも文章と同様で、うまく描けるようになるにはそれなりの訓練が必要です。
【表記法1】 UMLでは、クラスは矩形(くけい)で表現し、クラス名を中に記述します。オブジェクトもアイコンは同じですが、名前に下線を付けます。オブジェクト名の記述法は、「オブジェクト名:クラス名」「:クラス名」「オブジェクト名」の3通りあります。例として「人」というクラスとそのインスタンスについて図1に示します。
【クラスとインスタンス】 クラスはオブジェクトを抽象化したもの、または同じ特性を持ったオブジェクトの集合です。一般的に1つのクラスは複数のインスタンスを持っています。例えばAさん、Bさん、Cさんは「人」というクラスのインスタンスです(図2)。
【表記法2】 クラスの属性を記述するときは、矩形を上下の区画に分割して上の区画にクラス名、下の区画に属性名を記述します。オブジェクトも同様で、矩形を上下の区画に分割して上の区画にオブジェクト名、下の区画に属性名とその値を記述することができます。 例えば人の属性として「名前」「生年月日」および「血液型」を定義します(図3上)。「人」というクラスのインスタンスであるAさん、Bさん、Cさんはそれぞれ固有の属性値を持ちます(図3下)。
【オブジェクト間のリンク】 例えばAさんはベンツを所有しているとします。これはオブジェクト「A:人」とオブジェクト「ベンツ:車」がリンクしていると考え、UMLでは図4のようにオブジェクト間を線で結んで表現します。このようなオブジェクト間の関係を表した図をオブジェクト図と呼びます。
【関連とリンク】 オブジェクト間にリンク関係があるとき、それぞれのオブジェクトをインスタンスとするクラス間には関連(association)という関係(relation)があります。関連はクラス間を線で結んで表現します。このようなクラス間の関係を表現する図をクラス図と呼びます。 クラス図は抽象的なもので、1つのクラス図に対して一般的に複数のオブジェクト図を描くことができます。同じクラス図で、例えばBさんは「国産X」という車を所有しているということも含まれています(図5)。
【多重度の例1】 前の例の続きで話を進めます。車を複数台所有している人もいれば、まったく所有していない人もいます。Bさんは「国産X」のほかにもう1台「国産Y」を所有しているとします。 これをオブジェクト図で表現することは簡単で、オブジェクト「B:人」からオブジェクト「国産Y:車」へのリンクを追加すればよいわけです(図6下)。 これをクラス図で表現する方法が関連の多重度です。図6上のクラス図の関連線の右端に“*”のマークがあります。これは「人」の1つのインスタンスとリンクする「車」のインスタンスの数が0以上であることを意味します。左端の“
1”は「車」の1つのインスタンスとリンクする「人」のインスタンスの数は必ず1であることを意味します。つまりこのクラス図は、どの人も車を1台も所有していないか1台以上の車を所有しており、逆にどの車にも必ず所有者が1人のみ存在することを意味します。
【多重度の例2】 図6のモデルでは、1台の車を2人以上で共同所有することはできません。図7のように関連線の「人」の側の多重度を“1..*”とするとこれが可能となります。“1..*”は「車」クラスの1つのインスタンスとリンクする「人」クラスのインスタンスの数は1以上であることを意味します。 例えば図7のオブジェクト図では「国産Y:車」がBさんとCさんの共同所有であることを示しています。
【多重度の定義】 多重度は2つのクラスAとBの関連においてリンクする相手側のインスタンスの数を示します(図8)。
多重度は次の表のとおり数字または“..”で範囲を示すことができます。“*”は任意の数を示します。
【関連名】 関連線の中央に関連の名前を記述することができます。一般的には動詞です。図9(a)の例では「人」は「車」を「所有する」と解釈することができます。主語を逆にして「車」は「人」を「所有する」というのは明らかに変ですね。通常どちらが主語かは明らかですが、主語を明示したいときは図9(b)のような三角のマークで関連名の方向を示すことができます。
【ロール名】 関連の両端にそれぞれのクラスのロール名を記述することができます。ロール名は相手方クラスとの関連における自分のクラスの役割(role)を示します。ロール名は一般的には名詞です。ロール名と関連名はどちらか一方を記述します。図9(c)の例では関連名「所有する」の代わりに、「人」が車の「オーナー」であり「車」は人の所有車であることをロール名で明示しています。 【ロール名の使用例】 次のようなAさんを取り巻く環境を例として考えます。
これをクラス図で表現すると図11のようになります。「人」というクラスの役割は「会社」との関連においては従業員であり、「テニス倶楽部」との関連においては会員であり、「車」との関連においてはオーナーです。このように関連の相手クラスによって異なる役割を持つ場合にロール名は有効です。
今回はUMLの第一歩として、クラス図の基本である関連、多重度、関連名、ロール名についてオブジェクト図で具体例を示しながら説明しました。次回はクラスの操作、集約関係、汎化関係を中心にもう少し複雑なクラス図について説明します。
【参考文献】 『まるごと図解 最新 オブジェクト指向がわかる』、河合昭男、技術評論社 『まるごと図解 最新UMLがわかる』、河合昭男、技術評論社【2002/12新刊】 『ゼロからわかるオブジェクト指向の世界』、岩田裕道+手島歩三、日刊工業新聞社 『Object-Oriented Methods:A Foundation』、James Martin+James Odell、Prentice Hall
|
[an error occurred while processing this directive] |