Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП.doc
Скачиваний:
77
Добавлен:
07.03.2016
Размер:
1.78 Mб
Скачать

Розділ 9. Модульні програми (проектування об’єктно-орієнтованого програмування)

9.1 Короткі відомості

Метою вивчення даного розділу є ознайомлення з технікою організації багатомодульних програм. Розглядається розділення класу на визначення і реалізацію, зокрема особливості організації багатомодульних програм з використанням шаблонів. Вивчаються деякі прийоми підвищення незалежності модулів – делегування. Розглядаються простори імен.

Великі програми потрібно розбивати на частини. Окрема частина великої програми називається модулем. У C++ відсутні конструкції для позначення модуля. У новому стандарті визначено поняття одиниці трансляції. Одиниця трансляції – це окремий файл з початковим текстом на C++, який виходить після обробки препроцесором. Розбиття програми на окремі модулі вимагає подальшої збірки. У C++ збірка виконується засобами інтегрованого середовища. У інтегрованому середовищі створюється проект у складі якого перераховуються всі модулі.

Збірка здійснюється одним з двох способів.

  1. Об'єднуються початкові тексти.

  2. Програма збирається з об'єктних модулів; об'єктний модуль – це результат компіляції однієї одиниці трансляції початкового тексту.

У C++ об'єднання початкових текстів робиться за допомогою препроцесора. Недолік – компіляція програми може займати багато часу. Другий спосіб був створений для того, щоб уникнути компіляції всієї програми цілком. Такий спосіб називається роздільною трансляцією. Процес збірки повної програми з об'єктних модулів називається компоновкою, і виконує цю роботу програма-компонувальник, яка входить до складу системи програмування. Ця програма часто називається "лінкером" (від англійського слова linker), що, власне, і має на увазі "складальника". При компоновці в програму збираються не тільки розроблені модулі, але і стандартні. Стандартні модулі не транслюються разом з програмою – вони поставляються разом з системою у вигляді об'єктних модулів і об'єктних бібліотек.

Розділення програм на модулі вимагає узгодження визначень і оголошень в різних одиницях трансляції. У всіх одиницях трансляції мають бути узгоджені оголошення і визначення класів, функцій, змінних і констант, перерахувань, шаблонів і просторів імен.

9.2 Збірка вихідних текстів

Розроблений клас зберігається в окремому файлі ім’я_файлу.срр. Наприклад, реалізацію двостороннього списку можна назвати ім'ям List.срр. Інший модуль-файл з ім'ям main.срр може містити код програми-клієнта, що використовує стек. При створенні проекту засобами інтегрованого середовища файл main.срр має бути єдиним в проекті.

Файл List.cpp повинен включати наступну конструкцію:

#ifndef _LIST // "вартовий" визначений?

#define _LIST // визначення "вартового"

class List

{ //визначення класу

};

#endif /*_LIST */ // кінець #ifndef

Перший рядок може бути записаний по-іншому,

#if !defined(_STACK) // "вартовий" визначений?

що еквівалентно попередньому варіанту. Така послідовність команд препроцесора називається "вартовим" включення і призначена для запобігання повторному включенню вмісту файлу в програму.

Приклад вмісту файлу main.cpp:

#include "List.cpp" // файл з реалізацією стеку

#include <iostream> // системний заголовок

using namespace std; // стандартний простір імен