はじめに

やあやあ、こんにちは。新人さんも、ふんいきでエンジニアリングしてきた人もこんにちは。エンジニアってのは最高にセクシーなお仕事だ。おめでとう、おめでとう。

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

OOPを理解するに当たっての当記事の位置付け

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

本論:OOPってなんなんだよ

OOPの初期貢献者として、パーソナル・コンピュータの父と呼ばれるアラン・ケイ先生ってのがいる。こいつはやべえくらいに賢くて、端的にやべえやつだ。Jazzもやるらしいな。Coolだよな。こいつの論文にこんな絵がある。折につけ、ここに立ち戻って欲しい。

children

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

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

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

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

OOPもうちょい詳しく

クラス、オブジェクトに触れておこう。オブジェクトが妖精さんだ。クラスはあるお仕事が得意な妖精さんの特徴だ。特徴(クラス)から、妖精さん(オブジェクト)が生まれる。以上だ。鯛焼きと鯛焼き機の話は窓から放り捨てろ

GOFデザインパターンにも触れよう。こいつは最高にCoolなアイディアだ。これはやべえくらい賢いやべえやつらがOOPするにあたって、あるあるな設計を括り出したものだ。"妖精さん? デザインパターン? それ、何が嬉しいの?"、なるほど。結論から言うとGOFデザインパターンってのは妖精さんが気持ちよくお仕事するための、人員配置であり、座組みだ。

結城浩先生というやべえくらい賢くてやべえやつがその事についてを書いてる。それを写経しているとある日突然わかるようになる。マジだぜ。私はRubyでそれをやった。別にどのOOPでやってもいい。環境構築が楽なやつを選べばいい。

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

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

ただし、Javascript、お前は別だ

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

一応、妖精さんには親妖精さんがいて、親妖精さんに、妖精さんにお仕事を覚えさせるために親妖精さんにお仕事を覚えさせる……という発想は理解出来なくはない。お気持ちは察する。

でも……面倒臭いだろ、普通に考えて

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

まとめ

再度申し上げる。エンジニアってのは最高にセクシーなお仕事だ。これはマジだぜ。そのためにはいろんな事をたくさんお勉強しなきゃいけない。やっていきましょう。

Appendix

詳しい実装(考え方、アプローチ)を手っ取り早く知りたい、或いは妹が大好き、という方にはこの記事をおすすめする。

重くてもいいから、史実に向き合ってゴリゴリにベタ足インファイトでOOPを理解したいなら、この記事だ。ぶっちゃけ、これ以上のOOP解説はいらないんじゃないかな?

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

12contribution

久しぶりにいいきーたきじみました。

1812contribution

鯛焼きと鯛焼き機の話は窓から放り捨てろ。

"変数は箱のようなものである"は、嘘だ。嘘が書いてある本を読むと、余計にわからなくなる。

まさに!声を大にして言いたいです。

156contribution

なんてCoolでやべぇ記事なんだ!

5contribution

OOPで何が嬉しいのかはこの本が一番直感的に理解できた気がする
テキストのノリもちょっとこの記事っぽい感じでテンションを保ったまま読める

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.