Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

犬は自分の意思で鳴くのでは?

元ネタ
ここ
ここ
(コメントを書きそびれている間に、話題が変わってきたので、エントリーにしました。)
随分以前。OOPの説明で自然界の生物を例えに使用した時、窮しました。そのときのエントリーでJittaさんに自然物で継承を説明するのは無理と指摘されました。
「私が犬に鳴けといったら、犬がワンと鳴いた。」調教された犬なら命令に従って鳴くのでしょうが、通常は鳴かないです。犬は自分の意志で鳴いているで、プログラム(人)が期待しているタイミングでは鳴かすのは難しいです。
  再生機能を持つ装置を基本クラスとし、再生する対象をレコード、カセット、DVD、CDなどとすれば、旨く説明できそうでした。
犬が鳴くというのは、システム設計者の意思ではなく、対象物の意思ということは、Event処理になりますね。
再生装置に、停止、早送り、巻き戻し、先頭、末尾の釦があり、何の釦がどのタイミングで押されるかは不明です。
装置は、Event待ちのIdling状態で待機しています。
 再生装置のEvent待ちの仕組みを継承していけば、派生先にも同等のサービス提供はできますよね。
EventドリブンはOOPとは違う次元のもの....犬が鳴くのはEvent.....「犬は鳴く」<--多態性-->「動物は鳴く」という説明は無理がある。
 うーん。強引な詭弁かなぁ。

投稿日時 : 2008年12月20日 0:23

Feedback

# re: 犬は自分の意思で鳴くのでは? 2008/12/20 5:47 インドリ

>うーん。強引な詭弁かなぁ。

別にそう思わないピヨ。
ボクの理論(妄想)からすればそれは普通ピヨ。

# re: 犬は自分の意思で鳴くのでは? 2008/12/22 22:58 Pasie.

そもそも、現実のものとか動物に喩えることが間違いの元なんだとおもいますが、しかし、記事中の「犬が鳴く」についていえば、鳴くという実体のメソッド(Private Method)とインターフェイス(Impelments)としての「鳴け」メソッドがごっちゃになっている気がしますね。インターフェイスの「鳴け」メソッドはあって良く、そのインターフェイスのメソッドを実行の結果、動物によって結果が異なるのはおかしくともなんともないかと。
 ただ、このくだらない(と私は思う)動物の比喩がいかにオブジェクト指向を混迷にさせたかと考えると、百害あって一利なしではないのだろうかと思う今日このごろ。

# re: 犬は自分の意思で鳴くのでは? 2008/12/23 10:04 Ognac

>ごっちゃになっている気がしますね
確かに!
100%指示に従う動詞でないと、継承関係が維持できない、100%でない部分は、継承クラスで補完....こんな説明すると混乱を増すだけですね。
 やはり、生物系で説明することに無理があるということでしょうね。

# re: 犬は自分の意思で鳴くのでは? 2008/12/23 11:36 Pasie.

 継承(Inherits)って考え方が現実には特異なのかもしれませんね。別に生物系でなくても無理がある分野って多い。「技術部二課員は社員から派生している」とかいわれても「はあ?」って感じしますし。じゃあ派遣社員がいたらどーなんの?とか突っ込んでしまいそう。そしてちゃんと答えようとすると、ものすごいクラス図ができてしまいそうですし。
 話は変わりますが、昔「現実のものをモデル化するというなら、(ブロードバンド)ルータはどのように表現すればいいのか?(*1)」とか聞いたことがあるんですが、答えてくれる人はいませんでしたね。
 (*1)外側からは外側に対するメソッドのみ、内側からは内側に対するメソッドのみ見せるようにしたい。しかしルータはひとつのオブジェクトだから、ひとつのクラスで表現したい。みたいな話。
 結局は、こなれてくるとコンピュータ的なものと現実的なものは違うものとして扱っているのに、他者に説明する段階になるとなぜか「現実のものをモデリング」みたいな話でごまかすか、みたいな話になってしまうのではないかと邪推しています。

# re: 犬は自分の意思で鳴くのでは? 2008/12/23 19:18 Ognac

継承で表現できるモノの方が少ない気がしてきました。
 「継承先で、元の構成要素が見える」もしくは、「継承元の姿にしか見えない」というのが条件かも知れません。
「モータを継承して扇風機、洗濯機、ジューサーを作る」と表現しているセミナーがありましたが、Switch onでモーターが回るという面では、成立しそうですが、実体がモータには見えないので、継承とは言い難い。
しかし、蜜柑、バナナ、林檎を継承してミックスジュースというのは、無理っぽい。
厳密に考えたら、当てはまるモノは少ないカモ。

初心者や未経験者に説明するときは、大きくない間違いには目をつぶって、
「共通機能を洗い出して、因数分解する。その要素がモノとして構成できたら、基礎クラスになり得る」
というのも致し方ないのかも知れません。

「人をみて法を説け」は一理ありそう。初心者とベテランに同じ言葉で、矛盾なく説明するのは無理があります。
「多少間違ってても興味を持たせるのが大事」と言った人もいました。
人への説明って難しいですね。

タイトル
名前
Url
コメント