わたしからみたオブジェクト指向プログラミング

#はじめに
やあやあ、ごきげんよう。🐱です。新人さんも、なんとなーくふんいきでwebフレームワークを触って来たけど、「public static void mainとは🤔」みたいな感じでエンジニアリングしてきた人もこんにちは。**Engineerってのは最高にSexyなお仕事だ**。おめでとう、おめでとう。

早速だが、オブジェクト指向プログラミング（以下、面倒なのでOOPと記する）というものがあり、今のところ主流ということになってる。お仕事の道具だ。しばらくこいつに付き合うことになると思うから、理解しよう。そのためにこのポエムがある。

#OOPを理解するに当たっての当記事の位置付け
私は今から、OOPの鮮烈なイメージを諸賢に提供したい。最低限の裏取りはしたが、厳密性を欠くところも多分にあると思う。正確に言うと、当記事では厳密な定義より鮮烈なイメージを優先する。そうすると何が嬉しいかと言うと、**遍く全てのOOPが使えるようになる**。マジだぜ。20-30分くらいで眺められるように頑張る。付き合ってくれ。

#本論：OOPってなんなんだよ
OOPの初期貢献者として、パーソナル・コンピュータの父と呼ばれる[アラン・ケイ](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%A9%E3%83%B3%E3%83%BB%E3%82%B1%E3%82%A4)先生ってのがいる。こいつはやべえくらいに賢くて、端的にやべえやつだ。Jazzもやるらしいな。Coolだ。こいつの論文にこんな絵がある。折につけ、ここに立ち戻って欲しい。

![children](https://i0.wp.com/img.logmi.jp/wp-content/uploads/2016/01/gazou082.jpg)

どうだろう？ 野原で、子ども達が、楽しそうに、コンピュータを使っているように見える。まるでお絵描きするみたいに。ここまではわかる？ じゃあ、次に進もう。

どうもアラン・ケイは子ども達がお絵描きするように楽しくコンピュータ・サイエンスをするというヴィジョンを持ってるようだ（そのヴィジョン自体がやべえ。そう思わないか？）。そのために[Smalltalk](https://ja.wikipedia.org/wiki/Smalltalk?wprov=sfti1)ってプログラミング言語を思い付いた。こいつはOOPだ。

結論から言おう。アラン・ケイはこう考えた（きっと、恐らく）。"子ども達が楽しくコンピュータ・サイエンスすると……嬉しい！ そのためには、プログラミング言語が必要だ。子どもの言語習得に最適な道筋は何だろうな？ 比喩だな。なんなら、擬人化してやるともっといい。わかりやすいに違いない。 **Hell yeah!**"

もう既にピンと来た人もいるかも知れない。私が考えるに、OOPとは、畢竟、モジュールの擬人化だ。**コンピュータの中で働き者の妖精さんがせっせせっせとお仕事しているイメージ**だ。自分で出来るお仕事は自分でしたり、自分じゃ無理かもってお仕事は妖精さんにお願いしたりいてる。

#OOPもうちょい詳しく
クラス、オブジェクトに触れておこう。オブジェクトが妖精さんだ。クラスはあるお仕事が得意な妖精さんの特徴だ。特徴（クラス）から、妖精さん（オブジェクト）が生まれる。以上だ。**鯛焼きと鯛焼き機の話は窓から放り捨てろ**。

[GOFデザインパターン](https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2))にも触れよう。こいつは最高にCoolなアイディアだ。これはやべえくらい賢いやべえやつらがOOPするにあたって、あるあるな設計を括り出したものだ。"妖精さん？ デザインパターン？ それ、何が嬉しいの？"、なるほど。結論から言うと**GOFデザインパターンってのは妖精さんが気持ちよくお仕事するための、人員配置であり、座組み**だ。

結城浩先生というやべえくらい賢くてやべえやつがその事について[本](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88Java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80-%E7%B5%90%E5%9F%8E-%E6%B5%A9/dp/4797327030)を書いてる。それを写経しているとある日突然わかるようになる。これは、マジだ。私はRubyでそれをやった。別にどのOOPでやってもいい。環境構築が楽なやつを選べばいい。逆に環境構築の方が難しい。いつか書くかも。🐱だから気まぐれなんだ。ごめんね。

ここらでGOFのどれかを描こうかなって思ったんだけど、やめた。🐱だから鉛筆が向いてない。絵がへたっぴだから恥ずかしい。と、言うか。ここまで読んでくれて「ほんとか？」って探究心が湧いてしまったあなた、あなたはエンジニアに向いている。是非試して欲しい。「めんどくせ」ってなったあなたは、今後エンジニアをやって行くと少し苦しいかも知れない。

#これで諸賢はOOP出来るようになった。Enjoy！

JavaはゴリゴリのOOPで、ちょっと面倒臭い。C#はちょっとエレガントなJavaだ。php/Ruby/Pythonあたりは柔らかい感じのOOPだ。それぞれ他にない長所を持ってる。逆に言うと、何が劣っている、ということはない。**言語間宗教戦争をやめろ**。それぞれお作法がある（誤差、方言みたいなもんだけど）。公式リファレンスに当たるといい。

#ただし、Javascript、お前は別だ

なんだよ、prototype baseって。お前、どうしてそうなっちゃったんだよ……。

一応、妖精さんには親妖精さんがいて、親妖精さんに、妖精さんにお仕事を覚えさせるために親妖精さんにお仕事を覚えさせる……という発想は理解出来なくはない。お気持ちは察する（コメント欄に妖精さんの比喩でどうしてこうなっちゃったか、書いて下さっている方がいるので、参考にするといい）。

あの、**面倒臭いだろ、普通に考えて**。

なお、Javascriptを作った人の名誉のために補足。あれ、設計から実装まで1週間でやってのけたっていうレジェンドがある。やべえ。ついでに"最近Javaが流行ってるっぽいから、勝ち馬に乗っかるために名前にJavaって入れてくれ"と言われて、Javascriptって名前になったらしい。まあ、**諸々不幸だよな**。

#Caution！ Caution！ Caution！
**少なくとも『10日でわかるJava』みたいなのはやめろ。もう買っちゃったなら、窓から放り捨てろ。"変数は箱のようなものである"は、嘘だ。嘘が書いてある本を読むと、余計にわからなくなる。**

じゃあ、どうすんのよ、と戸惑われた方もいるだろう。私は[この記事](http://keens.github.io/blog/2016/01/17/dokugakudepuroguraminguwoyattekitanakadeyokattagijutsushowoageteiku/)を推したい。Rubyで「こんにちは！」するところから、自分用の言語を実装、コンピュータサイエンス、実務ベタベタのSQLお作法まで全部書いてある。私は全部読みたい。多分、難しいと感じる本もあると思う。それでいい。

ここでやべえヤツを紹介したい。Abbathだ。Black Metalと呼ばれる音楽をやっているやべえ芸術家だ。全文紹介したいが、流石に控える。なんなら暇な時とか、業務中にお腹が痛くなったことにしてトイレの個室で読んで欲しい。私は笑い過ぎておなかがいたくなった結果、真顔になった。こんなことを言っている。Cool過ぎるだろ？

[ブラックメタルというものは、カテゴライズされたくないヤツの音楽のことだ。流れに逆らうヤツのことだ。後ろ指差すようなヤツに「ファックオフ」を突きつける。宗教にも政治にも「ファック」を突きつける。それこそロックンロールであり、ブラックメタルだ。**つまり自由ってことだ。それが分かれば自由になれる。分からなければ時間をかけろ**。](https://jp.vice.com/music/abbath-interview)

#結びに
再度申し上げる。**Engineerってのは最高にSexyなお仕事だ**。これはマジだぜ。そのためにはいろんな事をたくさんお勉強しなきゃいけない。なんて言うか、**全部だ**。やっていきましょう。気が向いたら何か書きます。🐱だから気まぐれなんだ。ごめんね。読んでくれるととても嬉しいです。

My pleasure.
My honour.
see ya.
Your faithful 🐱

#Appendix
詳しい実装（考え方、アプローチ）を手っ取り早く知りたい、或いは**妹が大好き過ぎて大好き過ぎて是が非でもお着替えさせたい**という方には[この記事](https://qiita.com/skht777/items/c0fde3b9139e836b8f18)をおすすめする。

重くてもいいから、史実に向き合ってゴリゴリにベタ足インファイトでOOPを理解したいなら、[この記事](https://qiita.com/hirokidaichi/items/591ad96ab12938878fe1)だ。ぶっちゃけ、これ以上のOOP解説はいらないんじゃないかな？