Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Стандартная библиотека, библиотеки MFC и ATL
Зачем рекомендуется использовать универсальные средства стандартной библиотеки вместо разработки своих узко-специализированных и, возможно, более эффективных? Во-первых, использование программистом стандартных контейнеров и алгоритмов в своей программе делает ее более понятной для другого программиста, вынужденного разбираться в «чужом» коде. Во-вторых, средства стандартной библиотеки хорошо протестированы и вероятность наличия в них ошибок достаточно мала. В-третьих, эти средства разработаны высоко профессиональными специалистами и в силу этого они достаточно эффективны. Состав стандартной библиотеки В соответствии со стандартом, любая полная реализация языка С++ должна включать стандартную библиотеку. Помимо такой библиотеки большинство реализаций предоставляют и другие библиотеки, в частности, библиотеки поддержки графического интерфейса пользователя (GUI –Graphical User Interface). Например, в состав среды Visual C++ входят библиотека базовых классов (MFC – Microsoft Foundation Classes) и библиотека шаблонных классов (ATL – Active Template Library). Для многих заголовочных файлов стандартной библиотеки языка С <X.h> имеется соответствующий стандартный заголовочный файл С++ <cX>. Например, директива #include <cstdio> дает тот же результат, что и #include <stdio.h>. Этот результат становится очевидным, если посмотреть на содержимое заголовочного файла cstdio (он не имеет расширения): // cstdio standard header #if _MSC_VER > 1000 #pragma once #endif #ifndef _CSTDIO_ #define _CSTDIO_ #ifdef _STD_USING #undef _STD_USING #include <stdio.h> #define _STD_USING #else #include <stdio.h> #endif /* _STD_USING */ #endif /* _CSTDIO_ */
В табл. 1 перечислены заголовочные файлы стандартной библиотеки языка C++. Часть из этих файлов, а именно 13, входят в состав стандартной библиотеки шаблонов (STL – Standard Template Library). Файлы сгруппированы по категориям [4].
Таблица 1 Состав стандартной библиотеки С++
В качестве основного литературного источника по стандартной библиотеке я бы рекомендовал работу [4], а, в частности, по библиотеке стандартных шаблонов работу [5], одного из авторов которой – Степанова – считают чуть не единственным разработчиком этой библиотеки. Работа [6] также содержит описание, с примерами, библиотеки шаблонов и алгоритмов. Библиотеки MFC и ATL Эти две библиотеки являются разработкой Microsoft и входят в состав Microsoft Visual Studio. Microsoft Foundation Class Library (MFC) предназначена для разработки каркаса приложения Windows. Собираясь разрабатывать для Windows, надо сначала выбрать среду программирования. И если Вы уже отвергли варианты, не связанные с языком С (скажем, Microsoft Visual Basic или Borland Delphi), у Вас все же остается как несколько вариантов: · программировать на С, применяя функции Win32 API; · написать на С++ свою библиотеку классов, использующую Win32; · задействовать каркас приложений на базе MFC; · воспользоваться другим каркасом приложений, например, Windows Library (OWL) фирмы Borland (Inprise).
Если Вы начинаете с нуля, любой из этих вариантов потребует учиться очень и очень многому. Если Вы уже умеете программировать в Win32, Вам все равно придется осваивать библиотеку MFC. Почему? Потому что почти сразу после появления MFC она стала доминирующей библиотекой классов для Windows. Даже если Вы знакомы с MFC, не помешает еще раз вспомнить основные особенности программного продукта. Библиотека MFC — API-интерфейс Windows на C++. Если Вы согласны с тем, что язык C++ сегодня является стандартом для разработки серьезных приложений, то должны признать, что для Windows естественен программный интерфейс на C++. Кто напишет интерфейс лучше, чем сама корпорация Microsoft, создавшая Windows? И этот интерфейс — библиотека MFC. «Каркасные» приложения имеют стандартную структуру. Любой программист, приступающий к крупному проекту, старается выработать для себя какую-то структуру кода. Но проблема заключается в том, что эта структура у каждого программиста своя, и новому участнику команды трудно приспособиться к ней. Каркас приложений на базе MFC предлагает свою структуру, отработанную на многих проектах и опробованную в разных программных средах. Создав Windows-программу на базе библиотеки MFC, можно без всяких опасений скрыться от всех где-нибудь на Карибских островах — тем, кто остался дома, будет легко поддерживать и совершенствовать вашу программу. Не подумайте только, что структура библиотеки MFC «сковывает» программы. При работе с MFC можно в любой момент вызвать любую Win32-функцию, т. е. в полной мере использовать возможности и преимущества Windows. Microsoft Active Template Library (ATL) представляет собой средство построения элементов управления ActiveX, отдельное от MFC. Вообще говоря, писать элементы ActiveX можно как на MFC, так и на ATL, но ATL-элементы меньше по объему кода и быстрее загружаются по Интернету. Распространенной ошибкой является мнение о том, что MFC и ATL исключают друг друга. Это совершенно не так! На самом деле, очень легко создать СОМ-объекты, использующие MFC, на основе ATL. Единственная проблема состоит в том, что поскольку многие разработчики выбирают ATL за то, что она позволяет получать код малого размера, постольку использование MFC, которая богата возможностями и является «тяжелой», выглядит противоречащим причине использования ATL. Хотя это может быть важно для некоторых разработчиков, но вовсе не делает ATL и MFC взаимоисключающими.
Коллекции Обзор коллекций MFC (См. раздел MSDN «Collections topics»)
Библиотека MFC предоставляет коллекцию классов для манипулирования (обработки) групп объектов различных типов. Эти классы подразделяются на две основные группы по признаку происхождения: · коллекции классов, созданные на основе шаблонов; · коллекции классов, построенные не на шаблонах.
Любой класс коллекция характеризуется своей «формой» (shape) и типом элементов. Под формой класса понимается способ организации и хранения элементов коллекции. MFC предоставляет три основные формы коллекций: · списки (lists); · массивы (arrays); · ассоциативные массивы (maps), называемые иногда словарями (dictionaries).
Вы можете выбирать наиболее подходящую форму коллекции для решения своей конкретной задачи. Кратко эти формы коллекций можно описать так.
Списки. Классы списков предоставляют упорядоченную, неиндексированную совокупность элементов, реализованную в форме двусвязного списка. Список имеет «голову» (head) и «хвост» (tail) и добавление или удаление элементов с головы или хвоста, равно как и вставка или удаление элементов из середины могут быть выполнены очень быстро. Массивы. Эти классы обеспечивают индексированную, упорядоченную совокупность элементов, число элементов которой можно динамически изменять. Ассоциативные массивы. Эти массивы представляют собой совокупность пар элементов: ключ и значение. Другими словами, элементы такого массива индексируются уникальными ключами.
Основанные на шаблонах коллекции. Использование какого-либо класса MFC, построенного на основе шаблона, представляет собой простейший и типо-безопасный (type-safe) способ манипулирования объектами любого типа. Основанные на шаблонах коллекции приведены в табл. 1. Таблица 1. Шаблонные классы коллекций
Нешаблонные классы коллекций. Эти коллекции (табл. 2) считаются устаревшими и их не рекомендуется использовать в новых разработках.
Таблица 2. Нешаблонные классы коллекций
Выбор коллекции. При выборе формы коллекции надо учитывать следующие факторы: · свойства коллекции: упорядоченность, индексирование, эффективность; · основан ли класс на шаблоне; · имеет ли коллекция встроенную функцию сериализации Serialize(); · имеет ли коллекция встроенную функцию Dump() (вывода для отладки); · является ли коллекция типо-безопасной.
В табл.3 приведены свойства классов коллекций. Во втором и третьем столбцах таблицы приведен признак упорядоченности элементов коллекций и возможность индексирования. Термин «упорядоченность» не означает, что элементы коллекции отсортированы; он означает только то, что порядок размещения элементов коллекции соответствует порядку их добавления или вставки. Термин «индексированность» означает возможность получения доступа к элементам коллекции по целочисленному индексу (с нуля), как в обычном массиве. Столбцы 4 и 5 характеризуют эффективность использования коллекции. В тех задачах, для которых характерны многочисленные операции вставки элементов в коллекции, скорость вставки является определяющим фактором, в то время как для других задач скрорость поиска более важна. Наконец, в шестом столбце указано, могут ли встречаться в коллекции элементы с одинаковыми значениями. Таблица 3. Свойства коллекций
В табл.4 собраны характеристики классов коллекций MFC, которые должны помочь при выборе конкретного класса для конкретной задачи. На Ваш выбор могут влиять такие характеристики классов, как наличие шаблона, наличие встроенных механизмов сериализации и дампинга, типо-безопасность (type-safe). Термин типо-безопасность означает наличие гарантии того, что помещаемый в коллекцию элемент или извлекаемый из нее действительно имеет ожидаемый тип. Таблица 3. Свойства коллекций
Примечания к табл. 1. Для сериализации достаточно просто вызвать функцию Serialize() для элемента коллекции, а для дампига – функцию Dump(). Вы не можете просто использовать оператор ar << collObj; для сериализации или оператор dс << collObj; для дампинга. 2. Наличие или отсутствие сериализации зависит от типа элементов коллекции. Например, если типизированный массив указателей основан на CObArray, то он сериализуем; если он основан на CPtrArray – то нет. Как правило, классы с “Ptr” не сериализуемы. 3. Если в этом столбце указано «Да», то нешаблонный класс коллекции является типо-безопасным, если используется по прямому назначению. Например, если Вы сохраняете байты в CByteArray, то массив является типо-безопасным. Однако, если тот же массив Вы используете для хранения символов, его типо-безопасность сомнительна.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2018-04-12; просмотров: 769. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |