МОДУЛЬНЕ ПРОГРАМУВАННЯ
МЕТОДИЧНІ ВКАЗІВКИ
до лабораторної роботи № 9
з дисципліни ”Алгоритмізація та програмування”
для студентів спеціальності 122 ”Комп’ютерні науки”
Затверджено
на засіданні кафедри інформаційних систем та мереж
Протокол №__ від _____.2018 р.
Львів-2018
Модульне програмування: Методичні вказівки до лабораторної роботи № 9 / Укл.: В.А. Висоцька. – Львів: Видавництво Національного університету ”Львівська політехніка”, 2018. – 20 с.
Укладачі Висоцька В.А., к.т.н., доцент
Відповідальний за випуск Литвин В.В., д.т.н., професор
Рецензенти Верес О.М., к.т.н., доцент
Берко А.Ю., д.т.н., професор
Ришковець Ю.В., к.т.н., старший викладач
Мета роботи: ознайомитись із поняттям модульного програмування на мовi Сі.
1. Теоретичні відомості
1.1. Основні поняття
Програми, що вирішують реальні практичні задачі, мають великий обсяг та складаються з тисяч функцій. Записувати всі функції програми в один файл незручно, оскільки зі збільшенням програми в ньому стає важко орієнтуватися, а також стає неможливою спільна робота кількох програмістів. Технологія модульного програмування полягає у розбитті великої задачі на частини, з наступною реалізацією кожної підзадачі в окремому файлі, який називають модуль. На практиці один програмний продукт може включати модулі, написані різними мовами програмування. На вибір мови впливає складність реалізації алгоритму. Для того, щоб зрозуміти принцип побудови багатомодульної програми, спочатку потрібно уявити велику програму, весь код якої міститься в одному файлі. Оскільки будь-яка функція повинна бути оголошена перед її першим викликом, а кожна функція програми може викликати будь-яку іншу функцію, то на самому початку програми повинні бути розміщені оголошення всіх функцій, крім функції main.
Нехай цю ж програму розбито на кілька модулів, тобто частину функцій перенесено в один файл, частину інших функцій – у другий і т.д. Функція, розміщена в одному модулі, може викликати функцію, що міститься в іншому модулі. А це означає, що на початку кожного модуля повинні міститись оголошення (прототипи) всіх зовнішніх функцій – функцій з інших модулів, які викликаються з цього модуля. Прототипи зовнішніх функцій записують переважно у текст модуля вручну, але при великій кількості функцій це дуже незручно. Набагато зручніше перенести прототипи функцій в окремий файл і за потреби підключати його до відповідного модуля за допомогою директиви #include. Такий файл називається заголовний і має розширення .h.
Створюючи модуль, програміст в один файл з розширенням .c записують тіла функцій, а в інший файл з розширенням .h (заголовний) – лише прототипи цих функцій. Про заголовний файл часто кажуть, що він містить інтерфейс модуля, а про .с-файл, що він є реалізацією модуля.
Трансляція багатомодульної програми має важливу особливість: компілятор опрацьовує багатомодульну програму не як одне ціле, а окремо модуль за модулем. Модулі компілюються незалежно один від одного, тобто поки компілятор компілює один модуль, він “не знає” про існування інших модулів. У наслідок цього з кожного .с-файлу створюється об’єктний файл (переважно він має таке ж ім’я, що й відповідний .с-файл, але з розширенням .obj). В об’єктному файлі операції над даними та оператори управління зберігаються у машинному коді, при цьому виклики функцій залишаються нерозв’язаними.
Приклад 9.1. Об’єктний файл a.obj містить виклик функції int f(int), який неможливо перетворити на машинну команду переходу до тіла функції, тому що модуль а.obj нічого не знає про об’єктний файл b.obj, в якому міститься тіло відповідної функції. Після компіляції модулів спрацьовує ще одна спеціальна програма – редактор зв’язків, яка об’єднує всі об’єктні файли, що входять до складу програми, в один виконуваний файл, розв’язуючи при цьому посилання на імена функцій, заміняючи виклик функції за ім’ям, яке міститься в одному модулі, на конкретну адресу її тіла, взятого з іншого модуля.
(Для ознайомлення з повним текстом статті необхідно залогінитись)