ネタ元: Ognac さんの 何か違うぞ
まぁ、ネタ元で挙げられている事例がわかりやすいか、わかりにくいか、例として妥当かそうでないかは置いておきまして < をい
自分だったら、どう説明するかなぁ、と思って、以前、何も知らない新人相手にオブジェクト指向の概念的な説明をしてくれといわれたときの話を思い出しました。
時間がなかったこともあり結構やっつけネタだったのですが、意外とアプローチの違いが見えて面白いなぁ、と。
そのときの自分は、オブジェクト指向だからといって「まったく継承のことなんて説明することは考えもつかなかった」ようです。
もう記憶だけになりますが、どんな形の話をしたのかをざっとまとめてみます。
みなさんは、「おいしいお餅を食べたい」って思ったときどうしますか?
餅の作り方を一から手順を追って、勉強していきますか?
もち米から作りますか?じゃあ、水田の確保から始めて、どの時期に種まきをしていつ収穫するかの計画を立て、肥料をやり、害虫を駆除し、刈り取って、そのもち米から餅をついて、……。
これらは、餅を手に入れるためにはすべて事前に必要になってくる作業です。これを一づつ順にこなしていくのが、オブジェクト指向以前のいわゆる「手続き型」といわれるものですね。
でも、一人でそれだけのことをすべてやろうと思うのは無理があります。必要な作業といえど、全部自分でやる必要もありませんよね。
もち米の収穫まではお百姓さんに、もちの加工は別の業者さんにお願いすればよいことじゃないですか。
任せられるところは任せていきましょう。お百姓さんからいただいたお米を、業者さんにお渡しすればよいことですよね。
これがいわゆる「モジュール化」の考え方です。
でも、さらに考えてみてください。お百姓さんたちに私たちが直接お願いする必要がありますか?
私たちはおいしいお餅を食べたいだけなんです。どうしてお餅の作り方まで気にしないといけないんですか?
お餅の作り方を気にするのはお餅屋さんだけで良いんです。
私たちはお餅屋さんに「おいしいお餅を売ってください」それだけ言えば良いんです。
餅は餅屋、これが「オブジェクト指向」の考え方なんですよ。
では、それで何がよくなるのか考えてみましょうか。
お餅を食べてみて、それがおいしくなかったらどうしましょう?
米が良くないのかもしれません、加工の仕方が悪いのかもしれません。
全部自分で調べますか?それは、「手続き型」の一番非効率な形ですね。
「モジュール化」ができていたとしても、お百姓さんに文句を言うべきか、業者さんに文句を言うべきか、それを判断するためには自分で調べないといけません。
「オブジェクト指向」だったら?お餅屋さんに文句を言えば良いのですよ。
でも、お餅がどうやって作られているか私たちにはわかりませんね。文句を言ってもおいしくなる保証はない?だから、ちゃんと中身の見える「手続き型」が確実?……ちょっと待ってください、「オブジェクト指向」の場合、もっと確実な手段がありますよ。
おいしいお餅を売ってくれる『別の』店から買えば良いだけです。餅屋はいっぱいありますからね。
# リアルで餅屋がいっぱいあるかはどこかに置いとくとしまして < をい(またかよ)
当時の私は、継承というよりはインタフェース(とカプセル化)こそオブジェクト指向の真髄だと信じていた気がします。
カプセル化で閉じているからこそ部分最適に集中でき、部分最適が集まって結果として全体最適につながる、という。
そういう意味では、モジュール化の先にオブジェクト指向があるって考え方でまったく違和感がなかったなぁ。
と、とりあえず、たらたらとオブジェクト指向について語ってみたところで(笑)、来週末にはオブ熱ですねー。
こんなエントリとはまったく何の関係もなく(苦笑)、わんくまの精鋭たちがオブジェクト指向への熱い思いを語りますっ(^_^)
http://www.wankuma.com/seminar/20080405tokyo19/Default.aspx
わんくま同盟 東京勉強会 #19
僕は行けるかどうかわからないよー(TーT) < マテ
では、そゆことで、ライブ中継でお会いしましょう(笑)