Хороший вопрос и большой для новичка, я думаю, что я должен сначала напомнить наследство и состав, а затем пойти, чтобы объяснить, что именно Favor Composition over Inheritance
означает.
проза и минусы наследования:
Преимущества:
- Одним из главных преимуществ динамического связывания и полиморфизма, что они могут помочь сделать код проще изменить
- Новая реализация проста, так как большая часть ее наследуется. Простота модифицирует или расширяет повторную реализацию.
Недостатки:
- разрываются инкапсуляция, так как он предоставляет подкласс реализации
детали своего супер-класса
White-box
повторного использования памяти, поскольку внутренние детали супер-классов часто видны субарендам.
- Подклассы, возможно, придется изменить, если реализация изменений суперкласса . Реализации, унаследованные от суперклассов, могут быть изменены во время выполнения. .
О вопросе:
Наследование неидеальной, где, как композиция слабосвязанная
Наследование принесет вам тесную связь, просто одно изменение базового класса может нарушить многие ребенка классы.
Но когда использовать и как обнаружить, нам нужно наследование или состав?
Использование наследования только тогда, когда все следующие критерии удовлетворены (Правило ОЗЛ в):
- Подкласс выражает
is a special kind of
и не is a role played by a
.
- Экземпляр подкласса никогда не должен стать объектом другого класса
- подкласс расширяет, а не переопределяет или аннулирует, обязанности его супер-класса
- подкласс не расширяет возможности что это просто утилита класса
- Для класса в актуальной проблемной области, подкласс специализируется роли, транзакции или устройство
Наследование - это время компиляции, когда время композиции составлено
При компиляции коды базового класса будут добавлены к каждому дочернему классу.
Наследование нарушает инкапсуляцию, где, как композиция не
Да .Увидь недостаток наследования.
Суть:
Убедитесь, что модели наследования является-связь Моя основная руководящая философия заключается в том, что наследование должно использоваться только тогда, когда подкласс-суперкласс. В приведенном выше примере, скорее всего, Apple - это плод, поэтому я бы склонен использовать наследование. Важным вопросом, который задают себе, когда вы думаете, что у вас есть отношения, является то, является ли это -отношение постоянным на протяжении всего срока службы приложения и, с удачей, жизненный цикл кода. Например, вы можете подумать, что Employee is-Person, когда действительно Employee представляет роль, которую Человек играет часть времени. Что делать, если человек становится безработным? Что, если человек является одновременно Работником и Супервизором? Такой непостоянный - отношения обычно должны быть смоделированы с составом.
Не использовать наследование только, чтобы получить повторное использование кода Если все, что вы действительно хотите, не является повторным использованием кода и нет есть, отношения в поле зрения, использование композиция.
Не использовать наследование лишь добраться до полиморфизма Если все, что вы действительно хотите полиморфизм, но не является естественным-связь, использование композиции с интерфейсами.
Фавор композиция Over Наследование :)
Я взял его прямо из javaworld.
Некоторые из пронумерованных пунктов, приведенных выше, могут включать в себя фразу «может» или «может быть». –
[Эта хорошая статья] (http://www.javaworld.com/jw-11-1998/jw-11-techniques.html) ответит на вопрос изящно. – Sage