プログラマー二年目でやっとオブジェクト指向の概念を少し理解した
https://youtu.be/L86XoUjvu68
最新版動画 ↑
最新版ブログはこちら https://off.tokyo/blog/baka-demo-dekiru/
はじめに
プログラマー始めて二年目の終わりぐらいでようやくオブジェクト指向の概念を理解しはじめた。利便性も理解しはじめた。だから、やっとこれからオブジェクト指向はじめます。Swiftってオブジェクト指向型の言語だったんだあ。
概要
オブジェクト指向の概念を自分なりに書き留めておこうと思います。コードを使わずに、概念的な説明だけです。オブジェクト指向の利便性を理解したいと思う方のお役に立ててれば幸いです。オブジェクト指向に関しては言語によって多少理解の違いがあるらしいので、そこらへんはご了承願います。カプセル化云々の技術的な話しはしません。この記事はエッセイに近いものです。**間違ってるとこあったら教えてください
オブジェクト指向とは?
オブジェクト指向とは、言うなれば、そのソースを後々見る他人及び未来の自分に宛てた親切だと考えると理解がしやすいです。親切というのは義務ではないので、別に差し出さなくてもルール違反ではありません。ルール違反ではありませんが、人には好かれませんし、人に不親切に接していると、そのうちに自分に不親切が跳ね返ってくるのでなるべく親切は覚えておいた方が良いです。でも、最初のうち(若いうち)はそれもしょうがないんです。親切というのは簡単なようで案外難しく、人生経験が必要だったりするからです。
オブジェクト指向言語の代表格といえばJavaとか色々ありますけど、オブジェクト指向型の言語を書いているからと言って、ソースコードがオブジェクト指向を体現しているかどうかは全く別の話しです。オブジェクト指向というのは義務ではないので、別にオブジェクト指向を駆使してコードを書かなくてもエラーにはなりません。
オブジェクト指向は非常にパワフルで便利な考え方ですので、オブジェクト指向を体得している人は、仮にオブジェクト指向言語じゃない言語を書いていても、多分オブジェクト指向をしながら、利便性をフル活用して、コードを書くと思います。
逆に、オブジェクト指向を体得してない人が普通にコードを書くと、例えばSwiftとJavascriptのソースコードの出来上がりが同じような感じになったりします。 極端に言えばclass
があるかないかだけの違いになるかもしれません。でもオブジェクト指向を体得してる人がJavascriptを書くとかなりクールな仕上がりになります。オブジェクト指向は、非オブジェクト指向言語からでも学べるのです。オブジェクト指向というのはK・U・F・U
工夫なのです
男と女
簡単な例え話しをしたいです。例えば、「男」と「女」というオブジェクトを完成させるために「人間」というが情報が必要だったとします。「人間」という情報を持った「人間クラス」の中に「男」と「女」というオブジェクトを作れば、彼ら「男」と「女」メソッドは「人間」という情報を持っている(つまり「男」「女」であるために必要な情報を持っている)ので、生きていくことができます
これをオブジェクト指向をしながら、もう一度書くと下記のようになります。「人間クラス」は「人間」という情報だけを持った個別のクラスに切り分け「男クラス」と「女クラス」は「人間クラス」は継承させた形にします。こうすることで、機能を小さい単位に分けることができました。
オブジェクト指向をしながらコードを書くと、機能を小さい単位に分けることができます。機能を小さい単位に切り分けると、ソースの改修がしやすくなります。例えば「男」という情報を「男性騎手」に変えようと思った時、図1-1では「人間クラス」というクラスの中に色々入ってしまっているので、「男」というコードを見つけるのに時間がかかってしまう可能性があります。もしかしたら、見間違って女性を騎手にしてしまうかもしれません。
機能を小さ単位で切り分けて、カプセル化しておけば、そのような心配は減りますね。「男」を探したければ「男クラス」だけを見ればいいんですから、楽です。
実際のところ
オブジェクト指向を駆使しながらソースを書くのは、最初のうちは大変です。学習コストが高いです。仕事をしながらだと、どうしてもスピードを意識してしまうし、前にも書いたように、オブジェクト指向というのは考え方であり、オブジェクト指向をしなくてもソース書けるし動くので、利便性を実感しづらいところもあります。オブジェクト指向が本当の意味でわかるようになるのは、処理が一個にまとまっていると、後々かなり怠い結果を招くと体で知ったときです。時間に追われながら沢山コードを書いて、コードを書くことに慣れてきた頃に、その改修の為に数ヶ月ぶりに過去の自分が書いたソースを見ることになると思います。その時が、オブジェクト指向の美味しいさを、少しだけ理解できる時なのだと思います。