Философия ООП (выдержка из композиции и наследования от программирования в Scala) - PullRequest
4 голосов
/ 03 января 2012

В Программировании на Scala, стр. 239, первый абзац гласит:

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

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

1 Ответ

7 голосов
/ 03 января 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...