続・間違いだらけのオブジェクト指向
http://itpro.nikkeibp.co.jp/article/COLUMN/20060410/234873/
http://d.hatena.ne.jp/JavaBlack/20060407#p1の続き.予想通りに突っ込みどころ満載である.
間違いではないが正しくもない.
従来の考えは捨てて考えるべきだ.だが180度別の方向かというとそうでもない.特にC言語などでモジュール化されたコードを書いてきた人は*1,ほとんど違和感なくOOPに入ることができる.
ぜひ覚えるべき「大原則」がある。それは「オブジェクト指向は人間にとってごく自然な考えなのだ」ということである。(中略)オブジェクト指向とは,「ソフトウエアを人間にとって扱いやすいよう,現実の物事になぞらえて考える」手法である。
これは大間違い.*2
実際,コンピュータの中ではプログラムとデータを物理的に異なるメモリーに格納している。
ノイマン型アーキテクチャの基本だな*3.プログラムとデータが同じ物理メモリ上に格納されている.それらの間にはアドレスを除いて本質的な区別はない*4.この考えはおそらくチューリングマシンに由来する*5.
答えは簡単。コンピュータ内部の処理が手続き指向だからだ。
せめてノイマン型と言ってくれ.
オブジェクト指向とは,まさにこうした現実と同じような物事のありようを,ソフトウエアとして実現する考え方にほかならない。現実の機械部品を組み合わせるかのごとく,プログラムを組み合わせてシステムを開発することができれば,一から開発するよりはるかに効率的だ。
どこから突っ込んで良いか分からんくらいにボロボロ.少なくともオブジェクト指向の説明にはなっていない.*6
この事態を防止してオブジェクト指向の目的を達成するためには,オブジェクト内部への自由なアクセスを禁止しなければならない。
妙な展開.おそらく「オブジェクト指向の目的」を誤解しているために,論理が支離滅裂になっている.
微妙だが,この説明だけで「カプセル化」を理解できる人はいないだろうね.
*1:そんな人材はほとんどいなくなり,今や絶滅寸前の天然記念物である.
*2:何度もリンクしているので今回は省略.
*3:http://en.wikipedia.org/wiki/Von_Neumann_architecture
*4:1次キャッシュ上での扱いは通常異なる.