Хрупкий базовый класс

Материал из Seo Wiki - Поисковая Оптимизация и Программирование

Перейти к: навигация, поиск

Серьезная проблема объектно-ориентированного программирования.

Описание

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

Проблема хрупкого базового класса сильно снижает ценность наследования.

В общем случае проблема не решаема, и является одним из существенных недостатков ООП. Под сомнение ставится преимущество наследования, создающего эту проблему, перед повторным использованием кода через копирование.

Проблема может быть обобщена и на системы, разработанные не на ООП языках, и не использующие понятие "класс". Любое повторное использование готового кода (без копирования) как части нового кода может повлечь за собой такую проблему.

В современных парадигмах программирования, разработанных под влиянием ООП, используются понятия "связи" и "связность", и качество дизайна определяется управлением связями, что, в частности, подразумевает под собой ослабление связей. Наследование же в понимании ООП создает сильнейшую возможную связь, и, таким образом, должно использоваться с большой осторожностью.

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

Возможные методы борьбы

Замена наследования агрегацией. При агрегации вложенный объект базового класса описывается явно как часть объекта производного класса, и производный класс может пользоваться только публичным интерфейсом базового класса. Таким образом, производный класс не может зависеть от деталей реализации базового класса, что решает проблему.

Личные инструменты

Served in 0.041 secs.