クラス図を描く上で重要なことは何だと思いますか?
私は、以下の3つを意識して描いています。
- 構成がシンプルで分かりやすいこと
- 読み手の視線の導線を意識すること
- システムの核となるものを表せていること
今回は私の経験を元に、美しいクラス図とは何なのかということをテーマに掘り下げます。
美しいクラス図とは
クラス図とは、システムの静的な構造図であると記載があります。(参考:クラス図 - Wikipedia)
静的な構造を表した図ではあるのですが、止まっているはずのクラス同士が関連を持つことであたかも動いているように見えることが美しいクラス図の条件だと思っています。
それには、視線を誘導するためのシンプルな構成と配置、線の結び方が重要になります。
読み手の視線を自然に誘導してあげることで、誰にでも理解がしやすいクラス図を作ることが出来ます。
細部まで実装と一致させる必要はないです。重要なのは、その図を見ることで大まかな構成が一見して分かるということです。
その上で、システムの核となるオブジェクト(ドメインオブジェクト)を上手く抽象化してあげていれば、変更に強い美しい構造を作ることが出来ます。
以前の記事を題材にクラス図を作成してみました。
オブジェクト指向のメリットを車に例えてみる - Qiita
運転手がカーナビ会社から自動車を手配して、自動車に目的地を渡してルートを受け取り、自動車を操作して目的地まで行く、というものを表しています。
実際のシステム開発では、この規模で収まるシステムはないかと思いますが、作成するに当たって色々と気付いた点があったので、テクニック集としてまとめます。
テクニック集
- 線をなるべく交差させない
- 線のスタイルは直角線にする
- 処理が左上から右下に流れるようにクラスを配置する
- 基本クラスが上部、具象クラスが下部に来るように配置する
- 継承関係の線はクラスの上部から生やす
- 集約関係の線はクラスの右側から生やす
- 重要なメソッドのみ記述し、不要なメソッドは書かない。
- メソッドの定義順はなるべく処理順になるようにする
- 具象クラスには特徴的な差分だけを書くようにする
- ドメインオブジェクトを色分けする
- コンポジションはそれほど重要ではないので集約関係を重視する
- 最後に図の位置関係を調整し、バランスの取れた配置を心掛ける
さいごに
ここまで読んでいただきありがとうございました。
正直この話を他の人にしたこともありませんし、一般論ではないので、正しいかどうか自信はありません。
しかし、私がクラス図を描いて上手くいった時に感じたことを書かせて頂きました。
皆さんはどういったところに気を付けて描いているのでしょうか?
正解はないと思いますが、色々な意見を聞いてみたいです。