ソフトウェア工学およびオブジェクト指向設計(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 のインターフェースは、クラスによって実現される可能性がありますクレジットカード支払い および PayPal支払い.
最適化のためのヒントとテクニック
これらのヒントを適用して、図を単なる図面からプロフェッショナルな技術的資料へとレベルアップしてください:
- 「声に出して読む」テスト: 関係性を声に出して読んでください。「車はタイヤで構成されている。」と聞こえが不自然な場合は、矢印の方向や関係の種類が正しいか確認してください。
- パラメータの方向性: 操作の領域では、パラメータの方向を次のように指定できます
in, アウト、またはインアウトパラメータ名の前に記載して、データの流れを明確にする。
- 抽象的なイタリック体: クラスが直接インスタンス化できない場合(抽象的である場合)、その名前をイタリック体にするようにする。これは開発者にとって微妙だが重要なシグナルである。
- 線の交差を避ける: 現代のツール、たとえばVisual Paradigm はルーティングをうまく処理するが、可読性を著しく向上させるために、手動でクラスを配置して線の交差を最小限に抑えるようにする。
クラス図の監査チェックリスト
UMLクラス図を最終化する前に、この実行可能なチェックリストを実行する:
- [ ] 完全性: 特定のモジュールに必要なすべてのクラスが存在するか?
- [ ] 可視性: 属性や操作が正しい可視性記号(+、-、#)でマークされているか?
- [ ] 関係の正確性: 集約(空のダイヤモンド)と組成(塗りつぶされたダイヤモンド)を正しく区別しているか?
- [ ] 多重性: 関連の両端に基数が定義されているか(例:1..*)?
- [ ] 可移動性: 矢印がどちらのクラスが他のクラスにアクセスできるかを明確に示しているか?
- [ ] 名前付け: クラス名は名詞で一意か?関係の動詞は明確か?
- [ ] 一般化: 継承階層が意味を成しているか(Is-A関係)?