Книга поможет освоить основные принципы и самые современные приемы объектно-ориентированного анализа и
проектирования (ООА/П). В ней вы найдете новые сведения о шаблонах проектирования, прецедентах, архитектурном анализе и многих других вопросах,
которые рассматриваются в рамках одного из самых популярных итеративных процессов проектирования UP.
На протяжении всей книги рассматривается один реальный пример, модифицированный по сравнению с первым изданием книги. Для построения моделей
используется унифицированный язык моделирования UML, ставший фактическим стандартом объектно-ориентированного анализа и проектирования.
Данная книга будет хорошим путеводителем для всех, кто интересуется вопросами ООА/П, как для новичков, так и для специалистов.
Предисловие
Программирование - это развлечение, но разработка качественных программ - тяжелый труд. Между хорошей идеей, формулировкой требований, составлением "видения" и готовым программным продуктом лежит гораздо больше, чем просто программирование. Анализ и проектирование, определение способов решения задачи, выбор программных средств, удобное представление проектного решения, реализация и сопровождение программы - это основные вопросы, которые рассматриваются в данной книге. Это то, о чем вам предстоит из нее узнать.
Унифицированный язык моделирования UML стал общепринятым языком разработки программных систем. Это визуальный язык, используемый для изложения основных идей. В книге основное внимание уделяется применению элементов языка UML, а не особенностям самого языка.
При разработке сложных систем важную роль играют шаблоны. Шаблоны проектирования программ позволяют описать фрагменты проектного решения, повторно использовать хорошие идеи и перенять полезный опыт других разработчиков. Шаблоны имеют имена и определяются в форме абстрактных эвристик, правил и лучших наработок объектно-ориентированной технологии. Ни один здравомыслящий разработчик не захочет начинать создание системы с чистого листа. Эта книга как раз и предоставляет целую палитру готовых проектных решений.
Однако проектные решения выглядят слишком сухо и неестественно в отрыве от контекста процесса разработки. В этой связи стоит отметить, что во втором издании книги автор, Крэг Ларман (Craig Larman), положил в основу разработки унифицированный процесс проектирования UP, показал, как создавать системы в рамках этого процесса. В книге достаточно реалистично показан пример разработки системы в рамках итеративного процесса с учетом рисков и архитектурных особенностей. Разработка программной системы показана в динамике. Виды деятельности процесса разработки увязаны с другими задачами, поэтому они больше не выглядят оторванными от жизни. Автор книги и я оценили реальные преимущества итеративной разработки и постараемся донести их до читателя.
На мой взгляд, в книге описано множество взаимосвязанных компонентов. Здесь систематически изложены основы объектно-ориентированного анализа и проектирования. Автор книги - талантливый преподаватель, замечательный методист и признанный гуру объектно-ориентированного подхода, имеющий тысячи учеников во всем мире. Крэг Ларман описал этот метод в контексте унифицированного процесса. Он постепенно вводит все более сложные шаблоны, что делает книгу особенно полезной "при столкновении" лицом к лицу с реальными жизненными сложностями. Кроме того, здесь использована наиболее широко применяемая система обозначений.
Я очень рад, что мне представилась возможность работать напрямую с автором этой книги. Я с удовольствием прочел ее первое издание и был польщен предложением рецензировать второе. В процессе работы над книгой мы несколько раз встречались и интенсивно обменивались электронными сообщениями. Я многому научился у Крэга, в том числе в контексте унифицированного процесса разработки и его реализации в конкретной организации. Надеюсь, книга станет очень полезной и для вас, даже если вы уже знакомы с принципами объектно-ориентированного анализа и проектирования. Как и я, вы сможете освежить в памяти его основные принципы и углубить свои знания с помощью доступных и грамотных пояснений Крэга.
В контексте итеративного процесса разработка в рамках второй итерации опирается на результаты первой. Это же относится и к книгам. Я надеюсь, что даже прочитав первое издание, вы с удовольствием познакомитесь и со вторым.
Приятного чтения!
Филипп Крачтен (Philippe Kruchten),
сотрудник компании Rational Software,
Ванкувер (Vancouver), Канада
Введение
Спасибо за проявленное внимание к этой книге! Перед вами - практическое введение в область объектно-ориентированного анализа и проектирования (ООА/П), а также в смежные области итеративного процесса разработки. Мне очень приятно, что первое издание этой книги имело большой успех во всем мире и было переведено на многие языки. Второе издание расширяет и обновляет (а не заменяет) первое. Хотелось бы особо поблагодарить всех читателей первого издания.
Эта книга будет полезна читателям по следующим причинам.
Во-первых, использование объектной технологии предполагает разработку программного обеспечения на основе принципов ООА/П. Владение этими вопросами обеспечивает создание робастных и простых в поддержке объектно-ориентированных систем.
Во-вторых, тот, кто еще не знаком с вопросами объектно-ориентированного анализа и проектирования, наверняка планирует освоить эту область знаний. Данная книга станет хорошим путеводителем, поскольку в ней описан унифицированный процесс проектирования (unified process), понимание которого позволит шаг за шагом освоить путь от определения требований к системе до создания кода.
В-третьих, унифицированный язык моделирования UML является признанным стандартом для описания моделей, который обеспечивает возможность общения между разработчиками. В данной книге вопросы ООА/П освещаются с использованием системы обозначений UML.
В-четвертых, идиомы и удачные проектные решения при создании объектно-ориентированных систем были сформулированы в виде шаблонов, которые эксперты предлагают применять при создании систем. Из этой книги вы узнаете, как применять шаблоны проектирования, включая популярную "четверку", а также шаблоны GRASP, в которых сконцентрированы фундаментальные принципы распределения обязанностей при объектно-ориентированном проектировании. Изучив и применив шаблоны, можно повысить уровень своего мастерства в области анализа и проектирования.
В-пятых, структура и содержание этой книги проверены годами практического опыта обучения специалистов искусству объектно-ориентированного анализа и проектирования. Этот опыт позволил выработать четкий, мотивированный и эффективный подход к изучению данного предмета, обеспечивающий оптимальность процесса чтения и обучения.
В-шестых, для иллюстрации всего процесса объектно-ориентированного анализа и проектирования в книге приводится исчерпывающее описание одного реального примера. Это достаточно реалистичное упражнение.
В-седьмых, здесь показано, как отобразить артефакты объектно-ориентированного проектирования в коде на языке Java.
В-восьмых, в книге рассказывается о том, как разработать многослойную архитектуру и связать уровень графического интерфейса пользователя со слоями реализации и технических служб.
И наконец, здесь рассказывается, как разработать объектно-ориентированный контур и использовать его для работы с базой данных.
Основные задачи
Основная задача этой книги сводится к следующему:
Помочь студентам и разработчикам в создании удачных объектно-ориентированных решений в результате применения набора обоснованных принципов и эвристик.
В процессе изучения и применения приведенной здесь информации и предлагаемых методов можно глубоко изучить проблему в терминах ее процессов и понятий, а также разработать органичное программное решение с использованием объектного подхода.
Для кого предназначена эта книга
В этой книге освещены вводные вопросы из области ООА/П, связанные с ними проблемы анализа требований и этапы итеративной разработки на примере унифицированного процесса. Она не предназначена для особо опытных специалистов, а рассчитана на следующую аудиторию.
Разработчики с опытом создания программ на объектно-ориентированных языках, которые пока не являются экспертами в области объектно-ориентированного анализа и проектирования.
Студенты компьютерных специальностей, изучающие объектную технологию.
Специалисты по объектно-ориентированному анализу и проектированию, которые хотят изучить систему обозначений унифицированного языка моделирования UML (Unified Modeling Language), ознакомиться с шаблонами или углубить свои знания в области объектно-ориентированного анализа и проектирования.
Что необходимо знать
Для успешного овладения предлагаемым материалом необходимо иметь следующие знания.
Навыки и опыт программирования на объектно-ориентированном языке типа Java, С#, C++ или Smalltalk.
Основные понятия объектной технологии, такие как класс, экземпляр, интерфейс, полиморфизм, инкапсуляция и наследование.
Определения основных понятий объектной технологии в книге не приводятся.
Примеры на языке Java
В книге приводятся примеры кода и обсуждаются вопросы реализации принципов ООА/П на языке Java, поскольку в последнее время он приобрел очень широкую популярность. Однако представленные здесь идеи можно применить к большинству (если не ко всем) объектно-ориентированных языков программирования.
Структура книги
Общий принцип организации книги сводится к следующему. Вопросы объектно-ориентированного анализа и проектирования рассматриваются в той последовательности, в которой они возникают в процессе разработки системы в течение "начальной" фазы (термин из описания унифицированного процесса) и трех последовательных итераций.
1. В главах, посвященных "начальной" фазе, рассматриваются вопросы анализа требований.
2. При описании первой итерации ООА/П вводятся основные понятия анализа и проектирования, а также рассматриваются вопросы распределения обязанностей между объектами.
3. При переходе ко второй итерации основное внимание уделяется проектированию объектов, особенно некоторым популярным шаблонам проектирования.
4. При рассмотрении третьей итерации затрагивается множество вопросов, в том числе связанных с анализом архитектуры и проектированием контуров.
Организация книги соответствует процессу разработки проекта.
Ресурсы Web
Статьи по вопросам объектной технологии, применению шаблонов и процессу разработки программных систем можно найти по адресу www.craiglarman.com.
Некоторые ресурсы, связанные с вопросами обучения, содержатся также по адресу www.phptr.com/larman.
Дополнения к первому изданию
Хотя в основу этой книги положено ее первое издание, она существенно обновлена.
Модифицировано описание прецедентов в соответствии с очень популярным подходом, предложенным в [33].
Для иллюстрации принципов ООА/П в качестве примера итеративного процесса разработки рассматривается широко известный унифицированный процесс UP (Unified Process). Поэтому все артефакты именуются в соответствии с терминологией UP. В частности, рассматривается модель предметной области.
При рассмотрении примера конкретной системы вводятся новые требования, что влечет за собой необходимость третьей итерации проектирования.
Обновлено описание шаблонов проектирования.
Добавлено введение в архитектурный анализ.
Для шаблонов GRASP вводятся защищенные вариации (Protected Variations).
Выдержана пропорция 50/50 между диаграммами последовательностей и сотрудничества.
Используется новейшая система обозначений языка UML.
Обсуждаются некоторые практические аспекты применения CASE-средств.
Благодарности
Во-первых, большое спасибо моим друзьям и коллегам из компании Valtech, которые внесли свой вклад в создание и рецензирование этой книги, в том числе Крису Тарру (Chris Tarr), Мишелю Эзрану (Michel Ezran), Тиму Снайдеру (Tim Snyder), Куртису Хайту (Curtis Hite), Челсо Гонзалесу (Celso Gonzalez), Паскалю Рокусу (Pascal Roques), Кену Делонгу (Ken DeLong), Бретту Шухерту (Brett Schuchert), Эшли Джонсону (Ashley Johnson), Крису Джонсу (Chris Jones), Томасу Лиоу (Thomas Liou), Дериллу Геберту (Darryl Gebert), Фрэнку Родориго (Frank Rodorigo), Джину-Ивсу Харди (Jean-Yves Hardy) и многим другим, кого я не в состоянии перечислить.
Спасибо Филиппу Крачтену (Philippe Kruchten) за написание предисловия, рецензирование книги и другую помощь.
Отдельное спасибо Мартину Фовлеру (Martin Fowler) и Алистеру Кокбурну (Alistair Cockburn) за плодотворное обсуждение процесса разработки и вопросов проектирования, а также за предоставленные материалы и рецензирование книги.
Благодарю Джона Влиссидеса (John Vlissides) и Криса Кобрина (Cris Kobryn) за удачные цитаты.
Большое спасибо сотрудникам компании Chelsea Systems и лично Джону Грею (John Gray) за помощь в формулировке требований к их системе ChelseaStore POS, разработанной с помощью технологии Java.
Благодарю Пита Коада (Pete Coad) и Дейва Астелса (Dave Astels) из компании TogetherSoft за поддержку.
Выражаю признательность другим рецензентам, в том числе Стиву Адольфу (Steve Adolph), Брюсу Андерсону (Bruce Anderson), Лену Бассу (Len Bass), Гари К. Эвансу (Gary K. Evans), Элу Горнеру (Al Goerner), Люку Хохманну (Luke Hohmann), Эрику Лефебвру (Eric Lefebvre), Дэвиду Нанну (David Nunn) и Роберту Дж. Вайту (Robert J. White).
Благодарю Поля Беккера (Paul Becker) из издательства Prentice-Hall за его веру в успех первого издания, а также Поля Петралиа (Paul Petralia) и Патти Гурьери (Patti Guerrieri) за сопровождение второго.
И наконец, отдельное спасибо Грэхем Гласс (Graham Glass) за открытую дверь.
Об авторе
Крэг Ларман (Craig Larman) работает техническим директором по вопросам процесса проектирования в международной консалтинговой компании Valtech, имеющей свои представительства в Европе, Азии и Северной Америке. Эта компания специализируется на разработке систем электронной коммерции, применении объектных технологий и итеративной разработке программных систем в рамках унифицированного процесса.
Начиная с середины 1980-х годов, Крэг помогал тысячам разработчиков освоить объектно-ориентированную технологию программирования, анализа и проектирования, а также консультировал организации по вопросам реализации итеративного процесса.
После неудачной попытки сделать карьеру странствующего уличного музыканта в 1970-е годы он занялся разработкой программных систем на языках APL, PL/1 и CISC. В начале 1980-х годов он стал "поклонником" искусственного интеллекта, методов проектирования баз знаний и способов обработки естественных языков и начал разрабатывать базы знаний на языках Lisp, Prolog и Smalltalk. Он солирует на гитаре в своей группе Changing Requirements (Изменчивые требования) (вообще-то, группа называется просто Requirements, но ее состав периодически изменяется).
Крэг Ларман имеет степени бакалавра и магистра компьютерных наук Ванкуверского университета имени Симона Фрейзера (Simon Fraser University), Канада.
C Крэгом Ларманом можно связаться по адресу clarman@acm.org, а также www.craiglarman.com.