- - PR -
インタフェースと抽象クラスの混合は問題ない?
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-06-10 09:18
初めに、インパクトがあるので 「何でもかんでも」 なように見えないこともないですね。 私は、Interface として完全に切り出せるかどうか... といっても、単発はありえないので、殆ど Interface になります。 個人的にも、Interface の方が、カッコよくて好きだったり。(定義場所さえ的確ならば)
インターフェイスは 「継承」 ではなく、「実装」 ではないかと思ってみたり...w Interface と 抽象クラスの混在に問題があるかどうかは、設計次第でしょう。(どちらとも言えない) 逆に言えば、無計画に後付されたものは、問題を含んでいることが多いでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-06-10 09:53
僕の場合、作る過程で重複する処理をクラスに切り出していく過程で、いくつか継承させてベースとなるクラスを抽象クラスにしちゃうという流れはありますw
(人はこれを行き当たりばったりな設計と呼ぶ・・・)
使う理由にカッコ良いからというのは、深く同感です。 同じ理由で、僕は一時マイブームだった日本語プログラミングを最近やらなくなりました。どうして日本語だと○○に見えるんだろう・・・
僕も密かに思ったのですが、抽象クラスとの比較なので、あえて継承で揃えたのかな?、と思いました。
| ||||||||||||||||
|
投稿日時: 2006-06-10 10:29
そうか、確かにそうですね。でもカギ括弧は
にもつけたいです。 | ||||||||||||||||
|
投稿日時: 2006-06-10 10:29
とりあえず用件だけ済ませよう。
冗長なのでコードの引用はしません。
2. 継承ツリー上Abstより上にIInterがあればAbst.Hoge()をジャンプできる。 なのでIInterの抽象度はAbstと同一か、高い。 これ↑が、「できる限り」の意義。
2. 「どの」Func()を使う、に対してIInterの抽象度はAbstと同一か、高い。 以上から
編集: 1. 「その」Func()を使う、に対して抽象度は同一。 ↓ 1. 「その」Func()を使う、に対してIInteとAbstの抽象度は抽象度は同一。 2. 「どの」Func()を使う、に対して抽象度はIInterのほうが高い。 ↓ 2. 「どの」Func()を使う、に対してIInterの抽象度はAbstと同一か、高い。 [ メッセージ編集済み 編集者: lalupin4 編集日時 2006-06-10 10:37 ] 編集2: 1. 「「継承」は結合度が最も高い概念。」なので抽象度は同一か、低い。 ↓ 1. 「「継承」は結合度が最も高い概念。」なのでAbstの抽象度はIInterと同一か、低い。 2. 継承ツリー上Abstより上にIInterがあればAbst.Hoge()をジャンプできる。なので抽象度は同一か、高い)。 ↓ 2. 継承ツリー上Abstより上にIInterがあればAbst.Hoge()をジャンプできる。 なのでIInterの抽象度はAbstと同一か、高い。 [ メッセージ編集済み 編集者: lalupin4 編集日時 2006-06-10 10:52 ] | ||||||||||||||||
|
投稿日時: 2006-06-10 10:40
| ||||||||||||||||
|
投稿日時: 2006-06-10 11:51
オッス!
"抽象化"って単語が良く出てくるのに、"多態性"については触れてないのね。 ワシは"抽象化"はInterfaceが司り、"多態性"はAbstractが司っている風に思うのじゃがの。この話題に"多態性"は関係ないのかの? "Abstract"は直訳すると"抽象的な"なわけではあるのじゃがの。 | ||||||||||||||||
|
投稿日時: 2006-06-10 15:47
ですね。 C# の構文上は「継承」ですが、インターフェースを継承することは、その型がインターフェースで定義された機能を実装することを示します。
同感です。 C# 的(.NET 的?)は型のメタ情報を扱うための仕組み(=リフレクション)が充実しているので、インターフェースと抽象クラスの区別にはそれほど重要な意味は無さそうです。 派生クラス間で共有するべき実装があるなら抽象クラスを使い、実装を共有できなかったり共有する意味が無いときはインターフェース使う、というイージーな使い分けでも、大抵の場合は十分問題ないと思います。 | ||||||||||||||||
|
投稿日時: 2006-06-10 17:29
くっそう…。System.ObjectがSystem.IObjectの実装クラスだったら
議論の余地はないのに…。 とか思ってみたり。 |