憂鬱本レビューの補足

冷却期間を置いてみると、「OOAD を偏重している」のを「良くない」としたのは、多分に私の主観を含んでいるなぁ、と思いました。

それはまさしく

433 :仕様書無しさん:2007/09/14(金) 00:05:59
OOのメリットってOOPLじゃなくOOD/OOAなんだよ
OOをマスターしたければは、先ずOOA/OODを徹底的にまマナベ!
OOPLはあくまでOODをやり易くした言語・プログラミングスタイルに過ぎないない。
OOPLの使い方なんてはOOの末端の枝葉の部分だ。OOの幹はOOD/OOA

なぜオブジェクト指向は普及しないのか 4

という発言に覚える嫌悪感そのままを、感情的に否定しただけだなぁ、と反省しきり。そして嫌悪感はそのまま、私のメガネを色つきにしてしまっています。だめじゃん、あたし。

憂鬱本は、OOA/OOD をOOPより大切なものとして扱っていますが、それは「分析と設計はおろそかにしてはいけないよ」というごく自然な論旨と、(憂鬱本から読み取るに)当時 OOP / OOPLの機能 ばかりに注目が集まっていた人が多かったため、OOA/OOD の大切さを強調した、というのが理由のように思えます。これ自体は自然なことかな、と思います。

なので、仕切り直し。


* * *


本書は、

オブジェクト指向によるソフトウェア開発とは「問題領域に現れるモノ(オブジェクト)をそのままモジュール単位(クラス)としてとらえ,それを基準にプログラムを開発すること」です.

をあまりに愚直に推し進めるスタイルでかかれていて、それで本当に良いプログラムが作れるのかには、私は大いに疑問を持っています。

「概念に名前を付ける」ことのできるプログラムの抽象化部品として、プロシージャよりもクラスは各段に強力です。ですが、「そのまま」落とし込めるほど強力ではないし、対象領域へのヒトの認識の写像がプログラムの最良の構造になるとは限らないからです。



例えば、カモノハシ本 の5章では、エイトクイーンパズルを解いていますが、これは

  1. Queen オブジェクト自体に「取られない位置に進む」「この位置を自分が攻撃できるか?を答える」という責務を持たせる
  2. Queen を各列に一づつ置く
  3. 端から順にQueen に「取られない位置に進め」をさせる。

という解き方をしています。各Queen は自らの位置の解を自ら解きます。Queen の片方向連結リストを作り、それぞれが 隣に自分を攻撃できる?と聞きながら歩を進めます。(隣が、隣の隣に聞き、またその隣に聞きという、責務の連鎖を作ります)

Board というオブジェクトは必ずしも必要ないですし、連結リストの一番端には現実には存在しない「番兵」を置く場合もあります。なによりも、Queen の駒が現実で勝手に自分の攻撃されない位置を求めて動くなんてありません。(そんなチェス盤を開発してくれ、という要件ではないのです)

つまり、これは現実の写像ではありません。でも良いデザインです。



(また嘘ついてないかな、私...。どきどき)

おまけ

お勧めです

オブジェクト指向プログラミング入門

オブジェクト指向プログラミング入門

  • 作者: ティモシイ・A.バッド,Timothy A. Budd,羽部正義
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2002/12
  • メディア: 単行本
  • 購入: 3人 クリック: 195回
  • この商品を含むブログ (42件) を見る

でも、Web の本屋さんでは軒並み品切れ中だったり。(まさか、絶版!?)