続・間違いだらけのオブジェクト指向

http://itpro.nikkeibp.co.jp/article/COLUMN/20060410/234873/

http://d.hatena.ne.jp/JavaBlack/20060407#p1の続き.予想通りに突っ込みどころ満載である.

従来の手法に慣れたプログラマやエンジニアがオブジェクト指向を理解するには,180度異なる発想が必要になることだ。

間違いではないが正しくもない.
従来の考えは捨てて考えるべきだ.だが180度別の方向かというとそうでもない.特にC言語などでモジュール化されたコードを書いてきた人は*1,ほとんど違和感なくOOPに入ることができる.

ぜひ覚えるべき「大原則」がある。それは「オブジェクト指向は人間にとってごく自然な考えなのだ」ということである。(中略)オブジェクト指向とは,「ソフトウエアを人間にとって扱いやすいよう,現実の物事になぞらえて考える」手法である。

これは大間違い.*2

実際,コンピュータの中ではプログラムとデータを物理的に異なるメモリーに格納している。

ノイマン型アーキテクチャの基本だな*3.プログラムとデータが同じ物理メモリ上に格納されている.それらの間にはアドレスを除いて本質的な区別はない*4.この考えはおそらくチューリングマシンに由来する*5

答えは簡単。コンピュータ内部の処理が手続き指向だからだ。

せめてノイマン型と言ってくれ.

オブジェクト指向とは,まさにこうした現実と同じような物事のありようを,ソフトウエアとして実現する考え方にほかならない。現実の機械部品を組み合わせるかのごとく,プログラムを組み合わせてシステムを開発することができれば,一から開発するよりはるかに効率的だ。

どこから突っ込んで良いか分からんくらいにボロボロ.少なくともオブジェクト指向の説明にはなっていない.*6

この事態を防止してオブジェクト指向の目的を達成するためには,オブジェクト内部への自由なアクセスを禁止しなければならない。

妙な展開.おそらく「オブジェクト指向の目的」を誤解しているために,論理が支離滅裂になっている.

「一体化」と「隠蔽」。これこそがオブジェクト指向の基本をなす「カプセル化」である

微妙だが,この説明だけで「カプセル化」を理解できる人はいないだろうね.

*1:そんな人材はほとんどいなくなり,今や絶滅寸前の天然記念物である.

*2:何度もリンクしているので今回は省略.

*3:http://en.wikipedia.org/wiki/Von_Neumann_architecture

*4:1次キャッシュ上での扱いは通常異なる.

*5:http://en.wikipedia.org/wiki/Turing_Machine

*6:オブジェクト指向を「ソフトウエアを『モノ』と同様に扱う」と自己流定義しているのが,混乱の原因だと思われる.