Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lektsii_OP / T12.doc
Скачиваний:
96
Добавлен:
17.03.2016
Размер:
272.38 Кб
Скачать

ПЛАН

ОРГАНІЗАЦІЯ БАГАТОФАЙЛОВИХ ПРОЕКТІВ 1

Багатофайлові проекти 1

Міжфайлова взаємодія 2

Міжфайлові змінні 2

Міжфайлові функції 4

Організація багатофайлових програм 5

Багатофайлові проекти 5

Бібліотеки визначень 6

Заголовні файли 7

Бібліотека стандартних шаблонів STL 11

Область дії та простір імен 14

Організація багатофайлових проектів Багатофайлові проекти

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

В невеликих за розміром і нескладних програмах головну програму і всі підпрограми можна записувати в одному програмному файлі. Однак, якщо програма велика і складна, то доцільно розділити її на декілька програмних файлів (модулів), код кожного з яких можна створювати і компілювати автономно. Такий підхід отримав назву модульного програмування.

Відтрансльовані окремо програмні файли потім об'єднуються (збираються) в єдиний виконуваний файл (.exe-файл). Компонування виконуваного коду програми — задача редактора зв'язків системи програмування (компонувальника).

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

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

Інколи виникає потреба у використанні в різних програмах однакових типів або функцій. В таких ситуаціях є сенс винести оголошення цих типів або функцій до окремого файла і підключати його за потреби до різних програм.

Міжфайлова взаємодія Міжфайлові змінні

У багатофайлових програмах програмні об’єкти (змінні, константи, функції тощо), які зберігаються в різних файлах, повинні взаємодіяти один з одним. Зокрема, кожен файл повинен "знати" імена і типи глобальних зміних, що використовуються програмою в цілому. Такі глобальні змінні, доступ до яких може здійснюватися з різних файлів багатофайлового проекту, називають міжфайловими змінними..

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

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

Розглянемо оголошення та визначення змінних у мовах С/С++ детальніше. Інструкція

int x;

не тільки оголошує, але й визначає змінну x, адже за цією інструкцію для змінної x виділяється ділянка пам’яті певного розміру. Наявність чи відсутність ініціалізації змінної тут ні на що не впливає: все рівно це визначення.

Єдиним оголошенням змінної, яке не є визначенням, є оголошення з використанням зарезервованого слова extern (без ініціалізації):

int x; // оголошення і визначення

extern int n; // лише оголошення

Щоб глобальна змінна, визначена в одному файлі багатофайлового проекту, була видима в інших файлах програми, треба оголосити її у цих файлах за допомогою специфікатора extern:

// ----------Файл F1----------

int x; // визначення змінної x в файлі F1

// ----------Файл F2----------

extern int x; // оголошення змінної x в файлі F2

x=3;

У цьому прикладі оголошення змінної x з специфікаторома extern в файлі F2 зробило її видимою у цьому файлі.

Слід пам’ятати про одне обмеження: змінну не можна ініціалізувати при оголошенні з специфікатором extern. Так вираз

extern int x =3;

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

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

// ----------Файл F1----------

static int x; // змінна x є видимою лише у файлі F1

// ----------Файл F2----------

static int x; // змінна x є видимою лише у файлі F2

Хоча тут визначено дві змінні з однаковими іменами, конфлікту це не спричиняє. Код, до якого входить звертання до x, звертатиметься лише до змінної, визначеної у даному файлі.

У випадку використання статичних змінних говорять про їх внутрішнє зв’язування. Нестатичні глобальні змінні мають зовнішнє зв’язування.

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

Змінна-константа, яка визначається за допомогою ключового слова const, у загальному випадку є невидимою за межами одного файла. В цьому вона є подібною до static. Але її можна зробити видимою з будь-якого файла програми, якщо оголосити або визначити в інших файлах з ключовим словом extern:

// ----------Файл F1----------

extern const int х=3; // визначення х

// ----------Файл F2----------

extern const int х; // оголошення х

Тут файл F2 матиме доступ до константи x, визначеної в файлі F1. Компілятор розрізняє оголошення і визначення константи за наявністю чи відсутністю ініціалізації.

Соседние файлы в папке lektsii_OP