クラス図
クラス図は、分析・設計いずれにも使用でき、クラスの構造を表す。 属性と操作という内部構造と、クラス間の関連、依存、汎化などの関係を表現するのに適していて、 UMLにおいて最も重要なダイアグラムである。
〜クラスの表記〜
クラスは三つの区画に分割された長方形のアイコンで表現する。 一番上の区画にはクラス名、中間の区画には属性名、一番下の区画には操作名を記述し、 属性および操作は一行に一つ配置する。 属性名の前には可視性をつける事ができ、外部から参照可能かどうかを表す。 属性名の後には":"で区切って型を表示でき、 ここには設計の段階でJavaやC++など開発言語でサポートしている型を指定する。 初期値も必要であれば指定できる。 操作についても、引数および戻り値の型をJavaやC++などの開発言語でサポートするものに指定する。
可視性
カプセル化を実現するためには他のクラスに対して、 あるクラスの属性、操作が公開か非公開かを明記する必要がある。 ここで他のクラスから属性、操作を参照できる度合いを可視性という。 UMLではこの可視性を以下の四段階に規定している。
+ public ・・・全てから参照可能
- private ・・・自分からのみ参照可能
# protected ・・・自分とサブクラスからのみ参照可能
~ package ・・・自分と同一パッケージ内のクラスからのみ参照可能
上の図では・・・
+ を指定された 『Class 1』 の操作 『操作1()』 は、 『Class 2』 『Class 3』 『Class 4』 のいずれからも参照可能。
# を指定された 『Class 1』 の操作 『操作2()』 は、 『Class 1』 のサブクラスである 『Class 2』 から参照可能。
- を指定された 『Class 1』 の操作 『操作3()』 は、外部のクラスからは参照不可能。
~ を指定された 『Class 1』 の操作 『操作4()』 は、 同一のパッケージ内である 『Class 2』 『Class 3』 から参照可能だが、 パッケージの異なる 『Class 4』 からは参照不可能である。
〜実際のクラス図〜
以下のクラス図をもとにダイアグラムの中で使用されるモデル要素について説明する。
※クラス図の例
インターフェース
インターフェースはオブジェクトが外部に公開する操作の振る舞いのみを定義したもので、 クラス間の相互依存性を弱めるために利用される。 クラスと同様の形式で記述され、クラス名の上にステレオタイプ interface が指定される。 ただしその性質上、属性は存在しない。 上の図では「商品」がインターフェースに該当する。
関連(アソシエーション)
関連は、二つのクラスを結ぶ実線として表現され、両端に矢印をつけることができる。 矢印をつけた場合、片方のクラスのみがもう一方のクラスを認識している事を示す。 矢印のない場合は双方向の関連もしくは関連の方向が未決定であることを示す。 上の図では「登録会員」クラスと「注文」クラスの間、 また「教科書」クラスと「大学教授」クラスの間に関連が存在する。
集約(アグリゲーション)
集約は関連の一種であり、「全体-部分」の構造や「所有する側、所有される側」の関係を明確に表す場合に使用される。 全体側のクラスに白抜きのひし形をつけた実線で記述され、 上の図では「注文」クラスと「商品」インターフェースの間に集約が存在する。
複合(コンポジション)
複合は集約と同様に関連の一種である。 集約と比較してより強い所有関係を表しており、「全体-部分」の構造や「所有する側、所有される側」の オブジェクトの生存期間が一致する。 全体側のクラスに黒塗りのひし形をつけた実線で記述され、 上の図では「注文」クラスと「配送先情報」クラスとの間に複合が存在する。
関連名
関連名は、関連の意味を明確にするために関連(集約、複合)の実線の上に記述される関連の名前である。 関連名に方向性がある場合は関連名の左右に黒塗りの三角を表示し、関連の主体と客体を明確にする事が可能。 上の図では「大学教授」クラスと「教科書」クラスの関連に対して「制作する」という関連名が表示されている。
ロール名
ロール名は関連先のクラスの役割を明確にするために関連の端に表示される名前である。 上の図では「大学教授」クラスの役割として「制作者」というロール名を表示することができる。
多重度
多重度は関連するクラス間の数的な対応関係を表す。 関連元クラスの一つのオブジェクトに対応する、関連先クラスのオブジェクトの数を関連先クラスの関連端に表示する。 具体的な数値以外にも「*」「0..*」=0以上、「0..1」=0または1、「0..3」=0から3までなどの表現が可能で、 上の図では「大学教授」クラスと「教科書」クラスの間の関連に多重度が表示されている。 この多重度は、一つのCDが複数の大学教授によって制作されること、 あるいは一人のアーティストが複数の教科書を制作していることを表している。
実現(リアライゼーション)
実現は、インターフェースとクラスの間の関係を表す。操作の振る舞いのみを定義したインターフェイスを拡張し、 クラスとして実現する場合に記述する。拡張元のインターフェイスに白抜きの三角形をつけた実線で記述され、 上のクラスでは「商品」インターフェースと「教科書」クラスの間に実現が存在する。
依存(ディペンデンシィ)
依存は、クラスの間に「使用する」関係があることを表す。 一般的には呼び出し元の操作の中やパラメータで依存先のクラス(独立クラス)が使用される。 関連がクラス間の動的な構造を表現するのに対して、依存関係は動的かつ一時的な関係を表していて、 矢印つきの破線で記述される。 上の図では「注文コントローラ」クラスから「注文」、「商品」、「配送先情報」クラスに対して依存関係が存在する。
オブジェクト図
オブジェクトはオブジェクト指向における最も基本的な概念であり、実在の事物を表現する。 つまり、オブジェクトはクラスをインスタンス化したものとも言える。 オブジェクト図はある時点におけるシステム内のオブジェクトやそれらの関係を スナップショットとして表現したり、クラス図の一つの事例を表現する。
※オブジェクト図の例
オブジェクト図は使用頻度はあまり高くないが、複雑な構造をもつクラス図の作成や理解する際の 補助的なダイアグラムとして利用される事がある。 上の図はクラス図での「大学教授」クラスと「教科書」クラスに関するオブジェクト図になる。 オブジェクトは内部が二つの区画に分かれた長方形のアイコンで記述され、二つの区画には 「
オブジェクト名:クラス名
」(下線をつける必要がある。 また「
:オブジェクト名
」や「
:クラス名
」とクラスの内容を省略表記できる。 上の図は省略表記した場合である。)と「属性」を記述する。属性の区画も省略が可能である。 上の図では「
:大学教授
」や「
:教科書
」がオブジェクトに該当する。
リンク
リンクはオブジェクト間での参照関係を表す。 オブジェクトがクラスのインスタンスであるのと同様に、 リンクは関連(アソシエーション)をインスタンス化したものとなる。 クラス図における関連の種類(集約や包含)などによらず、常に実線で記述される。
本サイトにおける全コンテンツの無断複製,転写,公衆送信を禁じます
Copyright(C) 2003-2010 Eiko Takaoka. All rights reserved.