クラス図
クラス図はオブジェクト指向モデリングの中心です。システム内のクラス、その属性、操作、およびクラス間の関係を示します。
構文
クラスの定義
class クラス名 {
+パブリックフィールド
-プライベートフィールド
#プロテクテッドフィールド
+パブリックメソッド()
-プライベートメソッド()
#プロテクテッドメソッド()
}
関係の種類
- 継承:
<|--
- コンポジション:
*--
- 集約:
o--
- 関連:
-->
- 依存:
..>
- 実装:
<|..
基本例
コード:
mermaid
classDiagram
動物 <|-- アヒル
動物 <|-- 魚
動物 <|-- シマウマ
動物 : +int 年齢
動物 : +String 性別
動物: +哺乳類か()
動物: +交尾()
class アヒル{
+String くちばしの色
+泳ぐ()
+ガーガー鳴く()
}
class 魚{
-int サイズ
-食べられる()
}
class シマウマ{
+bool 野生か
+走る()
}
応用例
様々な関係と機能を示す複雑なクラス図の例:
コード:
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 最終更新
+状態更新()
}
追加機能
ジェネリック型
コード:
mermaid
classDiagram
class リスト~T~{
+int サイズ
+追加(T 要素)
+取得(int インデックス) T
}
インターフェース
コード:
mermaid
classDiagram
class 動物{
<<interface>>
+鳴く()
}
抽象クラス
コード:
mermaid
classDiagram
class 図形{
<<abstract>>
+面積() float
}
スタイル設定
可視性を示す記号:
+
パブリック-
プライベート#
プロテクテッド~
パッケージ/内部
実用的なヒント
- クラスは単一責任の原則に従う
- 意味のあるクラス名とメソッド名を使用
- 関連する属性とメソッドのみを表示
- 適切なクラス間の関係を使用
- インターフェースと抽象クラスを適切に使用
- カプセル化に注意
- 継承とコンポジションを適切に使用
- 過度な設計を避ける
よくある問題の解決
設計の問題
- クラスの責任が単一か確認
- 継承関係が適切か確認
- 過度な結合を避ける
関係の表現
- 関係の種類を正しく使用
- 関係の方向を明確に
- 適切な関係の説明を追加
可読性の問題
- 関連するクラスを適切にグループ化
- 交差する関係を減らす
- 明確な命名を使用