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

Хрупкий базовый класс — фундаментальная проблема объектно-ориентированного программирования.

Описание

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

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

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

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

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

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

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

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

См. также

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.