Главная страница
Навигация по странице:

  • Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес 2020 ПАТТЕРНЫ ОБЪЕКТНО- ОРИЕНТИРОВАННОГО ПРОЕКТИРОВАНИЯ

  • КРАТКОЕ СОДЕРЖАНИЕ Предисловие .........................................................................................................................................11Глава 1.

  • Глава 2.

  • Глава 4.

  • Глава 6.

  • Приложение Б.

  • ОГЛАВЛЕНИЕ Предисловие ...........................................................................................................11

  • Приложение A.

  • Библиография ...................................................................................................... 428

  • Э. Гамма, Р. Хелм


    Скачать 6.37 Mb.
    НазваниеЭ. Гамма, Р. Хелм
    АнкорFactorial
    Дата14.03.2022
    Размер6.37 Mb.
    Формат файлаpdf
    Имя файлаPatterny_Obektno-Orientirovannogo_Proektirovania_2020.pdf
    ТипДокументы
    #395452
    страница1 из 38
      1   2   3   4   5   6   7   8   9   ...   38

    D
    esign Patterns.
    Elements of Reusable
    Object-Oriented Software
    Erich Gamma, Richard Helm, Ralph Johnson,
    John Vlissides

    D
    esign Patterns.
    Elements of Reusable
    Object-Oriented Software
    Erich Gamma, Richard Helm, Ralph Johnson,
    John Vlissides
    Э. Гамма, Р. Хелм,
    Р. Джонсон, Дж. Влиссидес
    2020
    ПАТТЕРНЫ
    ОБЪЕКТНО-
    ОРИЕНТИРОВАННОГО
    ПРОЕКТИРОВАНИЯ
    ЮБИЛЕЙНОЕ ИЗДАНИЕ ЛЕГЕНДАРНОЙ КНИГИ
    БАНДЫ ЧЕТЫРЕХ

    ББК 32.973.2-018-02
    УДК 004.43
    П75
    Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж.
    П75 Паттерны объектно-ориентированного проектирования. — СПб.: Питер,
    2020. — 448 с.: ил. — (Серия «Библиотека программиста»).
    ISBN 978-5-4461-1595-2
    Больше 25 лет прошло с момента выхода первого тиража книги Design Patterns. За это время книга из популярной превратилась в культовую. Во всем мире ее рекомендуют прочитать каждому, кто хочет связать жизнь с информационными технологиями и программированием. «Русский» язык, на котором разговаривают айтишники, поменялся, многие англоязычные термины стали привычными, паттерны вошли в нашу жизнь.
    Перед вами юбилейное издание с обновленным переводом книги, ставшей must-read для каж- дого программиста. «Паттерны объектно-ориентированного проектирования» пришли на смену
    «Приемам объектно-ориентированного проектирования».
    Четыре первоклассных разработчика — Банда четырех — представляют вашему вниманию опыт ООП в виде двадцати трех паттернов. Паттерны появились потому, что разработчики искали пути повышения гибкости и степени повторного использования своих программ. Авторы не только дают принципы использования шаблонов проектирования, но и систематизируют информацию.
    Вы узнаете о роли паттернов в архитектуре сложных систем и сможете быстро и эффективно создавать собственные приложения с учетом всех ограничений, возникающих при разработке больших проектов. Все шаблоны взяты из реальных систем и основаны на реальной практике.
    Для каждого паттерна приведен код на C++ или Smalltalk, демонстрирующий его возможности.
    16+
    (В соответствии с Федеральным законом от 29 декабря 2010 г. № 436-ФЗ.)
    ББК 32.973.2-018-02
    УДК 004.43
    Права на издание получены по соглашению с Addison-Wesley Longman. Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.
    Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как надежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные ошибки, связанные с использованием книги. Издательство не несет ответственности за доступ- ность материалов, ссылки на которые вы можете найти в этой книге. На момент подготовки книги к изданию все ссылки на интернет-ресурсы были действующими.
    ISBN 978-0201633610 англ.
    Original English language Edition © 1995 by Addison Wesley Longman, Inc.
    ISBN 978-5-4461-1595-2
    © Перевод на русский язык ООО Издательство «Питер», 2020
    © Издание на русском языке, оформление ООО Издательство «Питер»,
    2020
    © Серия «Библиотека программиста», 2020

    КРАТКОЕ СОДЕРЖАНИЕ
    Предисловие .........................................................................................................................................11
    Глава 1. Введение в паттерны проектирования ..................................................................15
    Глава 2. Практический пример: проектирование редактора документов ..............56
    Глава 3. Порождающие паттерны ............................................................................................ 108
    Глава 4. Структурные паттерны ................................................................................................ 169
    Глава 5. Паттерны поведения .................................................................................................... 262
    Глава 6. Заключение ....................................................................................................................... 402
    Приложение A. Глоссарий .......................................................................................................... 413
    Приложение Б. Объяснение нотации ................................................................................... 417
    Приложение В. Фундаментальные классы ......................................................................... 422
    Библиография .................................................................................................................................... 428
    Алфавитный указатель .................................................................................................................. 436

    ОГЛАВЛЕНИЕ
    Предисловие ...........................................................................................................11
    От издательства .............................................................................................................................13
    Глава 1. Введение в паттерны проектирования ..................................................................15 1.1. Что такое паттерн проектирования .............................................................................17 1.2. Паттерны проектирования в схеме MVC в языке Smalltalk ...............................19 1.3. Описание паттернов проектирования .......................................................................22 1.4. Каталог паттернов проектирования ...........................................................................24 1.5. Организация каталога ........................................................................................................27 1.6. Как решать задачи проектирования с помощью паттернов ............................29
    Поиск подходящих объектов ...........................................................................................29
    Определение степени детализации объекта ...........................................................31
    Определение интерфейсов объекта ............................................................................32
    Определение реализации объектов ............................................................................34
    Наследование класса и наследование интерфейса ..............................................36
    Механизмы повторного использования ....................................................................39
    Сравнение структур времени выполнения и времени компиляции ............44
    Проектирование с учетом будущих изменений ......................................................45 1.7. Как выбирать паттерн проектирования ....................................................................52 1.8. Как пользоваться паттерном проектирования ......................................................54
    Глава 2. Практический пример: проектирование редактора документов ..............56 2.1. Задачи проектирования ....................................................................................................56

    Оглавление
    7
    2.2. Структура документа ..........................................................................................................59
    Рекурсивная композиция ..................................................................................................60
    Глифы ...........................................................................................................................................62
    Паттерн Composite (компоновщик) ..............................................................................64 2.3. Форматирование ..................................................................................................................65
    Инкапсуляция алгоритма форматирования .............................................................65
    Классы Compositor и Composition .................................................................................66
    Паттерн Strategy (Стратегия) ............................................................................................68 2.4. Оформление пользовательского интерфейса ........................................................69
    Прозрачное окружение ......................................................................................................69
    Моноглиф ..................................................................................................................................70
    Паттерн Decorator (декоратор) ........................................................................................73 2.5. Поддержка нескольких стандартов оформления .................................................73
    Абстрагирование создания объекта ............................................................................74
    Фабрики и изготовленные классы .................................................................................75
    Паттерн Abstract Factory (абстрактная фабрика) ....................................................78 2.6. Поддержка нескольких оконных систем ...................................................................78
    Можно ли воспользоваться абстрактной фабрикой? ..........................................78
    Инкапсуляция зависимостей от реализации ............................................................79
    Классы Window и WindowImp ..........................................................................................82
    Подклассы WindowImp .......................................................................................................83
    Настройка класса Window с помощью WindowImp ...............................................84
    Паттерн Bridge (мост) ...........................................................................................................86 2.7. Операции пользователя ...................................................................................................86
    Инкапсуляция запроса ........................................................................................................87
    Класс Command и его подклассы ...................................................................................88
    Отмена операций ..................................................................................................................90
    История команд .....................................................................................................................90
    Паттерн Command (команда) ...........................................................................................92

    8 Оглавление
    2.8. Проверка правописания и расстановка переносов ............................................92
    Доступ к распределенной информации .....................................................................93
    Инкапсуляция доступа и порядка обхода ..................................................................94
    Класс Iterator и его подклассы .........................................................................................95
    Паттерн Iterator (итератор) ................................................................................................98
    Обход и действия, выполняемые при обходе ..........................................................99
    Инкапсуляция анализа ..................................................................................................... 100
    Класс Visitor и его подклассы ........................................................................................ 104
    Паттерн Visitor (посетитель) ........................................................................................... 105 2.9. Резюме .................................................................................................................................... 106
    Глава 3. Порождающие паттерны ............................................................................................ 108
    Паттерн Abstract Factory (абстрактная фабрика) ........................................................ 113
    Паттерн Builder (строитель) .................................................................................................. 124
    Паттерн Factory Method (фабричный метод) ................................................................ 135
    Паттерн Prototype (прототип) .............................................................................................. 146
    Паттерн Singleton (одиночка) .............................................................................................. 157
    Обсуждение порождающих паттернов ........................................................................... 166
    Глава 4. Структурные паттерны ................................................................................................ 169
    Паттерн Adapter (адаптер) ..................................................................................................... 171
    Паттерн Bridge (мост) ............................................................................................................... 184
    Паттерн Composite (компоновщик) .................................................................................. 196
    Паттерн Decorator (декоратор) ........................................................................................... 209
    Паттерн Facade (фасад) ........................................................................................................... 221
    Паттерн Flyweight (приспособленец) ............................................................................... 231
    Паттерн Proxy (заместитель) ................................................................................................. 246
    Обсуждение структурных паттернов ............................................................................... 258
    Адаптер и мост ..................................................................................................................... 259
    Компоновщик, декоратор и заместитель ................................................................ 260

    Оглавление 9
    Глава 5. Паттерны поведения .................................................................................................... 262
    Паттерн Chain of Responsibility (цепочка обязанностей) ........................................ 263
    Паттерн Command (команда) ............................................................................................... 275
    Паттерн Interpreter (интерпретатор) ................................................................................ 287
    Паттерн Iterator (итератор) .................................................................................................... 302
    Паттерн Mediator (посредник) ............................................................................................. 319
    Паттерн Memento (хранитель) ............................................................................................ 330
    Паттерн Observer (наблюдатель) ........................................................................................ 339
    Паттерн State (состояние) ...................................................................................................... 352
    Паттерн Strategy (стратегия) ................................................................................................ 362
    Паттерн Template Method (шаблонный метод) ............................................................ 373
    Паттерн Visitor (посетитель) .................................................................................................. 379
    Обсуждение паттернов поведения ................................................................................... 395
    Инкапсуляция вариаций ................................................................................................. 395
    Объекты как аргументы ................................................................................................... 397
    Должен ли обмен информацией быть инкапсулированным или распределенным? ...................................................................................................... 397
    Разделение получателей и отправителей ............................................................... 398
    Резюме ..................................................................................................................................... 400
    Глава 6. Заключение ....................................................................................................................... 402 6.1. Чего ожидать от паттернов проектирования ...................................................... 403
    Единый словарь проектирования .............................................................................. 403
    Помощь при документировании и изучении ........................................................ 403
    Дополнение существующих методов ........................................................................ 404
    Цель рефакторинга ............................................................................................................ 405 6.2. Краткая история ................................................................................................................. 407 6.3. Проектировщики паттернов ........................................................................................ 408
    Языки паттернов Александра ....................................................................................... 408
    Паттерны в программном обеспечении .................................................................. 410

    10 Оглавление
    6.4. Приглашение ....................................................................................................................... 411 6.5. На прощание........................................................................................................................ 412
    Приложение A. Глоссарий .......................................................................................................... 413
    Приложение Б. Объяснение нотации ................................................................................... 417
    Б.1. Схема классов ..................................................................................................................... 418
    Б.2. Схема объектов .................................................................................................................. 420
    Б.3. Схема взаимодействий ................................................................................................... 420
    Приложение В. Фундаментальные классы ......................................................................... 422
    В.1. List ............................................................................................................................................. 422
    В.2. Iterator ..................................................................................................................................... 425
    В.3. ListIterator .............................................................................................................................. 425
    В.4. Point ......................................................................................................................................... 426
    В.5. Rect ........................................................................................................................................... 427
    Библиография ...................................................................................................... 428
    Алфавитный указатель ........................................................................................436

    ПРЕДИСЛОВИЕ
    Книга не является введением в объектно-ориентированное программиро- вание или проектирование. На эти темы написано много других хороших книг. Предполагается, что вы достаточно хорошо владеете по крайней мере одним объектно-ориентированным языком программирования и имеете какой-то опыт объектно-ориентированного проектирования. Безусловно, у вас не должно возникать необходимости лезть в словарь за разъяснением терминов «тип», «полиморфизм», и вам понятно, чем «наследование интер- фейса» отличается от «наследования реализации».
    С другой стороны, эта книга и не научный труд, адресованный исключи- тельно узким специалистам. Здесь говорится о паттернах проектирования и описываются простые и элегантные решения типичных задач, возникаю- щих в объектно-ориентированном проектировании. Паттерны проектиро- вания не появились сразу в готовом виде; многие разработчики, искавшие возможности повысить гибкость и степень пригодности к повторному ис- пользованию своих программ, приложили много усилий, чтобы поставлен- ная цель была достигнута. В паттернах проектирования найденные решения воплощены в краткой и легко применимой на практике форме.
    Для использования паттернов не нужны ни какие-то особенные возмож- ности языка программирования, ни хитроумные приемы, поражающие во- ображение друзей и начальников. Все можно реализовать на стандартных объектно-ориентированных языках, хотя для этого потребуется приложить несколько больше усилий, чем в случае специализированного решения, при- менимого только в одной ситуации. Но эти усилия неизменно окупаются за счет большей гибкости и возможности повторного использования.
    Когда вы усвоите работу с паттернами проектирования настолько, что после удачного их применения воскликнете «Ага!», а не будете смотреть в сомне-

    12
    Предисловие нии на получившийся результат, ваш взгляд на объектно-ориентированное проектирование изменится раз и навсегда. Вы сможете строить более гибкие, модульные, повторно используемые и понятные конструкции, а разве не для этого вообще существует объектно-ориентированное проектирование?
    Несколько слов, чтобы предупредить и одновременно подбодрить вас. Не огорчайтесь, если не все будет понятно после первого прочтения книги. Мы и сами не всё понимали, когда начинали писать ее! Помните, что эта книга не из тех, которые, однажды прочитав, ставят на полку. Надеемся, что вы будете возвращаться к ней снова и снова, черпая идеи и ожидая вдохновения.
    Книга созревала довольно долго. Она повидала четыре страны, была свиде- телем женитьбы трех ее авторов и рождения двух младенцев. В ее создании так или иначе участвовали многие люди. Особую благодарность мы выра- жаем Брюсу Андерсону (Bruce Anderson), Кенту Беку (Kent Beck) и Андре
    Вейнанду (Andre Weinand) за поддержку и ценные советы. Также благода- рим всех рецензентов черновых вариантов рукописи: Роджера Билефельда
    (Roger Bielefeld), Грейди Буча (Grady Booch), Тома Каргилла (Tom Cargill),
    Маршалла Клайна (Marshall Cline), Ральфа Хайра (Ralph Hyre), Брайана
    Кернигана (Brian Kernighan), Томаса Лалиберти (Thomas Laliberty), Марка
    Лоренца (Mark Lorenz), Артура Риля (Arthur Riel), Дуга Шмидта (Doug
    Schmidt), Кловиса Тондо (Clovis Tondo), Стива Виноски (Steve Vinoski) и Ребекку Вирфс-Брок (Rebecca Wirfs-Brock). Выражаем признательность сотрудникам издательства AddisonWesley за поддержку и терпение: Кейту
    Хабибу (Kate Habib), Тиффани Мур (Tiffany Moore), Лайзе Раффаэле (Lisa
    Raffaele), Прадипе Сива (Pradeepa Siva) и Джону Уэйту (John Wait). Осо- бая благодарность Карлу Кесслеру (Carl Kessler), Дэнни Саббаху (Danny
    Sabbah) и Марку Вегману (Mark Wegman) из исследовательского отдела компании IBM за неослабевающий интерес к этой работе и поддержку.
    И наконец, не в последнюю очередь мы благодарны всем тем людям, которые высказывали замечания по поводу этой книги по интернету, ободряли нас и убеждали, что такая работа действительно нужна. Вот далеко не полный перечень наших «незнакомых помощников»: Йон Авотинс (Jon Avotins),
    Стив Берчук (Steve Berczuk), Джулиан Бердич (Julian Berdych), Матиас
    Болен (Matthias Bohlen), Джон Брант (John Brant), Алан Кларк (Allan
    Clarke), Пол Чизхолм (Paul Chisholm), Йенс Колдьюи (Jens Coldewey),
    Дейв Коллинз (Dave Collins), Джим Коплиен (Jim Coplien), Дон Двиггинс
    (Don Dwiggins), Габриэль Элиа (Gabriele Elia), Дуг Фельт (Doug Felt),
    Брайан Фут (Brian Foote), Денис Фортин (Denis Fortin), Уорд Харольд
    (Ward Harold), Херман Хуэни (Hermann Hueni), Найим Ислам (Nayeem
    Islam), Бикрамжит Калра (Bikramjit Kalra), Пол Кифер (Paul Keefer),

    От издательства
    13
    Томас Кофлер (Thomas Kofler), Дуг Леа (Doug Lea), Дэн Лалиберте (Dan
    LaLiberte), Джеймс Лонг (James Long), Анна Луиза Луу (Ann Louise Luu),
    Панди Мадхаван (Pundi Madhavan), Брайан Мэрик (Brian Marick), Роберт
    Мартин (Robert Martin), Дэйв МакКомб (Dave McComb), Карл МакКон- нелл (Carl McConnell), Кристин Мингинс (Christine Mingins), Ханспетер
    Мессенбек (Hanspeter Mossenbock), Эрик Ньютон (Eric Newton), Марианна
    Озкан (Marianne Ozkan), Роксана Пайетт (Roxsan Payette), Ларри Подмолик
    (Larry Podmolik), Джордж Радин (George Radin), Сита Рамакришнан (Sita
    Ramakrishnan), Русс Рамирес (Russ Ramirez), Александр Ран (Alexander
    Ran), Дирк Риле (Dirk Riehle), Брайан Розенбург (Bryan Rosenburg), Аамод
    Сейн (Aamod Sane), Дури Шмидт (Duri Schmidt), Роберт Зайдль (Robert
    Seidl), Цинь Шу (Xin Shu) и Билл Уокер (Bill Walker).
    Мы не считаем, что набор отобранных нами паттернов полон и неизменен, он всего лишь отражает наши нынешние представления о проектировании.
    Мы приветствуем любые замечания, будь то критика приведенных приме- ров, ссылки на известные способы использования, которые не упомянуты здесь, или предложения по поводу дополнительных паттернов. Вы можете писать нам на адрес издательства Addison-Wesley или на электронный адрес
    design-patterns@cs.uiuc.edu. Исходные тексты всех примеров можно получить, отправив сообщение «send design pattern source» по адресу design-patterns-
    source@cs.uiuc.edu. А теперь также есть веб-страница http://st-www.cs.uiuc.
    edu/users/patterns/DPBook/DPBook.html, на которой размещается последняя информация и обновления к книге.
    Эрих Гамма Маунтин Вью, штат Калифорния
    Ричард Хелм
    Монреаль, Квебек
    Ральф Джонсон
    Урбана, штат Иллинойс
    Джон Влиссидес
    Готорн, штат Нью-Йорк
    Август 1994
    ОТ ИЗДАТЕЛЬСТВА
    С момента издания классической книги «Приемы объектно-ориентирован- ного проектирования. Паттерны проектирования» (Design Patterns: Elements of Reusable Object-Oriented Software) прошло 26 лет. За это время было продано более полумиллиона экземпляров книги на английском и 13 других языках. На этой книге выросло не одно поколение программистов.

    14
    Предисловие
    В книге описываются простые и изящные решения типичных задач, воз- никающих в объектно-ориентированном проектировании.
    Паттерны появились потому, что многие разработчики искали пути по- вышения гибкости и степени повторного использования своих программ.
    Найденные решения воплощены в краткой и легко применимой на практике форме. «Банда Четырех» объясняет каждый паттерн на простом примере четким и понятным языком. Использование паттернов при разработке программных систем позволяет проектировщику перейти на более высо- кий уровень разработки проекта. Теперь архитектор и программист могут оперировать образными названиями паттернов и общаться на одном языке.
    Таким образом, книга решает две задачи.
    Во-первых, знакомит с ролью паттернов в создании архитектуры сложных систем.
    Во-вторых, позволяет проектировщикам с легкостью разрабатывать соб- ственные приложения, применяя содержащиеся в справочнике паттерны.
    Что изменилось в издании 2020 года?
    „
    „
    Актуализирована терминология (например, для «реорганизации» кода уже вполне прижился термин «рефакторинг», для share — «совместное использование» вместо «разделения», а для mixin — «примесь»);
    „
    „
    обновлен стиль;
    „
    „
    устранены излишне громоздкие слова (например, «специфицирование» или «инстанцирование». Первое можно вполне адекватно заменить
    «определением», второе — «созданием экземпляра»);
    „
    „
    книга наконец-то называется «Паттерны объектно-ориентированного проектирования».
    В квадратных скобках даются ссылки на источники (см. Библиографию), а цифры в круглых скобках обозначают ссылку на страницу, где описывается тот или иной паттерн.
    Ваши замечания, предложения, вопросы отправляйте по адресу comp@piter.
    com (издательство «Питер», компьютерная редакция).
    Мы будем рады узнать ваше мнение!
    На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

      1   2   3   4   5   6   7   8   9   ...   38


    написать администратору сайта