Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Новинки компьютерных книг ->> Шаблоны проектирования. Новый подход


Информационный Канал Subscribe.Ru

Visit Williams Visit Dialektika

Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированию

Алан Шаллоуей, Джеймс Р. Тротт

 
Библиография

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

Тип издания: Научно-популярное издание
Место издания: С.П.
Издатель: Компьютерное изд-во "Вильямс"
Срок выхода в свет: 2002, 3 кв.
Количество страниц: 288, с ил.
Сопровод. материалы: <нет>
ISBN (русск): 5-8459-0301-7
ISBN (англ): 0-2017-1594-5
УДК: 681.3.07
Формат: 70x100/16

Введение

Шаблоны проектирования и объектно-ориентированное программирование. Именно они в будущем должны облегчить работу проектировщиков и разработчиков программного обеспечения. Относящаяся к этим областям терминология каждый день обсуждается в технической и даже популярной прессе. Но их изучение и успешное использование, равно как и понимание сути используемых терминов, может оказаться достаточно сложным делом.

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

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

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

И что наиболее важно, вы научитесь создавать простое в эксплуатации, достаточно гибкое и эффективное программное обеспечение.

От обычной объектной технологии к шаблонам проектирования - действительно объектной технологии

Во многом эта книга основана на моем собственном опыте изучения шаблонов проектирования. Прежде, до обращения к ним, я считал себя опытным специалистом в объектно-ориентированном анализе и проектировании. Мой послужной список включал несколько довольно значительных проектов и разработок в различных отраслях промышленности. Я знал язык С++ и приступил к изучению языка Java. Объекты создаваемого мной программного кода отличались хорошей организацией и полнотой инкапсуляции. Я мог создать замечательную структуру абстрактных данных, образующих стройную иерархию наследования. Поэтому я полагал, что достаточно хорошо знаю объектную технологию.

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

Я начал изучение шаблонов проектирования в 1996 году. Тогда я возглавлял отдел объектно-ориентированного проектирования, работавший на языке С++, в крупной аэрокосмической компании на северо-западе. Несколько человек объединились в группу по изучению шаблонов проектирования и попросили меня возглавить ее. Именно там я познакомился с моим будущим соавтором Джимом Троттом (Jim Trott). Эта группа привнесла в мою жизнь много нового. Во-первых, мне удалось в полной мере оценить возможности шаблонов проектирования. В процессе изучения я сравнивал собственные разработки с разработками других, более опытных, специалистов. В результате обнаружилось, что при проектировании интерфейсов я часто не использовал все существующие возможности, поскольку не всегда принимал во внимание тип объекта при использовании его другим объектом. Я также заметил, что новички в объектно-ориентированном проектировании - те, кто начал изучение шаблонов проектирования относительно недавно, - получали ровно столько же полезной информации, с

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

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

Поставленная задача сама по себе не составляла особой сложности, трудность же заключалась в необходимости создания понятного и удобного в эксплуатации кода. Буквально после двухминутного изучения проблемы я набросал схему проекта, руководствуясь своими обычными принципами абстрагирования данных. К сожалению, полученный проект никуда не годился. Абстрактное представление данных само по себе меня уже не устраивало. Необходимо было найти что-нибудь получше.

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

Удрученный, я прервал работу и начал ходить по коридору, убеждая себя не думать о проблеме хотя бы в течение 10 минут. Но спустя 30 секунд я уже думал о ней снова! Наконец, совершенно случайно, мне пришло в голову взглянуть на эти шаблоны проектирования в ином свете: вместо того, чтобы использовать их как отдельные элементы, мне следовало рассматривать все четыре шаблона как единое целое.

Для решения поставленной задачи шаблоны проектирования необходимо связать в единое целое.

Я слышал об этом подходе раньше, но не до конца понимал его. Поскольку шаблоны в теории программирования были представлены как шаблоны проектирования, то в своих работах я всегда предполагал, что в основном они должны использоваться на этапе конструирования. Я считал, что в реальных проектах шаблоны большей частью призваны выполнять связующие функции между классами. Но затем я прочел замечательную книгу Кристофера Александера (Christopher Alexander) Строительство на века (The Timeless Way of Building). Из нее мне стало понятно, что шаблоны проектирования существуют на всех этапах: анализа, разработки и реализации. В своей книге Александер показывает, что шаблоны помогают разобраться во всем, что относится к предметной области решаемой задачи (включая даже и ее описание).

Моя ошибка заключалась в попытке выделить отдельные классы в предметной области поставленной задачи с последующим соединением их для получения законченной системы. Как указывал Александер, эту методику нельзя считать удачной. Я никогда не задумывался над тем, верен ли мой способ создания классов, поскольку он был совершенно очевиден. Как только я начинал анализ предметной области, в моем воображении сразу возникали классы, связанные с каждым "существительным" в описании задачи, - как того требует методика проектирования, которой нас обучали. Но впоследствии для соединения полученных классов в единое целое мне всегда требовалось прилагать значительные усилия.

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

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

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

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

Я хотел, чтобы мои студенты разбирались в шаблонах проектирования, и обнаружил, что лучшим способом достичь этого является применение исследовательского подхода. Например, вместо того, чтобы просто описать шаблон Bridge (мост), лучше сформулировать подходящую задачу и попросить студентов решить ее на основе нескольких рекомендуемых принципов и методов, которые всегда можно выделить в большинстве шаблонов проектирования. В процессе поиска студенты сами находят то решение, которое называется шаблоном Bridge, и прочно запоминают его.

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

