システム開発

【UML】クラス図とは | クラス図の書き方と記号

クラス図(class diagram)とは

クラス図とは、クラスの定義や関連付けを示す図です。

システムを構成するクラスに定義されている属性(フィールド)操作(メソッド)を表現し、クラス間がどう関連付けられているかの関係性をあらわします。

スポンサーリンク

クラス定義

クラスの定義は以下のような図で定義します。

クラス図の例

クラス名

クラス名は以下の形式で記述します。

※パッケージ名は省略可能です。

パッケージ:クラス名

属性

属性は以下の形式で記述します。

※フィールド名以外は省略可能です。

可視性 フィールド名 : 型 = 初期値

操作

操作は以下の形式で記述します。

※メソッド名以外は省略可能です。

可視性 メソッド名 ( 引数の変数名 : 引数の型 ) : 戻り値の型

可視性

可視性には、以下の種類があります。

可視性説明
+public 全クラスからアクセス可能
-private 自クラス内でのみアクセス可能
#protected 自クラス または 親子関係のクラスからアクセス可能
~package 同パッケージ内からのみアクセス可能

スポンサーリンク

クラスファイルから作成するクラス図の具体例

クラスファイルのソースコードは以下です。

package entity;

import java.io.Serializable;

public class UmlSample implements Serializable {

  /**
   * ユーザID
   */
  private Integer userId;
  /**
   * ユーザ名
   */
  private String userName;

  /**
   * ユーザIDの取得
   * @return ユーザID
   */
  public Integer getUserId() {
    return userId;
  }
  /**
   * ユーザIDの設定
   * @param userId ユーザID
   */
  public void setUserId(Integer userId) {
    this.userId = userId;
  }
  /**
   * ユーザ名の取得
   * @return ユーザ名
   */
  public String getUserName() {
    return userName;
  }
  /**
   * ユーザ名の設定
   * @param userName ユーザ名
   */
  public void setUserName(String userName) {
    this.userName = userName;
  }
}

上記のソースコードに対するクラス図は以下の通り。

クラス図サンプル

クラス図の書き方(記号・多重度)

クラス図では、以下の線形でクラス間の関連を示します。

線形関連説明
関連関連(association)クラス間の関連を表現
集約集約(aggregation)クラス間の関連で全体と一部という関係性を表現
コンポジションコンポジション(composition)集約よりも強い集約
依存依存(dependency)クラス間の依存関係を表現
汎化汎化(generalization)クラス間の継承を表現
実現実現(realization)クラス間のインターフェースを表現

またクラス間の多重度は以下のような形式で表現します。

多重度説明
1必ず1
0..10 または 1
0..*0 以上
1..*1 以上
n..mn以上m以下 ※[例] 1..3 → 1以上3以下
n必ずn ※[例] 2 → 必ず2
n,mnまたはm。[例] 1,3 → 1または3

関連(association)

基本的なつながり(関連)をあらわします。

スポンサーリンク

以下の例では「社員クラス」と「ユーザクラス」は関連性があり、クラス間の多重度は1対1であることを表現しています。

関連(association)

集約(aggregation)

「部分クラス」は「全体クラス」の一部であることをあらわします。ただしお互いに依存関係はありません。

以下の例では「乗員クラス」は「バスクラス」の一部であること(お互い依存関係はない)、クラス間の多重度は1対0以上であることを表現しています。

集約(aggregation)

コンポジション(composition)

「部分クラス」は「全体クラス」の一部であることをあらわします。集約よりも結びつきが強くお互いが存在して成り立つ関係性です。

例えば「全体クラス」が削除されると「部分クラス」もあわせて削除されるような関係性をあらわします。

以下の例では「タイヤクラス」は「バスクラス」の一部であり、「バスが廃車になれば、バスについていたタイヤも廃車になる」といった関係性を表現します。(クラス間の多重度は1対4)

コンポジション(composition)

依存(dependency)

お互いが依存関係にあることを表現します。例えば「クラスA」が変更された時、依存関係にある「クラスB」にも変更が生じるといった関係性をあらわします。

以下の例では、「ホイールクラス」と「タイヤクラス」が依存関係となり、「ホイール」を変えると「タイヤ」も変えるといった関係性を表現しています。(クラス間の多重度は1対4)

依存(dependency)

汎化(generalization)

「子クラス」は「親クラス」の性質を継承しているといった関係性をあらわします。

以下の例では「犬クラス」は「動物クラス」の性質を継承していることを表現しています。

汎化(generalization)

実現(realization)

「抽象クラス(interface)」の振る舞いを具体的に実装した「クラス」であるといった関係性をあらわします。

以下の例では、抽象的なクラスである「動物クラス」の振る舞いを具体的に実装したものが「犬クラス」であるということを表現しています。

実現(realization)

helpful