(define -ayalog '())

括弧に魅せられて道を外した名前のないプログラマ

UMLモデリングのエッセンス 第3版 読んだ

マーチン・ファウラーの本ですね。

UML モデリングのエッセンス 第3版 (Object Oriented SELECTION)

UML モデリングのエッセンス 第3版 (Object Oriented SELECTION)

読もうと思った理由だけど、エレメンタルデザインパターンの頭にUMLを読めたほうがいいって書いてあったのと、これまでのエンジニア生活の中でガッツリUML書く機会もなかったし、ぶっちゃけクラス図以外は自信がなかったというのがある*1

印象に残ったのは「双方向関連」と「汎化」の話で正直これはモデリングから脱線している部分に興味を持ってしまったのだけど、双方向関連はJavaで実装してみたいなって思った*2。汎化の説明のときに、リスコフの置換原則を元にスーパータイプと置換可能であるならば、継承を伴わない実装でもサブタイプとできるというのが凄く感動した部分で新しい知見だった。つまり、構造的部分型とか、ダックタイピング的な実装でも良いってこと。この話の中にJavaの古いバージョンのVectorの話が出てきて、確かに実装が最悪な何かを別の新しい何かに置換したいっていうときに、構造的部分型が使えるなら継承を行わなくていいし便利だよなーとか思った。サブクラス化とサブタイプ化というのを分けて考えることができるのはステキだと思う*3

とりあえず、この本自体は買って損はしないと思う。SIerとかでUMLを書く機会がどのくらいあるかはわからないけど*4、自分自身がアプリケーション開発をしていく中でコードで表現する前に頭の中のものを取り出してなんとなく形にできるのは利点だと思う。そして、書籍自体は「スケッチ」としてUMLを書くために紹介している感じがあるので実践的に使いやすい。あと新人研修とかでちょこっと習っただけで、UMLの良さを理解出来てない人には特にオススメします。はい。僕もこの本にあと3年早く出会いたかった。

*1:もっと言うならUMLに何があるのかも詳しく知らなかった

*2:少し考えてたけど、どう実装したらいいかわからない

*3:今のJavaは比較的小さいインターフェースを大量に継承した大きいインターフェースを作ったりすることによって汎用性を高めているイメージで、これによって昔のVectorの過ちを繰り返さないようにしている感じはある

*4:先日までのプロジェクトは日本語で設計書にロジック書きまくれっていう無理ゲーだったけど