Анимация
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

Предисловие Джона Влиссидеса

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

Обобщенные компоненты, созданные Андреем, поднимают уровень абстракции настолько высоко, что язык С++ приобретает черты языка спецификаций проектирования (design specification language). При этом в отличие от узкоспециализированных языков проектирования язык С++ сохраняет всю свою мощь и выразительность. Андрей продемонстрировал, как профаммируются концепции проектирования: синглто-ны (singletones), инспекторы (visitors), заместители (proxies), абстрактные фабрики (abstract factories) и т.п. Можно даже настраивать готовые компоненты с помощью шаблонных параметров, не расходуя дополнительного машинного времени. Не нужно выбрасывать кучу денег на разработку новых инструментальных средств или изучать тома методологической тарабарщины. Достаточно иметь надежный современный компилятор (и эту книгу).

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

Как было бы хорошо получить все теоретические преимущества автоматической генерации кода - скорость, легкость реализации, сокращенную избыточность, меньшее количество ошибок, одновременно избежав его практических недостатков! Именно это обещает подход, предложенный Андреем. Обобщенные компоненты (generic components) реализуют удачные схемы в виде удобных для использования, поддающихся смешиванию и подходящих для решения задачи шаблонов (mixable-and-matchable templates). Эти шаблоны делают практически то же, что и генераторы кода: создают стандартные фрагменты кода для дальнейшей обработки с помощью компилятора. Отличие заключается в том, что шаблоны позволяют сделать это, не выходя за рамки языка С++. В результате происходит полная интеграция полученного кода с исходным кодом приложения. При этом остается возможность использовать всю мощь языка, расширяя классы, замещая методы и подгоняя шаблоны под свои требования.

Некоторые из описанных приемов профаммирования довольно трудно понять, особенно метапрограммирование шаблонов, рассмотренное в главе 3. Однако, освоив



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

Джон Влиссидес (John VHssides)



Предисловие

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

Представьте себе такую картину. Вы приходите с производственного совещания, неся в руках фуду диафамм, на которых нацарапаны ваши комментарии. Окей, говорите вы, тип события, передаваемого от одного объекта к другому, в любом случае не char. Это- тип int. И вы изменяете одну строку в вашей профамме. Интеллектуальный указатель на объект класса widget работает слишком медленно, его следует сделать неконтролируемым. И вы изменяете еще одну строку. Фабрика объектов должна поддерживать новый класс Gadget, добавленный соседним отделом. И вы снова изменяете одну строку.

Вы закончили разработку своей профаммы. Компилируете. Связываете. Готово.

Отлично! Не кажется ли вам, что в этом сценарии что-то не так? Намного правдоподобнее выглядит следующее развитие событий. Вы приходите с производственного совещания взмыленный, поскольку вам предстоит выполнить кучу работы. Вы запускаете глобальный поиск. Удаляете фрагмент. Добавляете фрагмент. Делаете ошибки. Исправляете ошибки... В этом и заключается работа профаммиста, не так ли? Хотя эта книга и не гарантирует вам исполнение первого сценария, она поможет вам пройти несколько шагов в этом направлении. Здесь предпринята попытка представить язык С++ в новом качестве - языка для разработки архитектуры профаммного обеспечения.

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

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

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



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