Цитата |
---|
Андрей Николаев написал:
Цитата |
---|
Антон Горбылев написал: final у ряда основных классов проставлен специально, как раз чтобы не было наследников (хотя до выпуска в коробку его там не было). |
Эм... а с какой целью? Вот мне например final в классах битрикса доставляют очень большие неудобства и поэтому приходится извращаться. |
Потому что класс и сигнатура методов ещё не приняли своего окончательного вида.
Представьте, что у класса нет final. Вы спокойно сделали наследника, переопределили часть методов, добавили свои.
Потом вышло обновление, где я какой-нибудь из методов сделал private, или добавил обязательных параметров.
И всё, у вас fatal каждый раз при использовании вашего класса.
Если это ваш портал с какими-то специфическими доработками - можно оперативно исправить и ущерба будет немного.
А вдруг кто-нибудь сделает приложение со своим наследником?
Одна из проблем битрикса, как продукта - это большое legacy. А большое legacy обусловлено политикой максимальной обратной совместимости. Поддержка обратной совместимости замедляет скорость обновления кода.
Проставив final, я, в первую очередь, оставляю себе возможность вносить изменения в классы без оглядки на пользовательский код.
Говорю только за себя, но коллеги часто руководствуются этим же принципом.
Если у вас есть какие-то потребности, которые нельзя перекрыть без наследования - пишите, что-нибудь придумаем.