目次
クラス図(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..1 | 0 または 1 |
0..* | 0 以上 |
1..* | 1 以上 |
n..m | n以上m以下 ※[例] 1..3 → 1以上3以下 |
n | 必ずn ※[例] 2 → 必ず2 |
n,m | nまたはm。[例] 1,3 → 1または3 |
関連(association)
基本的なつながり(関連)をあらわします。
スポンサーリンク
以下の例では「社員クラス」と「ユーザクラス」は関連性があり、クラス間の多重度は1対1であることを表現しています。
集約(aggregation)
「部分クラス」は「全体クラス」の一部であることをあらわします。ただしお互いに依存関係はありません。
以下の例では「乗員クラス」は「バスクラス」の一部であること(お互い依存関係はない)、クラス間の多重度は1対0以上であることを表現しています。
コンポジション(composition)
「部分クラス」は「全体クラス」の一部であることをあらわします。集約よりも結びつきが強くお互いが存在して成り立つ関係性です。
例えば「全体クラス」が削除されると「部分クラス」もあわせて削除されるような関係性をあらわします。
以下の例では「タイヤクラス」は「バスクラス」の一部であり、「バスが廃車になれば、バスについていたタイヤも廃車になる」といった関係性を表現します。(クラス間の多重度は1対4)
依存(dependency)
お互いが依存関係にあることを表現します。例えば「クラスA」が変更された時、依存関係にある「クラスB」にも変更が生じるといった関係性をあらわします。
以下の例では、「ホイールクラス」と「タイヤクラス」が依存関係となり、「ホイール」を変えると「タイヤ」も変えるといった関係性を表現しています。(クラス間の多重度は1対4)
汎化(generalization)
「子クラス」は「親クラス」の性質を継承しているといった関係性をあらわします。
以下の例では「犬クラス」は「動物クラス」の性質を継承していることを表現しています。
実現(realization)
「抽象クラス(interface)」の振る舞いを具体的に実装した「クラス」であるといった関係性をあらわします。
以下の例では、抽象的なクラスである「動物クラス」の振る舞いを具体的に実装したものが「犬クラス」であるということを表現しています。