
- •2.1.1 Підпрограми-процедури
- •2.1.2 Підпрограми функції
- •2.2 Бібліотеки
- •2.2.1 Основні поняття
- •2.2.2 Залучення бібліотек до проекту
- •Наведемо приклад залучення бібліотеки для обчислення iнтеграла
- •2.2.3 Структура власної бібліотеки
- •2.2.4 Послідовність створення файла бібліотеки
- •3 Приклад проекту з власною бібліотекою
- •2 Створити вектор х, як суми елементів рядків.
- •4. Контрольні запитання
- •8Які елементи мови Object Pascal можна використовувати у вигляді формальних, а які − у вигляді фактичних параметрів?
- •9Чи визначає ім’я підпрограми-функції її тип?
- •Чи все є правильно в цьому фрагменті? а якщо − нi, то як його виправити?
- •5. Лабораторне завдання
- •Варіанти індивідуальних завдань
2.2.1 Основні поняття
Бiблiотекою називається файл, який мiстить кiлька пiдпрограм i органiзований у такий спосіб, що кожну з цих пiдпрограм можна вилучити з бiблiотеки й приєднати до будь-якої “зовнiшньої" головної програми. На рис. 9.1 зображено, яким чином одна з підпрограм бібліотеки (пiдпрограма-2) долучається до двох рiзних головних програм. Окрiм пiдпрограм, бiблiотеки можуть мiстити оголошення констант, змiнних та типiв, якими також може користуватися довiльна "зовнiшня" програма.
Файл-бiблiотека |
|||||||||||
Пiдпрограма-1 |
Пiдпрограма-2 |
. . . |
Пiдпрограма-N |
||||||||
|
|
ß ß |
|
|
|
||||||
|
Файл головної програми-1 |
|
Файл головної програми-2 |
|
Рисунок 9.1 − Зв’язок між бібліотекою та програмами
Розрiзнюють так званi системнi бiблiотеки, якi входять до складу системи Delphi, i власнi бiблiотеки (або бiблiотеки користувача), якi можна будувати самому. Кожна придатна до використання бiблiотека є файлом на диску.
Перелік системних бібліотек, необхідних для виконання проекту в Delphi, можна побачити в операторі uses на початку текcту його головного модуля:
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
Детальну iнформацiю про склад системних бiблiотек ви можете дiстати, користуючись HELP-системою Delphi.
Пiсля трансляцiї exe-модуль програми вже мiстить усi вилучені з бiблiотек пiдпрограми i тому програма виконується незалежно вiд наявності бiблiотечних файлiв.
2.2.2 Залучення бібліотек до проекту
Щоб залучити власну бібліотеку (бібліотеки), достатньо написати у програмi оператор:
uses iм'я бiблiотеки-1, iм'я бібліотеки-2, . . ., iм'я бібліотеки-N;
Цей оператор записують попереду будь-яких оголошень програми (попереду першого з операторів label, const, type чи var) або першим у розділі implementation. Системні бібліотеки автоматично залучаються до проекту під час його створення.
Природно, що для правильного виклику бiблiотечних пiдпрограм із "зовнiшньої" головної програми необхiдно знати оголошення всiх параметрiв i типiв цих пiдпрограм у бiблiотецi.
Наприклад, якщо ми бажаємо використати процедуру Pslau, призначену для розв'язку системи лiнiйних алгебричних рiвнянь, спочатку відшукаємо її описання з бiблiотеки Pvm (тека c:\students\librery\pvm, файли pvm.inf та pslau.par):
procedure pslau( n : integer; a : matr; var x : vect );
де n − кількість рiвнянь системи, a − матриця її коефiцiєнтiв, а x - розв'язок (вектор коренiв). що стосується типiв matr i vect, то вони також належать до бiблiотеки Pvm i оголошенi в нiй у такий спосіб:
сonst maxn = 20 ;
type matr : array[ 1..maxn, 1..maxn+1 ] of real ;
vect : array[ 1..maxn ] of real ;
Знаючи всi цi оголошення, можна тепер написати правильне звернення до пiдпрограми pslau із "зовнiшньої" програми. Наприклад, фрагмент програми для розв’язку системи з п’яти рівнянь матиме вигляд
implementation
uses pvm ;
……………………..
procedure Tform1.Button1Click(Sender: Tobject);
var m : matr; v : vect;
…………………….
begin
……………………..
Pslau( 5, m, v );
. . .
end;
Зауваження. У попередньому фрагментi iмена m та v − фактичних параметрів процедури pslau − може бути змiнено. але неприпустимо змiнювати або переоголошувати типи matr та vect цих параметрiв. навiть якщо ви застосуєте оголошення, повнiстю тотожне з оголошенням у бiблiотецi pvm:
// приклад неправильного виклику PSlau
uses pvm ;
const maxn = 20 ;
type matr : array[ 1..maxn, 1..maxn+1 ] of real ;
vect : array[ 1..maxn ] of real ;
var a : matr; x : vect;
. . . begin
pslau( 5, a , x );
. . .
Цей виклик буде неправильним, тому що iмена matr та vect розглядати-муться як внутрiшнi типи програми й, отже, вважатимуться за вiдмiнні вiд бiблiотечних типiв, хоча й iмена їхні, i структури збiгаються. Iнакше кажучи, у Pascal величини, тотожнi за структурою, вважаються рiзними, якщо вони оголошенi в рiзних програмних модулях ( у даному разі однi величини-типи оголошенi в бiблiотечному модулi, а iншi − в модулi головної програми).