10章 継承の調整

委譲

  • 実装で下手に継承を使うよりは委譲を使う方がよい。
    Listを作った後でstackを作りたくなった。そんな場合、Listの子クラスとしてStackを作ってはいけない。
    List{
    どこにでもadd, remove,
    first , last
}
stack{
先頭にpush,
先頭からpop
}
listの方がStackより拡張性がある。それなのにListの子クラスとしてStackを作ってしまう
class STACK: public LIST
と,Stackでありながら どこにでもadd, removeが出来てしまう。これはおかしい。
 
そんな場合、継承を使わず,ListをStackの属性,所有物とするのがよい。
class STACK{
private:
LIST MyList;
public :
void push( *data);
*data pop;
}
STACK::push(*data)
{
MyListの先頭にaddする。
}
*data STACK::pop(void)
{
MyListの先頭から抜き出す。
}
これを、Pushやpopという操作をListクラスに委譲した,という。