Модуль - це послідовність логічно пов'язаних фрагментів, оформлених як окрема частина програми.
До модулю ставляться такі вимоги:
1) модуль повинен реалізовувати єдину функцію, тобто при побудові модуля використовується концепція: «один модуль - одна функція». Таким чином, модуль - це елемент програми, що виконує самостійну задачу. На його вході він може отримувати певний набір вихідних даних, обробляти їх відповідно до заданого алгоритму і повертати результат обробки, тобто реалізується стандартний принцип IPO (Input - Process - Output) - вхід-процес-вихід;
2) на модуль потрібно посилатися за допомогою його імені. Він повинен мати один вхід і один вихід, що гарантує замкнутість модуля і спрощує супровід програм;
3) модуль повинен мати функціональну завершеність, тобто виконувати перелік регламентованих операцій для реалізації кожної окремої функції в повному складі, достатніх для завершення розпочатої обробки;
4) модуль повинен повертати управління в точку його виклику, в свою чергу, він повинен мати можливість сам викликати інші модулі;
5) модуль не повинен зберігати історію своїх викликів і використовувати її при своєму функціонуванні;
6) модуль повинен мати логічну незалежність, тобто результат роботи програмного модуля залежить тільки від вихідних даних, але не залежить від роботи інших модулів;
7) модуль повинен мати слабкі інформаційні зв'язки з іншими програмними модулями - обмін інформацією між модулями повинен бути по можливості мінімізований;
8) модуль повинен бути порівняно невеликий, тобто бути доступним для огляду за розміром і складності. Досвідчені програмісти рекомендують його розмір не більше двох сторінок роздруківки на принтері.
Для досягнення незалежності модулів часто використовується принцип інформаційної локалізованість. який полягає в тому, що вся інформація про структуру даних, про прототипи функцій, констант і т.д. зосереджується ( «ховати») в окремому модулі. Доступ до цієї інформації здійснюється тільки через цей модуль (в алгоритмічній мові С / С ++ такі модулі мають розширення * .h).
Програмування з використанням модулів називається модульним програмуванням. Воно виникло ще на початку 60-х років XX ст. Модульне програмування засноване на ідеї використання рівнів абстракції, коли вся проблема або комплекс завдань розбивається на завдання, підзадачі, абстрагується і представляється у вигляді ієрархічного дерева пов'язаних між собою модулів, в сукупності становлять створюване програмне забезпечення (ПО).
Перевагами модульного програмування є наступне:
· Велику програму можуть писати одночасно кілька програмістів, що дозволяє раніше закінчити завдання;
· Можна створювати бібліотеки найбільш уживаних модулів;
· Спрощується процедура завантаження в оперативну пам'ять великої програми, що вимагає сегментації;
· З'являється багато природних контрольних точок для налагодження проекту;
· Простіше проектувати і надалі модифікувати програми.
Недоліки модульного програмування заключаеются в наступному:
· Збільшується обсяг необхідної оперативної пам'яті;
· Збільшується час компіляції і завантаження;
· Збільшується час виконання програми;
· Досить складними стають міжмодульні інтерфейси.
Модульне програмування реалізується через модулі - функції. Функція - це область пам'яті, що виділяється для збереження програмного коду, призначеного для виконання конкретного завдання. Іншими словами, функція - мінімальний виконуваний модуль програми на мові С / С ++. За замовчуванням функція має тип external, і доступ до неї можливий з будь-якого файлу програми. Але вона може бути обмежена специфікатором класу пам'яті static.
Функція характеризується типом, областю дії пов'язаного з функцією імені, видимістю імені функції, типом зв'язування.
Тип імя_функциі (спеціфікація_параметров) тело_функціі
Тип - це тип повертається функцією значення, в тому числі void (крім типів масиву або функції). Умовчанням є тип int. Якщо тип повернення функції не void, то тіло функції повинно містити як мінімум один оператор return.
Імя_функциі - ідентифікатор, за допомогою якого можна звернутися до функції. Він вибирається програмістом довільно і не повинен збігатися зі службовими словами і з іменами інших об'єктів програми. Однак будь-яка програма на мові С / С ++ повинна мати хоча б одну функцію з ім'ям main - головну функцію, що містить точку входу в програму.
Спеціфікація_параметров - список формальних параметрів, тобто змінних, що приймають значення, передані функції при її виклику. Список формальних параметрів перераховується через кому. Кожен формальний параметр повинен мати такий вигляд:
Тип може бути вбудованим (int, long, float, double і т.д.), структурою (struct), об'єднанням (union), перерахуванням (enum), покажчиками на них або на функції або класи (class). Імя_формального_параметра є ім'я використовуваної в тілі функції змінної. Ідентифікатори формальних параметрів не можуть збігатися з іменами локальних змінних, оголошених всередині тіла функції.
У мові С / C ++ допустимі функції, кількість параметрів у яких при компіляції функції не фіксоване, отже, залишаються невідомими і їх типи. Кількість і типи параметрів таких функцій стають відомими тільки при їх виклик, коли явно заданий список фактичних параметрів. При визначенні та описі таких функцій зі списками параметрів невизначеної довжини специфікацію формальних параметрів слід закінчити коми і трьома крапками.
Кожна функція зі змінною кількістю параметрів повинна мати хоча б один обов'язковий параметр. Після списку обов'язкових параметрів ставиться кома, а потім три крапки, що сповіщає компілятор, що подальший контроль відповідності кількості і типів параметрів при обробці виклику функції проводити не потрібно.
Спеціфікація_параметровможет відсутні, тобто дужки можуть бути порожніми, але в цьому випадку рекомендується вказувати тип void.
Тело_функціі - частина визначення функції, обмежена фігурними дужками і безпосередньо розміщена слідом за заголовком функції. Тело_функцііможет бути або складеним оператором, або блоком. наприклад: