とりこらぼ。

Learn from yesterday,
live for today,
hope for tomorrow.

目次

Blog 利用状況

ニュース

プロフィール

  • 名前:とりこびと
    とるに足らない人間です。

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

Visual Basic で○○を作ってみよう。その7。 - ちょいと知っといたらええやん。 -

いきなりですけど、

前回のタイトルが当初「その5。」になってました。謹んでお詫び申し上げます。(今は修正し「その6。」になっています。)

・・・のっけから謝罪なわけですが、前回、「複数のインターフェイスを実装すると、多重継承と同様の結果が得られます」って言葉を信じて、突き進んだわけですが、「そんなにいうほどそれっぽくない!」ってコメントを頂くにいたりました。orz

さらにはトラックバックまで。→東方算程譚:interface ≠ multiple-inheritance (http://blogs.wankuma.com/episteme/archive/2007/05/10/76221.aspx)

読ませていただくと、つまり、

複数のインターフェイスを実装したって、多重継承と同様の結果にはならなさげ。

・・・あぁ、MSDNを信じていたのに、なんて感傷に浸っている場合ではなくて、じゃ、どこが 'ならなさげ' なの?っていうと、

インターフェイスだと、めんどくさいですよ。

インターフェイスのメンバの実装はそのインターフェイスを実装するクラスが実装する、という部分がめんどくさい、と。多重継承舐めんな、と(←これは書いてありません。

つまり、使い手さんにとっては、(見た感じ)'同様の結果' に見えますが、作り手さんにとっては、すべてを実装しなければならない点で到底 '同様の結果' にならねぇよ、と。ことの発端のMSDNがいう '結果' ってのが、使い手さんにとっての結果だったいうことですね。あぁ、切ない。orz

といっても、Visual Basic は多重継承をサポートしていないので、うらやましがったり、皮肉ったりしても意味無いわけですが、多重継承をサポートする World もありますよってことですね。大変お勉強になりました♪

投稿日時 : 2007年5月16日 16:22

Feedback

# re: Visual Basic で○○を作ってみよう。その7。 - ちょいと知っといたらええやん。 - 2007/05/16 16:52 かずくん

> Visual Basic は多重継承をサポートしていないので、うらやましがったり
多重継承なんて、百害あって一利ぐらいは有り?

C++かじってた頃も、インターフェース的にしか使用してなかったから、
べ、別にうらまやしくなんかないやい!!!(command:red big shita)

でもぉ、ObserverでSubjectな場合は、多重継承が便利なんだよねぇ....。

# re: Visual Basic で○○を作ってみよう。その7。 - ちょいと知っといたらええやん。 - 2007/05/16 17:44 とっちゃん

おいら的には多重継承がないと言うだけで、.NET には移行したくねーというくらい便利に使ってるんですがw

# re: Visual Basic で○○を作ってみよう。その7。 - ちょいと知っといたらええやん。 - 2007/05/16 18:27 渋木宏明(ひどり)

多重継承は、プログラマが意図して行った場合はともかく、意図しないで同属継承してしまった場合の振る舞いが明瞭でないからキライです。
同属継承を禁止した上で、単純な実装の集約だけが出来るとラクチンでいいんですが。

# re: Visual Basic で○○を作ってみよう。その7。 - ちょいと知っといたらええやん。 - 2007/05/17 10:53 とりこびと

コメントありがとうございます。

>>かずくんさん

>多重継承なんて、百害あって一利ぐらいは有り?

多重継承って、ややこしそうな反面、面白そうでもあるんですよね。うまく使いこなせたらなんかいいことあるかもしれません。

>べ、別にうらまやしくなんかないやい!!!

ふふ♪強がり言っちゃって♪(うそです、ごめんなさい。



>>とっちゃんさん

>便利に使ってるんですが

へ~、そうなのですか。
私に技量だとうまく使いこなせないと思います。
「多重継承はこう使う!」とかおせーてくださいませ。m(_ _)m



>>渋木宏明(ひどり) さん

>意図しないで同属継承してしまった場合の振る舞いが明瞭でないからキライです。

私もそのあたりが使いこなすには難しいと感じるところです。

>同属継承を禁止した上で、単純な実装の集約だけが出来るとラクチンでいいんですが。

インターフェイスと多重継承のいいとこ取りみたいなしくみですね。

# すでに存在するのかな?してたら話に出てくるか・・・。

# re: Visual Basic で○○を作ってみよう。その7。 - ちょいと知っといたらええやん。 - 2007/05/17 15:11 とっちゃん

渋木さんが懸念してるあたりをクリアできていれば、mixin的な使い方ができるので便利ですよww

仕事で一番楽してるのは、CWnd へのドロップ用ハンドラですね(MFC用です)。

あれは、IDropTarget というインターフェースがあるので、それの実装クラスをまるで mixin したかのようにがっちんこしてます。
さすがに、それだけでは無理なので、初期化処理は呼んでますけどw

MFC自身のClass構造が多重継承を認めていないからこそできる芸当でもあるんですがねw

# re: Visual Basic で○○を作ってみよう。その7。 - ちょいと知っといたらええやん。 - 2007/05/18 23:19 渋木宏明(ひどり)

>渋木さんが懸念してるあたりをクリアできていれば、mixin的な使い方ができるので便利ですよww

そーなんだけど、知らない人に説明するのメンドーだし、間違いが起こった時のトレーサビリティも現状は最低レベルなんでねー、通常の実装コードでぽんぽん使われるとはっきり行って迷惑だな。

ATL や WTL みたいに「ライブラリ」として整備して、実装コードではもっぱら再利用するだけ、みたいならまだ安心かな。

結局(僕が)やりたいのは「実装の再利用を容易にするための、実装の集約」なので、.NET 的には System.ComponentModel で定義されている ExtenderProvider みたいな機能が、すべてのクラスについてサポートされて、もっと容易に使えるようになるといいのかも。

そういう意味では、C#3.0 の拡張メソッドとジェネリックの組み合わせなんかもかなり有力かな、と。

# re: Visual Basic で○○を作ってみよう。その7。 - ちょいと知っといたらええやん。 - 2007/05/19 13:55 とっちゃん

>知らない人に説明するのメンドーだし

知らない人に説明するのは骨ですねw
うちは、C++ でなきゃなところなので、知らないとかいったら、即座に本が山積みですがw

>間違いが起こった時のトレーサビリティも現状は最低レベルなんでねー

こっちはきついですね。設計で考慮されてない使い方された場合とか、ほんとに洒落になんねーです...
まぁ、多重継承に限らずですがww

>通常の実装コードでぽんぽん使われると
これは確かに迷惑だw

ま、おいらの見た範囲では、多重継承使ってる人はうちの中にもほとんどいませんね。

なんだかんだで設計難しいしw
再利用を前提としたクラスが書ける人が...orz

使ってもらってなんぼというクラスを作るのは難しいですからねぇw

タイトル
名前
Url
コメント