Система Orphus

Объектно-ориентированный анализ и проектирование с примерами приложений

Авторы: Гради Буч
Роберт А. Максимчук
Майкл У. Энгл
Бобби Дж. Янг
Джим Коналлен
Келли А. Хьюстон
Издательство: "Вильямс", 2008
720 страниц
ISBN: 978-5-8459-1401-9
ISBN: 0-201-89551-X

Материал предоставил: Сергей Тепляков
Найти в магазинах

Аннотация

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

Аннотация

Книга "Объектно-ориентированный анализ и проектирование с примерами приложений" представляет собой новое издание бестселлера Гради Буча по объектно-ориентированному анализу и проектированию (OOA/OOD). Авторы описывают объектные методы решения сложных проблем, связанные с разработкой систем и программного обеспечения. Используя многочисленные примеры, они иллюстрируют основные концепции объектно-ориентированного подхода на примере разработки систем управления, сбора данных и искусственного интеллекта. Читатели найдут в книге практические советы, касающиеся важных вопросов анализа, проектирования, реализации и оптимального управления программными проектами. Книга "Объектно-ориентированный анализ и проектирование с примерами приложений" будет полезна системным аналитикам и архитекторам, программистам, преподавателям и студентам высших учебных заведений, а также все специалистам по информационным технологиям.

Содержание

Предисловие
Изменения, внесенные в третье издание

Часть I. Концепции

Глава 1. Сложность

1.1 Структура сложных систем
Структура персонального компьютера
Структура растений и животных
Структура материи
Структура общественных институтов
1.2 Сложность, присущая программному обеспечению
Определение сложности программного обеспечения
Почему программному обеспечению присуща сложность?
Сложность предметной области
Трудности управления проектированием
Необходимость обеспечить гибкость программ
Сложность описания дискретных систем
1.3 Пять признаков сложной системы
Иерархическая структура
Относительность выбора элементарных компонентов
Разделение функций
Общая структура
Устойчивые промежуточные формы
1.4 Организованная и неорганизованная сложность
Каноническая форма сложной системы
Пределы человеческих возможностей
1.5 Упорядочение хаоса
Роль декомпозиции
Алгоритмическая декомпозиция
Объектно-ориентированная декомпозиция
Сравнение алгоритмической и объектно-ориентированной декомпозиции
Роль абстракции
Роль иерархии
1.6 О проектировании сложных систем
Инженерное дело как наука и искусство
Смысл проектирования
Важность моделирования
Элементы методологии проектирования программного обеспечения
Объектно-ориентированные модели
Резюме

Глава 2. Объектная модель

2.1 Эволюция объектной модели
Поколения языков программирования
Топология языков первого поколения и ранних языков второго поколения
Топология языков программирования позднего второго и раннего третьего поколения
Топология поздних языков третьего поколения
Топология объектных и объектно-ориентированных языков
2.2 Основные положения объектной модели
Объектно-ориентированное программирование
Объектно-ориентированное проектирование
Объектно-ориентированный анализ
2.3 Составные части объектного подхода
Абстрагирование
Инкапсуляция
Модульность
Иерархия
Контроль типов
Параллелизм
Персистентность
2.4 Применение объектной модели
Преимущества объектной модели
Нерешенные вопросы
Резюме

Глава 3. Классы и объекты

3.1 Природа объектов
Что является и что не является объектом?
Состояние
Поведение
Операции
Роли и обязанности
Объекты как автоматы
Индивидуальность
3.2 Отношения между объектами
Связи
Видимость
Синхронизация
Агрегация
3.3 Природа класса
Что такое класс
Интерфейс и реализация
Жизненный цикл класса
3.4 Отношения между классами
Ассоциация
Наследование
Агрегация
Зависимости
3.5 Взаимосвязь классов и объектов
Отношения между классами и объектами
Роль классов и объектов в анализе и проектировании
3.6 Качество классов и объектов
Измерение качества абстракции
Выбор операций
Временная и пространственная семантика
Выбор отношений
Выбор реализации
Упаковка
Резюме

Глава 4. Классификация

