netlib.narod.ru< Назад | Оглавление | Далее >

Модульное программирование

Модульное программирование является фундаментом многих используемых сегодня техник программирования, включая C++ и COM. В модульном программировании создаются полностью самодостаточные кодовые модули; им не требуется внешняя поддержка и, в большинстве случаев, они могут работать на различных платформах.

Представьте себе истинно модульную систему программирования в которой написанная вами программа будет работать на всех существующих компьютерах! Вам, вероятно, не придется долго ждать ее появления (возможно, она уже создана). Вы можете думать о модулях программ как о классах C++. Они содержат собственные переменные и функции. Если код написан правильно, классу не требуется внешняя поддержка.

Взяв ваш класс, любое приложение может использовать предоставляемые им возможности, зная только как правильно обращаться к функциям (через использование прототипов функций). Для вызова функции класса достаточно создать экземпляр класса и обратиться к требуемой функции:

cClass MyClass;      // Создание экземпляра класса
MyClass.Function1(); // Вызов функции класса

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

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

class cCounter
{
    private:
        DWORD m_dwCount;
    public:
        cCounter()
            { m_dwCount = 0; }
        BOOL Increment()
            { m_dwCount++; return TRUE; }
        BOOL Get(DWORD *Var)
            { *Var = m_dwCount; return TRUE; }
        BOOL Set(DWORD Var)
            { m_dwCount = Var; return TRUE; }
};

В объявлении класса cCounter указано, что переменная m_dwCount является закрытой. Это значит, что даже наследуемые классы не имеют доступа к ней. Остальные функции являются самодокументируемыми. Несколько примечаний требуется только для функции Get, которая получает указатель на переменную типа DWORD. Функция записывает текущее значение счетчика в указанную переменную и возвращает TRUE (как все функции класса cCounter).

Это очень простой пример модульного программирования. Более сложным примером является DirectX, который полностью модульный. Если вы хотите использовать только один из компонентов DirectX, скажем DirectSound, то вам необходимо включить только относящиеся к DirectSound объекты. DirectSound не зависит от других компонентов DirectX.

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


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz