В этом выпуске рассмотрим букву O, которая означает Open-Closed. Предыдущая часть: Данный принцип звучит почти эзотерически: любой функционал (класс, модуль) должен быть закрыт для изменений, но открыт для расширения. Его можно понять неправильно, и тогда на выходе мы получим какой-то бред. Для этого достаточно истолковать всё буквально. Например, у нас есть некий класс, пусть это будет опять User, а у него опять будет метод login(). Единожды написав метод login(), мы должны закрыть его от изменений. То есть всё, больше его трогать нельзя, крутитесь как хотите. Например, хэш пароля вычислялся по одному криптоалгоритму, а теперь надо вычислять по другому. Что же нам делать? Надо изменить метод login(), но его менять нельзя :) Но можно расширить класс User. Для этого сделаем класс User2, который наследуется от класса User, и у которого также будет метод login(), который перекрывает аналогичный метод родителя. И в этом методе мы можем написать новую реализацию логина. Вот и получилось, чт