まず、オブジェクト指向という概念は、それだけを聞いても実際のコードが想像しにくいのは、現在のこの状況(オブジェクト指向の理解者が圧倒的に少ない)から見てもわかりやすいと思います。
ただ、構造化プログラミングについて浸透率は結構高いと思います。
まま、しっかりとした理解はなくとも、だいたいこんな雰囲気であるってことはおおよそご存じなんじゃないかなぁと思ったりするワケです。
じゃ、オブジェクト指向プログラミングは構造化プログラミングに比べて何がそんなに捕らえにくいのでしょうか。
その理由のひとつとして、それは目に見えた形として表現できるかどうか点にあると思います。
たとえば、
1: public void MethodA(int loopLength){for(int index = 0; index < loopLength; index++) { Console.WriteLine(index.ToString()); }}
と書かれているより
1: public void MehtodA(int aintLoopLength) { 2: for(int intIndex = 0; intIndex < aintLoopLength; intIndex++) { 3: Console.WriteLine(intIndex.ToString());
4: }
5: }
と書かれていた方が見やすくないでしょうか。
もちろん、これは構造化プログラミングのメソッドの1つでしかないのですが、目に見える形ですっきりしたのがわかりますね。
これに比べてオブジェクト指向では、その作用がすっきり見えにくいのです。
たとえば
1: public class ClassA { 2: protected string mstrSaveString = string.Empty;
3:
4: public string Add(string astrTargetString) { 5: mstrSaveString += astrTargetString;
6: }
7: }
8:
9: public class ClassB : ClassA { 10: public void Clear() { 11: mstrSaveString = string.Empty;
12: }
13: }
実際、この例では
1) ClassBはClassAを継承している
2) ゆえに、ClassBから利用できるメソッドは2つある
3) ClassBから利用できる変数はmstrSaveStringである
というのは、C#をご存じの方にはすぐわかるとは思いますが、この簡単な例ですら、コードの見た目からその構造が理解しずらいのです。
オブジェクト指向言語を理解している人からみたらこの簡単な例でも、やはりオブジェクト指向言語を勉強しようという方にとっては非常に難関となるのではないでしょうか?(^^;
また、仮に継承のメカニズムは理解できても、これをうまく使いこなせないでいるのではないでしょうか。
実はこれは図にすると非常にわかりやすいのです。
こういったオブジェクト指向技術を支援する技術の一つなんですが、オブジェクト指向プログラミングなどでよく用いられる表記方法としてUML(Unified Modeling Language)というものがあります。
UMLにはいろんな図の種類が定義してあって、その中でもクラス図というものがあります。これが、クラスの構造を理解するには非常にわかりやすい表記になっています。
たとえば、上記の例をクラス図で表現するとこんな感じになります。

今はこの図の意味を詳細に理解する必要はありません(わかる人はそれはそれでもいいです)が、なんとなくイメージがつかみやすいのではないでしょうか?(^^;
オブジェクト指向を理解している多くの方がこのように、プログラムの構造は図で思い浮かんだりするのです。 逆に言うと言語そのものだけの表現で理解しようとすると非常にイメージがしずらいのです。 つまり、想像力が必要になるんですね。
オブジェクト指向が登場した頃に比べて、このような支援技術も発達しており、これらを活用することでオブジェクト指向も以前に比べて随分と開けてきたなぁという感じはするのですが、それでもやはり、構造化プログラミングのようにコード1発でその効果を理解できるようなものではないですね。
こうやっていろいろな技術を関連づけて説明しなければならない面倒さがオブジェクト指向プログラミングにはあると思います。
これが、おそらくオブジェクト指向の敷居を高くしている原因の一つではないかなと思うワケですがどうでしょうか?(^^;