Философия ООП (отрывок о композиции и наследовании из Programming in Scala)

В Programming in Scala, стр. 239, первый абзац говорит:

Композиция и наследование — это два способа определить новый класс в терминах другого существующего класса. Если вам в первую очередь нужно повторное использование кода, в целом вам следует предпочесть композицию наследованию. Только наследование страдает от проблемы хрупкости базового класса, когда вы можете непреднамеренно разрушить подклассы, изменив суперкласс.

Мне непонятно. Может ли кто-нибудь показать пример такой ситуации, желательно с некоторым кодом?


person noncom    schedule 03.01.2012    source источник


Ответы (1)


проблема хрупкого базового класса характерна для всех систем, поддерживающих наследование. Это означает, что изменения в вашем супертипе (классе, от которого вы наследуетесь) могут привести к неожиданным результатам: изменение заставляет вас нарушать ваши предположения о базовом классе. См. этот связанный вопрос SO для объяснения и примеров.

Напротив, Scala экспортирует апостериорные дополнения к родительским классам во внешние независимые признаки, которые вы можете добавить к подтипу с помощью Mixin Composition. См. этот пример и рассмотрите "RichIterator" как изменение, на которое вы хотели бы повлиять. база AbsIterator после ее определения. Видите, миксин ничего не меняет в родительском, но при этом его легко использовать в подтипе?

person Francois G    schedule 03.01.2012