
- •220300 - Системы автоматизированного проектирования
- •Тема 2. Технологии программирования
- •Тема 2. Технология разработки крупных приложений
- •Структуры
- •Структуры и функции
- •Массивы структур
- •Поиск в массиве структур
- •Вложенность структур
- •Рекурсия
- •Алгоритм быстрой сортировки
- •Массивы структур и бинарные файлы
- •Динамические структуры данных
- •Линейные списки
- •Очереди
- •Контрольная работа
- •Объектно-ориентированное программирование. Классы
- •Конструкторы
- •Перегруженные конструкторы
- •Определение методов класса вне класса
- •Объекты, возвращаемые функцией (методом)
- •Структуры и классы
- •Классы и память
- •Статические данные класса
- •Константные методы
- •Деструкторы
- •Массивы и классы
- •Массивы объектов
- •Строки Строковый тип или стандартный класс string
- •Тип строк AnsiString
- •Перегрузка операций
- •Перегрузка арифметических операций
- •Перегрузка операций сравнения
- •Перегрузка операции приведения типа
- •Преобразования объектов в основные типы и наоборот
- •Преобразование объектов классов в объекты других классов
- •Наследование
- •Конструкторы производного класса
- •Перегрузка функций
- •Иерархия классов
- •Общее и частное наследование. Комбинации доступа
- •Множественное наследование
- •Включение. Классы в классах
- •Виртуальные и дружественные функции
- •Абстрактные классы и чистые виртуальные функции
- •Виртуальные деструкторы
- •Виртуальные базовые классы или устранение неоднозначности при множественном наследовании
- •Дружественные функции
- •Дружественные классы
- •Указатель this
- •Многофайловые программы
- •Распознавание нажатых клавиш
Многофайловые программы
Все программы, которые мы до сих пор разрабатывали, состояли из одного файла. При создании профессиональных программ, отличающихся большим объемом выполняемых операций, прибегают к многофайловой технологии. Причин несколько. Важнейшими из них являются незаменимость библиотек классов, возможность использования принципа разделения работы над проектом на нескольких программистов, а также удобство создания концепции дизайна программ.
При разработке приложений оказывается, что если доступны необходимые библиотеки, то для создания полнофункционального продукта необходим минимум ручной работы по программированию. Одной из часто используемых библиотек классов является Стандартная библиотека С++ (STL). Обычно библиотека классов состоит из двух частей:
общедоступного компонента, называемого интерфейсом (interface) и содержащего объявления классов в заголовочном файле (*.h);
скрытого компонента, называемого реализацией (implementation) и содержащего определения методов в объектном (*.obj) или библиотечном (*.lib) файле.
Программы могут разбиваться на части и из иных соображений, нежели работа с библиотеками классов. Допустим, некий проект разрабатывается группой программистов. Разграничив круг задач, поставленных перед каждым, можно решение каждой задачи выделить в виде отдельного файла. Такой подход позволяет лучше организовывать работу коллектива и более чётко определять взаимодействие частей программы. К тому же, в соответствии с принципами технологии программирования, большие программы разбиваются на части в соответствии с функциональной направленностью.
Рассмотрим пример многофайловой программы. Элементарная многофайловая программа обычно состоит из трёх частей:
заголовочного файла, называемого интерфейсной частью программы и хранящего определение класса с объявленными, но не определёнными методами;
файла реализации, называемого реализационной частью программы и хранящего определения методов;
файла прикладной программы, хранящего главную функцию, предназначенную для осуществления задуманных операций над объектами.
// Заголовочный файл interface.h
#include <iostream>
#include <conio>
using namespace std;
//---------------------------------------------------------------------------
class Int {
private:
int i;
public:
Int() { i=0; }
Int(int d) { i=d; }
void show();
Int operator+(Int& b);
};
//---------------------------------------------------------------------------
// Файл реализации realizacia.cpp
#include "interface.h"
//---------------------------------------------------------------------------
void Int::show() {
cout << i;
}
//---------------------------------------------------------------------------
Int Int::operator+(Int& b) {
return (i+b.i);
}
//---------------------------------------------------------------------------
// Файл прикладной программы programm.cpp
#include "interface.h"
//---------------------------------------------------------------------------
int main() {
Int i1(7), i2(3), res;
res = i1 + i2; cout << "Summa = "; res.show();
getch(); return 0;
}
//---------------------------------------------------------------------------
В ИСР Borland технология создания данного многофайлового проекта выглядит следующим образом:
Создаём модуль для прикладной программы: File/New/Other/Console Wizard ( C++; Console Application). Созданный таким образом Unit.cpp сохраняем как programm.cpp в своей папке.
Создаём заголовочный файл: File/New/Other/Header File. Созданный таким образом File1.h сохраняем сразу в своей папке как interface.h .
Создаём файл реализации: File/New/Other/Cpp File и сохраняем его сразу как realizacia.cpp
Заполняем соответствующим кодом созданные файлы (см. выше), затем сохраняем Save All как, например, mnogoF.bpr. Необходимо помнить, что в файлах реализации и прикладной программы нужно включать написанный вами заголовочный файл (#include "interface.h" ).
Осуществляем компоновку(Project/Build *.bpr) и компиляцию проекта.
Таким образом, межфайловая коммуникация подразумевает, что переменные, функции и объекты определены в одном файле, объявлены в другом, а используются в третьем.