Сущность технологии COM


Распространение программного обеспечения и язык С++


Для понимания проблем, связанных с использованием C++ как набора компонентов, полезно проследить, как распространялись библиотеки C++ в конце 1980-х годов. Представим себе разработчика библиотек, который создал алгоритм поиска подстрок за время O(1) (то есть время поиска постоянно, а не пропорционально длине строки). Это, как известно, нетривиальная задача. Для того чтобы сделать алгоритм возможно более простым для пользователя, разработчик должен создать класс строк, основанный на алгоритме, который будет быстро передавать текстовые строки (fast text strings) в любую программу клиента. Чтобы сделать это, разработчику необходимо подготовить заголовочный файл, содержащий определение класса:

// faststring.h class FastString { char *m_psz; public: FastString(const char *psz); ~FastString(void); int Length(void) const; // returns # of characters // возвращает число символов int Find(const char *psz) const; // returns offset //возвращает смещение };

После того как класс определен, разработчик должен реализовать его функции-члены в отдельном файле:

// FastString.cpp #include "faststring.h" #include <string.h>

FastString::FastString(const char *psz) : m_psz(new char [strlen(psz) + 1]) { strcpy(m_psz, psz); }

FastString::~FastString(void) { delete[] m_psz; }

int FastString::Length(void) const { return strlen(m_psz); }

int FastString::Find(const char *psz) const { //O(1) lookup code deleted for> clarity // код поиска 0(1) удален для ясности }

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




Начало  Назад  Вперед