私がC++プログラマーとして学んだ重要で不可欠なルールの1つは、継承よりもコンポジションを優先することです(http://en.wikipedia.org/wiki/Composition_over_inheritance)。
私は、継承を使用した場合よりもはるかに単純になるこのルールに完全に同意します。
コンポジションを使用して解決する必要のある問題がありますが、それを行うのに本当に苦労しています。
ベンダーマシンがあり、次の2種類の製品があるとします。
- 個別の製品-スナックのように。
- 流動性のある製品-飲み物のように。
これらの2種類の製品は、セルの内容を含むVendorCellと呼ばれるクラスで表す必要があります。
これらの2つの製品は、価格、数量などのいくつかの同一の属性(dm)を共有していますが、いくつかの異なる属性も含まれています。
したがって、ここでコンポジションを使用すると、次の結果が得られる可能性があります。
class VendorCell {
private : // default access modifier
int price;
int quantity;
// int firstProductAttributeOnly
// char secondProductAttributeOnly
};
コメント行は、含まれている製品に応じて単一のVendorCellの場合、これら2つのコメント行の1つだけが重要で使用可能であることを示しています(もう1つは他のタイプにのみ関連します-たとえば、流体)。
したがって、スナックが入ったVendorCellがあり、そのsecondProductAttributeOnlyは必要ありません。
(VendorCellの)構成は正しい解決策ですか?誰かがコンストラクターを介してVendorCellタイプを決定し、1つのDM(他のタイプ専用のDM)がまったく使用されない(たとえば-1としてマークする)ことはあなたたちにとって適切なようです?>
みなさん、ありがとうございました!