Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_9_библиотеки.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
214 Кб
Скачать
☆

Наведемо приклад залучення бібліотеки для обчислення iнтеграла

(коефiцiєнт k = 0.75471), котре виконується пiдпрограмою Psimps бiблiотеки Pvm . У бібліотеці Pvm підпрограма Psimps оголошено у такий спосіб:

procedure Psimps(a,b:real; f : ftype; eps : real; var : real; var ier : integer);

Тут a, b визначають промiжок iнтегрування, eps - бажана точнiсть (похибка) віднайдення iнтеграла, y − значення iнтеграла (результат) i ier - код завершення пiдпрограми Psimps (за успiшного завершення ier = 0), Ftype − ім’я типу пiдiнтегральної функцiї:

Type Ftype = function( x : real ) : real;

Фрагменти програми мають вигляд:

{$F+}

Unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;

…………………

implementation

{$R *.dfm}

Uses PVM ;

Function fun ( x : real ) : real;

Const k = 0.75471;

Begin

fun:=1/sqrt(1-sqr(k*sin(x)))

end;

// головна програма

procedure Tform1.Button1Click(Sender: Tobject);

Var Eps, R: real; IER : integer;

Begin

…………………..

psimps( 0, 1, fun, eps, r, ier );

…………………………

End;

Звернiть увагу на перший рядок цiєї програми: {$F+}. Це так звана директива компiлятора (транслятора) Object Pascal. Вона забезпечує можливiсть вживати iмена пiдпрограм як фактичнi параметри у викликах iнших пiдпрограм. У нашому прикладi iм'я пiдпрограми fun, яка обчислює пiдiнтегральну функцiю, слугує фактичним параметром у виклику процедури Psimps. В загальному випадку дiє наступне.

Правило. Якщо виклик будь-якої функцiї чи процедури мiстить iм'я iншої функцiї чи процедури як фактичний параметр, на початку головної програми слiд поставити директиву {$F+} .1)

2.2.3 Структура власної бібліотеки

Структура Pascal-тексту бiблiотеки повинна бути такою:

unit <iм'я бiблiотеки>;

interface

< перелiк заголовкiв, залучених у бiблiотеку пiдпрограм

(тобто iмен цих пiдпрограм з описаннями їхніх параметрiв),

а також бiблiотечних констант, змiнних i типiв >

implementation

<повнi тексти перелiчених у роздiлi interface

бiблiотечних пiдпрограм >

begin

<оператори (їх може й не бути), якi необхiдно виконати

перед звертанням до будь-якої бiблiотечної пiдпрограми>

end.

Отже, першим оператором у текстi бiблiотеки повинен бути оператор: unit <iм'я бiблiотеки>. Разом з тим за правилами трансляцiї будь-яких програм iм'я файла-результату пiсля трансляцiї збiгатиметься з iменем файла, який мiстив вихiдний текст програми.

Зауваження. Зберiгайте модуль тексту бiблiотеки у файлi (з розширенням .pas), iм'я якого збiгається з iменем бібліотеки, вказаним в операторi unit.

Частина бiблiотеки вiд слова interface до слова implementation має назву роздiл iнтерфейсу (слово interface тут найкраще перекласти як "стик" − саме через роздiл iнтерфейсу "зовнiшнi" програми "стикаються" з пiдпрограмами бiблiотеки). Частина вiд слова implementation до слова begin називається роздiлом реалiзацiї (implementation означає "здiйснення"). Врештi, назва частини помiж словами begin та end − роздiл iнiцiалiзацiї. Цього останнього роздiлу (але не перших двох!) у бiблiотецi може не бути − i в такому разі можна не писати й слова begin, але слово end. (з крапкою) є обов'язковим.

Наведемо приклад ситуацiї, за якої цей роздiл мiг би з'явитися. Нехай ми складаємо бiблiотеку пiдпрограм, кожна з яких з певною метою використовує випадковi числа. Отже, яку б з цих пiдпрограм ви не викликали у своїй про-грамi, перед цим викликом треба iнiціалiзувати генератор псевдовипадкових чисел. У Pascal "запускання" цього генератора виконує процедура (без пара-метрiв) Randomize. Замiсть того, щоб cтавити виклик цiєї процедури на початку кожної бiблiотечної програми, доцiльно один раз викликати її у роздiлi iнiцiалiзацiї бiблiотеки:

unit . . .

interface

…………………..

implementation

…………………..

{ кiнець роздiлу implementation }

begin

randomize

end.

Основними роздiлами бiблiотеки є роздiли iнтерфейсу та реалiзацiї. Може виникнути запитання: для чого потрiбнi два роздiли (адже в роздiлi реалiзацiї повторено й розширено всi записи з роздiлу iнтерфейсу) ? Річ в тім, що до роздiлу iнтерфейсу програмiст − розроблювач бiблiотеки − включає заголовки лише тих пiдпрограм, якi вiн вважає за необхiдне зробити "вiдкритими" для користувачiв бiблiотек. Водночас реалiзацiя цих "вiдкритих" пiдпрограм у роздiлi implementation може вимагати наявностi в ньому деяких iнших, "закри-тих" для користувачiв пiдпрограм. Отже, до роздiлу реалiзацiї можуть входити вiдсутнi в iнтерфейсi пiдпрограми. Як роздiл iнтерфейсу, так i роздiл реалiзацiї можуть, окрiм пiдпрограм, мiстити оголошення констант, типiв та змiнних.

У текстi бiблiотеки можна користуватися константами, типами, змiнними та пiдпрограмами з iнших бiблiотек. Для цього треба написати оператор uses з iменами вiдповiдних бiблiотек одзразу пiсля оператора interface або implementation − в залежностi вiд того, в якому з цих роздiлiв є посилання на "зовнiшнi" бiблiотечнi данi.

Зауваження. Не рекомендується посилатися на бiблiотеку у iнтерфейсi, якщо до неї насправдi звертаються лише у роздiлi implementation. Одним (але не єдиним) негативним наслiдком порушення цiєї рекомендацiї буде зростання довжини бiблiотечного файла.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]