Принцип открытости/закрытости

Оригинал: http://www.sitepoint.com/the-open-closed-principle/

Должен признаться, когда впервые увидел академическое определение принципа открытости/закрытости, его смысл был для меня удивительно ясен. Я отбросил из определения весь технический жаргон, и принцип читался как заклинание, которое мы слышали раньше много раз: «Не ломай ядро».
Ну, правда, здесь существует некоторая двусмысленность высказывания, так как есть по крайней мере два общих подхода к поддержанию «ядра» в полной сохранности, позволяющие аккуратно расширять его функциональные возможности. Первый подход (вот почему я использовал намеренно термин «расширение») — Наследование. Наследование является, пожалуй, самым переоцененным приемом для повторной реализации. Такой процесс легко осуществим, но здесь существует определенный риск разрушить хрупкую иерархию моделей. Второй подход называется Композиция. Подход не так прост, как наследование, но это тоже довольно аккуратный способ расширить программный модуль, не меняя его.


Читать дальше →