ソフトウェア工学において、統一モデリング言語(UML)クラス図は静的構造図システムの構造を、そのクラス、属性、操作(またはメソッド)、およびオブジェクト間の関係を示すことによって記述するものである。

クラス図の目的
- システム内の分類子の静的構造を表示する
- 他のUML構造図の基礎となる表記法を提供する
- 開発者や他のチームメンバーにとって非常に有用である
- ビジネスアナリストは、ビジネスの視点からシステムをモデル化するためにクラス図を使用できる
UMLクラス図は以下の要素で構成される:
- クラスの集合
- クラス間の関係の集合
クラスとは何か?
類似した役割を持つオブジェクトのグループの説明で、以下のものを含む:
- 構造的特徴(属性):クラスのオブジェクトが「知っていること」を定義する
- オブジェクトの状態を表す
- クラスの構造または静的特性を記述する
- 行動的特徴(操作):クラスのオブジェクトが「できること」を定義する
- オブジェクトの相互作用を定義する
- クラスの行動または動的特性を記述する
クラス表記
クラス表記は以下の3つの部分で構成される:
- クラス名
- クラス名は最初のコンパートメントに表示される。
- クラス属性
- 属性は2番目のコンパートメントに表示される。
- 型はコロンの後に表示されます。
- 属性はコード内のメンバ変数(データメンバ)に対応します。
- クラスの操作(メソッド)
- 操作は第3のコンパートメントに表示されます。これらはクラスが提供するサービスを表します。
- 戻り値の型はメソッドシグネチャの末尾にあるコロンの後に表示されます。
- パラメータの型は、パラメータ名の後にコロンが続く形で表示されます。
- 操作はコード内のクラスメソッドに対応します。

クラスの図式表現MyClass上に示すように:
- MyClassには3つの属性と3つの操作があります
- op2のパラメータp3は型intです
- op2はfloatを返します
- op3はClass6へのポインタ(アスタリスク*で示される)を返します
クラスの関係
クラスは他のクラスとの1つ以上の関係に参加する可能性があります。関係の種類には以下のものがあります:(図式表現については右側の図を参照してください)。
| 関係の種類 | 図 |
|---|---|
継承(または一般化):
|
![]() |
単純な関連:
|
![]() |
集約:
|
![]() |
組成:
|
![]() |
依存関係:
|
![]() |
関係名
- 関係名は関連線の中央に書かれます。
- 良い関係名は読み上げたときに意味を持つべきです:
-
- 「各スプレッドシート は含む いくつかのセル」
<li>式 は評価され 値に」
-
- 多くの場合、読み取り方向を示す小さな矢印があります例えば、式は値に評価されるが、値は式に評価されない。

関係 – 役割
- 役割は関連における方向の目的を定義する。
- 役割は関連線の端に記述され、クラスがその関係において果たす役割を説明する。
- 例として、CellはExpressionに関連している。この関係の性質は、Expressionがセルの式であるということである。
クラスメンバーの可視性
オブジェクト指向設計では、属性および操作の可視性が表現される。UMLは4種類の可視性を定義している:公開, 保護, 非公開、およびパッケージ.
属性および操作名の前に記載される記号 +、-、#、~は可視性を示す:
- + は公開属性または操作を示す
- – は非公開属性または操作を示す
- # は保護属性または操作を示す
- ~ はパッケージ属性または操作を示す
クラスの可視性の例