4.1 Важность правильной классификации
Трудности классификации
Итеративная суть классификации
4.2 Идентификация классов и объектов
Классический и современный подходы
Применение классических и современных теорий
Объектно-ориентированный анализ
Анализ характеристик
4.3 Основные абстракции и механизмы
Идентификация основных абстракций
Идентификация механизмов
Резюме

Часть II. Метод

Глава 5. Обозначения

5.1 Элементы обозначений
Краткий исторический очерк
Модели и представления
Таксономия диаграмм
Практическое использование диаграмм
Концептуальные, логические и физические модели
Роль инструментов проектирования
Продукты объектно-ориентированного конструирования
Пропорциональное увеличение или уменьшение
Синтаксис и семантика языка UML
Источники информации о языке UML 2.0
5.2 Диаграммы пакетов
Основы: обозначения пакетов
Основы: области видимости элементов
Основы: отношение зависимости
Основы: диаграммы пакетов
Уточненная концепция: импорт и доступ
5.3 Диаграммы компонентов
Основы: обозначение компонентов
Основы: диаграмма компонентов
Основы: интерфейсы компонентов
Основы: реализация компонентов
Уточненная концепция: внутренняя структура компонентов
5.4 Диаграммы развертывания
Основы: обозначение артефактов
Основы: обозначение узла
Основы: диаграмма развертывания
5.5 Диаграммы прецедентов использования
Основы: действующие лица
Основы: прецеденты использования
Основы: диаграмма прецедентов использования
Уточненная концепция: отношения <<include>> и <<extend>>
Уточненная концепция: обобщение
5.6 Диаграммы деятельности
Основы: действия
Основы: начало и остановка
Основы: узлы принятия решений и слияний
Основы: разделы
Уточненные концепции: разветвления, объединения и параллельность
Уточненные концепции: потоки объектов
Уточненные концепции: дополнительные элементы
5.7 Диаграммы классов
Основы: классы
Основы: отношения между классами
Уточненные концепции: шаблонные (параметризованные) классы
Уточненные концепции: видимость
Уточненные концепции: имена полюсов ассоциации и квалификаторы
Уточненные концепции: ограничения
Уточненные концепции: классы ассоциаций и примечания
5.8 Диаграммы последовательностей
Основы: объекты и взаимодействия
Основы: «линия жизни» и сообщения
Уточненные концепции: уничтожение
Уточненные концепции: спецификация выполнения
Уточненные концепции: механизм использования взаимодействий
Уточненные концепции: управляющие конструкции
5.9 Диаграмма обзора взаимодействий
Основы: рамки
Основы: элементы потока управления
Основы: элементы диаграммы взаимодействий
5.10 Диаграммы композитных структур
Основы: части композитных структур
Основы: порты и интерфейсы сложной структуры
Основы: соединительные звенья композитной структуры
Уточненные концепции: механизм сотрудничества
5.11 Диаграммы конечных автоматов
Основы: начальное, конечное и простое состояния
Основы: переходы и состояния
Уточненные концепции: вход, операция и выход из состояния
Уточненные концепции: управляемые переходы
Уточненные концепции: сложные и вложенные состояния
Уточненные концепции: параллельность и управление
Уточненные концепции: состояние конечного автомата
Уточненные концепции: дополнительные элементы диаграмм конечных автоматов
5.12 Диаграммы синхронизации
Основы: элементы диаграмм синхронизации
Основы: схема
Основы: события
Основы: ограничения
Уточненные концепции: альтернативное представление
Уточненные концепции: события и сообщения
5.13 Диаграммы объектов
Основы: объекты
Основы: отношения между объектами
Уточненные концепции: имена и квалификаторы
5.14 Диаграммы коммуникации
Основы: объекты, связи и сообщения
Основы: нумерация сообщений
Уточненные концепции: сообщения и синхронизация
Уточненные концепции: итерационные выражения и дополнительные условия
Резюме

Глава 6. Процесс

