В защиту наследования 
Из предыдущих постов могло сложиться впечатление, что я негативно настроен к наследованию классов. На самом деле это не так.
Я считаю, что наследование - это замечательный инструмент разработки объектно ориентированных программ, однако, относиться к нему стоит с подобающим уважением и осторожностью. Далее я расскажу о некоторых преимуществах наследования.
Самое главное преимущество заключается в том, что наследование классов позволяет не только не переписывать (дублировать) существующий код, но и создавать семейства классов с единым интерфейсом. Это важно хотя бы потому, что от этого зависит полиморфизм.
Наверное, многие обратили внимание, что я часто упоминаю о создании единого интерфейса для набора классов. Все дело в том, что создание хорошего интерфейса - задача действительно очень важная. Напомню, что программировать нужно в соответствии с интерфейсом, а не реализацией!
У наследования интерфейсов есть два важных достоинства:
- во-первых, клиенту не нужно проверять конкретные типы объектов. Достаточно быть уверенным, что объекты соответствуют требуемому интерфейсу.
- во-вторых, клиенту не обязательно знать о деталях реализации классов, достаточно знать об интерфейсе.
Эх, кажется, я опять много говорю про наследование интерфейсов и мало про наследование классов.
Я считаю, что наследование конкретных классов может применяться при неглубоком наследовании, т.е. когда в цепочке наследования всего один или два уровня. Лучше когда наследование конкретных классов идет вширь, а не вглубь. Например, есть класс “стол”, от него порождаются классы “круглый стол”, “пластиковый стол” и т.д.
Но даже в приведенных случаях относиться к наследованию конкретных классов стоит с большим вниманием. Особенно при наследовании классов, полученных из сторонних библиотек, например, из библиотек фреймворка или cms.
подписаться на блог
Leave a Reply