上記の例では:
- attribute1 および MyClassName の op1 はパブリックです
- attribute3 および op3 はプロテクトされています
- attribute2 および op2 はプライベートです
異なるクラスメンバのアクセス権限は以下の通りです:
| アクセスレベル | パブリック (+) | プライベート (-) | プロテクト (#) | パッケージ (~) |
|---|---|---|---|---|
| 同じクラスのメンバ | はい | はい | はい | はい |
| 派生クラスのメンバ | はい | いいえ | はい | はい |
| 他の任意のクラスのメンバ | はい | いいえ | いいえ | 同じパッケージのみ |
多重度
多重度は、クラスのオブジェクトが関係に参加する数を示します。次のように表現できます:
- 正確に1 – 1
- 0または1 – 0..1
- 多数 – 0..* または *
- 1つ以上 – 1..*
- 正確な数 – 例:3..4 または 6
- 複雑な関係 – 例:0..1、3..4、6* は 2 または 5 を除く任意の数を意味する
多重度の例
- 要件:学生は複数の授業に登録できるし、1つの授業に複数の学生が登録できる。
- 以下の例では、クラス図(左)は上記の要件の静的モデルを記述しており、オブジェクト図(右)はソフトウェア工学およびデータベース管理の授業に関するコース登録(クラス図のインスタンス)のスナップショットを示している。

集約の例 – コンピュータと部品
- 集約は、「包含」の階層を表す関連の特殊なケースである。
- 集約が親クラスであり、コンポーネントが子クラスである。

継承の例 – 細胞の分類
- 継承は、「種類」の階層を表す関連のもう一つの特殊なケースである。
- 継承は分類体系を導入することで、分析モデルを簡略化する。
- サブクラスはスーパークラスの属性と操作を継承する。

クラス図 – 図表ツールの例
クラス図には、クラスや関係に付随するノートを含めることができる。ノートは灰色で表示される。

上記の例から、図を次のように解釈できる:
- Shapeは抽象クラスである。斜体で表示されている。
- Shapeはスーパークラスである。Circle、Rectangle、PolygonはShapeから継承する。言い換えれば、CircleはShapeである。これは一般化/継承関係である。
- DialogBoxとDataControllerの間に関連がある。
- ShapeはWindowの一部である。これは集約関係である。ShapeはWindowなしでも存在できる。
- PointはCircleの一部である。これは構成関係である。PointはCircleなしでは存在できない。
- WindowはEventに依存する。しかし、EventはWindowに依存しない。
- Circleの属性は半径と中心である。これは具象クラスである。
- Circleのメソッドはarea()、circum()、setCenter()、setRadius()である。
- Circleのパラメータradiusはfloat型である。
- Circleのメソッドarea()はdouble型の値を返す。
- Rectangleの属性とメソッドは隠されている。図内の他のいくつかのクラスも属性とメソッドを隠している。
複雑なシステムの扱い – 複数のクラス図か単一のクラス図か?
大きなシステムや大きなビジネス領域をモデル化する際には、多くのエンティティを考慮しなければならない。複数のクラス図を使うべきか、それとも単一のクラス図を使うべきか?答えは:
- 1つの図にすべてのエンティティとその関係をモデル化するよりも、複数のクラス図を使用するほうが良い。
- システムを複数のクラス図に分割することで、理解が容易になる。特に、各図がシステムの特定の部分を視覚的に表現している場合にそうである。
ソフトウェア開発ライフサイクルにおけるクラス図の視点
クラス図は、ソフトウェア開発ライフサイクル(SDLC)の異なる段階で使用でき、通常、3つの異なる詳細度(視点)が段階的にモデル化される。
概念的視点:図は現実世界の事物を記述していると解釈される。したがって、概念的視点から始めると、研究対象の領域における概念を表す図を描くことになる。これらの概念は、それらを実装するクラスと自然に関連している。この視点は言語に依存しないと見なされる.
仕様の視点:図は、特定の実装に拘泥せずに、仕様やインターフェースを持つソフトウェアの抽象やコンポーネントを記述していると解釈される。したがって、仕様の視点からアプローチすると、実装ではなく、ソフトウェアインターフェースを研究している.
実装の視点:図は、特定の技術と言語によるソフトウェアの実装を記述していると解釈される。したがって、実装の視点からアプローチすると、ソフトウェアの実装を研究している.
今すぐUMLクラス図を描いてみましょう
無料でダウンロード




