凪瀬 Blog
Programming SHOT BAR

目次

Blog 利用状況
  • 投稿数 - 260
  • 記事 - 0
  • コメント - 46956
  • トラックバック - 192
ニュース
広告
  • Java開発者募集中
  • 経歴不問
  • 腕に自信のある方
  • 富山市内
  • (株)凪瀬アーキテクツ
アクセサリ
  • あわせて読みたい
凪瀬悠輝(なぎせ ゆうき)
  • Java技術者
  • お茶好き。カクテル好き。
  • 所属は(株)凪瀬アーキテクツ
  • Twitter:@nagise

書庫

日記カテゴリ

 

檜山正幸のキマイラ飼育記なんで多重継承はそんなに嫌われるのか? ちょっくら分析してみるかあたりからの着想

多重継承が~という話題は継承をインターフェースの継承だけにした上で、実装を委譲する機能を言語に持たせれば解決するかもしれない。

型の継承であればダイアモンド継承は問題にならない

Aを継承するB、B'があったとして、B,B'の二つを親とするCを考える。

継承関係がひし形になることからダイアモンド継承と呼ばれるが、この場合、BとB'は双方ともAで定義されたメソッドを持つし、 また、それぞれのメソッドの実装を持つかもしれない。

この場合、CはBとB'のどちらの実装を使うべきなのか?私が思うに、どちらの実装を使うか選べればいいのだと思う。

抽象メソッドのみから構成されるインターフェースのみの多重継承では実装の継承が行なわれないので ダイアモンド継承はなんらの問題にはならない。

しかし、実装も継承したいのが人情というもの。いや、継承なんてしないで全部委譲にしちゃったら?

簡単に委譲できる構文があればよいのではないか?

Javaなどそうなのだけど、Adapterパターンとか、あるメソッドを他のオブジェクトのメソッドの呼び出しに中継するような 処理を書こうとした場合に非常に面倒臭い記述を強いられる。

public class Piyo {
  private Hoge hoge;
  public void hoge() {
    this.hoge.hoge();
  }
}

こんな感じで別のインスタンスのメソッドの呼び出しを中継するのだが、 これを該当の型に定義されているメソッド分だけ延々と記述する必要がある。

思うに、あるinterfaceで定義されたメソッドは全て同じinterfaceを実装したオブジェクトに委譲する、 といったことが簡単に記述できるようになっていて、複数のinterfaceをimplementsするクラスは 複数の実装オブジェクトに委譲できるようになっていればよいではないか?

別のオブジェクトに委譲する際にアスペクトをウィービングできるようならなお面白いと思う。

