Шаллоуей А., Тротт Дж. Р. Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированию. Пер. с англ. - М.: Издательский дом “Вильямс”, 2002. - 288 с.

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

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

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

Число шаблонов проектирования ограничено несколькими десятками. Появлению нового шаблона предшествует довольно серьезный анализ практического опыта профессиональных программистов и длительное его тестирование в прикладных проектах. В книге описаны наиболее популярные шаблоны:

- Facade (создание единого интерфейса для всех интерфейсов системы);

- Adapter (создание нового интерфейса для класса, интерфейс которого неудобен для решения текущей задачи);

- Bridge (отделение интерфейса класса от его реализации в ситуациях, когда имеются вариации как в абстрактном представлении некоторой концепции, так и в ее воплощении);

- Abstract Factory (организация интерфейса между семействами связанных между собой объектов без привязки к конкретным классам);

- Strategy (независимость от алгоритма реализации и возможность динамического выбора последнего);

- Decorator (динамическое расширение функциональных возможностей объекта);

- Singleton (обеспечение единственности созданного экземпляра класса);

- Observer (организация отношения “один-ко-многим” между объектами и автоматизация их обновления при изменении состояния основного объекта);

- Template Method (передача частей алгоритма реализации в подклассы без изменения структуры родительского класса);

- Factory Method (передача функции создания объекта конкретного типа от абстрактного класса к производным).

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

Версия для печати