Система Orphus

Приемы объектно-ориентированного проектирования. Паттерны проектирования.

Авторы: Эрих Гамма
Ричард Хелм
Ральф Джонсон
Джон Влиссидес
Издательство: "Питер", 2006
368 страниц

Материал предоставил: Игорь Сухов
Найти в магазинах
Купить в Озоне (253 руб.)
Купить в Books.Ru
Купить в Болеро (199 руб.)
Купить в OZ.by (Беларусь)
Купить в My-Shop.ru (246 руб.)

Аннотация

Содержание
Комментарии

Аннотация

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

Содержание

Предисловие

Глава 1. Введение в паттерны проектирования

1.1. Что такое паттерн проектирования
1.2. Паттерны проектирования в схеме MVC в языке Smalltalk
1.3. Описание паттернов проектирования
1.4. Каталог паттернов проектирования
1.5. Организация каталога
1.6. Как решать задачи проектирования с помощью паттернов
Поиск подходящих объектов
Определение степени детализации объекта
Специфицирование интерфейсов объекта
Специфицирование реализации объектов
Механизмы повторного использования
Сравнение структур времени выполнения и времени компиляции
Проектирование с учетом будущих изменений
1.7. Как выбирать паттерн проектирования
1.8. Как пользоваться паттерном проектирования

Глава 2. Проектирование редактора документов

2.1. Задачи проектирования
2.2. Структура документа
Рекурсивная композиция
Глифы
Паттерн компоновщик
2.3. Форматирование
Инкапсуляция алгоритма форматирования
Классы Compositor и Composition
Стратегия
2.4. Оформление пользовательского интерфейса
Прозрачное обрамление
Моноглиф
Паттерн декоратор
2.5. Поддержка нескольких стандартов внешнего облика
Абстрагирование создания объекта
Фабрики и изготовленные классы
Паттерн абстрактная фабрика
2.6. Поддержке нескольких оконных систем
Можно ли воспользоваться абстрактной фабрикой?
Инкапсуляция зависимостей от реализации
Классы Window и WindowImp
Подклассы WindowImp
Конфигурирование класса Window с помощью WindowImp
Паттерн мост
2.7. Операции пользователя
Инкапсуляция запроса
Класс Command и его подклассы
Отмена операций
История команд
Паттерн команда
2.8. Проверка правописания и расстановка переносов
Доступ к распределенной информации
Инкапсуляция доступа и порядка обхода
Класс Iterator и его подклассы
Паттерн итератор
Обход и действия, выполняемые при обходе
Класс Visitor и его подклассы
Паттерн посетитель
2.9. Резюме

Глава 3. Порождающие паттерны

Паттерн Abstract Factory
Паттерн Builder
Паттерн Factory Method
Паттерн Prototype
Паттерн Singleton
Обсуждение порождающих паттернов

Глава 4. Структурные паттерны

Паттерн Adapter
Паттерн Bridge
Паттерн Composite
Паттерн Decorator
Паттерн Facade
Паттерн Flyweight
Паттерн Proxy
Обсуждение структурных паттернов
Адаптер и мост
Компоновщик, декоратор и заместитель

Глава 5. Паттерны поведения

Паттерн Chain of Responsibility
Паттерн Command
Паттерн Interpreter
Паттерн Iterator
Паттерн Mediator
Паттерн Memento
Паттерн Observer
Паттерн State
Паттерн Strategy
Паттерн Template Method
Паттерн Visitor
Обсуждение паттернов поведения
Инкапсуляция вариаций
Объекты как аргументы
Должен ли обмен информацией быть инкапсулированным или распределенным
Разделение получателей и отправителей
Резюме

Глава 6. Заключение

6.1. Чего ожидать от паттернов проектирования
Единый словарь проектирования
Помощь при документировании и изучении
Дополнение, существующих методов
Цель реорганизации
6.2. Краткая история
6.3. Проектировщики паттернов
Языки паттернов Александра
Паттерны в программном обеспечении
6.4. Приглашение
6.5. На прощание

Приложение А. Глоссарий

Приложение В. Объяснение нотации

B.1. Диаграмма классов
В.2. Диаграмма объектов
В.3. Диаграмма взаимодействий

Приложение С. Базовые классы

C.1. List
С.2. Iterator
С.З. Listlterator
С.4. Point
C.5. Rect

Библиография

Алфавитный указатель

Комментарии

Игорь Сухов

Наконец-то эта классическая книга Банды Четырех ("Gang of Four") вышла и на русском языке. Настоятельно рекомендую прочитать - в книге описываются различные приемы объектно-ориентированного проектирования - наверняка некоторые из них будут полезны и для реализации ваших собственных задач. Как и другие книги по методологиям программирования - эта не является 100%-ным и безоговорочным руководством к действию, некоторые вещи могут показаться спорными - но безусловно книга очень интересна и по значимости сравнима с "Объектно-Ориентированным Проектированием" Буча.