投稿日時 : 2008年3月21日 23:46
コメント
  • # re: 実装を委譲できる言語を作ればいいのかもしれない
    myugaru
    Posted @ 2008/03/22 7:36
    こんにちは。いつもかまってくださってありがとうございます(笑

    本題ですが。
    >継承なんてしないで全部委譲にしちゃったら?
    protectedなやつの扱いはどうなりますか?
    継承によって元クラスの機能を引き継ぎ且つ外部へは見せないというのが委譲では表現できないと思いました。
    何か秘策がありますか?
  • # re: 実装を委譲できる言語を作ればいいのかもしれない
    myugaru
    Posted @ 2008/03/22 7:41
    あ、今は新しい言語を作るって話だったんだ!
    じゃあ新継承は「委譲しつつ勝手にfriend化する」ってすれば無問題?w
  • # re: 実装を委譲できる言語を作ればいいのかもしれない
    myugaru
    Posted @ 2008/03/22 7:45
    あー違うなあ。friendじゃ方向が逆だなあ。
    そもそも存在しない概念を既成用語で書こうとすると無理がありますねw
  • # re: 実装を委譲できる言語を作ればいいのかもしれない
    melt
    Posted @ 2008/03/22 11:57
    C++ なら private 継承とか protected 継承とかあるので、それで代用できますね。
  • # [Ruby][Java][C#]丸投げ委譲
    かずきのBlog
    Posted @ 2008/03/23 0:01
    [Ruby][Java][C#]丸投げ委譲
  • # 多重継承をコンポーネント技術で考える
    myugaruの色々構想中・・・!
    Posted @ 2008/03/23 9:50
    多重継承をコンポーネント技術で考える
  • # re: 実装を委譲できる言語を作ればいいのかもしれない
    凪瀬
    Posted @ 2008/03/23 13:41
    private継承でできるのかな…?
    アレの使いどころが実はよくわからないのですが、
    型の継承でいうis-a関係がなりたたないので
    型の代入互換性を維持しつつ、実装を切り替えるという用途では使えないと理解しています。
  • # re: 実装を委譲できる言語を作ればいいのかもしれない
    シャノン
    Posted @ 2008/03/24 14:24
    CはBかB'のどちらかに委譲しなければならないのですよね(Aに委譲するのはナシか?)
    Cで多重継承しているメソッドを実装しないことは(Cが抽象クラスである場合を除いては)許されない、かな。
  • # re: 実装を委譲できる言語を作ればいいのかもしれない
    良子さんお昼はまだかね
    Posted @ 2008/07/10 14:25
     objective-Cならフォアーディングサポートしてるんでできないことも無いですよ。ただ、少々オーバーヘッドがありますが。多重継承による障害は、処理スピードとのトレードオフですのでスピードをとるなら仕方ないと割り切って使うしかないでしょうねぇ。
     余り関係ないかもしれませんが、C++ではusing句を使って必要なメンバーのみを公開し、不要なメンバーを隠蔽(private継承)する方法があります(使ってる人を余り見ませんが)メンバーを選ぶのがメンドっちいだけならそういう方法もありますよ。
  • # A Few Tactics To Streamline gucci
    Reoglerolla
    Posted @ 2012/12/24 0:27
    PjdMvl http://guccimenzujp.com/ - グッチ DhxUqj http://guccimenzujp.com/ FhnQci http://guccimenzujp.com/グッチ-メンズ財布-c-4.html - グッチ 財布 OgdJee http://guccimenzujp.com/グッチ-レディース長財布-c-2.html - gucci バッグ BncLif http://guccijastore.com/ - グッチ gucci SadImm http://guccijastore.com/ IksWgm http://guccijastore.com/グッチ-財布-c-2.html - 財布 SwjTkz http://guccijastore.com/グッチ-バッグ-c-1.html - gucci バッグ PwqDph http://www.guccijpcheap.com/ - グッチメンズ HrmKnk http://www.guccijpcheap.com/グッチ-財布-c-3.html - 財布 WwuBba http://www.guccijpcheap.com/グッチ-バッグ-c-1.html - gucci バッグ HspXro
    http://www.bootswinterjp.com/ - ugg
  • # tZRFkJTgaDPOLsiZ
    http://crorkz.com/
    Posted @ 2014/07/19 12:03
    2OWnGj Looking forward to reading more. Great post. Awesome.
  • # ZCFVymlfDJtjwe
    http://crorkz.com/
    Posted @ 2014/08/28 0:33
    7kdEGa I'm not sure exactly why but this website is loading very slow for me. Is anyone else having this issue or is it a problem on my end? I'll check back later and see if the problem still exists.
  • # tjvgTKxiyrx
    http://stimronprox.info/story/18469
    Posted @ 2014/09/02 23:29
    Wonderful website. Plenty of helpful info here. I am sending it to several buddies ans additionally sharing in delicious. And certainly, thanks in your sweat!
  • # bKpLsnarYeKckVp
    http://www.campusspage.com
    Posted @ 2014/09/06 20:25
    You are a very capable person!
  • # SQRuClHURklxNtyy
    http://vender-por-internet.net/luis-souto/
    Posted @ 2014/09/09 10:03
    Keep working ,splendid job!
タイトル
名前
Url
コメント