6.1 Основные принципы
Характерные черты удачных проектов
Рациональный процесс проектирования
6.2 Макропроцесс: жизненный цикл разработки программного обеспечения
Обзор
Содержание макропроцесса – стадии
Временные координаты макропроцесса – контрольные точки и этапы
Временной аспект макропроцесса – итерации
Планирование выпусков
6.3 Микропроцесс: анализ и проектирование
Обзор
Уровни абстракции
Микропроцесс и уровни абстракции
Идентификация элементов
Определение взаимодействия между элементами
Определение отношений между элементами
Детализация семантики элементов
Резюме

Глава 7. Практические вопросы

7.1 Управление и планирование
Управление риском
Планирование заданий
Инспектирование проекта
7.2 Подбор кадров
Распределение ресурсов
Роли разработчиков
7.3 Управление выпусками
Управление конфигурацией и контроль версий
Интеграция
Тестирование
7.4 Повторное использование
Элементы повторного использования
Как осуществить повторное использование?
7.5 Гарантия качества и его показатели
Качество программного продукта
Объектно-ориентированные показатели
7.6 Документация
Наследие разработки
Содержание документации
7.7 Инструменты
Виды инструментов
Организационные выводы
7.8 Специальные вопросы
Специализированные проблемы
Адаптация объектных технологий
7.9 Преимущества и риски объектно-ориентированной разработки
Преимущества
Риски, связанные с объектно-ориентированным проектированием
Резюме

Часть III. Приложения

Глава 8. Системная архитектура: спутниковая система навигации

8.1 Начало
Требования, предъявляемые к спутниковой системе навигации
Определение границ задачи
Формулировка прецедентов выполнения заданий
Определение сценариев использования системы
8.2 Разработка
Разработка хорошей архитектуры
Определение действий, связанных с разработкой архитектуры
Обоснование предложенной системной архитектуры
Распределение нефункциональных требований и определение интерфейсов
Согласование системной архитектуры и ее разворачивание
Декомпозиция системной архитектуры
8.3 Конструирование
8.4 Сопровождение
Добавление новых функциональных возможностей
Изменение аппаратного оборудования

Глава 9. Система управления трафиком

9.1 Начало
Требования к системе управления движением
Определение прецедентов использования системы
9.2 Разработка
Анализ функциональных возможностей системы
Определение архитектуры системы TTMS
От проектирования системы к разработке аппаратного оборудования и программного обеспечения
Ключевые абстракции и механизмы
9.3 Конструирование
Механизм передачи сообщений
Планирование расписания движения поездов
Отображение информации
Сбор показаний датчиков
Управление версиями
Архитектура системы
Спецификация подсистем
9.4 Эксплуатация

Глава 10. Искусственный интеллект: криптоанализ

10.1 Начало
Требования криптоанализа
Определение границ задачи
Архитектура информационной доски
Анализ источников знаний
10.2 Разработка
Объекты информационной доски
Зависимости и утверждения
10.3 Конструирование
Проектирование объектов класса Blackboard
Проектирование источников знаний
Проектирование специализированных источников знаний
Обобщение источников знаний
Проектирование модуля управления
Интеграция модели
Интеграция объектов верхнего уровня
Реализация механизма оценки предположений
Добавление новых источников знаний
10.4 Сопровождение
Расширение функциональных возможностей
Изменение технических требований
Глава 11. Сбор данных: метеорологическая станция

11.1 Начало
Требования к метеорологической станции
Определение границ рассматриваемой задачи
Сценарии
11.2 Проектирование
Прецеденты использования системы мониторинга погодных условий
Архитектурная основа
11.3 Конструирование
Механизм временных рамок
Планирование выпусков
Механизм датчиков
Механизм работы дисплея
Механизм пользовательского интерфейса
11.4 Эксплуатация

Глава 12. Web-приложение: система планирования отпусков

12.1 Начало
Требования
Модель использования
12.2 Разработка
Представление развертывания
Логическое представление
Представление процессов
Представление реализации
Представление сценариев использования
12.3 Конструирование
Модель действий пользователя
Модели анализа и проектирования
Сущности
Сервисные объекты данных
Генерация первичного ключа
Методы поиска
Контроллеры
Web-страницы и пользовательский интерфейс
Заполнение динамического содержания
Вызов бизнес-функций
12.4 Внедрение и эксплуатация

