プログラミングを学習していると、突如として出現する「オブジェクト指向」というパワーワード。

初心者には理解できず…。
それは、今エンジニアとして活躍されている方でも、通ってきた道なのではないでしょうか?
100%言葉の意味を理解しなくてもプログラミングの学習に支障はないのも、事実。
しかし、モヤモヤする!
なぜ初心者はオブジェクト指向の意味を理解できないのか。
初心者はオブジェクト指向についてどう理解しているのか?
本記事は、これからプログラミングを教える人にとって、なぜ初心者は分からないのか、どう教えたらいいのかという手助けになればと思います。
なぜオブジェクト指向の意味を理解できないのか。

理解できない人が多いということは、それだけ説明している記事も多い、ということ。
しかし、どれもハッキリと理解したと言える内容ではない。
それはなぜかというと、「オブジェクト指向」という言葉の抽象性と説明する具体性のレベルが乖離しているからです。
下記の図は、書籍「具体と抽象」(著:細谷功)からの抜粋です。


ざっくりと概要を説明すると、ピラミッドの上層が「抽象」で、下層が「具体」となっている。ここの階層レベルの一致していないと、お互いの話がすれ違っちゃうよっていう内容です。
上記の図で説明をすると、「オブジェクト指向」は一番上に位置する単語です。
しかし、オブジェクト指向を説明している記事で多いのは、分かりやすく説明しようと、一番下のレベルにある「具体」の話で解説をしています。

例えば、自動車に例えたり、猫に例えたり、たい焼きに例えていたり…
抽象と具体の真ん中での説明がすっぽり抜けているんですよね。
だから、分かったような分からないような気がしてしまいます。
初心者が「オブジェクト指向」を理解するための糸口

次に、初心者はオブジェクト指向を理解しようとするにあたって、何からヒントを得ているのかを説明していきます。
元の言語に英訳してみる
これは自己流なのですが、英語の意味から探る手法です。
なぜなら、元々は英語からきているので、そこから意味を理解してみます。
オブジェクト指向 … Object-oriented programming
orientedは、「指向性の、〜向きの」と方向性を指し示す単語です。
例えば、Child-orientedというのは、「子供向け」という意味です。
つまり、「オブジェクト指向」とは「オブジェクト向けのプログラミング」のことなんですね。
この「指向」という単語、programmingという単語がすっぽ抜けているのも、分かりにくい理由のひとつかもしれません。

じゃあ、そのオブジェクトって何よ?
そこで私が導き出した答えが、次の項目です。
Ruby、Javascriptの言語から導き出すオブジェクトとは…
Rubyは全てがオブジェクトの言語だと聞きました。
Ruby においては整数や文字列なども含めデータ型はすべてがオブジェクトであり、純粋なオブジェクト指向言語といえる。
Ruby 出典: フリー百科事典『ウィキペディア(Wikipedia) https://ja.wikipedia.org/wiki/Ruby
じゃあ、Rubyに出てくるのは全部オブジェクトなのね、オッケー。
次に、Javascirpt。
こちらも調べたところ、オブジェクト指向言語とのこと。

じゃあ、RubyにはないDOM操作は?
DOMの略は、Document object Model

Objectワード発見!
オブジェクトの対象となるDocumentとはHTMLのことを指しますので、これもオブジェクト指向ということでよろしいのですよね!?
つまり、「オブジェクト指向」とは…?
ここまで私の意見を述べてきましたが、オブジェクト指向の意味がわからないと気持ち悪いので、分かりやすい動画を紹介します。
「オブジェクト指向」とはプログラミング設計の考え方!

わっかりやすーーー!
まとめ
ここまで、私が理解しようとした「オブジェクト指向」についてまとめてみました。
初心者としては、もう少し「オブジェクト」の定義が欲しいところ!
ただ、オブジェクト指向の意味合いとしては、プログラミングの設計ルールっていうことですかね?
何かコメントありましたら、Twitter(@mophie888)までDMなりコメントください。

ご精読ありがとうございました。
余談

本記事で紹介した「具体と抽象」は一読の価値ありますよ!