この記事で分かること
- 美しいクラス図の書き方のコツ
- クラス図を書く時のおすすめテクニック 11選
- クラス図に正解は無いということ
クラス図を書く上で重要なことは何だと思いますか?
私は、特に以下の3つのことを意識して書いています。
- クラス構成がシンプルで分かりやすいこと
- 読み手の視線の動きを意識していること(左上から右下へ)
- システムの核となるものを表せていること
今回はオブジェクト指向歴15年超の経験を元に、美しいクラス図とは何なのかということをテーマに掘り下げます。
美しいクラス図とは?
クラス図とは、システムの静的な構造図であるとwikiに記載があります。(クラス図 - Wikipedia)
つまり、クラス図には時間の流れを表現する手段がありません。
静的で、時間が止まった状態を表した図ではあるが、時間が止まっているはずのクラス同士が関連を持つことであたかも動いているように見えることが美しいクラス図の条件だと思います。
それには、シンプルで本質を捉えたクラス設計と、視線を誘導する図の配置、線の結び方が重要になります。
読み手の視線は基本的に左上から右下へ移動するので、クラス図で表現したいメインの処理の流れを左上から右下に自然に誘導してあげることで、理解しやすいクラス図になります。
よくありがちな失敗で、ソースコードと一対一で対応するクラス図を書く方がいますが、クラス図を細部まで実装と一致させる必要はないです。
重要なのは、その図を見ることで大まかな構成が一見して分かるということです。
プラスとして、システムの核となるオブジェクト(ドメインオブジェクト)を上手く抽象化して表現できていれば、変更に強い美しい構造を作ることが出来ます。
クラス図作成例
以前投稿した、以下の記事を題材にクラス図を作成しました。
※利用ツール:diagrams.net (旧draw.io) 無料
-
オブジェクト指向のメリットを会話形式で理解する!
こんにちは、ゴイチです! 今回の記事はいつもと趣向を変えて、会話形式でオブジェクト指向のメリットを解説する内容になります。 オブジェクト指向のメリットを現実世界のメリットで説明していて、内容は先生と生 ...
続きを見る
運転手がレンタカー会社から自動車をレンタルして、自動車に目的地を渡してルートを受け取り、自動車を操作して目的地まで行く、という処理フローを表しています。
実際のシステム開発では、この規模で収まるシステムはないかと思いますが、設計のエッセンスは詰め込みました。
この図を作成するに当たって色々と気付いた点があったので、次の章でテクニック集としてまとめます。
テクニック集
- 線をなるべく交差させない
- 線のスタイルは直角線にする
- 処理が左上から右下に流れるようにクラスを配置する
- 継承関係は基本クラスが上部、具象クラスが下部に来るように配置する
- 集約関係の線はクラスの右側から生やす
- 重要なメソッドのみ記述し、不要なメソッドは書かない
- メソッドの定義順はなるべく処理順になるようにする
- 具象クラスには特徴的な差分だけを書くようにする
- ドメインオブジェクトを色分けする
- コンポジションはそれほど重要ではないので集約関係を重視する
- 最後に図の位置関係を調整し、バランスの取れた配置を心掛ける
まとめ
ここまで読んでいただきありがとうございました。
正直この話を他の人にしたこともありませんし、一般論ではないので、正しいかどうかあまり自信はありません。
しかし、私がクラス図を描いて上手くいった時に感じたことを書かせて頂きました。
皆さんはどういったところに気を付けて描いているのでしょうか?
明確な正解は無いと思いますが、色々な意見を聞いてみたいです。
(注)この記事はQiitaに投稿した過去の記事を再構成したものです