このチュートリアルでは、UMLのオブジェクト図とクラス図、実行時のシステム状態をオブジェクト図がどのように捉え、クラス図が提供する静的構造と比較してどのように異なるかに焦点を当てます。詳細な説明と複数の例を用いて、両方の図の種類とその実用的応用を理解するのに役立ちます。
1. UML図の紹介
統合モデル化言語(UML)は、システムの設計と動作を可視化する標準化された方法です。その図の種類の中でも、クラス図とオブジェクト図はオブジェクト指向システムのモデリングに不可欠ですが、それぞれ異なる目的を果たします:
- クラス図は、静的構造システムの構造を定義し、クラス、その属性、メソッド、関係性を示します。
- オブジェクト図は、実行時におけるシステムの動的状態を特定の瞬間に捉え、インスタンス化されたオブジェクトとその関係性を示します。
このチュートリアルでは、クラス図の時間経過に左右されない構造的視点と比較して、オブジェクト図が実行時の状態をどのように反映するかを、実践的な例を交えて探求します。
2. クラス図:静的設計図
目的と構造
クラス図はオブジェクト指向設計の基盤であり、システムのアーキテクチャに対して静的視点を提供します。それらは以下の内容を定義します:
- クラス:オブジェクトのテンプレートであり、属性(データ)とメソッド(振る舞い)を指定します。
- 関係性: クラス間の関連、集約、構成、一般化、および依存関係。
- 制約: システムの構造を規定するルールや条件。
クラス図は時間に依存しない、つまり実行中の特定の時点を参照せずにシステムの設計を表すものである。システム設計、実装計画、およびコード生成の段階で使用される。
主要な要素
- クラス: 名前、属性、メソッドの3つのセクションを持つ矩形として表される。
- 属性: クラスのプロパティまたはデータフィールド(例:name: String)。
- メソッド: クラスが実行できる操作または振る舞い(例:calculateTotal(): double)。
- 関係:
- 関連: クラス間の一般的な接続(実線)。
- 集約: 「所有する」関係(空の菱形)。
- 構成: より強い「所有する」関係(塗りつぶされた菱形)。
- 一般化: 継承または「は-a」関係(空の三角形をもつ矢印)。
- 依存関係: 一方のクラスが他方のクラスに依存する弱い関係(破線)。
例のシナリオ
クラス図は以下の用途に最適である:
- ソフトウェアシステムのアーキテクチャを設計する。
- 開発者やステークホルダーに構造を伝える。
- オブジェクト指向プログラミングにおけるコードの骨格を生成する。
3. オブジェクト図:実行時のスナップショット
目的と構造
オブジェクト図は、実行中の特定の時点におけるシステムのスナップショットを提供する、インスタンス化されたオブジェクト、その属性値、およびそれらの関係(リンク)を示す。これらは動的、特定のシナリオやユースケースにおけるシステムの状態を捉える。
オブジェクト図は、オブジェクトがクラスのインスタンスであり、リンクがクラス図で定義された関連のインスタンスであるため、クラス図から導出される。
主要な要素
- オブジェクト:オブジェクト名: クラス名という形式の矩形として表され、特定の属性値を示す。
- リンク:オブジェクト間の接続であり、クラス図からの関連のインスタンスを表す。
- 属性値:特定の時点におけるオブジェクトの属性の具体的な値(例:price = 99.99)。
- 多重度:関係に参加するオブジェクトの数を示す(例:1対多)。
例のシナリオ
オブジェクト図は次のような用途に有用である:
- 特定のユースケースやテストシナリオ中のオブジェクトの状態を可視化する。
- 実行時のオブジェクト間の相互作用を理解するためにデバッグする。
- 要件に基づいてシステムの動作を検証する。
4. オブジェクト図とクラス図の主な違い
| 側面 |
クラス図 |
オブジェクト図 |
| 目的 |
クラスの静的構造と関係を定義する。 |
実行時のオブジェクトとその関係のスナップショットを示す。 |
| 焦点 |
抽象的なクラスとそれらの潜在的な関係。 |
具体的なインスタンス(オブジェクト)とその現在の状態。 |
| 時間的視点 |
時間を超えたもので、システムの設計を表す。 |
時間的なもので、実行中の特定の瞬間を捉える。 |
| 内容 |
属性、メソッド、および関係(関連、一般化)。 |
特定の属性値とリンクを持つオブジェクト。 |
| ユースケース |
システム設計、アーキテクチャ、コード生成。 |
デバッグ、シナリオの検証、実行時状態の分析。 |
| 例 |
modelなどの属性とdrive()などのメソッドを持つCarクラス。 |
model = 「Toyota」で、myEngine: EngineオブジェクトにリンクされたmyCar: Carオブジェクト。 |
5. 実際の例
以下は、異なるシステムにおけるクラス図とオブジェクト図を比較した3つの詳細な例である。
例1:オンラインショッピングシステム
シナリオ
オンラインショッピングシステムには顧客、注文、商品がある。クラス図は構造を定義し、オブジェクト図はチェックアウト時の顧客の注文を示す。
クラス図
説明:クラス図は以下の通り定義する:
- 顧客:属性と注文を出すためのメソッドを備える。
- 注文:属性と合計金額を計算するためのメソッドを備える。
- 商品:属性と価格を取得するためのメソッドを備える。
- 関係:顧客は複数の注文を出すことができる(1対多)、注文には複数の商品が含まれる(1対多)。
オブジェクト図
説明:オブジェクト図は以下の通り示す:
- 具体的な顧客(john: Customer)で、明確な属性値を持つ。
- ジョンによって注文された特定の注文(order123: Order)で、合計金額は149.98ドルです。
- 注文内の2つの製品(ラップトップとマウス)とそれぞれの具体的な価格。
- 実行時の関係を示すリンク(例:ジョンがorder123を注文し、その注文にはラップトップとマウスが含まれる)。
例2:図書館管理システム
シナリオ
図書館システムは本、会員、貸出を管理する。クラス図は構造を示し、オブジェクト図は会員が本を借りる様子を示す。
クラス図
説明:クラス図は以下の通り定義する:
- 会員:属性と本を借りるためのメソッドを備える。
- 本:属性と利用可能状態を確認するためのメソッドを備える。
- 貸出:属性と貸出を延長するためのメソッドを備える。
- 関係:会員は複数の貸出を持つことができ、本は複数の貸出で借りられる。
オブジェクト図
説明:オブジェクト図は以下の通り示す:
- 具体的な会員(alice: Member)とその具体的な属性値。
- 具体的な貸出(loan001: Loan)と借り入れ日および返却日。
- アリスが借りた具体的な本(book1: Book)。
- 実行時の状態を示すリンク(例:アリスがloan001を介してbook1を借りる)。
例3:自動車ディーラーシステム
シナリオ
自動車ディーラーシステムは自動車、エンジン、ホイールを管理する。クラス図は構造を定義し、オブジェクト図は特定の自動車の構成を示す。
クラス図

