Как должна быть реализована композиция?

Рейтинг: 0Ответов: 1Опубликовано: 26.11.2014

Почти во всех книгах и статьях говорят о склонностях в пользу композиции, а не наследования. Но у меня при её реализации немного хромает разум.
Для примера реализации приведу псевдокод:

class A {
    function a( ){}
    function b( ){}
    function c( ){}
}

class B {
    function a( ){
        a.a( );
    }
    function b( ){
        a.b( );
    }
    function c( ){
        a.c( );
    }
    function d( ){}
    function e( ){}
}

class C {
    function a( ){
        b.a( );
    }
    function b( ){
        b.b( );
    }
    function c( ){
        b.c( );
    }
    function d( ){
        b.d( );
    }
    function e( ){
        b.e( );
    }
}

Разве это не является избыточным? Или при наследовании классов все то же самое?

Ответы

▲ 2Принят

Должно быть одинаково и при наследовании.

class A {
public:
    function a( ){}
    function b( ){}
    function c( ){}
};

class B: public A{
public:
    function d( ){}
    function e( ){}
};

class C: public B{};