- PR -

継承? デリゲート? インターフェース?

1
投稿者投稿内容
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2003-05-13 11:50
さて、上記の3つの機能ですが、どのように使い分けていらっしゃいますか?
「C#入門」では「サンプル等眺めているとだんだんわかるようになる」との事ですが、
もちょっと実務的な事例等があるとありがたいな…と思った次第です。

「デリゲート」
デザインパターンで言うところの「オブジェクトコンポジション」を具現化する
手段と解釈したらいいのか?
とすると、「継承」との使い分けは?

「インターフェース」
・デザインパターンの「Adapter」を具現化する手段と解釈したらいいのか?
・「foreachを自作クラスで実現するために共通のインターフェースを作る」
といった場面の様にクラスライブラリと言った大きなくくりの中で共通機能を
実装する時の例は理解できる。
しかし、他の場面での「継承」との優位性は?

と、いった感じで考えれば考えるほどどれを使えばいいの?と
いった感じになってしまうんです。
「こういう場合は間違いなくこっちを選ぶよ!」と言った
ご意見等が聞かれればと思って書き込みさせていただきました。

よろしくお願いいたします。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-05-13 12:20
こんにちは。
引用:

Mickyさんの書き込み (2003-05-13 11:50) より:
さて、上記の3つの機能ですが、どのように使い分けていらっしゃいますか?
「C#入門」では「サンプル等眺めているとだんだんわかるようになる」との事ですが、
もちょっと実務的な事例等があるとありがたいな…と思った次第です。

「デリゲート」
デザインパターンで言うところの「オブジェクトコンポジション」を具現化する
手段と解釈したらいいのか?
とすると、「継承」との使い分けは?



 「C Magazine」の今月号(2003/5)の記事で、『継承は、次のパターンに一致するときだけ用いるべきで、それ以外は委譲(デリゲート)を用いるべき』というようなことが書いてありました。
 オブジェクト指向設計で、『継承を使え』というものから『何でもかんでも継承を使うな』に変わってきているそうです。

4月号でなく、5月号でした:訂正

[ メッセージ編集済み 編集者: Jitta 編集日時 2003-05-16 08:48 ]
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2003-05-14 10:55
Jittaさん、こんにちは!
いつもありがとうございます。

>「C Magazine」の今月号(2003/4)の記事で

そうでしたか、なんとタイムリーな
早速、読んでみる事にします。
で、感想なんかも書き込んでみたりしますね。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-05-14 12:00
引用:

Mickyさんの書き込み (2003-05-14 10:55) より:

>「C Magazine」の今月号(2003/4)の記事で

早速、読んでみる事にします。


 毎月18日なので、買われるのでしたらお早めに・・・
 ちなみに、ホームページ
未記入
ぬし
会議室デビュー日: 2002/03/28
投稿数: 255
投稿日時: 2003-05-14 13:39
> デザインパターンで言うところの「オブジェクトコンポジション」を具現化する
> 手段と解釈したらいいのか?
GoFでオブジェクトコンポジションってありましたっけ?
GoF以外のパターンなのかな?

>と、いった感じで考えれば考えるほどどれを使えばいいの?と
>いった感じになってしまうんです。
インターフェースはインターフェース.そういう機能に過ぎない.
インターフェースの継承が実装の継承と明確に区別されたのは
わりと最近の話で,JavaやGoF本が出たあたりから広く
知られるようになったと思います.

>「こういう場合は間違いなくこっちを選ぶよ!」と言った
とりあえずGoF本読んで勉強するとか.
#パターンを使いこなすのはかなり難しいものです.f(^^;
Valhalla
ベテラン
会議室デビュー日: 2002/09/03
投稿数: 53
投稿日時: 2003-05-15 18:54
インターフェースは、継承というよりは、抽象クラスと比較される
ものですよね。

それはさておき、実務の内容にもよりますが、Windowsアプリや
Webアプリでは、インターフェイや抽象クラスを自分で定義する
ことってあまりないですよね。

それを定義する時って主にクラス・ライブラリを作る時だと
思いますが、そうだとすると、インターフェイスや抽象クラス
の使い分けは.NET Frameworkのクラス・ライブラリを見て
勉強するのがよいのではないでしょうか。

ソースも公開されていますし。
デザインパターンも使われていますし。
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2003-05-16 16:49
Valhallaさん>

>それを定義する時って主にクラス・ライブラリを作る時だと思いますが

やっぱりそうですよねぇ?
foreachの例でそう思ったんですが、断言していただけるほっとします
でも、解説なんかを読むとやはり「ポリモーフィズムの代用として有効」的な
書き方がされている事が多いのでわかんなくなっちゃうのかなぁ〜と思いました。


悪夢を統べるものさん>

ごめんなさい書き方が悪かったですね。
「Adpter」とかと同レベルで「オブジェクトコンポジション」がある様に
読めてしまいますね。m(__)m
「継承 or 委譲」的な説明文の中にでてくる「オブジェクトコンポジション」
の事を指していました。

Jittaさん>

入手の心配までしていただいてありがとうございます。
Cマガジンは書店で取り置きしてもらっているので、大丈夫でした。

該当箇所読んだんですが、結構抽象的な表現ですね。
具体的なイメージが湧くまでには至りませんでした。
継承だと明らかに同種のものの同機能として理解できるんですが、
delegateだとなんでもあり的で、括りになるものがないような
気がするんですよ。

いろんな文献やサンプルをもちょっと漁ってみます。
やっぱり、だんだんわかってくる・・・ってものなんですかね。

しかし、これらの機能ってUMLではどう表記したらいいんでしょう?
Interfaceはステレオタイプと汎化矢印でいけるような気もしますが・・・
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-05-16 17:37
引用:

Mickyさんの書き込み (2003-05-16 16:49) より:

しかし、これらの機能ってUMLではどう表記したらいいんでしょう?
Interfaceはステレオタイプと汎化矢印でいけるような気もしますが・・・


 インターフェースはUMLでもインターフェースです −○ こんな形

 デリゲートは、どうですかねぇ?やっぱりステレオタイプ?


〜追記
 インターフェースはステレオタイプで定義して、インプリメントするクラスに上記のような記号を付けます。デリゲートも、同じように定義すればいけますかね??
 ラショナルの、RoseではUML1.0(1.1?)で定義されていない記号がいくつか定義されていましたが、それらも次のバージョン(2.0?)に反映されるそうです。詳しいことは調べていないのですが、入っているかもしれませんね。

[ メッセージ編集済み 編集者: Jitta 編集日時 2003-05-19 08:41 ]
1

スキルアップ/キャリアアップ(JOB@IT)