【UML】クラス図

【1】クラス図

+----------------------+
| << ステレオタイプ >> |
|      クラス名        |
+----------------------+
|        属性          |
+----------------------+
|        操作          |
+----------------------+

+-----------------------------------+
|                従業員             |
+-----------------------------------+
| - 名前 : String = "Mike"          |
+-----------------------------------+
| + 名前設定 (名前 : String) : void |
+-----------------------------------+

【2】属性 / attribute

可視性 属性 : 型宣言 = 初期値

  -    名前 : String = "Mike"

可視性

* 他のクラスなどから参照・操作可能かどうかを4段階で設定している

一覧

 * public (+)       全てのクラスからアクセス可能
 * protected (#)    自分のクラスとそれを継承するクラスからのみアクセス可能
 * private (-)      自分のクラスからのみアクセス可能
 * package (~)      自分のクラスと同一パッケージに所属するクラスからのみアクセス可能

【3】操作 / operation

 * Javaのメソッドに当たる

可視性 操作名 (引数名 : 引数の型) : 戻り値の型

  +    名前設定 (名前 : String  ) : void

【4】関連 / Association

* クラス間に構造的な関係がある場合に使用
* 2つのクラスを実線で結ぶ(点線になっちゃってるけど)

イメージ

+--------+           +--------+
| 従業員 |           |  会社  |
+--------+           +--------+
|        |-----------|        |
+--------+           +--------+
|        |           |        |
+--------+           +--------+

関連名

+ 関係性を表す
 + 関連名は、任意
 + 黒塗りの三角(『>』だけど)で、関連の方向性を明示可能(任意)

イメージ

+--------+            +--------+
| 従業員 |            |  会社  |
+--------+ 仕事する > +--------+
|        |------------|        |
+--------+            +--------+
|        |            |        |
+--------+            +--------+

誘導可能 / Navigate

 + 以下のクラス図でいうと、Aクラス(左)が、Bクラス(右)のインスタンス変数を含んでいる
 + 実線の矢印(『--->』だけど)で表す

イメージ

+--------+            +--------+
|   A    |----------->|   B    |
+--------+            +--------+

使用パターン

 + 以下の3つ

 (1) 引数で参照する場合
 (2) ローカル変数として参照する場合
 (3) グローバル変数に参照する場合

【5】集約 / Aggregation

 + 以下のクラス図でいうと、Aクラス(左)が、Bクラス(右)を
 保持している(AクラスがBクラスを所有している関連)
 + 白塗りの菱形(『<>』だけど)で表す
 + 例「買い物リスト」と「商品」:商品がなくても、買い物リストが存在する(結びつきが少ない)

イメージ

+--------+            +--------+
|   A    |<>--------->|   B    |
+--------+            +--------+

合成 / Composition

 + 基本、集約と同じだが、こちらは結びつきが強い
 + 黒塗りの菱形(『<|>』だけど)で表す
 + 例「車」と「タイヤ」:タイヤがないと、車として存在できない(結びつきが強い)

イメージ

+--------+            +--------+
|   A    |<|>-------->|   B    |
+--------+            +--------+

依存 / Dependency

 + 以下のクラス図でいうと、Aクラス(左)が、Bクラス(右)のインスタンス変数を含んでいる
 + 点線の矢印(『- ->』だけど)で表す

イメージ

+--------+            +--------+
|   A    |- - - - - ->|   B    |
+--------+            +--------+

使用パターン

 + FactoryMethodパターンなどで使用される

http://www.rarestyle.net/main/patterns/abstractfactory.aspx

【6】汎化 / Generalization

* サブクラスからスーパクラスを生成すること

イメージ

        ┌───┐
        │哺乳類│
        └─┬─┘
          │
          ∧
    ┌─────┬─────┐
    │     │     │
  ┌─┴──┐┌─┴──┐┌─┴──┐
  │ 人間 ││ 馬   ││クジラ │
  └────┘└────┘└────┘

is-a 関係

* プログラムで書くと以下の通り。

public class parent {}
public class child extends parent {}

【7】特化 / specialization

* スーパクラスをサブクラスに分解すること

関連記事

図作成ツール / サイト ~ Draw.io(Desktop) / LucidChart ~
https://dk521123.hatenablog.com/entry/2019/11/21/223833
ER図、DFD
ロバストネス分析