Новинки компьютерных книг ->> Принципы объектно-ориентированной разработки программ
Принципы объектно-ориентированной разработки программ2-е изданиеАнтон Элиенс
ПредисловиеЧто за необычная книга! Мне приходилось видеть множество книг по объектно-ориентированному программированию, и некоторые из них охватывали достаточно обширный материал, но книга Антона Элиенса - это нечто особенное. Как и во многих других изданиях в данной области, ее основой послужил курс лекций, читавшийся автором. Однако Элиенс неожиданно отошел от ставшего уже традиционным способа переработки конспекта лекций в книгу. Вместо того чтобы расширить узкие рамки конспекта, переупорядочить материал и создать на его основе традиционный учебник, он решил сохранить сам дух заметок для конспекта. Все ключевые положения собраны в так называемых "слайдах", которые служат для текста своего рода наглядными ориентирами, что так не похоже на привычный книжный стиль. Мы словно мчимся по скоростной дороге, следуя от одного слайда к другому; так студенты работают с тезисами лекции при первом знакомстве с предметом. Затем обычно следует более глубокая проработка материала, когда внимание концентрируется на развернутых пояснениях автора. Эти пояснения весьма обстоятельны там, где это важно, но в то же время достаточно кратки там, где перегрузка подробностями не принесла бы пользы. Читать эту книгу и работать с ней, углубляя свои знания, - истинное удовольствие! Вместо того чтобы комментировать структуру книги, я просто сошлюсь на авторское предисловие и предисловие к первому изданию. Впрочем, достоин упоминания тот факт, что Элиенс существенно улучшил текст в сравнении с первым изданием. В книгу включена особенно близкая мне тема - компонентное программирование. Архитектура программ, еще одна тема, тесно связанная с предыдущей, также нашла здесь свое отражение. Хороший стиль и высокое качество изложения материала удачно дополняются широким кругом рассматриваемых вопросов. В эпоху необычайно быстрых изменений и постоянного обновления в нашей дисциплине, мы должны ценить те немногие книги, в которых авторы стремятся охватить столь серьезные области знания с единых позиций. В конечном счете именно на читателя возлагается главная задача - воспользоваться подобными книгами, чтобы переработать и собрать в единую систему огромный массив отрывочных знаний, оставшихся за пределами книги. И именно благодаря книгам, подобным этой, читатель получает реальную возможность достичь столь грандиозной цели. Не вызывает сомнений то, что преподаватели и лекторы также высоко оценят настоящее издание как прекрасное учебное пособие. Наконец, будущему программисту-разработчику, как и опытному программисту-профессионалу или ученому-теоретику в области компьютерных наук, разбирающемуся в практическом программировании, потребуется освоить ряд узких вспомогательных дисциплин, чтобы почувствовать себя хотя бы наполовину подготовленным для ответа на вопрос, что же мы в действительности делаем, когда создаем программы. Чтобы достичь этого, необходимо знать все, начиная с методов моделирования и проектирования, включая архитектуры и компонентную технологию, и заканчивая особенностями реализации на конкретных языках программирования. Эта книга может стать хорошей отправной точкой на пути к столь глубокому пониманию объектно-ориентированного подхода. (Впрочем, не следует забывать и о других подходах и точках зрения на программирование!) Клеменс Шиперский (Clemens Szyperski) Ноябрь 1999 Предисловие к первому изданиюЭта книга станет весомым вкладом в литературу по объектно-ориентированному программированию, поскольку она является мостом через пропасть между сообществом разработчиков языков и сообществом разработчиков программ. В ней охвачены как проблемы проектирования языков, связанные с наследованием, типами, полиморфизмом и активными объектами, так и парадигмы проектирования программ, такие как технология объектного моделирования (OMT - Object Modelling Technique), парадигмы "модель-представление-управление" (MVC - model-view-controller) и проектирование по обязательствам. Принятое в книге деление материала на четыре части (проектирование, языки и системы, теоретические основы и прикладные среды разработки приложений) позволяет достичь золотой середины между практикой и теорией, охватив и практические методы разработки, и основополагающие принципы. Использование языка C++ в качестве основного языка примеров, а также языков Eiffel и SmallTalk в качестве дополнительных языков позволяет применять эту книгу как учебное Общее впечатление логической целостности изложения подкрепляется очаровывающим стилем и современной трактовкой исключительно широкого круга проблем. Приведенные в конце каждой главы принципиально важные вопросы (ответы на которые находятся в приложении К) иногда не лишены юмора. Например, на вопрос "Зачем нужны друзья?", который заставляет читателя задуматься над значением конструкта дружественных функций языка C++, дан изящный ответ, подчеркивающий необходимость компромисса между эффективностью и безопасностью и заканчивающийся предостережением "обращайтесь с друзьями бережно". Объектно-ориентированное программирование начиналось с однопользовательских сред разработки, однако со временем оно выросло в технологию гетерогенных, распределенных сетевых систем, в которых на первый план выходят проблемы интероперабельности и сборки систем из разнородных модулей. Понятие структуры в объектно-ориентированном программировании в общем сходно с понятием структуры в структурном программировании, хотя и относительно сложнее. В этой книге отражена постепенная эволюция применяемых технологий - от однопользовательских систем к распределенным - и показана связь между понятиями, характерными для объектно-ориентированного проектирования однопользовательских систем, и концепциями разработки распределенных систем. Основные понятия объектно-ориентированного программирования вводятся с позиций проектирования, поэтому все языковые конструкты обосновываются, прежде всего, той ролью, которую они играют в жизненном цикле программ. Первые четыре главы представляют собой краткое, но изящное введение в основополагающие понятия, в котором даже хорошо знакомый с предметом читатель сможет найти для себя новые, неожиданные аспекты. В главе 1 рассматриваются парадигмы программирования и подробно разбирается жизненный цикл программ. В главе 2 описывается язык C++, рассматриваются его преимущества и недостатки, а также проводится его сравнение с языками SmallTalk и Eiffel. В главе 3, посвященной объектно-ориентированному проектированию, досконально изучаются модели, соглашения и спецификации, приводится сравнительный обзор и синтез различных точек зрения на концептуальные основы проектирования. Глава 4 завершает раздел о проектировании рассмотрением методик тестирования и определения количественных критериев (метрик) для оценки пра Вопросы, рассмотренные в первых четырех главах, подобраны так, чтобы они могли служить основой для изложения материала последующих глав. Глава о принципах разработки языков включает обзор современных моделей наследования и делегирования, в главе о параллелизме обсуждаются аномалии наследования, параллельные объектные модели и принципы распределенного программирования, а в главе о совместном функционировании объектов в составе единой системы разъясняется механизм обратных вызовов, управления окнами и принцип вычислений, управляемых событиями. В трех главах по теоретическим основам обстоятельно, хотя и в довольно непринужденной манере, излагается сущность алгебраических моделей абстрактных типов данных, исчислений для формализации понятия полиморфизма и уточнения поведения при помощи подтипов. Две заключительные главы посвящены интероперабельности, стандартизации, разработке библиотек, методикам определения требований к системе, гипермедийным связям и гетерогенным системам. Хотя в этой книге охвачен необычайно широкий круг вопросов, она хорошо читается. К тому же в ней достигнуто редкое равновесие между теорией и практикой, учитывающее сочетание нескольких точек зрения. Антон Элиенс демонстрирует высокий уровень осведомленности о новейших публикациях и редкую способность сопоставлять, оценивать и систематизировать результаты работы различных коллективов исследователей и программистов-практиков. Следует особо отметить интеллектуальную гибкость автора и его способность к многостороннему мышлению, проявленную им при выборе стиля и основных методов изложения столь сложного и обширного материала. Питер Вегнер (Peter Wegner) Октябрь 1994 Предисловие автора"Это книга по методологии разработки объектно-ориентированных программ. Ее содержание соответствует университетскому учебному курсу "объектно-ориентированное программирование", который читается в амстердамском университете." С этой фразы начиналось предисловие к первому изданию. И эти слова по-прежнему остаются в силе. Однако ООП - необычайно быстро развивающаяся область. Вследствие этого мою книгу, вышедшую из печати в 1994 году, можно было сразу же считать устаревшей. Например, непосредственно после ее выхода в свет всеобщее внимание привлекла очередная новинка - шаблоны проектных решений. Вспомните также о захлестнувшей нас тогда волне интереса к вновь появившемуся языку Java. Совершенно очевидно, что требовалось подготовить переработанное издание, в которое были бы включены эти и другие, новые разделы, а некоторые из уже имевшихся, например раздел о технологии CORBA, были бы углублены и дополнены. Еще одной причиной переиздания книги является тот факт, что технология ООП сама по себе также получила значительное развитие. Принятие языка UML в качестве стандарта языка моделирования - лишь один из таких примеров. Возрастающая популярность технологии CORBA при использовании в разнообразных бизнес-приложениях - еще один признак того, что распределенная объектная технология уже достаточно развита и достигла необходимой надежности. Само по себе появление новых тем еще не может служить достаточной причиной повторного издания книги, поскольку было выпущено множество других книг, посвященных этим вопросам. Вспомним о громадном количестве книг по языку Java... Однако выпуск второго переработанного издания этой книги оправдан, по-моему, тем, что принятый в ней подход к изложению материала ставит ее вне конкуренции. Организованная в виде курса лекций, построенных вокруг так называемых "слайдов", эта книга охватывает широкий спектр вопросов, одни из которых раскрываются глубоко, а другие - несколько поверхностно. С точки зрения процесса обучения преимущество такого подхода состоит в том, что в распоряжение преподавателя предоставляется сразу весь необходимый учебный материал, включая слайды, предназначенные для демонстрации в аудитории. К тому же читателю слайды предоставляют своеобразный общий обзор излагаемого материала, что способствует его пониманию и запоминанию. Наконец, еще один, более личный, мотив для выпуска переработанного издания этой книги состоит в том, что я накопил новый опыт как преподаватель и исследователь в области ООП. Я даже могу сказать, что мои представления об ООП созрели для перехода в новое качество. В частности, ориентируясь на несколько парадигм, моя группа создала объектно-ориентированную интегрированную среду разработки, о которой упоминалось в главе 12 первого издания. Она нашла применение, например, в реализации бизнес-процессов и ускоренной коллективной разработке в среде Web. Хотя я и не намерен подробно развивать в книге данную тему, она послужит основой для ряда примеров. Особенности книги
Для кого предназначена книгаЭта книга предназначена, в первую очередь, для академического сообщества и специалистов в области информационных технологий (ИТ), интересующихся теоретическими проблемами. Однако, поскольку я все больше и больше подключаюсь к совместным исследованиям с деловыми партнерами и к разработке неакадемических проектов, в книгу добавлены примеры, имеющие более прямое отношение к применению информационных технологий в бизнесе. В частности, в книге содержится раздел, посвященный применению объектно-ориентированного моделирования для реализации бизнес-процессов, и раздел о трехмерной визуализации бизнес-данных с использованием объектной технологии. Настоящую книгу можно использовать как основной учебник в курсе ООП или же как справочное пособие. Она может оказаться полезной следующим категориям читателей:
Разумеется, это не означает, что исключаются прочие категории читателей. Например, научных работников в этой книге может заинтересовать ряд фундаментальных вопросов. Программисты-практики смогут извлечь пользу из практических советов и примеров программ на языках Java и C++. Читателя может также заинтересовать сжатое изложение уже известного ему материала и множество ссылок на другие работы, чаще всего - фундаментальные. Книга по замыслу автора должна быть самодостаточной. Впрочем, читателю необходимо иметь некоторый запас базовых знаний (как минимум, по нескольким языкам программирования и структурам данных). Для полного понимания глав, касающихся фундаментальных вопросов и формальных аспектов, читатель должен также обладать некоторыми знаниями из области математической логики. Структура книгиКнига делится на четыре части. В каждой части относящиеся к объектно-ориентированному программированию вопросы рассматриваются с различных точек зрения, а именно: с точки зрения проектирования и разработки программ, с точки зрения разработки языков и систем программирования, с точки зрения абстрактных типов данных и полиморфизма и, наконец, с точки зрения приложений и интегрированных сред разработки.
В приложениях содержится краткое описание языков Smalltalk, Eiffel, C++, Java и языка распределенного логического программирования DPL. Кроме того, в них приводятся обзоры языков UML и CORBA IDL, а также краткое руководство и рекомендации по программированию CORBA-приложений небольшого и среднего размеров. Рекомендуемый порядок чтенияДля тех, кто разрабатывает учебные курсы по объектно-ориентированному программированию, предлагается на выбор несколько порядков чтения книги, схематично показанных ниже. Дополнительно указаны разделы, в которых материал представлен более глубоко.
Цикл программирование, состоящий из глав 2, 4, 5 и 12, может быть дополнен материалом приложений и глав 6 и 11. Цикл разработка программ, состоящий из глав 1, 3, 4 и 11, при необходимости может быть дополнен материалом теоретического цикла в соответствии со схемой. Цикл теоретических основ, состоящий из глав 8-10, может понадобиться, чтобы дополнить более общей информацией о концепциях ООП материал, приведенный в других циклах. Отличия от первого изданияДля ясности выше я отметил звездочками главы, претерпевшие существенные изменения. Одно дело - добавлять в книгу новые разделы, и совсем другое - исключать старые. И все же я решил выбросить отдельные главы о языке C++ (первоначально глава 2), проблемах разработки программного обеспечения (глава 4), параллелизме в C++ (глава 6), механизмах сборки сложных комплексов (глава 7), библиотеках программ (глава 11) и гипермедиа (глава 12). Кое-что из этого материала, например часть содержимого глав о гипермедиа (12), механизмах сборки (7) и проблемах разработки программ (4), используется в других местах книги. Ту информацию, которая либо устарела, либо плохо подходит для занятий в аудитории, я посчитал предпочтительным просто исключить, а освободившееся место заполнить другими темами. Предпосылки и мотивы написания книгиМой собственный интерес к объектно-ориентированным языкам и объектно-ориентированной технологии программирования начался с исследований языка DPL - языка, объединяющего логическое программирование, объектно-ориентированные функции и параллелизм [Элиенс, 1992]. Подбирая материал для курса по объектно-ориентированному программированию, я не смог найти книгу, в которой уделялось бы достаточное внимание фундаментальным вопросам и формальным аспектам. Большинство книг было написано с такой точки зрения на ООП, которая не вполне подходила для моих целей. То, что было нужно мне, можно было в какой-то мере найти лишь в научных публикациях. Поэтому я построил свой курс ООП, исходя из материала небольшого числа публикаций и выбрав для этого только те статьи, которые, по моему мнению, могли бы считаться вехами в истории компьютерных наук и которые известны благодаря тому, что в них впервые вводятся какие-либо важные понятия или идеи. Несомненный недостаток лекционного курса, основанного на материале статей, состоит в Идея разместить текстовый материал книги вокруг наглядного материала (представленного в виде слайдов) возникла у меня сама собой, в процессе разбора накопившейся коллекции слайдов. Она была продиктована желанием представить материал в компактной форме, характерной для слайдов. Выбор материала отражает мои личные вкусы. Я предпочитаю фундаментальные работы, т.е. публикации, в которых основное внимание уделяется основополагающим понятиям, а не разбору практических приложений. На выбор материала также повлиял мой интерес к распределенным системам гипермедиа, Web и, в какой-то мере, мои исследования по распределенному логическому программированию. Хотя книга и не посвящена специально языковым конструктам, вопросы моделирования, как и фундаментальные вопросы, обычно соотнесены в ней с существующими или хотя бы мыслимыми языковыми конструктами и (где это возможно) проиллюстрированы примерами работоспособных программ. Выбор Java в качестве основного языка для представляемых фрагментов программ и примеров объясняется его популярностью. Представление других примеров на языке C++ отражает мою уверенность в том, что C++ следует по-прежнему считать полноценным языком объектно-ориентированного программирования. Однако я уверен также в том, что в недалеком будущем подходы с ориентацией на несколько парадигм, расширяющие языки Java и C++, будут играть все более важную роль. Принятый в этой книге подход можно считать абстрактным в том смысле, что основное внимание уделяется концептуальным вопросам, а не частным деталям какого-либо проектного решения или языка программирования. Однажды дискуссия со студентами натолкнула меня на мысль посмотреть в словаре значение английского слова abstract, где, к своему изумлению, я узнал, что одно из его значений - красть, завладевать нечестным путем. Я с улыбкой отметил про себя, что это заставляет по-новому взглянуть на абстрактные типы данных. Более глубокое размышление заставило меня лучше понять, насколько изложенные в этой книге идеи обязаны идеям, первоначально разработанным другими. Мое более абстрактное изложение этих идей вызвано не желанием присвоить их нечестным путем, а лишь стремлением воздать этим идеям и их авторам ту дань уважения, которую они заслуживают, поместив их в контекст, сочетающий теоретические аспекты объектно-ориентированного подхода с практическими. В качестве одного из значений прилагательного абстрактный словар Наконец, излагая материал, я всегда стремился оставаться как можно более объективным. Мои личные суждения скорее призваны стать предметом дискуссии, а не претендовать на роль окончательного ответа. ИнформацияЭлектронную версию оригинального издания этой книги (на английском языке) можно найти в Web по следующему адресу. http://www.cs.vu.nl/~eliens/online/oo С любыми вопросами или комментариями вы можете обратиться к автору по электронной почте (eliens@cs.vu.nl) или по обычной почте (Dr. A. Eliens, Vrije Universiteit, Faculty of Sciences, Division of Mathematics and Computer Science, De Boelelaan 1081, 1081 HV Amsterdam, The Netherlands). БлагодарностиПри написании этой книги мне помогли энтузиазм и здоровая критика со стороны многих студентов и коллег. В последние годы это были мои аспиранты Якко ван Оссенбрюгген (Jacco van Ossenbruggen), Бастиан Шенхаге (Bastiaan Schonhage) и Мартийн ван Велие (Martijn van Welie). Я благодарен им за советы, безжалостную критику и непреодолимое стремление к логической стройности. Кое-что для этой книги было взято из наших совместных работ. Материал по идиоме "дескриптор-тело" в главе 2 принадлежит Якко ван Оссенбрюггену. Приложение для рабочих групп в главе 6 написано Джоном Касперсом (John Caspers). Разделом по архитектурным стилям в главе 7 я обязан Бастиану Шенхаге. Главы 11 и 12 создавались в тесном сотрудничестве с Якко ван Оссенбрюггеном, Бастианом Шенхаге, Мартийном ван Велие, Франком Ниссинком (Frank Niessink), Дирком Болиером (Dirk Bolier), Сэмом Мегенсом (Sam Megens) и Полом Нэшем (Paul Nash). Я также выражаю благодарность своему коллеге Гансу де Бруину (Hans de Bruin) за предоставленный им материал по архитектурам программ; Тилю Чену (Tiel Chang), главному менеджеру групп ASZ Research and Development и ASZ/SanFrancisco, в состав которых входят Арне Бултман (Arne Bultman), Йорис Куиперс (Joris Kuipers), Ард ван дер Шеер (Ard van der Scheer), Ремко ван де Воестийне (Remco van de Woestijne) и Ирмен де Йонг (Irmen de Jong), за представленный в их работах необычный взгляд на Кроме того, я обязан поблагодарить за выпуск первого издания (в произвольном порядке) Ганса ван Вилета (Hans van Vilet), Генри Бала (Henri Bal), Дика Грюна (Dick Grun), Сеес Виссер (Cees Visser), Ирэ Пол (Ira Pohl), Джона Касперса (John Caspers) и Маттийса ван Доорна (Mattijs van Doorn). Я также выражаю признательность Крису Доллину (Chris Dollin) за подробный конструктивный комментарий к первому изданию. Наконец, я благодарен за помощь моим редакторам Салли Мортимор (Sally Mortimore), которая предоставила мне контракт на второе издание, Кейту Мансфилду (Keith Mansfield), занявшему место Салли, когда она ушла со своего поста, Элисону Биртвеллу (Alison Birtwell) и Карен Сазерленд (Karen Sutherland). Я благодарен Хедвигу ван Лиру (Hedwig van Lier) из издательства Pearson Education за предоставленные мне замечательные книги, Джулии Найт (Julie Knoght), которая помогала мне на этапе производства, Карен Мосман (Karen Mosman), с которой я в нескольких Web-конференциях обсуждал возможность выпуска электронной вер Короткие музыкальные фразы, использованные в начале каждой главы, взяты из "Альбома Анны Магдалены Бах". Хотя свой вклад в "Альбом" внесли и другие композиторы, выбранные фразы взяты из фрагментов, созданных самим Йоганном Себастьяном Бахом и первоначально предназначенных для начинающих музыкантов. Несмотря на кажущуюся простоту, даже опытные пианисты признают, что их нелегко сыграть правильно, хотя они и включены в стандартный набор ученических упражнений. В некотором отношении эта ситуация напоминает проблему обучения объектно-ориентированному программированию. Понятия, лежащие в основе объектно-ориентированного программирования, могут, на первый взгляд, показаться обманчиво простыми (и вовсе не требующими ни столь сложного языка, как C++, ни теоретико-типового анализа). Однако при разработке объектно-ориентированных моделей и приложений остаются некоторые вопросы принципиальной важности, на которые мы еще не знаем точных ответов, столь сложные, что даже для их частичного решения могут потребоваться прос Антон Элиенс (Anton Eliens) Январь 2000 Сообщите нам свое мнениеВы, читатель этой книги, - и есть главный ее критик и комментатор. Мы ценим ваше мнение и хотим знать, что было сделано нами правильно, что можно было сделать лучше и что еще вы хотели бы увидеть изданным нами. Нам интересны и другие замечания в наш адрес. Мы ждем ваших комментариев и надеемся на них. Вы можете прислать электронное письмо или просто посетить наш Web-узел, оставив свои замечания. Одним словом, любым удобным для вас способом дайте нам знать, нравится ли вам эта книга, а также выскажите свое мнение о том, как сделать наши книги более подходящими для вас. Отправляя письмо или сообщение, не забудьте указать название книги и ее авторов, а также свой факс или номер телефона. Мы внимательно ознакомимся с вашим мнением и обязательно учтем его при отборе и подготовке к изданию новых книг. E-mail:info@williamspublishing.com |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||