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

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

sergey shishkin

"Open-Closed Principle (OCP)":

Развитие кода оптимально планировать так, чтобы для реализации программистом новых задач требовалось добавлять новый код, а старый код при этом в изменениях не нуждался. Код должен быть открыт (Open) для добавления и закрыт (Closed) для изменения.

Целью для этого принципа является минимизация трудозатрат и устранение неявно вносимых ошибок, получаемых из-за того, что в разработке существуют следующие инварианты:

  • ⟨1.1⟩, ⟨1.2⟩, ⟨1.3⟩
  • для реализации новой задачи программист может добавить новые блоки кода или изменить поведения старых блоков кода,
  • добавление блока кода требует проверки в месте нового использования, и порождает затраты времени программиста
  • обусловленное новой задачей изменение поведения блока кода требует проверки в месте нового использования и во всех местах старого использования, что также порождает затраты времени программиста, а в случае опубликованного блока кода работу всех программистов, использовавших это блок кода.
  • вариант реализации новой задачи целесообразно выбирать минимизируя затраты времени программиста.

Чаще в практике разработки программного обеспечения затраты добавления гораздо меньше затрат изменения, что делает очевидной пользу использования "Open-Closed (OCP)" принципа. При этом существует масса приемов поддержания архитектуры программы в состоянии, когда реализация новой задачи сводится только к добавлению блоков кода. Эта работа с архитектурой тоже требует затрат времени программиста, но как показывает практика в крупных проектах гораздо меньших чем использование подхода изменений старых процедур. И, конечно, это описание разработки — идеализация. Почти не бывает реализации задачи только добавлением или только изменением. В реальных задачах применяется смесь этих подходов, но OCP подчеркивает пользу в использовании подхода добавления.

И здесь хотелось бы выписать набор приемов поддержания OCP. Из очевидных областей, где можно поискать эти приемы:

  • паттерны проектирования;
  • библиотеки dll и варианты их распространения, обновления и развития функционала;
  • развитие COM библиотек и объектов в них;
  • развития языков программирования и поддержка ранее написанного кода;
  • развитие законодательной системы государства.

https://telegra.ph/Obshchaya-teoriya-algoritmov-01-20

Report Page