Рецензии на книгу
"Объектно-ориентированный анализ и проектирование с примерами приложений, 3-е издание"


15.09.2009
Блог Сергея Теплякова
Сергей Тепляков
http://sergeyteplyakov.blogspot.com/2009/09/blog-post_15.html

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

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

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

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

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

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

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

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




30.04.2009
Открытые системы (портал)

http://www.osp.ru/os/2009/03/8166129/

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

Разработчики прикладных систем и программного обеспечения могут ее использовать для шлифования навыков применения объектно-ориентированных технологий. Аналитики или архитекторы систем найдут методы объектно-ориентированного анализа и проектирования, привязанные к процессам от постановки задачи до реализации.

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

В отличие от предыдущих изданий, в книге большое внимание уделено языку UML 2.0 (Unified Modeling Language) и его использованию в рамках парадигмы объектно-ориентированного анализа и проектирования в различных аспектах моделирования программных решений применительно к жизненному циклу проекта. Расширено также рассмотрение абстракций, начиная от систем с высокоуровневой архитектурой и заканчивая системами на базе Web-технологий. Большинство фрагментов программ приведено на C++ в связи с распространенностью этого языка программирования. В третьем издании книги представлены вспомогательные материалы с дополнительными сведениями по отдельным важным темам, а также объемные приложения, содержащие сведения по важнейшим свойствам объектно-ориентированных языков (Smalltalk, C++ и Java), глоссарии основных терминов и обширную библиографию.

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

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

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

В завершающей части книги рассматриваются примеры приложения объектно-ориентированной методологии: создание системной архитектуры спутниковой навигации, разработка транспортной системы, построение подсистемы для решения задач криптоанализа и сбора метеорологических данных, а также Web-приложения по планированию отпусков на предприятии.

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




09.09.2008
Компьютерное Обозрение (портал)

http://ko-online.com.ua/node/38462

Эта книга в аннотациях не нуждается. Потому как если и есть в теории объектно-ориентированного программирования фолиант, который, не покривив душой, можно назвать культовым, то это именно «Объектно-ориентированный анализ…» Гради Буча. Его третье издание претерпело существенные изменения. Теперь авторы концентрируются действительно на «проектировании», не опускаясь на уровень кодирования, и потому в книге практически нет демонстрационных фрагментов программного кода. Зато резко увеличилось количество иллюстративных примеров с использованием новой редакции UML. Настолько, что издание можно в какой-то мере считать руководством по UML – скажем, появилась целая глава, в которой детально разбирается его применение на всех этапах жизненного цикла ПО. Особое внимание уделено процессам моделирования программных систем с помощью UML. Половина объема отдана конкретным примерам проектных задач из самых разных предметных областей – от масштабной спутниковой системы навигации до внутриорганизационного веб-приложения планирования и учета отпусков сотрудников.

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




Rambler Top100