UMLモデリングの本質 第2版を読んだ

きっかけ

そういえば少し前にチームで振り返りをしている時に以下のようなKPTが出たのを思い出した。

  • 初期のDB設計に時間をかけすぎた (Problem)
  • いや、でもDB設計に時間をかけるのはいいこと (Keep)
  • 次の開発でもDB設計に時間をかける (Try)

そして、それから少し経ったある日、プルリクエストにこんなコメントがあった。

「未来のストーリーを使ってモデルを揺さぶってみるといいかも」

それでこの本の存在を認識したのだった。そしてもっとモデリングをうまくやりたい気持ちしかない我々はこの本を読むしかないのだった...

モデリング

この本で紹介されていたモデルの定義は「ある人にとっての、ある状況、あるいはある状況についての概念の明示的な解釈」。これは「システム仕様の分析学」の著者であるブライアン・ウィルソン(Brian Wilson)という人の言葉らしい。で、この定義のかなめは「ある人の解釈」という点ということだ。「解釈」は人によって様々なので、解釈のズレや誤ちが起きる。

それが前提にあるので、人々がお互いの解釈を明示して、すり合わせて、妥当性を検証する必要があり、モデリング手法というのが必要になり、解釈を表現するためにUMLなどのモデリング言語が生まれた。

この本ではUMLを使って、オブジェクト指向に基づくモデリングを行なっていく。

進め方

この本ではUMLのクラス図を使って「型図」と呼ぶ図を作っていく。ここでいう「型」はプログラミング言語でクラスとして実装すると決める前の概念の表現形式、とのこと。概念レベルの図なので「これどうやって実装するの?」みたいな表現も出てくるけど、そこは「実装レベルへの変換」というところで一応説明されている。

進め方は「図書館システム」と「駅の入出場管理」を例に使って丁寧に説明されていてよかった。

進め方の典型例とモデルの揺さぶりの説明だけ立ち読み風にご紹介しておく。

f:id:takatoshiono:20180709234735j:plain f:id:takatoshiono:20180709234801j:plain

実装レベル

この本では概念の状態遷移を「動的分類」、概念が複数の汎化構造を持つ場合を「多重分類」と呼んでいて、それを実装レベルに落とし込むにはこういう手法がありますよ、ということが紹介されている。コードも少し出てくるのだけど、この辺はまだしっくりきてない。また永続化はO/Rマッピングツールを使います、以上。という感じなので、実際に自分でコードを書いてみないと納得できないなあ、という感想だった。

パターン

あとはマーチン・ファウラーの「アナリシスパターン」からいくつかのパターンが紹介されていてよかった。

  • 責任関係パターン
  • 観測パターン
  • 勘定パターン

この辺をちゃんと理解するにはもっと修行が必要そうだ...

例題

最後に演習として以下の2つが出てきておしまい。

  • 酒問屋の在庫管理
  • 航空券の予約

酒問屋の方は以下の論文が出所だそうで、設計演習の題材としてよく使われるとのこと。初めて見た。

CiNii 論文 - 共通問題によるプログラム設計技法解説

まとめ

これまで概念レベルの設計というのはあまりやったことがなかったけど、

  • 未来のあり得そうなシナリオを想像してモデルを揺さぶる
  • 作ったモデルに矛盾がないか、シナリオのある時点のインスタンス図を書いて検証する

などは今後やっていきたい。

理解度がまだまだ低いので、もっと真面目に取り組むなら、この本に出てくる例を実際に実装してみたりすると理解が深まるのかなあ、と考えるけど、どうだろうなあ...

UMLモデリングの本質 第2版

UMLモデリングの本質 第2版