寺田@東工大 です。
長谷川さん:
> つまり、「金槌が釘を打つ」のではなく、
> 例えば「大工は釘を打つ」と解釈されてはいかがでしょうか?
> 実装はこうなります。
>
> class
> penter{
> public:
> virtual void hitSpike(...) {...}
> };
>
> 大工の振る舞い「釘を打つ」の中身は、「金槌を使って・・・」かもしれません
> し、「石を使って・・・」かもしれません(もしかしたら、内部でHammerオブジェ
> クトを使っているのかもしれません。)。
> でも、結果として、実装はB(「金槌が釘を打つ)と同じです。
ええ、そういう事を意図して書きました。長谷川さんのおっしゃるように、金槌
が hitSpike メソッドを持つよりも penter が持つ方が自然だと思います。
もし、penter が hitSpike の中で Hammer を使ったとします。そのとき Hammer
はもはやオブジェクト指向とは関係ない単なるデータや道具にすぎないものなの
ではないか、と思います。
その penter と Hammer の間にある違い(オブジェクト指向的か道具的か)を見
つけてうまく言語仕様に反映できないのかなあ、という狙いだったのです。
し、しかし!
自己矛盾に気づいてしまいました(涙)
寺田(僕):
> 例えば、Book クラスで Page を配列として持つ実装とリストとして持つ実装の2
> つが必要になったとします。その場合には次のようにすればいいのではないでしょ
> うか。
> (以下、サンプルコード 省略)
Book というオブジェクトにはあまり自律性を期待できないような気がするのに、
virtual なメソッドを使ってきわめてオブジェクト指向的な実装を例示してしま
いました。
こうしてみると、やっぱり言語仕様できっちり2種類に分けられるものではないの
でしょうか。
頭が混乱して、自我が崩壊寸前です。(^^;
ちょっと頭を休めます。
//
☆◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇★
Yuichiro TERADA
TODOROKI Lab., Tokyo Inst. of Tech.
mail *******@*****.***.******.**.**
URL http://ginza.mes.titech.ac.jp/~yterada/
★◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆☆