Применение UML 2.0 и шаблонов проектирования. Введение в объектно-ориентированный анализ, проектирование и итеративную разработку
Крэг Ларман
Применение UML 2.0 и шаблонов проектирования — во всем мире известное издание, с помощью которого можно начать “мыслить объектами” и проникнуть в самую суть объектно-ориентированного анализа и проектирования. Основываясь на двух предыдущих изданиях, получивших широкую поддержку во всем мире, Крэг Ларман полностью обновил книгу, чтобы рассказать о новом стандарте UML 2.0, помочь читателям освоить искусство объектного проектирования и способствовать развитию эффективных приемов итеративного и гибкого моделирования. Основываясь на своем беспрецедентном опыте преподавателя и консультанта, Ларман помогает читателям разобраться с подходами эволюционного определения требований и прецедентов, моделированием предметной области, проектированием на основе обязанностей, а также наиболее важными принципами объектно- ориентированного проектирования и многоуровневой архитектурой. С помощью этой книги вы сможете познакомиться также с шаблонами проектирования GoF и GRASP, итеративными методами, гибким подходом к использованию унифицированного процесса и многими другими темами. К наиболее важным усовершенствованиям данного издания относятся следующие:
- Описание нового стандарта UML 2.0, гибкого моделирования, разработки на основе тестирования и рефакторинга
- Многочисленные рекомендации, позволяющие лучше освоить приемы итеративной и эволюционной объектно-ориентированной разработки
- Существенно обновленный материал с новыми диаграммами, облегчающий процесс обучения
- Новые дополнительные ресурсы, которые можно использовать в процессе обучения студентов
- Рекомендации по применению унифицированного процесса как легкого и гибкого подхода к разработке совместно с приемами из других итеративных методов, таких как XP и Scrum
- Описание подходов к использованию языка UML для документирования архитектуры
- Новая глава об эволюционных требованиях и много другого интересного материала
Третье издание книги Применение UML 2.0 и шаблонов проектирования — это практическое руководство по анализу и проектированию на основе объектов, а также по разработке легко разворачиваемых, надежных и простых в поддержке систем.
Издательство: Вильямс, 2013 г.
ISBN 978-5-8459-1185-8, 0-13-148906-2
Количество страниц: 736.
Содержание книги «Применение UML 2.0 и шаблонов проектирования. Введение в объектно-ориентированный анализ, проектирование и итеративную разработку»:
- 19 Предисловие
- 21 Введение
- 22 Образовательные и Web-ресурсы
- 22 Для кого предназначена эта книга
- 22 Что необходимо знать
- 22 Примеры на языке Java
- 23 Структура книги
- 23 Об авторе
- 24 Контакты
- 24 Дополнения к предыдущему изданию
- 25 Благодарности
- 25 Соглашения, принятые в книге
- 26 От издательства
- 27 Часть I. Введение
- 29 Глава 1. Объектно-ориентированный анализ и проектирование
- 29 1.1. Что вы узнаете из этой книги?
- 32 1.2. Основная цель обучения
- 33 1.3. Что такое анализ и проектирование
- 33 1.4. Объектно-ориентированный анализ и проектирование
- 34 1.5. Краткий пример
- 37 1.6. Что такое UML
- 41 1.7. Визуальное моделирование — хороший стиль
- 41 1.8. История
- 43 1.9. Дополнительные ресурсы
- 45 Глава 2. Итеративный, эволюционный и гибкий процесс
- 46 2.1. Унифицированный процесс и другие методы
- 48 2.2. Что такое итеративная и эволюционная разработка
- 52 2.3. Последовательный жизненный цикл
- 54 2.4. Как выполнять итеративный и эволюционный анализ и проектирование
- 56 2.5. Итеративное планирование на основе рисков и с учетом потребностей пользователей
- 58 2.6. Что такое гибкие методы
- 59 2.7. Что такое гибкое моделирование
- 62 2.8. Что такое гибкий унифицированный процесс
- 63 2.9. Другие важные принципы унифицированного процесса
- 63 2.10. Фазы унифицированного процесса
- 64 2.11. Дисциплины унифицированного процесса
- 67 2.12. Настройка процесса и выбор инструментов UP
- 69 2.13. Вы не поняли, что такое итеративная разработка или унифицированный процесс, если
- 69 2.14. История
- 70 2.15. Дополнительные ресурсы
- 73 Глава 3. Конкретные примеры
- 74 3.1. Какие вопросы рассматриваются и не рассматриваются при изучении конкретных примеров
- 75 3.2. Стратегия описания конкретных примеров: итеративная разработка + итеративное изучение
- 76 3.3. Пример 1: POS-система NextGen
- 77 3.4. Пример 2: игра Monopoly®
- 79 Часть II. Начальная фаза
- 81 Глава 4. Начальная фаза — это не стадия анализа требований
- 82 4.1. Что такое начальная фаза
- 83 4.2. Какова длительность начальной фазы
- 83 4.3. Какие артефакты относятся к начальной фазе
- 85 4.4. Вы не поняли, что такое начальная фаза, если
- 85 4.5. Как использовать UML на начальной стадии
- 87 Глава 5. Эволюционное осмысление требований
- 88 5.1. Определение требований
- 88 5.2. Определение требований для эволюционного и каскадного процессов разработки
- 90 5.3. Грамотное определение требований
- 90 5.4. Типы и категории требований
- 91 5.5. Как требования связаны с артефактами UP
- 92 5.6. Имеются ли примеры этих артефактов в данной книге
- 92 5.7. Дополнительные ресурсы
- 95 Глава 6. Описание прецедентов
- 96 6.1. Пример
- 96 6.2. Некоторые определения
- 98 6.3. Прецеденты и модель прецедентов
- 99 6.4. Зачем нужны описания прецедентов
- 100 6.5. Прецеденты и функциональные требования
- 100 6.6. Три типа исполнителей
- 101 6.7. Основные форматы прецедентов
- 101 6.8. Пример развернутого описания прецедента Оформление продажи
- 107 6.9. Пояснения
- 113 6.10. Другие форматы описания прецедентов
- 114 6.11. Описание прецедентов, относящихся к интерфейсу пользователя, в свободном стиле
- 116 6.12. Описания прецедентов должны быть лаконичными
- 116 6.13. Описание прецедентов в формате «черный ящик»
- 116 6.14. Примите точку зрения исполнителя
- 117 6.15. Как выделять прецеденты
- 121 6.16. Как выделить полезные прецеденты
- 123 6.17. Диаграммы прецедентов
- 125 6.18. Диаграммы видов деятельности
- 125 6.19. Дополнительные преимущества описания прецедентов
- 126 6.20. Пример: игра «Монополия»
- 128 6.21. Прецеденты в рамках итеративной разработки
- 133 6.22. История
- 133 6.23. Дополнительные ресурсы
- 135 Глава 7. Другие требования
- 136 7.1. Насколько полны приводимые примеры?
- 136 7.2. Нужно ли детально анализировать требования на начальной стадии разработки?
- 137 7.3. Нужно ли помещать документацию на Web-узле проекта?
- 137 7.4. Пример NextGen: фрагмент дополнительной спецификации
- 140 7.5. Дополнительная спецификация (комментарии)
- 142 7.6. Пример для системы NextGen: видение (фрагмент)
- 145 7.7. Видение (комментарий)
- 148 7.8. Пример системы NextGen: словарь терминов (фрагмент)
- 149 7.9. Комментарии: словарь терминов
- 150 7.10. Пример для системы NextGen: бизнес-правила (правила предметной области)
- 151 7.11. Бизнес-правила (комментарии)
- 151 7.12. Эволюция требований в итеративном процессе разработки
- 153 7.13. Дополнительные ресурсы
- 155 Часть III. Первая итерация фазы развития — основы
- 157 Глава 8. Итерация 1 — основы
- 158 8.1. Требования и акценты первой итерации: основные вопросы ООА/П
- 160 8.2. Начальная фаза и стадия развития
- 163 8.3. Планирование следующей итерации
- 165 Глава 9. Модели предметной области
- 167 9.1. Пример
- 168 9.2. Что такое модель предметной области
- 171 9.3. Зачем создавать модель предметной области
- 172 9.4. Как создать модель предметной области
- 173 9.5. Как выделить концептуальные классы
- 176 9.6. Пример выделения концептуальных классов
- 177 9.7. Построение диаграммы классов в рамках гибкого процесса разработки
- 177 9.8. Автоматизированное построение модели в рамках гибкого подхода к разработке
- 178 9.9. Элементы отчета: включать ли понятие «товарный чек» в модель
- 178 9.10. Имена и модели: стратегия построения карт
- 179 9.11. Как моделировать «нереальный» мир
- 179 9.12. Типичная ошибка при выделении концептуальных классов
- 180 9.13. Когда использовать классы описаний
- 182 9.14. Ассоциации
- 189 9.15. Примеры: ассоциации в моделях предметных областей
- 190 9.16. Атрибуты
- 198 9.17. Атрибуты в моделях предметных областей
- 199 9.18. Насколько корректна модель предметной области
- 200 9.19. Итеративное и эволюционное моделирование предметной области
- 201 9.20. Дополнительные ресурсы
- 203 Глава 10. Системные диаграммы последовательностей
- 205 10.1. Пример СДП для приложения NextGen
- 206 10.2. Системные диаграммы последовательностей
- 206 10.3. Зачем строить СДП
- 207 10.4. Применение UML для построения диаграммы последовательности
- 207 10.5. Системные диаграммы последовательностей и прецеденты
- 208 10.6. Имена системных событий и операций
- 208 10.7. Как моделировать взаимодействие с внешними системами
- 209 10.8. Диаграммы последовательностей и словарь терминов
- 209 10.9. Пример диаграммы последовательности для игры «Монополия»
- 210 10.10. Итеративное и эволюционное построение СДП
- 210 10.11. История и дополнительные ресурсы
- 211 Глава 11. Описание операций
- 213 11.1. Пример
- 213 11.2. Разделы описания
- 213 11.3. Что такое системная операция
- 214 11.4. Постусловия
- 217 11.5. Постусловия описания операции enterItem
- 217 11.6. Описание операций приводит к изменению предметной области
- 218 11.7. Когда нужны описания операций?
- 218 11.8. Составление описания
- 219 11.9. Пример описания операции для POS-системы NextGen
- 221 11.10. Описание операций для игры «Монополия»
- 221 11.11. Описания операций на UML и OCL
- 222 11.12. Описания операций в рамках UP
- 223 11.13. Немного истории
- 223 11.14. Дополнительные ресурсы
- 225 Глава 12. Итеративный переход от анализа требований к проектированию
- 226 12.1. Занимаясь итеративной разработкой, делайте это правильно
- 226 12.2. Раннее начало всех видов деятельности
- 226 12.3. Возможно, на это потребуются недели?
- 227 Глава 13. Логическая архитектура и диаграммы пакетов UML
- 228 13.1. Пример
- 228 13.2. Что такое логическая архитектура
- 230 13.3. На каких уровнях сосредоточено описание примеров?
- 231 13.4. Программная архитектура системы
- 231 13.5. Диаграммы пакетов UML
- 232 13.6. Проектирование на основе шаблона Layers
- 238 13.7. Принцип Model-View Separation
- 240 13.8. Взаимосвязь между СДП, системными операциями и уровнями
- 241 13.9. Логическая архитектура и диаграмма пакетов для приложения NextGen
- 241 13.10. Пример логической архитектуры игры «Монополия»
- 242 13.11. Дополнительные ресурсы
- 243 Глава 14. Переход к объектному проектированию
- 244 14.1. Гибкое моделирование и облегченный процесс построения диаграмм UML
- 245 14.2. CASE-средства UML
- 245 14.3. Сколько времени занимает рисование до начала кодирования
- 246 14.4. Статические и динамические модели объектов
- 247 14.5. Важнее иметь навыки объектного проектирования, чем знать систему обозначений UML
- 248 14.6. Другие методы проектирования объектов: карты CRC
- 251 Глава 15. Диаграммы взаимодействия на UML
- 252 15.1. Диаграммы последовательностей и коммуникации
- 255 15.2. Проблема для новичков
- 255 15.3. Основные обозначения UML для диаграмм взаимодействия
- 257 15.4. Основные обозначения диаграммы последовательностей
- 269 15.5. Основные обозначения диаграммы коммуникации
- 277 Глава 16. Диаграммы классов UML
- 278 16.1. Применение UML: система обозначений для диаграммы классов
- 278 16.2. Определение: диаграмма классов проектирования
- 280 16.3. Определение: классификатор
- 280 16.4. Способы представления атрибутов UML: имя атрибута и линии ассоциаций
- 284 16.5. Блоки примечаний: примечания, комментарии, ограничения и тела методов
- 285 16.6. Операции и методы
- 286 16.7. Ключевые слова
- 287 16.8. Стереотипы, профили и метки
- 288 16.9. Свойства и строки свойств
- 288 16.10. Обобщение, абстрактные классы, абстрактные операции
- 289 16.11. Зависимость
- 291 16.12. Интерфейсы
- 292 16.13. Композиция или агрегация
- 293 16.14. Ограничения
- 294 16.15. Уточненная ассоциация
- 294 16.16. Класс ассоциации
- 295 16.17. Классы-синглетоны
- 295 16.18. Параметризованные классы и интерфейсы
- 296 16.19. Поля, определяемые пользователем
- 297 16.20. Активный класс
- 297 16.21. Связь между диаграммами классов и взаимодействия
- 299 Глава 17. GRASP: проектирование объектов на основе распределения обязанностей
- 300 17.1. UML и принципы проектирования
- 300 17.2. Объектное проектирование — примеры входов, видов деятельности и выходов
- 304 17.3. Обязанности и проектирование на основе обязанностей
- 305 17.4. GRASP — это методический подход к объектному проектированию
- 306 17.5. Обязанности, GRASP и диаграммы UML
- 306 17.6. Шаблоны
- 309 17.7. Где мы находимся?
- 309 17.8. Небольшой пример объектного проектирования на основе шаблонов GRASP
- 318 17.9. Применение шаблонов GRASP для объектного проектирования
- 319 17.10. Шаблон Creator
- 321 17.11. Шаблон Information Expert (или Expert)
- 326 17.12. Шаблон Low Coupling
- 329 17.13. Шаблон Controller
- 341 17.14. Шаблон High Cohesion
- 345 17.15. Дополнительные ресурсы
- 347 Глава 18. Примеры объектного проектирования на основе шаблонов GRASP
- 348 18.1. Реализация прецедентов
- 349 18.2. Комментарии к артефактам
- 353 18.3. Что дальше?
- 353 18.4. Реализация прецедентов для данной итерации разработки системы NextGen
- 373 18.5. Реализация прецедентов для игры «Монополия»
- 383 18.6. Итеративное и эволюционное объектное проектирование
- 385 18.7. Резюме
- 387 Глава 19. Области видимости
- 388 19.1. Видимость объектов
- 389 19.2. Области видимости
- 393 Глава 20. Преобразование проектного решения в программный код
- 394 20.1. Программирование и итеративный, эволюционный процесс разработки
- 395 20.2. Преобразование результатов проектирования в программный код
- 395 20.3. Создание определений классов на основе диаграмм классов
- 396 20.4. Создание методов на основе диаграмм взаимодействия
- 398 20.5. Классы коллекций в программном коде
- 399 20.6. Исключения и обработка ошибок
- 399 20.7. Определение метода Sale.makeLineItem
- 400 20.8. Порядок реализации
- 400 20.9. Программирование на основе тестирования
- 401 20.10. Еще несколько слов о преобразовании проектного решения в код
- 401 20.11. Основное программное решение для POS-системы NextGen
- 404 20.12. Основные программные решения для игры «Монополия»
- 409 Глава 21. Разработка на основе тестирования и рефакторинг
- 410 21.1. Разработка на основе тестирования
- 413 21.2. Рефакторинг
- 416 21.3. Дополнительные ресурсы
- 419 Часть IV. Вторая итерация фазы развития — дополнительные шаблоны
- 421 Глава 22. Средства построения диаграмм UML
- 422 22.1. Прямое, обратное и циклическое проектирование
- 423 22.2. Важнейшие свойства UML-средств
- 423 22.3. Как выбрать систему проектирования
- 424 22.4. Как обновлять диаграммы на основе кода, если они изначально были построены вручную
- 424 22.5. Дополнительные ресурсы
- 425 Глава 23. Быстрый дополнительный анализ
- 426 23.1. POS-система NextGen
- 428 23.2. Игра «Монополия»
- 431 Глава 24. Вторая итерация и дополнительные шаблоны
- 432 24.1. От первой ко второй итерации
- 433 24.2. Требования для второй итерации
- 437 Глава 25. Дополнительные шаблоны GRASP для распределения обязанностей
- 438 25.1. Шаблон Polymorphism
- 445 25.2. Шаблон Pure Fabrication
- 449 25.3. Шаблон Indirection
- 451 25.4. Шаблон Protected Variations
- 459 Глава 26. Применение шаблонов проектирования GoF
- 460 26.1. Шаблон Adapter (GoF)
- 462 26.2. Некоторые принципы GRASP как обобщение других шаблонов
- 463 26.3. Анализ на этапе проектирования: модель предметной области
- 464 26.4. Шаблон Factory (GoF)
- 466 26.5. Шаблон Singleton (GoF)
- 469 26.6. Еще несколько слов о внешних службах с разными интерфейсами
- 471 26.7. Шаблон Strategy (GoF)
- 475 26.8. Шаблон Composite (GoF) и другие принципы проектирования
- 483 26.9. Шаблон Facade (GoF)
- 485 26.10. Шаблон Observer/Publish-Subscribe/Delegation Event Model (GoF)
- 493 26.11. Выводы
- 494 26.12. Дополнительная литература
- 495 Часть V. Третья итерация фазы развития
- 497 Глава 27. Третья итерация — вспомогательные вопросы
- 498 27.1. Требования третьей итерации для POS-системы NextGen
- 498 27.2. Требования третьей итерации для игры «Монополия»
- 499 Глава 28. Диаграммы видов деятельности UML
- 500 28.1. Пример
- 501 28.2. Как применять диаграммы видов деятельности
- 503 28.3. Дополнительные обозначения диаграмм видов деятельности UML
- 503 28.4. Рекомендации
- 504 28.5. Пример: диаграмма видов деятельности для приложения NextGen
- 505 28.6. Диаграммы видов деятельности в UP
- 506 28.7. Другие подходы
- 507 Глава 29. Диаграммы состояний UML и моделирование
- 508 29.1. Пример
- 508 29.2. События, состояния и переходы
- 509 29.3. Как применять диаграммы состояний
- 511 29.4. Дополнительные обозначения для диаграмм состояний
- 512 29.5. Моделирование навигации с помощью диаграммы состояний
- 513 29.6. Пример: диаграмма состояний для прецедента системы NextGen
- 513 29.7. Диаграммы состояний и UP
- 513 29.8. Дополнительная литература
- 515 Глава 30. Взаимосвязь прецедентов
- 516 30.1. Отношение включает
- 519 30.2. Новые термины: конкретный, абстрактный, основной и дополнительный прецеденты
- 520 30.3. Отношение расширяет
- 521 30.4. Отношение обобщает
- 521 30.5. Диаграммы прецедентов
- 523 Глава 31. Дополнительные диаграммы последовательностей и описание операций
- 524 31.1. Приложение NextGen
- 529 Глава 32. Уточнение модели предметной области
- 530 32.1. Новые понятия модели предметной области системы NextGen
- 532 32.2. Обобщение
- 533 32.3. Определение концептуальных суперклассов и подклассов
- 536 32.4. Когда нужно определять концептуальный подкласс
- 538 32.5. Когда нужно определять концептуальный суперкласс
- 538 32.6. Иерархия концептуальных классов POS-системы NextGen
- 541 32.7. Абстрактные концептуальные классы
- 542 32.8. Моделирование изменения состояний
- 543 32.9. Иерархия классов и наследование
- 543 32.10. Классы ассоциаций
- 546 32.11. Агрегация и композиция
- 548 32.12. Временные интервалы и цены товаров: устранение ошибки первой итерации
- 549 32.13. Имена ролей ассоциаций
- 550 32.14. Роли в форме понятий и роли, представленные в ассоциации
- 551 32.15. Производные элементы
- 552 32.16. Составные ассоциации
- 553 32.17. Рефлексивные ассоциации
- 553 32.18. Использование пакетов для организации элементов модели предметной области
- 559 32.19. Уточненная модель предметной области для игры «Монополия»
- 561 Глава 33. Архитектурный анализ
- 562 33.1. Когда нужно приступать к архитектурному анализу
- 562 33.2. Точки вариации и эволюции
- 563 33.3. Архитектурный анализ
- 564 33.4. Общие методы архитектурного анализа
- 565 33.5. Определение и анализ архитектурных факторов
- 568 33.6. Пример: фрагмент таблицы архитектурных факторов POS-системы NextGen
- 570 33.7. Определение архитектурных факторов
- 575 33.8. Выводы по архитектурному анализу
- 576 33.9. Итеративный архитектурный анализ в UP
- 577 33.10. Дополнительная литература
- 579 Глава 34. Уточнение логической архитектуры
- 580 34.1. Пример: логическая архитектура приложения NextGen
- 585 34.2. Взаимодействия на основе шаблона Layers
- 591 34.3. Другие вопросы использования шаблона Layers
- 596 34.4. Принцип Model-View Separation
- 597 34.5. Дополнительная литература
- 599 Глава 35. Новые проектные решения на основе шаблонов GoF
- 600 35.1. Пример: POS-система NextGen
- 600 35.2. Переход к локальным службам и обеспечение локальной буферизации
- 604 35.3. Обработка отказов
- 611 35.4. Взаимодействие с локальными службами на основе шаблона Proxy (GoF)
- 615 35.5. Реализация нефункциональных или качественных требований
- 615 35.6. Доступ к внешним физическим устройствам с помощью шаблона Adapter
- 617 35.7. Шаблон Abstract Factory (GoF) для семейства взаимосвязанных объектов
- 621 35.8. Обработка платежей на основе шаблонов Polymorphism и Do It Myself
- 627 35.9. Пример: игра «Монополия»
- 630 35.10. Заключение
- 631 Глава 36. Проектирование на основе пакетов
- 632 36.1. Рекомендации по организации пакетов
- 637 36.2. Дополнительная литература
- 639 Глава 37. Диаграммы развертывания и компонентов UML
- 639 37.1. Диаграммы развертывания
- 641 37.2. Диаграммы компонентов
- 643 Глава 38. Проектирование каркаса взаимодействия с базой данных на основе шаблонов
- 644 38.1. Проблема: объекты, подлежащие постоянному хранению
- 645 38.2. Решение: каркас интерфейса с базой данных
- 645 38.3. Каркасы
- 646 38.4. Требования к каркасу интерфейса с базой данных
- 647 38.5. Основные принципы
- 647 38.6. Шаблон представления объектов в виде таблиц
- 648 38.7. Профиль моделирования данных UML
- 648 38.8. Шаблон Object Identifier
- 649 38.9. Доступ к службе взаимодействия с базой данных на основе шаблона Facade
- 650 38.10. Объекты-преобразователи: шаблон Database Mapper или Database Broker
- 652 38.11. Разработка каркаса на основе шаблона Template Method
- 654 38.12. Материализация на основе шаблона Template Method
- 659 38.13. Настройка преобразователей с помощью объекта MapperFactory
- 659 38.14. Шаблон Cache Management
- 660 38.15. Объединение и сокрытие операторов SQL в одном классе
- 661 38.16. Состояние транзакции и шаблон State
- 664 38.17. Обработка транзакций на основе шаблона Command
- 667 38.18. Пассивная материализация на основе шаблона Virtual Proxy
- 670 38.19. Представление отношений в таблицах
- 670 38.20. Суперкласс PersistentObject
- 671 38.21. Нерешенные вопросы
- 673 Глава 39. Документирование архитектуры с помощью N+1 представления
- 674 39.1. Документ SAD и архитектурные представления
- 677 39.2. Структура документа SAD
- 677 39.3. Пример: описание архитектуры POS-системы NextGen
- 682 39.4. Пример: документ SAD для каркаса Struts
- 686 39.5. Итеративное документирование архитектуры
- 686 39.6. Дополнительная литература
- 687 Часть VI. Специальные вопросы
- 689 Глава 40. Еще раз об итеративной разработке и гибком управлении проектом
- 690 40.1. Как спланировать итерацию
- 690 40.2. Адаптивное и предиктивное планирование
- 692 40.3. Планы для фазы и итерации
- 693 40.4. Как составить план итерации с учетом прецедентов и сценариев
- 695 40.5. Приблизительность начальных оценок
- 695 40.6. Организация артефактов проекта
- 696 40.7. Вы не поняли принципов итеративного планирования, если
- 697 40.8. Дополнительная литература
- 699 Приложение A. Артефакты унифицированного процесса, шаблоны GRASP и условные обозначения языка UML
- 705 Приложение Б. Словарь терминов
- 711 Литература
- 717 Предметный указатель
Инструкция как скачать книгу Крэг Ларман: Применение UML 2.0 и шаблонов проектирования. Введение в объектно-ориентированный анализ, проектирование и итеративную разработку в форматах DjVu, PDF, DOC или fb2 совершенно бесплатно.