Програмування С, С++теорія та практика (частина 2)
2.4.3 Модульність
Модульність - це властивість програмної системи, що пов’язана із можливістю декомпозиції її на ряд внутрішньо зв’язаних на слабко пов’язаних між собою модулів.
Розподіл програми на уривки (частини) дозволяє частково зменшити її складність, однак значно важливішим є той факт, що цей процес покращує опрацювання її частин. Ці частини дуже цінні для вичерпного розуміння програми в цілому. Модульність є елементом конструкції в Сі та дозволяє здійснювати на її основі проектні рішення. В мові Сі++ класи та об’єкти складають логічну структуру системи; як абстракції організуються в модулі, які утворюють фізичну структуру системи. Така властивість стає особливо корисною, коли система складається із багатьох десятків, а то й сотень класів.
В мовах, які підтримують принцип модульності як самостійну концепцію, реалізується розділ інтерфейсної частини та реалізації. Таким чином, модульність та обмеження доступу ідуть невід’ємно один від одного. В Сі модульність реалізується особливими прийомами: модулями є файли, що компілюються окремо. Для мов Сі/Сі++ традиційним є розміщення інтерфейсної частини модулів в окремих файлах із розширенням *.И (т. зв. заголовочні файли), тоді як реалізація модуля описується у звичайних файлах із розширенням *.с або *.срр. Взаємозв’язок файлів реалізується шляхом підключення директиви #іпсІигіе. Такий підхід будується виключно на погодженнях та не є суворою вимогою мови, проте залишається бажаним.
Правильний розподіл програми на модулі є майже такою самою складною задачею, як визначення правильного набору абстракцій. Найчастіше модулі виконують роль певних фізичних контейнерів, в які поміщуються визначення класів та об’єктів при логічному проектуванні системи.
Відсутність стандартизованих фрагментів дає програмісту значно більшу ступінь вільності. Та в процесі розподілу системи на модулі можуть бути корисними два правила. Перше полягає у наступному: оскільки модулі є елементарними та неподільними блоками програми, що можуть використовуватися в системі багаторазово, розподіл класів та об’єктів повинен створювати для цього максимальні вигоди. Друге правило випливає із того факту, що більшість компіляторів створюють окремий сегмент коду для кожного з модулів, тому його розмір відповідно обмежений. Оголошення функцій у модулі може справляти серйозний вплив на можливість їх виклику з іншого модуля (сторінкова стратегія організації пам'яті). Велика кількість викликів між сегментами завантажує кеш-пам’ять та впливатиме на зниження характеристик системи в цілому.
Таким чином, принципи абстрагування, обмеження доступу та модульності є взаємодоповнюючими. Об’єкт визначає межі певних абстракцій, а обмеження доступу та модульність створюють бар’єри між ними.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
