お久しぶりです。
「また何か書いてほしい」、とのことだったので、本の紹介を書くことにしました。
ちょうど新入社員研修でC++をやっていたので、オブジェクト指向についての本にしました。
『オブジェクト指向でなぜ作るのか〇知っておきたいOPP、設計、関数型言語の基礎知識〇(第2版)』です。
ちなみに、2021年4月に第3版が出版されています。
************************************************
小学校でプログラミング教育が必修らしいですね。
良し悪しはよくわかりませんが、
プログラミング的思考を習う、ということは、
ものの見え方が増えるってことじゃないかなっと思ってます。
例えば、
int a = 1;
って書いてあることが理解できるということ。
int b = 2;
a=b;
つまり、1=2
が理解できるということ。
なんのことはない、aにbの値が代入されるということ。
「へぇ、そういうルールなんだな」、とほうっておいて先へ進むことです。
えっ......var
?型推論?......こっからは宗教戦争だぞ!
私にとってプログラムを学ぶということは、世界を認知する手段が増えるということであり、
賞賛の語彙が増えるということ(なんて美しいデザインパターンなんだ!)であり、
罵倒の語彙が増えるということ(プロトタイプからやり直せ!)です。
それでもって、プログラミングのコンセプトの一つ、
よく聞く、「オブジェクト指向」っていうのは、
なにかというと、えー......。つまり、あれですよ、
Animalクラスを継承するDogが、関数をオーバーライドして、
Cry()を呼べば"ワン"と鳴くやつ。
ええー......さすがに、そんなはずはない。オブジェクト指向っていうのは、
つまり、もっとすごくて、クールで、かっこよいコンセプトのはず。
私はずっと、「オブジェクト指向」という言葉にずっと過大な期待を持っていて、
そういう夢を見ているわけです。
私がオブジェクト指向について考える時、頭の中に浮かんでいるのは、
いつも、クッキーの型とクッキーの実体。プラトンのイデアです。
完璧なイデアがインスタンス化して世界に降りてくることにより、
不完全さを露呈して死ぬわけですよ。
本当だろうか?"完璧な型"?
そもそもそんなの存在するのか?
プログラマーなんて、内角の和が180度でない三角形を作った挙句に
「あれ? 内角の和を足したらヘンな値になったんだけど?おっかしーな?」
と言うような連中ではないですか。
要するに仕様がダメダメすぎたから何でもかんでもpublicにして死んでいくのでは?
この本では、「ソフトウエアは現実世界をそのまま表現しない」として、
オブジェクト指向と、現実世界は、似ているところもあるけどもそのまんまじゃないねっと言っています。
それはそう。ただの道具だし。
でも便利であるから、いかにも夢があるから、なんかそれっぽいから、
オブジェクト指向は発展していった面があると述べています。
プログラムのパーツを、再利用してラクをするために作った「道具」。
マシンスペックの向上とか、すごい人のアイデアとか、いかにもいろいろできそうな、
それっぽい夢とか、いろんな思想が発展するにつれて生まれた、オブジェクト指向というコンセプト。
実体クラスだけでもじゅうぶん実装はできそうなのに、
なんでわざわざ実体クラスと管理クラスを分けるんだろう。
いざ新人さんに言葉にしてみようとすると言葉に詰まります。
なんか、一番先に浮かんだ言葉は、
「経験で今までうまくいったし、そうすると後からうまくいく気がする」から。
迷信かなにかか?
これはちょっといけませんね。
あとから再利用しやすくって、急な仕様変更に強くって、誰かから意地悪されないから。
でも、突き詰めてみれば、どうやってクラスを作っていくかというと、
「今までそうしてきてうまくいってたし、うまくいくはず」という感覚が、
結構な割合を占めている気がします。
ただの比喩に過ぎないんですが、オブジェクトをnewするとき、
私の頭の片隅では、小さなクッキーが生まれています。
プラトンが思った理想のイデアで型抜きされ、不完全に現実世界に現れたクッキー。
ほとんど意識されず、そのまま頭の底に沈んでて、私の睡眠中にでも、
ガベージコレクションにまぎれて粉々になっているんでしょう。
でも、たまに、newを忘れてプログラムがエラーで落っこちた時に、
「ああそうか、まだクッキーの型を抜いていなかったよ」ということが脳裏をかすめるわけです。
「まだ焼いてないクッキーは食べられないよ。そりゃあね......」
ぜんぜんほんとじゃないのに、ちょっとそれっぽい。
オブジェクト指向は現実のすべてを表象しないけど、やっぱりちょっと似ている。
完全なAはあんまり存在しない気がするけど、AよりBの実装が優れていると確信する瞬間はとてもある。
善がある気がする。良いものがある気がする。
まあ、できれば、善いプログラマーになりたい、と思っているんですね、私は......。
この春、オブジェクト指向プログラミングを学んだ皆さんの頭の中はどうなっているのでしょう。
Animalクラスを継承するDogが、関数をオーバーライドしてCry()で"ワン"と鳴くんでしょうか?
それとも、もう、全然、犬とか猫とかのことなんて、覚えていないのかな......。
Written by Y氏
************************************************
日経BP社/平澤 章 著
『オブジェクト指向でなぜ作るのか〇知っておきたいOPP、設計、関数型言語の基礎知識〇(第2版)』
2011年4月11日 発売
日経BP社サイト
Copyright © Hokkaido Electronics Corporation.