Анимация
JavaScript


Главная  Библионтека 

0 1 [ 2 ] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105

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

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

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

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

Аудитория

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



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

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

От читателя требуется хорощее знание языка С++ и желание знать его еще лучще. Следует также иметь представление о шаблонах вообще и стандартной библиотеке шаблонов (STL) в частности.

Знание основных шаблонов проектирования (Гамма и др., 1995) желательно, но не обязательно. Идиомы и шаблоны, применяемые в книге, детально описаны. Однако эта книга посвящена другой теме - в ней не делается попыток максимально обобщить шаблоны проектирования. Поскольку они рассматриваются с точки зрения прагматичного создателя библиотеки, даже читатель, интересующийся в основном шаблонами проектирования, найдет для себя много нового, если захочет.

Библиотека Loki

В книге описывается реальная библиотека Loki, написанная на языке С++. Локи (Loki) - это бог остроумия в скандинавской мифологии, и автор надеется, что оригинальность и гибкость этой библиотеки соответствует названию. Все элементы библиотеки находятся в пространстве имен Loki. В примерах программ пространство имен не указывается, поскольку это увеличило бы размер кода и затемнило его содержание. Библиотеку Loki можно свободно загрузить с Web-страницы http: www.awl.com/cseng/ titles/0-201-70431-5.

За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме. Я реализовал и протестировал библиотеку Loki с помощью компиляторов CodeWarrior Pro 6.0 компании Metrowerks и Comeau С++ 4.2.38 (оба компилятора работали под управлением системы Windows). Похоже, что компилятор KAI С++ также не должен иметь с этой библиотекой никаких проблем. Как только поставщики распространят новые, усовершенствованные версии компиляторов, вы сможете эксплуатировать библиотеку Loki полностью.

Код библиотеки Loki, а также примеры, приведенные в книге, используют популярный стандарт кодирования, предложенный Хербом Сатгером (Herb Sutter). Я уверен, что вы легко его поймете. Этот стандарт сводится к следующему.

• Классы, функции и перечислимые типы выглядят так: LikeThis.

• Переменные и перечислимые значения выглядят так: likeThis.

• Переменные-члены выглядят так: likeThis .



• Шаблонные параметры объявляются с ключевым словом class, если они представляют собой тип, определяемый пользователем (user-defined type), и с ключевым словом typename, если тип является простым (primitive).

Структура книги

Книга состоит из двух основных частей: способы программирования и компоненты. Часть I (главы 1-4) описывает способы программирования на языке С++, используемые в обобщенном программировании и, в частности, для создания обобщенных компонентов. Представлено множество особенностей и способов программирования на языке С++: проектирование, основанное на анализе поведения, частичная специализация щаблонов, списки типов, локальные классы и т.д. Эту часть можно читать последовательно, а затем возвращаться к ней за конкретной информацией.

Часть II организована так же, как и часть I. В ней рассматривается реализация обобщенных компонентов. Здесь нет искусственных примеров. Все описанные компонегггы используются в реальных приложениях. Проблемы, ежедневно встающие перед профам-мистами на языке С-Ы-, например, интеллектуальные указатели, фабрики объектов и функторы, обсуждаются глубоко и рещаются в общем виде. Реализации, приведенные в тексте, ориентируются на основные потребности профаммистов и предназначены для ре-щения фундаментальных задач. Вместо подробного объяснения, что именно делает тот или иной фрагмент кода, в книге последовательно применяется следующий подход: сначала обсуждается задача, а затем выбирается и реализуется метод ее решения.

Глава 1 посвящена классам сфатегий - идиомам языка С-Ы-, позволяющим создавать гибкие шаблоны.

В главе 2 обсуждаются основные способы профаммирования на языке С-Ы-, относящиеся к обобщенному профаммированию.

Списки типов, представляющие собой мощные сфуктуры для манипуляции с типами, реализуются в главе 3.

В главе 4 описывается важный вспомогательный инсфумент - механизм распределения памяти для небольших объектов (small-object allocator).

Обобщенные функторы, использующие шаблон проектирования Command, обсуждаются в главе 5.

В главе 6 описываются синглтоны.

Глава 7 посвящена интеллектуальным указателям.

В главе 8 описываются обобщенные фабрики объектов.

Глава 9 посвящена шаблону проектирования Abstract Factory и его реализации. В главе 10 в общем виде реализовано несколько вариантов шаблона проектирования visitor.

Механизмы мультиметодов (multimethod engines), представляющие собой решения, ориентированные на использование готовых компонентов, реализованы в главе 11.



0 1 [ 2 ] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105