説明:クラス図は以下の通り定義する:
- 自動車:属性とエンジンを始動するためのメソッドを備える。
- エンジン:属性と点火するためのメソッドを備える。
- ホイール:属性と回転するためのメソッドを備える。
- 関係:自動車は1つのエンジン(組成)と4つのホイール(組成)を含む。
オブジェクト図
説明: オブジェクト図は以下の通りです:
- モデル「トヨタ・カムリ」、年式2023年の特定の車(myCar: Car)
- V6型の特定のエンジン(engine1: Engine)
- サイズ17の特定の4つのホイール(wheel1 から wheel4)
- 実行時の構成を示すリンク(例:myCarはengine1と4つのホイールを含む)
6. 各図の使用タイミング
クラス図を使用する場合:
- システムのアーキテクチャや構造を設計するとき
- 開発者やステークホルダーにシステムの設計図を伝えるとき
- コードの骨格やデータベーススキーマを生成するとき
- オブジェクト用の再利用可能なテンプレートを定義するとき
オブジェクト図を使用する場合:
- 実行時のオブジェクトの状態や相互作用を理解するためにデバッグするとき
- 特定のシナリオやユースケースの検証(例:チェックアウトプロセスのテスト)
- 特定の状況におけるオブジェクトの協働方法を説明するとき
- 非技術的なステークホルダーに実行時の動作を教えるまたは説明するとき
7. まとめ
- クラス図は静的で抽象的な視点システムのクラス、その属性、メソッド、関係性を定義する。システム設計と計画において不可欠である。
- オブジェクト図は動的で具体的なスナップショット実行時のシステムの動的で具体的なスナップショットであり、特定のオブジェクト、その属性値、リンクを示す。デバッグやシナリオ検証に最適である。
- これら2つの図は互いに補完し合う。クラス図は基盤を提供し、オブジェクト図はその基盤が実際にはどのように動作するかを示す。
オンラインショッピングシステム、図書管理システム、自動車ディーラーシステムなどの例を用いて、このチュートリアルはUMLを用いてシステムの構造と実行時の状態をモデル化する方法を示している。
8. 参考文献
このチュートリアルでは、クラス図とオブジェクト図の理解と適用について包括的なガイドを提供します。両方の図の種類を習得することで、オブジェクト指向システムの設計、分析、デバッグを効果的に行うことができます。