今さらながら「オブジェクト指向でなぜつくるのか」を読んだ。

オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―

オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―

明日、後輩にオブジェクト指向について説明すると軽口を叩いてしまったので、急いでまとめ。以下自分の理解を補うためのメモなので網羅はしていません。
この本の概要について知りたい方はこちらをどうぞ。出口⇒http://d.hatena.ne.jp/takahashim/20080725

オブジェクト指向の適用範囲

大きく分けて、オブジェクト指向言語によるプログラミング技術と、オブジェクト指向を応用して、モデリングや設計を行うための技術に分けられる。どちらもソフトウェア開発を楽にするためのもので、前者は下流工程(動くモノを作るフェイズ)、後者は上流工程(業務や要求といった抽象的なものをまとめて、ソフトウェアを開発する準備をするフェイズ)にあたる。

オブジェクト指向プログラミングはなにがうれしいか?

Exceptionを投げられる

これはなにげにすごいことだよ!Exceptionがなくてエラーが出たらnullを返すとか、GOTOでどこどこに飛ぶとかやってたらラチがあかない。実際以前PHP4で開発をしたときにController ⇒ Logic ⇒ Daoのように処理が流れていって、Daoでエラーが発生したら、falseを返して、Logicでも戻り値がエラーか判別するif分を書いて、Controllerにも同じことを書いてエラー画面に飛ばすなんてことをひたすらやってた。戻り値以外に呼び出し元に返答を返す手段があるのはすごいことだよ!

ガーベッジコレクション

もうメモリ管理を自分でするような言語には戻れないよ。no malloc! no free!

デザインパターン

モダンなフレームワークを使ってプログラミングをしたことがある人なら、必ず一度はテンプレートメソッドパターンに触れたことがあると思う。必要なところだけ書けばプログラミングが終わってしまうなんて、なんて分かりやすくてクールなんだ!これも継承とJavaで言うところの動的メソッドディスパッチがなければ出来ない。他にもオブジェクト指向だから出来たパターンがたくさん。

メソッド名が短くなる

C言語だと、何の?何をする?関数かということを関数名にしないと関数名がかぶってしまう。(いい例が思いつかない)オブジェクト指向言語なら、何の?の部分がオブジェクトになるため、クラスが違えば、何をする?の部分が被っても大丈夫。

メソッドの引数も少なくなる

オブジェクト指向言語はオブジェクトによって状態(変数)と振る舞い(メソッド)をひとくくりにすることができる。C言語だと、構造体に状態を持たせて、関数1に渡して、関数2に渡して…ということをしなくちゃいけない。最低限必要な引数だけになるので、シンプルで可読性が高い。

オブジェクト指向も使いよう

オブジェクト指向を使っているだけでは、綺麗なコードは書けない。俺も昔は状態しか持たないDTOとステートレスなLogicだけでWebアプリを作っていたころがあった…。MVCで作っても、Controllerにひたすら処理を書いていってModelは状態しか持っていないようでは可読性はあがらないだろう。では、オブジェクト指向を有効活用するのに何が必要なのかといったら、責務の割り当てだろう。責務の話は長くなるので他にゆずるとして、ひとつだけ。もし、フレームワークにのかって開発するスタイルで、作成するクラスが決められているならば、凝集度のことだけ考えていれば大体当たる。平たく言うと、メソッドの処理に必要な変数を持っているクラスにメソッドを置けばよいということ。