Lektsia_po_programmirovaniyu_-_12.pptx
- Количество слайдов: 11
Структуры и принципы организации программных модулей. Создание и использование библиотек. Лекция 13
Модуль - это программная единица, которая компилируется отдельно и независимо от главной программы и содержит определения и реализации часто используемых функций и процедур, а также константы, переменные, объявленные типы.
Исходный модуль Объектный модуль Библиотечный модуль Компановка Исходный модуль Компиляция Создание исполняемого модуля Исполняемый модуль
Структура модуля unit <Имя модуля>; interface // раздел интерфейса <раздел открытых описаний> implementation // раздел реализации <раздел закрытых описаний> initialization // раздел инициализации finalization // раздел завершения end.
Пример Unit SORT; Interface Uses CRT; Const Dl_MAS=10000; Type TMAS=array[1. . Dl. MAS] of integer; Var MAS: TMAS; N: integer; Procedure SORT_EXCHANGE; {обменная сортировка} Procedure SORT_CHOICE; {сортировка выбором} Procedure SORT_QUICK; {быстрая сортировка}
Для компиляции модулей определены три режима: Compile - компилирует программу или модуль, который загружен в данный момент в активное окно редактора. Make - система контролирует все изменения, сделанные в исходных текстах модулей, и осуществляет перекомпиляцию всех измененных модулей перед компиляцией основной программы. Build - в этом режиме осуществляется предварительная компиляция всех подключаемых модулей.
Рассмотрим модуль работы с комплексными числа UNIT compl; INTERFACE type complex=record x: real; y: real; end; procedure sum(a, b: complex; var c: complex); procedure razn(a, b: complex; var c: complex); procedure umn(a, b: complex; var c: complex); procedure delenie(a, b: complex; var c: complex); procedure vivod(a: complex);
IMPLEMENTATION procedure sum(a, b: complex; var c: complex); begin c. x: =a. x+b. x; c. y: =a. y+b. y; end; procedure razn(a, b: complex; var c: complex); begin c. x: =a. x-b. x; c. y: =a. y-b. y; end; procedure umn(a, b: complex; var c: complex); begin c. x: =a. x*b. x-a. y*b. y; c. y: =a. y*b. x+a. x*b. y; end; procedure delenie(a, b: complex; var c: complex); begin c. x: =(a. x*b. x+a. y*b. y)/(b. x*b. x+b. y*b. y); c. y: =(a. y*b. x-a. x*b. y)/(b. x*b. x+b. y*b. y); end; procedure vivod(a: complex); begin if a. y>=0 then writeln(a. x: 1: 3, '+', a. y: 1: 3, 'i') else writeln(a. x: 1: 3, '-', -a. y: 1: 3, 'i') end; end.
Программа, использующая модуль uses compl; var g, h, e: complex; BEGIN writeln('Введите первое комплексное число'); read(g. x, g. y); vivod(g); writeln('Введите второе комплексное число'); read(h. x, h. y); vivod(h); sum(g, h, e); writeln('Сумма чисел'); vivod(e); . razn(g, h, e); writeln('Разность чисел'); vivod(e); umn(g, h, e); writeln('Произведение чисел'); vivod(e); delenie(g, h, e); writeln('Частное чисел'); vivod(e); end.
Создание библиотек Library < имя библиотеки>; Uses Const Type exports My. Func, My. Other. Func, My. Proc name 'my. Proc'; Function My. Func(i: integer): byte; Begin … End; … End.
Статическая загрузка function My. Func (Param : Integer) : Integer; external 'mylib'; Динамическая загрузка • Использовать модуль Windows • Объявляем переменную процедурного типа с соответствующими параметрами и типом вызова; • Загружаем библиотеку — Load. Library ; • Находим адрес нужной функции — Get. Procedure. Address — и присваиваем его нашей переменной; Когда функции данной библиотеки больше не нужны, освобождаем ее — Free. Library • Вызываем функцию через переменную, когда это нам нужно;