Показать сообщение отдельно
Старый 08.05.2011, 00:41
Crazy вне форума Посмотреть профиль Отправить личное сообщение для Crazy Посетить домашнюю страницу Crazy Найти все сообщения от Crazy
  № 10  
Ответить с цитированием
Crazy
 
Аватар для Crazy

Регистрация: Dec 2001
Сообщений: 4,159
Цитата:
Сообщение от expl Посмотреть сообщение
Классная парадигма, однако. Т.е. запрещаем цепочки наследования больше 1-го яруса на уровне соглашения по кодированию
Hint: никто не запрещает наследовать один абстрактный класс от другого абстрактного класса.

Добавлено через 11 минут
Цитата:
Сообщение от carrotoff Посмотреть сообщение
А в чем смысл такого подхода?
Смысл такого подхода в отказе от бесконтрольного наследования. Де-факто человек, проектирующий обычный класс, как правило не задается вопросом "что будет, если от этого класса будут наследоваться". Пример: программист A пишет класс C1 для своих текущих целей. Через неделю программист B пишет класс C2, расширяющий C1 и переопределяющий пару методов. Спустя полгода программист A переделывает класс C1, вследствие чего в поведении C2 начинают проявляться жестокие глюки. Поскольку при переделке C1 автору и в голову не придет найти все производные классы и проверить, как на них повлияет правка. Просто жизненный факт.

Разделение abstract-final позволяет это упорядочить. Если пишется abstract-класс -- автор заранее пишет его под наследование. Соответственно, при внесении изменений в абстрактный класс нельзя тупо забыть, что от него наследуются.

P.S. Вообще, следует понимать, что наследование реализации -- довольно опасная операция.
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++