相続-多型-使いやすさvs純度
-
08-06-2019 - |
質問
プロジェクトチームではオブジェクトのリストを行う大量の操作セットのデータはすべて加工することとなります。特に、異なるオブジェクトの理想的には同じで、非常に容易に多型.問題またはその相続を示唆 は 関係ではなく、 は 関係です。例えば、複数のオブジェ してい 損傷のカウンターがこの利用しやすくするオブジェクトリストの多型が使用できるものを除いを意味する は 関係ないと思います。(人 ではない 損傷します。
の課題を解決して私が考えられることはいは会員のクラスを返します適切なオブジェクトタイプが暗黙のうちに放送に頼るのではなく、継承関係を示します。でき逃の は / は 理想的な交換のためのプログラムのしやすさに?
編集:具体的には、私が使っていC++で使用の多型によって異なるオブジェクトに関する法律"同じ"と新たに組み合わせることによ由来の授業はと居住者は一つのリスト上で使われるようになるとする仮想関数の基底クラスです。の使用をインターフェイス(または模倣したい相続分というような解決策であれば利用します。
解決
この使用することで達成でき複数の継承関係を示します。にお客様の特定の場合(C++)で純粋な仮想の授業としてのインタフェースことができ、複数の相続を作成せずに対象範囲/曖昧さです。例:
class Damage {
virtual void addDamage(int d) = 0;
virtual int getDamage() = 0;
};
class Person : public virtual Damage {
void addDamage(int d) {
// ...
damage += d * 2;
}
int getDamage() {
return damage;
}
};
class Car : public virtual Damage {
void addDamage(int d) {
// ...
damage += d;
}
int getDamage() {
return damage;
}
};
現在も人と車はa'損害、意味なども実施被害のインタフェース。の純粋な仮想クラス(このようなインターフェイス)はキーされますと、失活する恐れがあります。ま房の変化からの変更はできます。読みの開閉じ原理です。
他のヒント
と思いますの実施インターフェイスできる強制御 は 関係(amこにでもマージエレメント):
public interface IDamageable
{
void AddDamage(int i);
int DamageCount {get;}
}
き実施すことをオブジェクト
public class Person : IDamageable
public class House : IDamageable
といっていることをご確認くださいDamageCount財産の処するために、被害せずに拡大することによる人の家を互いに関連しているために何らかの階層.
いJonものと仮定していて個別に用意する必要があ損傷のカウンタークラスを表す:
class IDamageable {
virtual DamageCounter* damage_counter() = 0;
};
class DamageCounter {
...
};
各damageableクラスを提供する独自のdamage_counter()会員。下振れのある作りがなされていvtableの各damageableクラスです。できる代わりに使用
class Damageable {
public:
DamageCounter damage_counter() { return damage_counter_; }
private:
DamageCounter damage_counter_;
};
しかし、多くの人は ない涼しい 複数の相続時に複数の親メンバ変数.
ものであるのに最適なのでリアルに再現。●ばしくなる大規模な問題を"すぐや"のない不利益、その思いので間違っています。ということで、いらっしゃると思いではないので、不要な複数の遺産の増加が複雑で ができ に貢献するシステムが少ないこと保守性.だって、どのようになるのか、ティスト-イン-レジデンス事
一つのオプションにおいてこれらのオブジェクトを実施 Damageable
インタフェースではなくを受け継ぎから DamageCounter
.このように、人 は-a 損傷のカウンターが は damageable.(私は界面にあるとてもあまりとしての形容詞以上の名詞.) そして一貫したインターフェースの被害 Damageable
物に近づけないでくださるカウンターの被害は、基本となる実装にない場合ます。
行きたい場合はテンプレートのルートを想定C++い等)ができるようになることmixinsができる醜いね合わが低調に推移しました。
この問いは混乱:/
ご質問ありがとう大胆なも期との答えを"it"によって異なりますが、おばんに与えられている情報についてのコンテキストだと思います。こうした線を間違っ;
セットのデータはすべて加工することについても同様に
ません。のセット加工により機能しているのでしょうか。別のクラス?による仮想関数のデータはもらえますか?
特に、異なるオブジェクトの理想的には同じで、非常に容易に多型
のって行動する"同じ"の多型には全く関係のない.どのような多型で目指すものは何か
@Kevin
通常の場合についてお話しましたので"はvsが"近まる"ようにという意味がしてました話相対組成物。
Um...損傷のカウンターだけの属性の派生クラスとなって協議の'者は被害のカウンター'に関してご質問です。
の損害のカウンターとしての属性をなくしていた多様なオブジェクトの損傷のカウンターコレクションに納めるものです。例えば、人や車がともに損傷のカウンターができない vector<Person|Car>
または vector<with::getDamage()>
はも同じようなものはほとんどの言語である。またオブジェクトに共通の基底クラスきますので、その故-パー-メッツの損失していることができないアクセス getDamage()
方法の総称.
その本質の問題としていただいていました。"ばかに違反し is-a
や has-a
のための治療に特定のオブジェクトの場合は、同じものはありませんが?"
通常の場合についてお話しましたので"はvsが"近まる"ようにという意味がしてました話相対組成物。
Um...損傷のカウンターだけの属性の派生クラスとなって協議の'者は被害のカウンター'に関してご質問です。
この:
http://www.artima.com/designtechniques/compoinh.html
ができました。
@Derek:からの文言ことが た ベースclase、再読み込みの問いにちょっと見えたんです。
"ってすぐ"いの長さで人を維持システムの後に容易になるでしょう理解いた調査を実施しています。
言語によって、更にオプションの複数の相続が正常に簡単なインターフェースを最大限です。による"単純な"を意味しくするインターフェースといいます。より多くの簡単なインターフェースおよび数積層した。もちろん、トレードオフが、多くの界面にいくであろうものが"忘れられた"約---
@アンドリュー
のって行動する"同じ"の多型には全く関係のない.どのような多型で目指すものは何か
すべては、例えば、一つの機能に共通している。う addDamage()
.ばんこのように:
foreach (obj in mylist)
obj.addDamage(1)
その後必要なものは動的言語、または必要ないから、共通の親クラス(やインターフェイス)例えば:
class Person : DamageCounter {}
class Car : DamageCounter {}
foreach (DamageCounter d in mylist)
d.addDamage(1)
そして、できます Person
や Car
同一の非常に有用下さい。
多型 を必要としない遺産.多型はんだ複数のオブジェクトを実施して同じメッセージ署名(法です。