クラス図はUML図の中で最も重要で便利な図の1つで、クラス構造とクラスの相関を図で表したものです。しかし、クラスの接続やリンクの理解ができずに、クラス図の作成に苦労する人も多いのが現状です。以降の記事で、図で使われる事項を具体的に解説し、さまざまなクラス図における関係について詳細にわたり説明していきます。
クラス図における事項をすべて理解し、EdrawMaxを使って簡単に図を作成できる理由について読み進めていきましょう。
- 目次 -
Part 1: クラスとは何?
1.1 クラスとは
オブジェクト指向のプログラミングにおいて、クラスはユーザーが定義するオブジェクトの設計図と言えます。ある種類に属するオブジェクトすべてに共通する特性、方法、性質を表します。同様に、オブジェクトは、クラスをセットにまとめたルール(規則)に基づいて作成されたオブジェクト指向のプログラミングの基本です。オブジェクトとクラスは共に働き、お互いを参照し合っていると考えます。
1.2 クラス図とは
この概念に基づき、クラス図はオブジェクト間の属性、関係、操作を表すUML(統一モデル言語)を使って図にします。クラス図はソフトウェアの基本で、オブジェクト指向の原理に基づいて機能する静的構造図です。データモデリング、概念モデリング、モデルのプログラミングコード変換に役立ちます。
クラス図の主な目的は、アプリケーションの構造図を設計し、分析することです。UML構造図にはシステムの指示をセットにして定義し、現実的に表したものを設計する働きがあります。これらの図は特に、ソースコードを生成する際に非常に役立ちます。オプジェクトの属性と操作により、オブジェクト間の相互関係を表すのに適しています。
1.3 UMLにおけるクラス図の表記と構造
クラス図は、さらに3つの部位に分けて表します。
- 上位:このセクションは、すべてのクラス図に必ずあり、クラスの名前を表します。名前は必ず、太字で中央に置き、最初の文字は大文字にします。
- 中位:中位セクションには、属性があります。モデル化するエンティティ(実体)のプロパティを説明する役割があります。属性は、左側に小文字で表されます。タイプ(種類)は、コロンの後に続きます。
- 下位:下位セクションには操作があります。 クラスの操作は、箇条書き形式でオブジェクトとクラスの相互作用を表します。
• 可視性
クラスはすべて、可視性に基づいて可変アクセス修飾子のレベルを表します。可視性を表す記号で、特定のクラスの情報にアクセスできるユーザーを限定します。以下の表に、可視性を表す記号とアクセス情報について示します。
記号 | 可視性 | 説明 |
---|---|---|
+ | Public | すべてのクラスで情報を表示できる。 |
- | Private | パーティション外のクラスすべてから情報を隠している。 |
# | Protected | 子クラスで親クラスから継承されている情報にアクセスできる。 |
• パラメータの方向性
呼び出しの方向を指定するのに、操作は「in」、「out」または「inout」とします。 パラメータの方向性はパラメータの名前の前に指定します。
Part 2: クラス間の関係性
クラス図では、すべてのクラスが正しい関係により、互いに関連付けられています。これらの関連付けは、ユーザーがさまざまなエンティティ(実体)間の関連を十分に理解するのに役立ちます。ただし、よく似ているため、多くのユーザーが異なるクラス図の関係を誤って理解してしまうことが多々あります。
ここからは、さまざまなクラス図の関係、それらの表記、そしてUML図で何が示されているのか学びましょう。
1. アソシエーション
アソシエーションはファミリーの関連を示す際に使い、クラス間の静的な関係を表します。構造的に2つ以上のクラシファイア(分類機構)を結び付け、属性、プロパティ、アソシエーションを一覧にします。アソシエーションは、2つのクラシファイア間を単線で表します。
アソシエーションはさらに、一方向、双方向、アグリゲ―ション(集約)、コンポジション(編成)の4つの種類に分類されます。
• 一方向アソシエ―ジョン:
直接アソシエーションとも呼ばれ、この種類のアソシエーションは、オブジェクトがフィールドにある別のオブジェクトを含む場合に限ります。この関係は2つのクラシファイア間の情報の流れを表します。アソシエーションは、単線とコンテナクラシファイアの方向を指す矢印で表されます。
• 双方向アソシエ―ジョン:
このアソシエーションは2つのクラシファイアを密接に関連付ける際に使用し、フィールドに互いに格納することができます。双方向アソシエーションは、単線で表します。双方向アソシエーションはUML図で最も利用されるアソシエーションの種類です。
• アグリゲ―ション(集約):
アグリゲ―ションは、さらに特定の役割を持つアソシエーションで、図中の「part-of」関係を表します。ただし、この場合は2つのクラシファイアのみの関連付けで双方向アソシエーションを要します。UML図では、単線とクラス側に塗りつぶしのない菱形を付けで表します。
• コンポジション(編成):
これは、フォーカルエンティティにあるオブジェクト依存の関係を表す際に使います。フォーカルクラシファイアにはオブジェクトが含まれていますが、フォーカルクラスが削除されると、含まれているオブジェクトも削除されます。「編成」の関係は単線とクラス側に中を塗りつぶした菱形を付けて表します。
2. ジェネラリゼーション(汎化)/インヘリタンス(継承):
UMLモデルで、ジェネラリゼーションは親クラスと子クラスの関係を表す際に使います。「kind-of」関係はクラシファイア間に見られ、あるエンティティが、親の属性、操作、関係を継承し、どのようにもう片方のエンティティに基づいているのかを表します。
親モデルには多くの子クラスがあり、同様に子クラスは複数の親モデルを持つことができます。UML 図で、ジェネラリゼーションは、単線と塗りつぶしのない矢印で表します。矢印は、子クラスから親クラスの向きになります。
3. リアライゼーション(実現)
2つのモデル要素を別のクラシファイアの動きを実現/実行する、あるクラシファイアに関連付ける関係です。リアライゼーションの関係は、インターフェイスがどのように実装するクラスに影響するかを理解するのに役立ちます。リアライゼーションは点線と塗りつぶしのない矢印で表します。
4. 依存
弱い種類の関係で、オブジェクトがいずれのフィールドにオブジェクトが含まれていない場合に使います。依存の関係は、あるクラスに対する変更が、ほかのエンティティにも変更を及ぼす際に存在します。依存は点線と依存のエンティティ方向に向いた矢印で表します。
5. トランジション(変移)
UMLモデルで、トランジションの記述は2つの構成/記述を直接結び付けるために使います。 記述は主要なトランジションやトランジションの主要ソースとされます。単線と先を塗りつぶした矢印を使い、2つのクラス間の支配の移り変わりを表します。上記の矢印では、このトランジションが起きるイベントと示しています。
6. アクティビティエッジ
アクティビティ図はUML図の中でも欠かすことのできない図で、システムのさまざまなアクティビティ(働き)間の流れを表す際に使います。 システムのアルゴリズムの裏側のロジック(論理)を理解するのに役立ちます。アクティビティの流れは単線と先を塗りつぶした矢印で荒らします。矢印は、シークエンスの次のアクティビティの方向に向いています。
Part 3: クラス図の作成にEdrawMaxを使う
UMLモデルにおいて、クラス図には、さまざまなクラスやオブジェクトの関係を図に示し、目視できる利点があります。 異なる種類のクラス図の関係を目で見ることで、接続をいち早く理解したり、システム全体の適用事項を図にしたりすることができます。少しでも誤りがあるとクラス間の関係が変わってしまうので、正しい矢印記号を使うことが求められます。
この概念に慣れていない初心者にとってUMLクラス図を描くのは大変な作業かもしれませんが、EdrawMaxのようなソフトウェアを使えば、より早く、簡単に作図を行うことができます。
Edrawは思いのままに使え、使い勝手を考慮して作られた無料のツールで、ユーザーは図記号や図を使った作図が可能です。色範囲に富んだツールやカスタマイズ可能な記号のライブラリを備え、さまざまな種類のUML図の作成に応えます。また、さまざまな種類のテンプレート(イラスト)を用意しており、簡単なマウス操作だけで、簡単に図を作成することができます。この驚くほど素晴らしいソフトウェアにある、その他のオプションもぜひ確認してみてください。