Новинки компьютерных книг ->> Шаблоны проектирования. Новый подход
Информационный Канал Subscribe.Ru |
Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированиюАлан Шаллоуей, Джеймс Р. Тротт
ВведениеШаблоны проектирования и объектно-ориентированное программирование. Именно они в будущем должны облегчить работу проектировщиков и разработчиков программного обеспечения. Относящаяся к этим областям терминология каждый день обсуждается в технической и даже популярной прессе. Но их изучение и успешное использование, равно как и понимание сути используемых терминов, может оказаться достаточно сложным делом. Возможно, вы уже имеете значительный опыт работы с объектно-ориентированным или базирующимся на использовании объектов языком. Знаете ли вы, что основным преимуществом объектов является вовсе не наследование, а возможности инкапсуляции? Вероятно, вы действительно хотели бы познакомиться с шаблонами проектирования поближе, но соответствующая литература, как правило, написана слишком заумным и сложным языком. Если это так, то данная книга вам очень подойдет. Она составлена на основе многолетней практики преподавания соответствующего материала разработчикам программного обеспечения, как достаточно подготовленным, так и новичкам в области объектной технологии. Опыт показывает, что понимание основных принципов и мотивов, положенных в их основу, а также способов их использования существенно сокращает время и усилия, затрачиваемые на весь процесс обучения. Наше обсуждение шаблонов проектирования позволит вам усвоить основные правила объектной технологии, что необходимо для лучшего понимания предоставляемого материала. Эта книга дает точное представление о десяти наиболее важных видах шаблонов проектирования. Эти шаблоны никогда не используются по отдельности, а только во взаимодействии друг с другом, что и гарантирует надежность создаваемых приложений. Полученных знаний будет вполне достаточно для дальнейшего изучения литературы по шаблонам проектирования и даже для создания своих собственных шаблонов. И что наиболее важно, вы научитесь создавать простое в эксплуатации, достаточно гибкое и эффективное программное обеспечение. От обычной объектной технологии к шаблонам проектирования - действительно объектной технологииВо многом эта книга основана на моем собственном опыте изучения шаблонов проектирования. Прежде, до обращения к ним, я считал себя опытным специалистом в объектно-ориентированном анализе и проектировании. Мой послужной список включал несколько довольно значительных проектов и разработок в различных отраслях промышленности. Я знал язык С++ и приступил к изучению языка 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. Здесь имеется форма, с помощью которой можно отправить авторам свои комментарии и вопросы. Здесь же вы найдете материалы о наших последних исследованиях. БлагодарностиВведение почти каждой книги заканчивается благодарностями в адрес тех, кто помогал в ее создании. Мы просто не понимали, насколько эта помощь необходима, пока не начали писать свою собственную книгу. Она является результатом совместной работы многих людей. Их список достаточно большой. Следующие люди особенно помогли нам.
Отдельные благодарности от Алана.
Отдельные благодарности от Джима.
|
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||