Денис Миллер, инструктор Luxoft (http://luxoft.ru/edu)

Чем дольше мы программируем, тем чаще замечаем, что многие идеи, переходят из одного проекта в другой. Меняются задачи, но идеи остаются неизменными. Опытный программист отличается от начинающего багажом таких идей. Нам повезёт, если мы попадем в команду с более опытными коллегами. Иначе приходится изобретать велосипед снова и снова. Ещё сложнее объяснить коллегам, как работает только что изобретённый велосипед. Хотелось бы заранее знать о велосипедах, и желательно различных моделей. Для этого мы обращаемся к книгам. Ещё десять лет назад книги по программированию ограничивались сведениями о языке программирования. В таких книгах рассказывается о конструкциях языка, типовых библиотеках и идиомах. Местами показываются хитрости и различные приёмы как реализовать типовую проблему. Цель таких книг не передать опыт автора, а ознакомить с возможностями языка. В книге "Паттерны проектирования" (иначе этот труд называют "GoF" - сокращение от "Gang of Four", что соответствует количеству авторов книги) авторы поставили перед собой иную задачу - передать опыт (велосипеды) ведущих программистов в области объектно-ориентированного программирования и проектирования. И им это удалось.

Авторы книги обобщили удачный опыт многих разработчиков, и выделили 23 базовые техники - шаблона (паттерна). Паттерны окружают нас везде: наши привычки, правила поведения, правила дорожного движения. Какие-то из них неудачные, другие не столь очевидны. Как отмечает Стив Макконел, наш мозг обладает уникальной способностью: он не всегда видит эффективные способы, но зато быстро им учится. Если присмотреться, то мы можем выделить удачные решения из личного опыта программирования. Далее обобщаем и пытаемся обсудить с коллегами. На это занятие уходит много времени. Но многое за нас уже сделано, и стоит сэкономить время - обратиться к книге. Так паттерн проектирования (design pattern) представляет описание одной простой идеи, не зависящей от языка программирования, ни от области применения. Каждый паттерн изолирован, расписан в мельчайших подробностях, приведены примеры его использования. Вам нужно только ознакомиться и приложить паттерн к своему приложению.

Базовые паттерны проектирования преследуют единственную цель - гибкость создаваемого приложения. Гибкость позволит легко адаптировать и расширять приложение. Гибкость даст возможность повторного использования существующего кода с минимальными усилиями. Цель других наборов паттернов другие.

В книге выделяется три важных части. Первая - принципы повторного использования и принципы, на которых основываются паттерны проектирования. Вторая - пример проектирования приложения с использованием базовых паттернов. Третья - каталог базовых паттернов. Чтобы начать использовать паттерны необходимо бегло ознакомиться с первой частью, а затем перейти к третьей. Как не затеряться в этом множестве и найти нужные паттерны авторы подсказывают в первой части книги (1.7). Третья часть книги - каталог паттернов - разбит на три группы. В соответствии с целью применения паттернов выделяются: порождающие паттерны, структурные паттерны и паттерны поведения. Группа порождающих паттернов, например, убеждает нас в том, что создание однотипных объектов должно локализоваться в одном месте - фабрике объектов. А применения оператора new в других местах является smell (зловонным кодом, за расшифровкой этого понятия следует обратиться к книге Мартина Фаулера, "Рефакторинг: улучшение существующего кода"). Структурные паттерны говорят, как наиболее оптимально организовывать сложные структуры из классов и объектов, а поведенческие паттерны - как организовать взаимодействие между ними.

Если есть возможность, то прочитайте сначала Роберта Мартина "Быстрая разработка программ: принципы, примеры, практика". А когда вы будете готовы провести бессонные ночи напролёт, в которые вас увлечёт расшифровка GoF-писания, приступайте за книгу. Вернувшись к книге через год, вы обнаружите множество новых идей, скрытых между строк. Первое время вам придется потрудиться, применяя новую терминологию в команде. Постепенно термины проникнут в команду, и вы начнёте применять их в проектах, облегчая коммуникацию. Приложенные усилия по изучению паттернов с лихвой окупятся. Вы поймёте как на самом деле это просто (вспомните слова Стива Макконела, см. выше) ведь давным-давно в первом классе нам казалось, что правописание и арифметика очень запутанные и сложные вещи. А теперь мы над этим не задумываемся - это стало нашей реальностью.

Вывод: Материал книги весьма насыщен. Возможно, вам придётся возвращаться к книге снова и снова. Рекомендуется к прочтению разработчикам и проектировщикам.

Оценка: Классика. Обязательно к прочтению.