Приложение А. Объектно-ориентированные языки программирования

Эволюция языков программирования
Язык программирования Smalltalk
Язык программирования С++
Язык программирования Java
Приложение Б. Рекомендации по дальнейшему чтению
Примечания
Глоссарий
Библиография
Предметный указатель

Комментарии

Сергей Тепляков

«Звезда в преддверии коллапса; ребенок, который учится читать; клетки крови, атакующие вирус, - это только некоторые из потрясающе сложных объектов физического мира. Компьютерные программы тоже бывают сложными, однако их сложность совершенно другого рода. … Эйнштейн утверждал, что должны существовать простые объяснения природных процессов, так как Бог не действует из каприза или по произволу. У программиста нет такого утешения: сложность, с которой он должен справиться, лежит в самой природе системы».

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

Авторы пишут: «Эксперименты психологов, например, Миллера, показывают, что максимальное количество порций информации, которыми человек может оперировать одновременно, приблизительно равно семи (плюс-минус две). Вероятно, это ограничение пропускной способности информационного канала связано с объемом краткосрочной памяти человека». И именно это ограничение является своего рода лакмусовой бумажкой при объектно-ориентированной декомпозиции сложной системы.

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

Во второй части книги, авторы описывают метод построения сложных систем, основанный на объектной модели. Сначала вводится система графических обозначений (теперь в книге используется язык UML, вместо «нотации Буча»), а затем рассматриваются основы обобщенного процесса разработки. Вот, что они говорят: «Дилетанты постоянно ищут некий волшебный метод или инструмент, который мог бы сделать процесс разработки программ тривиальным. В отличие от них, профессионалы знают, что такой панацеи не существует. Дилетанты хотят иметь готовые рецепты; профессионалы знают, что такой подход ведет к негодным проектным решениям и нагромождению лжи, за которой разработчики скрываются от ответственности за ранее принятые неверные решения. Дилетанты либо игнорируют документацию вообще, либо делают из нее фетиш, заботясь больше о том, как их бумажный продукт выглядит в глазах заказчика, чем о его сути. Профессионал признает важность документации, но всегда отдает предпочтение разумным архитектурным новшествам. Процесс объектно-ориентированного анализа и проектирования невозможно описать с помощью рецептов, однако он определен достаточно хорошо, чтобы стать основой прогнозируемого и воспроизводимого процесса разработки программного обеспечения».

Авторы подчеркивают важность архитектурной целостности, итеративного и поступательного жизненного цикла разработки. Интересной особенностью изложения является то, что авторы не считают рациональный унифицированный процесс разработки единственно верным во всех случаях, а ускоренные методы (agile process) неверными в корне. «Выбирая между ускоренным и планомерным проектированием, следует оценивать риск. С какими рисками сталкивается проект? Выберите стиль и соответствующие методы, минимизирующие эти риски…. Выбор процесса проектирования не означает, что работа сделана. Этот процесс следует уточнять на протяжении всего жизненного цикла проекта. Инструменты, работающие хорошо, следует оставить, а инструменты, работающие плохо, - исключить. Целью должен быть непрерывный процесс усовершенствования, основанный на практическом опыте».

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

Так сможет ли эта книга сделать из вас превосходного архитектора? Честно говоря, не знаю… Ведь процесс познания, точно также, как и процесс разработки программного обеспечения, является итеративным и поступательным. Одно только наличие этой книги на полке не является гарантией успеха ваших проектов. Прочитав эту книгу, вы не сможете в первом своем проекте с легкостью анализировать противоречивые требования пользователя, вам не откроются тайны объектно-ориентированной декомпозиции и ваши абстракции будут далеки от идеала. Ведь книга – это всего лишь направление, это не автострада, по которой вы сможете пронестись на бешеной скорости, это всего лишь еле заметная дорожка через тернистый путь, имя которому – объектно-ориентированный анализ и проектирование.