2015-10-08 2 views
1

Q1: В чем разница в философии при разработке кода ООП с использованием «наследования интерфейсов» и «композиции с интерфейсом»? (Пожалуйста, сосредоточьтесь на работе с интерфейсной частью, поскольку я знаю о наследстве и составе и почему композиция пользуется преимуществом над наследованием).Разница между наследованием интерфейсов и композицией с интерфейсом

Q2: Любой сценарий использования, когда наследование интерфейса должно быть одобрено по составу или составу + интерфейс?

P.S. Фокус должен быть в роли интерфейса в наследовании и составе. И любой дополнительный подход, связанный с соответствующим дизайном, будет высоко оценен.

+0

Вам не хватает языкового тега, такого как '' java'' или '' C# '' ... также, интерфейсы * могут * наследоваться интерфейсами (на предлагаемых языках) –

ответ

1

A1

Вы можете сказать, что наследование интерфейса декларативно, потому что он только утверждает, что интерфейсы должны выглядеть следующим образом:

public IDerivedInterface : ISomeOtherInterface { /*...*/ } 

Эти интерфейсы еще не имеют поведения, только форму.

Композиция с интерфейсами, с другой стороны, является способ сборки реализации.

public Foo DoFoo(Bar bar) 
{ 
    var qux = this.baz.Corge(bar); // baz is IBaz, an interface 
    var garply = this.grault.Waldo(qux); // grault is IGrault, another interface 
    return garply.ToFoo(); 
} 

Этот метод DoFooсоставляетIBaz и IGrault. Один или оба из этих интерфейсов могут быть определены как автономные интерфейсы или не используемые интерфейсы - метод DoFoo не волнует.

A2

Как объясняет выше ответ, наследование интерфейса и состав два независимых проблемы, так что не имеет смысла в пользу одного над другим. Они могут сосуществовать, но им этого не нужно.

Смежные вопросы