Мои способности объяснить эти немногочисленные, но мощные принципы и методы другим требовали постоянного развития. По мере их совершенствования я приходил к заключению, что имеет смысл применять этот подход при изучении все новых и новых шаблонов "банды четырех". В частности, сейчас эти принципы и методы я использую для объяснения 12 из 14 шаблонов, обсуждаемых в курсе изучения шаблонов проектирования.

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

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

Все это я рассказываю потому, что данная книга в значительной степени сама является шаблоном читаемого мной курса лекций (извините за каламбур). Фактически, начиная с главы 3, в книге представлен материал, излагаемый в первый день моего двухдневного курса обучения под названием Проектирование на основе шаблонов - использование шаблонов проектирования на всех стадиях разработки, от анализа и до реализации.

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

Алан Шаллоуей

Декабрь, 2000

От искусственного интеллекта к шаблонам и действительно объектной технологии

Исходная точка, с которой я начал путешествие в мир шаблонов проектирования, несколько отличается от той, которая описана Аланом, но конечные выводы у нас одинаковые.

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

Я начал свою карьеру в области изучения искусственного интеллекта (artificial intelligence - AI), создавая экспертные системы, управляемые по методу правил. Моя работа заключалась в разработке моделей на основе изучения процесса принятия решений специалистами с последующим программированием этих моделей в правила интеллектуальной системы. При построении подобных систем я обратил внимание на характерную особенность: для решения схожих задач специалисты используют аналогичные приемы. Например, специалисты, выполняющие диагностический контроль оборудования, всегда начинают с поиска мелких, легко устраняемых неисправностей, а затем применяют более систематический подход, разбивая весь процесс на несколько этапов, на которых тестируются отдельные компоненты оборудования. На каждом этапе диагностики сначала выполняются более простые тесты или такие тесты, которые выявляют сразу широкий класс проблем. И только после этого специалист переходит к более сложным тестам различных типов. Указанное правило соблюдается п

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

В 1994 году я узнал, что европейские исследователи запрограммировали повторяющиеся схемы действий специалистов и объединили их в пакет, получивший название Knowledge Analysis and Design Support (Анализ знаний и поддержка проектирования), или KADS. В США первой начала использовать пакет KADS в своей работе Карен Гарднер, талантливый аналитик, разработчик моделей, преподаватель и очень хороший человек. Она продолжила европейские исследования и распространила использование пакета KADS на объектно-ориентированные системы. Она открыла мне мир анализа и проектирования на основе шаблонов - нового этапа в развитии программирования, наибольший вклад в который сделал Кристофер Александер (Christopher Alexander). Описание его работы и ее оценку К. Гарднер приводит в книге Шаблоны познания (Cognitive Patterns, Cambridge University Press, 1998).

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

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

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

Я был заинтригован и поэтому весьма обрадован созданию по месту моей службы группы по изучению шаблонов проектирования. Именно там я встретил Алана, пришедшего к той же точке зрения на шаблоны проектирования, что и я, но со стороны объектно-ориентированной разработки программ. Результатом нашей совместной работы и стала эта книга.

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

Джеймс Р. Тротт

Декабрь, 2000

Несколько слов о соглашениях, принятых в этой книге

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

Выбранный подход

Комментарий

Изложение от первого лица

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

Сканирование текста

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

Фрагменты текста программ

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

Методы и принципы

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

Демонстрация существующих возможностей и предоставление общего впечатления

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

Отзывы читателей

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

Мы хотим узнать ваше мнение об этой книге.

  • Что в ней сделано хорошо, а что плохо?
  • Есть ли в ней ошибки, требующие исправления?
  • Были ли у вас какие-либо трудности в понимании написанного?

Пожалуйста, посетите Web-узел этой книги по адресу: http://www.netobjectives.com/dpexplained. Здесь имеется форма, с помощью которой можно отправить авторам свои комментарии и вопросы. Здесь же вы найдете материалы о наших последних исследованиях.

Благодарности

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

  • Дебби Лафферти (Debbie Lafferty) из издательства Addison-Wesley, которая не уставала ободрять и поддерживать нас в работе.
  • Скотт Бейн (Scott Bain), который терпеливо просматривал нашу работу, давая ценные замечания.
  • И особенно Лей и Джилл, наши терпеливые жены, которые помогли воплотить в реальность мечты о создании этой книги.

Отдельные благодарности от Алана.

  • Мне помогло содействие некоторых моих студентов, хотя они об этом, вероятно, и не догадываются. Много раз во время чтения своего курса я испытывал колебания в отношении представления своих новых идей - а не выдаю ли я желаемое за действительное? Однако их энтузиазм при восприятии новых концепций во время чтения курса помог мне отбросить всякую неуверенность. Спасибо Лансу Янгу (Lance Young), Питеру Ширли (Peter Shirley), Джону Террелли (John Terrell) и Карену Аллену (Karen Allen). Они служили мне примером того, насколько постоянным может быть вдохновение.
  • Спасибо Джону Влиссайдесу (John Vlissides) за его вдумчивые комментарии и настойчивые вопросы.

Отдельные благодарности от Джима.

  • Доктору Карен Гарднер (Karen Gardner) - руководителю и мудрому учителю в области шаблонов человеческого мышления.
  • Доктору Марелу Норвуду (Marel Norwood) и Артуру Мерфи (Arthur Murphy), моим единомышленникам в области применения KADS и использования шаблонов в анализе.
  • Бреду Ван-Бику (Brad VanBeek), который позволил мне совершенствоваться в этой дисциплине.
  • Алексу Сидею (Alex Sidey), научившему меня дисциплине и тонкостям написания технических книг.


Вернуться к начальной странице

Rambler  Top100

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное