Skip to content

クラス図

クラス図はオブジェクト指向モデリングの中心です。システム内のクラス、その属性、操作、およびクラス間の関係を示します。

構文

クラスの定義

class クラス名 {
    +パブリックフィールド
    -プライベートフィールド
    #プロテクテッドフィールド
    +パブリックメソッド()
    -プライベートメソッド()
    #プロテクテッドメソッド()
}

関係の種類

  • 継承: <|--
  • コンポジション: *--
  • 集約: o--
  • 関連: -->
  • 依存: ..>
  • 実装: <|..

基本例

コード:
mermaid
classDiagram
    動物 <|-- アヒル
    動物 <|-- 魚
    動物 <|-- シマウマ
    動物 : +int 年齢
    動物 : +String 性別
    動物: +哺乳類か()
    動物: +交尾()
    class アヒル{
        +String くちばしの色
        +泳ぐ()
        +ガーガー鳴く()
    }
    class 魚{
        -int サイズ
        -食べられる()
    }
    class シマウマ{
        +bool 野生か
        +走る()
    }
Ctrl + Enter|

応用例

様々な関係と機能を示す複雑なクラス図の例:

コード:
mermaid
classDiagram
    顧客 "1" --> "*" 注文
    注文 "*" --> "1" 配送状態
    注文 "*" --> "*" 商品
    注文 "1" --> "1" 支払い
    
    class 顧客 {
        +String 名前
        +String メール
        +String 住所
        +注文追加()
        +プロフィール更新()
    }
    
    class 注文 {
        -int 注文ID
        -Date 注文日
        -float 合計金額
        +合計計算()
        +状態更新()
    }
    
    class 商品 {
        +String 名前
        +float 価格
        +int 在庫
        -在庫更新()
    }
    
    class 支払い {
        +String 支払方法
        +float 金額
        +Date 支払日
        +支払処理()
    }
    
    class 配送状態 {
        +String 状態
        +Date 最終更新
        +状態更新()
    }
Ctrl + Enter|

追加機能

ジェネリック型

コード:
mermaid
classDiagram
    class リスト~T~{
        +int サイズ
        +追加(T 要素)
        +取得(int インデックス) T
    }
Ctrl + Enter|

インターフェース

コード:
mermaid
classDiagram
    class 動物{
        <<interface>>
        +鳴く()
    }
Ctrl + Enter|

抽象クラス

コード:
mermaid
classDiagram
    class 図形{
        <<abstract>>
        +面積() float
    }
Ctrl + Enter|

スタイル設定

可視性を示す記号:

  • + パブリック
  • - プライベート
  • # プロテクテッド
  • ~ パッケージ/内部

実用的なヒント

  • クラスは単一責任の原則に従う
  • 意味のあるクラス名とメソッド名を使用
  • 関連する属性とメソッドのみを表示
  • 適切なクラス間の関係を使用
  • インターフェースと抽象クラスを適切に使用
  • カプセル化に注意
  • 継承とコンポジションを適切に使用
  • 過度な設計を避ける

よくある問題の解決

  1. 設計の問題

    • クラスの責任が単一か確認
    • 継承関係が適切か確認
    • 過度な結合を避ける
  2. 関係の表現

    • 関係の種類を正しく使用
    • 関係の方向を明確に
    • 適切な関係の説明を追加
  3. 可読性の問題

    • 関連するクラスを適切にグループ化
    • 交差する関係を減らす
    • 明確な命名を使用

次のステップ