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

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

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

Следует подчеркнуть, что этой книги, как и большинства моих профессиональных успехов, не было бы без Скотта Мейерса. С момента нашей встречи на Всемирном конгрессе по С++ (С++ Worlds Congress) в 1998 году Скотт постоянно помогал мне. Он первым с энтузиазмом поддержал мои ранние идеи. Скотт познакомил меня с Джоном Влиссидесом, положив начало нашему сотрудничеству. Он посоветовал Хербу Саттеру сделать меня обозревателем журнала "С++ Report" и привел в издательство Addison-Wesley, практически вынудив начать эту книгу. В конце концов Скотт своими советами и замечаниями помогал мне все время в процессе работы над книгой, разделяя со мной творческие муки.

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

Благодарю П. Дж. Плагера (Р. J. Plaeger) и Марка Брианда (Mark Briand), вдохновивших меня писать статьи в журнал "C/C++ Users Journal" в то время, когда я считал обозревателей этого журнала инопланетянами.

Я очень признателен моему редактору Дебби Лафферти (Debbie Lafferty) за ее постоянную поддержку и полезные советы.

Мои коллеги по компании RealNetworks, особенно Борис Джеркуница (Boris Jerkunica) и Джим Кнаак (Jim Кпаак), очень помогли мне, создав атмосферу свободомыслия, соперничества и стремления к вершинам мастерства. Я очень благодарен им за это.

Выражаю свою признательность всем участникам форумов comp.lang.c++.moderated и comp.std.c++.Usenet. Эти люди помогли мне лучше понять язык С++.

Я хотел бы выразить свою благодарность рецензентам моей рукописи: Михаилу Анто-неску (Mihail Antonecku), Бобу Арчеру (Bob Archer) (моему самому строгому рецензенту), Аллену Бродману (Allen Broadman), Ионату Бурете (lonut Burete), Мирель Чирита (Mirel Chirita), Стиву Кламагу (Steve Clamage), Джеймсу Коплину (James Coplien), Дугу Хазену (Doug Hazen), Келвину Хенни (Kelvin Henney), Джону Хикину (John Hickin), Говарду Хиннанту (Howard Hinnant), Сорину Джиану (Sorin Jianu), Золтану Кормошу (Zoltan Komios), Джеймсу Кайперу (James Kuyper), Лизе Липпинкот (Lisa Lippincott), Джонатану Лундквисту (Jonathan Lundquist), Петру Маргиняну (Petru Maiginean), Патрику Мак-Киллену (Patrick McKillen), Флорину Михаилу (Florin Mihaila), Сорину Опря (Sorin Oprea), Джону Поттеру (John Potter), Адриану Рапитяну (Adrian Rapiteanu), Монике Рапитяну (Monica Rapiteanu), Брайану Стентону (Brian Stenton), Адриану Стефле (Adrian Steflea), Хербу Саттеру (Herb Sutter), Джону Торйо (John Torjo), Флорину Трофину (Florin Trofm) и Кристи Власяну (Cristi Vlaseanu). Все они внесли свой вклад в улучшение рукописи. Без них мне не удалось бы сделать и половины работы.

Спасибо Грегу Комо (Greg Comeau) за то, что он предоставил в мое распоряжение превосходный компилятор.

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



Часть I

Методы



Разработка классов на основе стратегий

в этой главе описываются понятия стратегии (policy) и классов стратегий (policy classes), ифающие важную роль в создании библиотек, эффективно обеспечивающих повторное использование кода. Библиотека Loki была задумана именно такой. Кратко говоря, проектирование, основанное на стратегиях, позволяет создавать класс со сложным поведением из множества маленьких классов (называемых стратегиями), каждый из которых отвечает только за один функциональный или структурный аспект. Как следует из ее названия, стратегия устанавливает интерфейс, соответствующий определенному свойству. Стратегии можно реализовывать по-разному, поскольку их интерфейсы целиком находятся в компетенции программиста.

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

Стратегии используются во многих главах этой книги. Обобщенный шаблонный класс SingletonHolder (глава 6) с помощью стратегий управляет длительностью функционирования и обеспечивает безопасность работы в многопоточной среде. Класс SmartPtr (глава 7) почти целиком сконструирован из стратегий. Механизм двойной диспетчеризации (double-dispatch engine), описанный в главе 11, использует стратегии для выбора разных компромиссов. Реализация обобщенной "абстрактной фабрики" (Gamma et al., 1995), приведенная в главе 9, применяет стратегию для выбора метода создания объектов.

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

1.1. Разнообразие методов разработки программного обеспечения

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



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