オブジェクト指向はなぜ難しいのか

そもそも「難しい」とは何なのか

チャンク(7つ程度の短期に記憶しておける内容。ワーキングメモリ)の使用量が多い=難しいでは?

どこが難しいのか

オブジェクト指向4大要素として、カプセル化、継承、多態性、ダイナミックバインディングがある。
しかしそれは以下の2つの指向に分けられると思う。
・データと処理を1つにまとめる指向(カプセル化
・インターフェースに対する操作指向(多態性。それを実現するための仕掛けとして継承やダイナミックバインディングがある)
カプセル化は、抽象度を高めて、利用チャンクを減らす。サブルーチンでは不可能な形で、プログラムからロジックの一部を切り出す。
例えばブレーク処理をするループは、構造化では「現在処理中のインデックス」の初期化や更新、1つ前の値との比較など、複数の処理が必要なのでどうしても1サブルーチンに切り出せなかった。しかしオブジェクト指向では、それらを1つのオブジェクトとして切り出してまとめることができる。これによりループやブレーク処理の実装に使われる各変数をチャンクに入れる必要が無くなる。



多態性は、考慮すべきことが増えるので、利用チャンクを増やす。
将来的な変更に耐えるためのクラス設計(どのクラスがどのクラスを利用するか、それはどのようなインターフェースを持つか)が必要。
クラス設計後でも、インターフェースと実装クラスの両方をチャンクに収める必要がある。(?)

多態性を使うと、機能変更をするときの変更範囲が狭くできるというメリットが得られる。
しかしこのメリットは、どのような種類の機能変更が発生しうるかを事前に予測して適切なインターフェースを使ってプログラムを作成しておかなければ享受できない。

究極的に『クラス利用者に実体を意識さない』ことができれば、クラス利用者側の利用チャンクは増えないはずではある。
(実際、.netのクラスライブラリとかは実体を意識せずに利用できる)