Абстрактный интерфейс это абстрактный класс, составленный полностью из виртуальных функций, не обладающий состояниями (членами-данными), причём обычно без реализации функций-членов.Отсутствие состояний упрощает дизайн всей иерархии.
Желательно следовать принципу инверсии зависимостей: - Высокоуровневые модули не должны зависеть от низкоуровневых
И те, и другие должные зависеть от абстракций.
- Детали должны зависеть от абстракций, а не наоборот.
Абстрактные базовые классы должны беспокоиться об определении функциональности, но не о её реализации.
Преимущества принципа инверсии зависимостей.
1. Повышение надежности - Менее стабильные части системы (реализации) зависят от более стабильных частей (абстракций). При плохом проектировании (когда проект строится на конкретных базовых классах) небольшие изменения в одном месте оказывают влияние на самые неожиданные части системы.
2. Повышение гибкости - Дизайн, основанный на абстрактных интерфейсах обычно более гибок. Если абстракции корректно смоделированы, то при появлении новых требований легко разработать новые реализации
- В то время, как дизайн, зависящий от многих конкретных деталей оказывается более жёстким в том смысле, что новые построения приводят к существенным изменения в ядре системы.
Обычно для того, чтобы обеспечить полиморфное удаление при проектировании отдаётся предпочтение открытому виртуальному деструктору, если только вы не используете брокер объектов (как COM или CORBA), который использует альтернативный механизм управления памятью.
Дизайн с использованием множественного наследования может быть очень выразительным, но он труднее в разработке и более подвержен ошибкам. Особенно сложным становится управление состояниями
|