ソフトウェア工学およびオブジェクト指向設計(OOD)の分野において、UMLクラス図システムモデリングの基盤を担っています。これは、クラス、その属性、操作(メソッド)、およびオブジェクト間の複雑な関係を表示することで、システムのアーキテクチャを記述する静的構造図です。ドメインモデルを構築する場合やソフトウェア仕様を詳細に記述する場合にかかわらず、クラス図を理解することは、概念的な設計図を機能的なコードに変換するためには不可欠です。

クラスの構造を理解する
図の中心にあるのはクラスであり、これはオブジェクトの設計図として機能します。オブジェクトはデータと振る舞いを含む実用的なインスタンスであるのに対し、クラスはそのオブジェクトのルールを定義します。オブジェクトにおいて、UML表記法では、クラスは3つの特定の領域に分けられた長方形で表されます:
- クラス名:最初(上部)の領域に配置されます。必須です。抽象クラスは通常斜体で記述されます。
- 属性:2番目の領域に配置されます。これらはクラスの状態や構造的特徴(メンバ変数)を表します。
- 操作(メソッド):3番目の領域に配置されます。これらはクラスが提供する振る舞いの特徴やサービスを定義します。
可視性とアクセス制御
カプセル化を定義するため、UMLは属性および操作名の前に特定の記号を使用して可視性を示す。これにより、どの他のクラスがこれらのメンバにアクセスできるかが決定される。

| 記号 |
可視性の種類 |
説明 |
| + |
公開 |
他のすべてのクラスからアクセス可能。 |
| – |
クラス自身内でのみアクセス可能。 |
クラス自身内でのみアクセス可能。 |
| # |
クラスおよびそのサブクラス(派生クラス)からアクセス可能。 |
クラスおよびそのサブクラス(派生クラス)からアクセス可能。 |
| ~ |
同じパッケージ内の任意のクラスからアクセス可能。 |
同じパッケージ内の任意のクラスからアクセス可能。 |
クラス関係の解読
UMLクラス図の力は、クラス間の相互作用をどのように表現するかに尽きるコード実装が論理に依存するように、UMLも意図を伝えるために特定の接続子に依存しています。以下に主な関係の種類を示します:

1. 継承(一般化)
継承は「IS-A」関係を表します。これは、特定の分類子(子)が一般的な分類子(親)の特徴を継承する分類学的関係です。たとえば、円は図形.
- 表記法:子クラスから親クラスへ向かう空心の矢印頭を備えた実線。
- 使用法:スーパークラスに共通性を導入することで、分析モデルを簡略化するために使用される。
2. 関連
これは、同格のクラス間の構造的リンクであり、しばしば動詞(例:「教師が生徒を教える」)で説明される。2つのクラスが関連していることを示すが、緩い結合を生じさせる。
- 表記法:2つのクラスを結ぶ実線。
- 多重度:参加するオブジェクトの数を示す(例:
1, 0..1, 1..*).
3. 集約
集約は、次の関係を表す特別な関連の形である「部品である」関係である。しかし、これは弱い所有関係を示している。部品は全体とは独立して存在できる。たとえば、車はタイヤを持つが、車が破壊されてもタイヤは依然として存在できる。
- 表記法:実線に空洞のダイヤモンドが集約(親)クラスに接続された端に配置される。
4. 組成
組成は、より厳格な集約の形である。部品が存在できない強固な所有関係を表す。存在できない 全体なし。親オブジェクトが破棄されると、子オブジェクトも破棄される。例として、家 とその部屋.
- 表記法: 線の終端に塗りつぶされた(実線)ダイヤモンドが複合(親)クラスに接続された線。
5. 依存関係
これは「使用」関係を表す。あるクラスが別のクラスをメソッドのパラメータやローカル変数として特に使用する場合に存在する。フィールドとして使用するのではなく、そのような形で相互作用する場合である。供給元クラスの定義の変更がクライアントクラスに影響を与える可能性がある。
- 表記法:破線に開放された矢印が依存関係を指している。

効果的なクラス図のガイドライン
読みやすく正確な図を作成するには、特定のガイドラインに従う必要がある。
- 標準的な命名規則を使用する: クラス名は名詞とする(例:顧客, 注文)、一般的に大文字で表記する。関連名は動詞にする(例:場所, 含む).
- 視点を特定する:描画する前に、以下のいずれかの視点でモデル化しているかを決定してください。概念的ビュー(ドメイン概念)、仕様ビュー(インターフェース)、または実装ビュー(コード固有)。
- 複雑さを管理する:1つの図にシステム全体をモデル化しようとしないでください。システムを複数の図に分割し、特定のモジュールやビジネス領域に焦点を当てる。
- 多重性を明示的に記載する:関係が1対1、1対多、多対多のいずれであるかを常に明確にし、データベースやコードの論理がビジネス要件を反映していることを確認する。
実際の例:注文処理システム
顧客、注文、製品を含む標準的な電子商取引のシナリオを検討してください。関係性がどのようにクラス図の構造に翻訳されるかを以下に示します。クラス図の構造:
- 顧客と注文(関連): 顧客は 注文を します。多重度は
1 顧客から0..* 注文までです。
- 注文と明細行(組成): 注文は明細行で構成されています。注文が削除されると、明細行は意味を失い破棄されます。これは注文を指す塗りつぶされた菱形です。
- 明細行と製品(関連/集約): 明細行は製品を参照します。ただし、製品は明細行とは独立して存在します(在庫に残ります)。これは標準的な関連または弱い集約です。
- 支払い(実現): 名前がIPayment のインターフェースは、クラスによって実現される可能性がありますクレジットカード支払い と PayPalPayment.
最適化のためのヒントとテクニック
これらのヒントを活用して、図を単なる図面からプロフェッショナルな技術的資料へとレベルアップしましょう:
- 「音読テスト」:関係性を声に出して読んでみてください。「車はタイヤで構成される。」と聞こえが不自然な場合は、矢印の方向や関係の種類が正しいか確認してください。
- パラメータの方向性: 操作のパッケージでは、パラメータの方向を次のように指定できます。
in, out、または inoutパラメータ名の前に記述することで、データの流れを明確にします。
- 抽象的な斜体: クラスが直接インスタンス化できない場合(抽象クラスの場合)、その名前を斜体にするようにしてください。これは開発者にとって繊細だが重要なサインです。
- 線の交差を避ける: 現代のツール、たとえば Visual Paradigm ルーティングを適切に行い、交差する線を最小限に抑えるように手動でクラスを配置するようにしてください。これにより、可読性が著しく向上します。
クラス図のレビュー確認リスト
UMLクラス図を最終確定する前に、以下の実行可能なチェックリストを確認してください:
- [ ] 完全性: 特定のモジュールに必要なすべてのクラスが存在していますか?
- [ ] 可視性: 属性や操作が正しい可視性記号(+、-、#)でマークされていますか?
- [ ] 関係の正確性: 集約(空のダイヤモンド)とコンポジション(塗りつぶされたダイヤモンド)を正しく区別していますか?
- [ ] 多重性: 関連の両端に基数が定義されていますか(例:1..*)?
- [ ] 可移動性: 矢印がどちらのクラスが他のクラスにアクセスできるかを明確に示していますか?
- [ ] 名前付け: クラス名は名詞で一意ですか?関係の動詞は明確ですか?
- [ ] 汎化: 継承階層が意味を成していますか(Is-A関係)?