При́нцип откры́тости/закры́тости (англ. The Open Closed Principle, OCP) — принцип ООП, устанавливающий следующее положение: «программные сущности (классы, модули, функции и т. п.) должны быть открыты для расширения, но закрыты для изменения»; Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification (Bertrand Meyer)
- открыты для расширения: означает, что поведение сущности может быть расширено путём создания новых типов сущностей.
- закрыты для изменения: в результате расширения поведения сущности, не должны вноситься изменения в код, который эту сущность использует.
- Ценность принципа: нет необходимости в регрессионном тестировании
Термин «принцип открытости/закрытости» имеет два значения:
1. Принцип открытости/закрытости Мейера
2. Полиморфный принцип открытости/закрытости
Бертран Мейер в основном известен как основоположник термина Принцип открытости/закрытости, который появился в 1988 году в его книге Object-Oriented Software Construction, отвечая на вопрос:
1. Как можно разработать проект, устойчивый к изменениям, срок жизни которых превышает срок существования первой версии проекта?
2. однажды разработанная реализация класса в дальнейшем требует только исправления ошибок, а новые или изменённые функции требуют создания нового класса
3. реализация интерфейса может быть унаследована и переиспользована, но интерфейс может и измениться в новой реализации
Полиморфный принцип открытости/закрытости:
1. основывается на строгой реализации интерфейсов и на наследовании от абстрактных базовых классов или на полиморфизме.
2. Созданный изначально интерфейс должен быть закрыт для модификаций, а новые реализации как минимум соответствуют этому изначальному интерфейсу, но могут поддерживать и другие, более расширенные.
Статья Роберта С. Мартина «The Open-Closed Principle» в 1996 была одной из плодотворных статей для популяризации такого подхода
Крэйг Ларман отнёс термин Принцип открытости/закрытости к шаблону Алистэра Кокбёрна, названного Protected Variations
Курсы для новичков:
JAVA -
JAVA Start -
Инструментарий JAVA -
Automation QA (Java) -
ANDROID -
C#/.NET -
C# START -
PYTHON -
FRONT-END -
WORDPRESS Developer -
SALESFORCE Developer -
UI/UX дизайн -
Project management -
Обучение на проекте -
Продвинутые курсы для состоявшихся девелоперов:
GRASP and GoF Design patterns -
Enterprise patterns -
Сайт Foxminded:
Foxminded в ФБ:
FoxmindEd в Instagram:
Foxminded в VK:
Мой Telegram:
Мой блог:
1. На основе работы Роберта Мартина (дяди Боба). Акроним SOLID предложен Michael Feathers
2. SOLID (сокр. от англ. single responsibility, open-closed, Liskov substitution, interface segregation и dependency inversion)
1. SRP Принцип единственной ответственности (The Single Responsibility Principle) - Каждый класс должен иметь одну и только одну причину для изменений.
2. OCP Принцип открытости/закрытости (The Open Closed Principle) - программные сущности … должны быть открыты для расширения, но закрыты для модификации
3. LSP Принцип подстановки Барбары Лисков (The Liskov Substitution Principle) объекты в программе должны быть заменяемыми на экземпляры их подтипов без изменения правильности выполнения программы
4. ISP Принцип разделения интерфейса (The Interface Segregation Principle) много интерфейсов, специально предназначенных для клиентов, лучше, чем один интерфейс общего назначения
5. DIP Принцип инверсии зависимостей (The Dependency Inversion Principle) Зависимость на Абстракциях. Нет зависимости на что-то конкретное
0:00 – вступление Сергея Немчинского
0:23 – про принципы SOLID
1:12 – формулировка Open-Closed Principle (OCP)
2:50 – почему хорошо следовать принципу открытости-закрытости
3:53 – как соблюдать OCP согласно Бертрану Мейеру
6:20 - как соблюдать OCP согласно Роберту Мартину (полиморфный OCP)
8:25 –про расширение классов через интерфейсы
1 view
100
29
2 months ago 02:12:02 1
SOLID принципы в 2024: Полный разбор и прожарка / @S0ERDEVS / #12
2 months ago 11:41:27 1
Clean Architecture (чистая архитектура, все для проекта любого размера, принципы, мышление)
2 months ago 00:10:36 1
Совместное применение SOLIDWORKS и технологии 3D-сканирования для воссоздания твердотельных моделей
2 months ago 00:11:03 18
Архитектура ПО. Введение
2 months ago 00:08:05 2
Как сделать загрузочный SSD M2 с Windows 10/11 на телефоне
2 months ago 00:26:50 14
Laravel Meet. Принципы Solid
3 months ago 02:03:50 1
Практика JavaScript с нуля за 2 часа. Сделаем целый сайт!
3 months ago 00:16:07 1
Все о принципах SOLID
3 months ago 00:30:56 1
connect лучше useSelector. Почему connect более SOLID ное решение. (Объясняю на примерах)
3 months ago 00:50:31 1
SOLID’ный тимлид, или Основы менеджмента для технарей / Александр Поломодов (Tinkoff)
3 months ago 01:24:39 1
DevOps by Golang by Rebrain: Совместимы ли SOLID и Go
4 months ago 00:17:11 1
Подробный урок по Zenject в Unity. DI Container
4 months ago 00:25:05 8
Дивидендный раньте. Как обогнать рынок - Дмитрий Донецкий из Солида
4 months ago 01:05:08 2
Unity Developer Собеседование C#. Тренировочное интервью на вакансию с актуальными вопросами
4 months ago 00:07:08 1
How to play the Principality of Sturgia
4 months ago 00:23:39 1
Креденс&Комод. Основа. Частина 1//Credence&Commod. Basis. Part 1
4 months ago 00:38:14 1
Физика компьютерной памяти: как именно хранятся данные в SRAM, DRAM, SSD и HDD?
4 months ago 00:12:36 1
Принципы SOLID / С Примерами На Python
5 months ago 00:46:58 6
Александр Бармин — SOLIDный чистый код на простых примерах
5 months ago 00:28:14 19
Как ловить на МИКРОДЖИГ?! Ультралайт. Основы, снасти, проводки и т.д.
5 months ago 00:28:29 1
Архитектура современных WEB приложений. Эволюция от А до Я
5 months ago 00:12:07 1
HDD vs SSD и SATA vs NVMe - разница между форм факторами и протоколами передачи данных?
5 months ago 00:00:37 13
SOLID Принципы! ТЕБЯ Спросят ЭТО На СОБЕСЕДОВАНИИ! #программирование #собеседование #джуниор