Шаллоуей А., Тротт Дж. Р. Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированию. Пер. с англ. - М.: Издательский дом “Вильямс”, 2002. - 288 с.
В книге на подробных примерах рассмотрен один из популярных подходов к объектному проектированию программных систем, основанный на шаблонах. Классические методологии предполагают, что объектные техники применяются в условиях, когда все требования к проекту заранее полностью сформулированы, не содержат противоречий и не будут меняться в ходе работ. Однако на практике заказчики, как правило, стремятся внести в проект изменения и дополнения, которые приводят не только к значительной переделке продукта, но и к ошибкам. Поэтому современные методики ориентированы на создание приложения в условиях постоянно меняющихся требований. Такой подход предъявляет, в частности, высокие требования к качеству и гибкости архитектуры проекта, позволяющей расширять возможности системы, не выполняя масштабных переделок в иерархии классов.
Обзору классических понятий объектно-ориентированного анализа и UML посвящена первая часть книги. Во второй части автор переходит к конкретному примеру из своей практики, показывая типичные недостатки и ограничения, присущие стандартным приемам объектно-ориентированного анализа (таким, как функциональная декомпозиция). Подробно рассмотрен подход, при котором логика работы приложения реализуется не в управляющем модуле, а скрывается (инкапсулируется) в классах. В этом случае классам рекомендуется отдавать как можно больше семантически связанных с ними функциональных возможностей системы. Автор называет такой прием передачей ответственности за работу программы объектам, когда на управляющую часть возложена только передача сообщений между ними и обмен данными с пользователем.
В третьей части начинается (а в пятой продолжается) подробное описание шаблонов проектирования - объектных способов представления в общем виде условий задачи и правильных подходов к ее решению. Шаблоны позволяют, например, проектировать сложные системы, не создавая громоздкой иерархии наследования и в то же время допуская быстрое добавление в систему новых сущностей.
Число шаблонов проектирования ограничено несколькими десятками. Появлению нового шаблона предшествует довольно серьезный анализ практического опыта профессиональных программистов и длительное его тестирование в прикладных проектах. В книге описаны наиболее популярные шаблоны:
- Facade (создание единого интерфейса для всех интерфейсов системы);
- Adapter (создание нового интерфейса для класса, интерфейс которого неудобен для решения текущей задачи);
- Bridge (отделение интерфейса класса от его реализации в ситуациях, когда имеются вариации как в абстрактном представлении некоторой концепции, так и в ее воплощении);
- Abstract Factory (организация интерфейса между семействами связанных между собой объектов без привязки к конкретным классам);
- Strategy (независимость от алгоритма реализации и возможность динамического выбора последнего);
- Decorator (динамическое расширение функциональных возможностей объекта);
- Singleton (обеспечение единственности созданного экземпляра класса);
- Observer (организация отношения “один-ко-многим” между объектами и автоматизация их обновления при изменении состояния основного объекта);
- Template Method (передача частей алгоритма реализации в подклассы без изменения структуры родительского класса);
- Factory Method (передача функции создания объекта конкретного типа от абстрактного класса к производным).
Практическому применению шаблонов посвящена четвертая глава. В пятой, заключительной главе описываются взаимосвязи между рассмотренными шаблонами. Несмотря на простоту и узнаваемость подобных приемов, методологически глубокое описание шаблонов принесет большую пользу любому разработчику, использующему объектно-ориентированный подход.