Каковы значение и обоснование позади Открываться/Закрывать Principle?

Вы также можете использовать эхо с фигурными скобками,

$ (echo hello; echo world)
hello
world
42
задан Steve Chambers 3 September 2017 в 13:20
поделиться

8 ответов

А именно, это о "Святом Граале" дизайна в ООП создания объекта, достаточно расширяемого (посредством его отдельного дизайна или посредством его участия в архитектуре) для поддержки будущих непредвиденных изменений, не переписывая ее код (и иногда даже, не перекомпилировав **).

Некоторые способы сделать это включает Полиморфизм/Наследование, Состав, Инверсию Управления (иначе. DIP), Аспектно-ориентированное программирование, Шаблоны, такие как Стратегия, Посетитель, Шаблонный Метод, и много других принципов, шаблонов и методов OOAD.

** Посмотрите 6 "принципов пакета", ЧЛЕН ПАЛАТЫ ПРЕДСТАВИТЕЛЕЙ, CCP, CRP, ADP, SDP, SAP

25
ответ дан Troy DeMonbreun 26 November 2019 в 23:38
поделиться

Это означает, что необходимо поместить новый код в новые классы/модули. Существующий код должен быть изменен только для устранения ошибки. Новые классы могут снова использовать существующий код через наследование.

Открываются/закрывают, принцип предназначается для снижения риска при представлении новой функциональности. Так как Вы не изменяете существующий код, Вас можно уверить, что он не был бы поврежден. Это уменьшает стоимость обслуживания и устойчивость продукта увеличения.

42
ответ дан aku 26 November 2019 в 23:38
поделиться

Более конкретно, чем DaveK, это обычно означает, что, если Вы хотите добавить дополнительную функциональность, или изменяют функциональность класса, создают подкласс вместо того, чтобы изменить оригинал. Таким образом, любой использующий родительский класс не должен волноваться об этом изменяющийся позже. В основном это - все о назад совместимости.

Другой действительно важный принцип объектно-ориентированного дизайна является слабой связью через интерфейс метода. Если изменение, которое Вы хотите внести, не влияет на существующий интерфейс, действительно довольно безопасно измениться. Например, для создания алгоритма более эффективным. Объектно-ориентированные принципы должны быть умерены здравым смыслом также:)

6
ответ дан Russell Leggett 26 November 2019 в 23:38
поделиться

Это - ответ на проблему хрупкого базового класса, которая говорит, что на вид невинные модификации к базовым классам могут иметь непреднамеренные последствия для наследников, которые зависели от предыдущего поведения. Таким образом, необходимо стараться инкапсулировать то, что Вы не хотите положенный так, чтобы производные классы повиновались контрактам, определенным базовым классом. И как только наследники существуют, необходимо быть действительно осторожны с тем, что Вы изменяете в базовом классе.

6
ответ дан jodonnell 26 November 2019 в 23:38
поделиться

Принцип означает, что он должен легкий добавить новую функциональность, не имея необходимость изменять существующую, стабильную, и протестированную функциональность, экономя и время и деньги.

Часто, polymorhism, например, с помощью интерфейсов, является хорошим инструментом для достижения этого.

2
ответ дан Lars A. Brekken 26 November 2019 в 23:38
поделиться

Дополнительное эмпирическое правило для приспосабливания OCP должно сделать краткий обзор базовых классов относительно функциональности предоставленным производными классами. Или поскольку Scott Meyers говорит, 'Делают Нелистовой краткий обзор классов'.

Это означает иметь нереализованные методы в базовом классе, и только реализуйте эти методы в классах, которые самих не имеют никаких sub классов. Тогда клиент базового класса не может полагаться на конкретную реализацию в базовом классе, так как нет ни одного.

1
ответ дан quamrana 26 November 2019 в 23:38
поделиться

Я просто хочу подчеркнуть, что это "Открывается/Закрывает", даже при том, что быть очевидно полезным в программировании OO, здоровый метод для использования во всех аспектах разработки. Например, в моем собственном опыте это - большое болеутоляющее для использования, "Открываются/Закрывают" как можно больше при работе с плоскостью C.

/Robert

1
ответ дан sharkin 26 November 2019 в 23:38
поделиться

Это означает, что на программное обеспечение OO нужно построить, но не изменить внутренне. Это хорошо, потому что это гарантирует надежную, предсказуемую производительность от базовых классов.

0
ответ дан DaveK 26 November 2019 в 23:38
поделиться