Контрольная работа: Модульне програмування. Turbo Pascal
За заголовком модуля йде його інтерфейсна частина, яка розпочинається зі службового слова interface. В ній перераховуються програмні ресурси (константи, типи, змінні, заголовки процедур і функції), які призначені для використання іншими модулями і програмами. Описані тут елементи називаються видимими (зовнішніми). Вимоги до написання тут такі самі, як і в Turbo Pascal, але для процедур і функцій вказують лише заголовки, причому директиви externa1, forward і assembler не ставляться.
Відмітимо також, що в розділі uses перераховуються імена модулів, які використовуються в даному випадку. Але вони не доступні програмам, які використовують даний модуль. Тому щоб отримати в програмі доступ до ресурсів модуля, його необхідно оголосити явно, а не через інший модуль.
Після інтерфейсної частини йде розділ реалізації, який розпочинається зі службового слова implementation. Тут оголошуються невідомі поза модулем внутрішні елементи (їх ще називають невидимими або схованими) - локальні змінні, константи, типи, процедури і функції, а також модулі, ресурси яких використовуються в середині даного модуля. Крім того, тут здійснюється реалізація тих процедур і функцій, заголовки яких описані в інтерфейс ній частині і які відомі поза модулем. Такий метод опису процедур і функцій здійснюється за наступною причиною: користувачу для звернення до підпрограми достатньо знати її ім’я і список параметрів. Знання способу її реалізації зовсім не потрібно. Якщо здійснюється модифікація підпрограми, яка розміщена в модулі, то достатньо змінити тільки її тіло в розділі реалізації, не змінюючи заголовка інтерфейсної частини. В зв’язку з цим програми, які використовують таку підпрограму, не змінюються. Якщо підпрограма оголошена в інтерфейс ній частині, то в розділі реалізації її заголовок зазвичай надається тільки у вигляді імені без вказування переліку і типів параметрів, а також типу повернення значення для функції.
Розділи іnterface та implementation обов’язкові, навіть якщо вони пусті, заголовки вказати необхідно.
Після розділу реалізації в модулі розташовується розділ ініціалізації, який розпочинається зі слова begin, за яким йдуть оператори, які будуть виконуватися до операторів з тіла програми (наприклад, встановлення початкових значень для деяких змінних, оголошених в модулі). Розділ ініціалізації не є обов’язковим, тому. Якщо при підключені модуля не потрібно робити ніяких початкових встановлень, він може не використовуватися (разом зі службовим словом begin).
2. Компіляція програм, які використовують модулі
До програми можна підключити декілька модулів. В свою чергу модуль може використовувати ресурси інших модулів. В цьому випадку в програмі в операторі uses вказують тільки імена тих модулів, які безпосередньо використовуються в програмі. Характерною особливістю модулів є те, що вони не повністю включаються в exe - файл: до програми додається лише те, що використовується. Заборонено звернення модуля до самого себе, хоча, якщо модуль оголошується в розділі реалізації, це обмеження розповсюджується лише на пряме звернення.
Можлива й така ситуація, коли в програмі і інтерфейс них частинах декількох модулів, підключених до неї, оголошені за допомогою одного і того самого імені різні об’єкти (наприклад, в програмі є розділ uses module1,module2; і як в програмі, так і в інтерфейс них частинах обох модулів існують описи з іменем name). В цьому випадку програма оперує передусім, елементами, які оголошені в ній самій. (тобто тим елементом name, який оголошений в програмі). Для звернення до об’єкту, ім’я якого перекрито, необхідно зліва до імені об’єкту дописати ім’я модуля, в якому він оголошений, об’єднав їх крапкою (наприклад, module1. name або System. Real).
В Turbo Pascal немає зв’язку між іменем програми і іменем файлу, в якому вона зберігається. Але для підключення модуля до програми його необхідно знайти на диску. Тому ім’я модуля і ім’я файлу, який містить модуль, повинні співпадати. Вихідний текст модуля зберігається в файлі з розширенням pas, а отриманий в результаті компіляції код модуля - в файлі з розширенням tpu (від Turbo Pascal Unit). Якщо ім’я модуля module, то відповідними файлами будуть module. pas і module. tpu.
При компіляції програми за допомогою команди Compile - > Compile компілятор послідовно відшуковує tpu - файли, які містять коди модулів які використовуються, для їх підключення. Пошук відбувається наступним чином:
1. Перегляд системного бібліотечного файлу модулів turbo. tp1 (від Turbo Pascal Library), який повинен зберігатися в тому самому каталозі, що й файл turbo. exe.
Якщо модуля немає в файлі turbo. tp1, то пошук продовжується в поточному каталозі.
Якщо і тут модуль не знайдений, то йде перегляд каталогів, перерахованих в розділі Unit Directories діалогового вікна, яке викликається командою меню Options - > Directories (перерахування каталогів відбувається через крапку з комою). Якщо модуль не виявлено, буде створене повідомлення про помилку і компіляція програми буде завершена.
При обрані команди компіляції Compile - >Make здійснюється пошук pas - файлу, який містить вихідний текст модуля. Виявивши його, в тому ж самому каталозі необхідно знайти відповідний tpu - файл. Якщо tpu - файл створений пізніше pas - файлу, то йде підключення модуля з tpu - файлу. Якщо ж tpu - файл не виявлений або pas - файл коректувався після створення tpu - файлу, то обов’язково компілюється нова версія tpu - файлу.
При компіляції за допомогою команди Compile - >Build обов’язково йде компіляція всіх pas - файлів, що містять тексти модулів, які використовуються. Якщо якогось з pas - файлів немає, але є відповідний tpu - файл, відбувається підключення останнього.
Модулі завжди компілюються перед компіляцією програми.
Системний бібліотечний файл модулів turbo. tp1 (в Turbo Pascal він єдиний) володіє спеціальною структурою, орієнтованої на швидкий пошук модулів, які в ньому містяться. Включення і виключення модулів виконується за допомогою спеціальної програми tpumover. exe. Пошук модулів в файлі turbo. tp1 відбувається завжди, тому не стоїть робити його дуже великим. Модулі, які часто використовуються, необхідно поміщати в файл turbo. tp1.
2.1 Стандартні модулі
В Turbo Pascal є вісім стандартних модулів (System, Dos, Crt, Printer, Overlay, Graph, Turbo3, Graph3). Модуль System підключається автоматично, і його не потрібно згадувати у розділі uses. Всі останні модулі необхідно оголошувати в програмі для забезпечення доступу до їх ресурсів.
В модулі System зберігаються типи, константи, змінні і підпрограми авторської версії мови, стандартної мови, а також ряд додаткових підпрограм. Відсутність цього модуля призводить до неможливості компіляції програми.
Модуль Crt використовується при роботі з екраном у текстовому режимі, під час читання з клавіатури, а також забезпечує деякі інші функції.
Модуль Dos забезпечує звернення до засобів операційної системи MS DOS.
Модуль Printer дозволяє здійснювати вивід на принтер за допомогою процедур Write і WriteLn. Для цього оголошена файлова змінна Lst типу Text, яка зв’язана з логічним пристроєм prn.
Модуль Graph забезпечує роботу з екраном у графічному режимі.
Модуль Overlay використовують для ефективної роботи великих програм. Модулі Turbo3 і Graph3 застосовують дуже рідко, їх використовують для забезпечення сумісності пізніших версій мови з програмами, які написані на мові Turbo Pascal 3.0.
Перші п’ять згадані модулі часто включають в файл turbo. tp1.
Є також цілий ряд інших модулів, які стали практично стандартні. Це модулі, які входять в бібліотеку Turbo Vision (Objects, Views, Dialogs, App і ін) і призначені для побудови інтерфейс них частин розроблювальних програм.
Для роботи з довгими (більше 255 символів) строками розроблений модуль Strings.
Модуль Crt
Одним з найбільш часто використовуваних стандартних модулів є модуль Crt. В ньому є багато процедур і функцій для роботи з текстом. Серед них: засоби вводу, виведення і форматування тексту, створення і робота з вікнами та багато іншого.
Основним засобом відображення інформації, яка вводиться і виводиться під час роботи прикладних і системних програм є екран. В Turbo Pascal є можливість працювати з екраном у текстовому і графічному режимах.
Текстовий режим призначений для відображення символів кодової таблиці і характеризується максимальним числом символів в рядку і кількістю рядків на екрані. Крім того, монохромні дисплеї характеризуються кількістю степенем яскравості, а кольорові - можливою кількістю використовуваних кольорів. Мінімальною одиницею керування в текстових режимах є символ. Він складається з декількох пікселів, перетворення яких відбувається на апаратному рівні. Для зберігання символу, який виводиться на екран в текстовому режимі необхідно 2 байта. Перший байт містить безпосередньо символ кодової таблиці, а другий визначає, як символ має бути виведений на екран (його колір, колір фону, мерехтіння).