Л.2. Модули в Паскале.ppt
- Количество слайдов: 27
Модули в Object Pascal
План n n Понятие модульного программирования Структура модуля Доступ к объявленным в модуле объектам Типы модулей в DELPHI
Модульное программирование – это организация программы как совокупности небольших независимых блоков, называемых модулями, структура и поведение которых подчиняются определенным правилам. Н. Вирт, 1975 г. , язык Modula
n n Модуль - это автономно компилируемая программная единица, включающая в себя различные компоненты интерфейсного раздела (типы, константы, переменные, процедуры и функции) и, возможно, некоторые исполняемые операторы инициирующего раздела. Основное назначение модуля – объединение и надежное скрытие деталей реализации определенной подзадачи.
Структура модуля unit (для среды Borland (Turbo) Pascal unit <Имя модуля>; {Заголовок } interface {Интерфейс } [uses <Список используемых модулей unit >; ] <Описания видимых программных объектов> <Заголовки экспортируемых подпрограмм> implementation {Реализация } [uses <Список используемых модулей>; ] <Описания скрытых программных объектов> <Реализации экспортируемых подпрограмм> begin {Инициализация } <Операторы инициализации> ] 5 end.
Пример использования модуля unit Program My. Prog 3; uses Ucalc; { Подключение модуля unit } var A, B, C: Integer; R: Real; procedure Inp. Data(var A, B, C: Integer); {Осуществляет ввод исходных данных } Begin … end; procedure Out. Data(Res: Real); {Осуществляет вывод результатов} Begin … end; begin Inp. Data(A, B, C); Calculation(A, B, C, R); Out. Data(R); end unit Ucalc; Ucalc interface procedure Calculation(A, B, C: Integer; var Result: Real); {Выполняет некоторые вычисления с исходными данными } implementation procedure Calculation(A, B, C: Integer; var Result: Real); Begin … end; procedure Calc. X(A, B, C: Integer; var X: Real); { Выполняет вспомогательные вычисления} Begin … end; …… end 6
Предотвращение конфликтов n Недопустимо использование модулей unit с циклическими ссылками. Например: unit A; uses B; … n unit B; uses A; … unit A; uses B; … unit B; uses C; … unit C; uses A; … При совпадении идентификаторов в различных модулях unit, используемых в одной программе, необходимо использовать квалификацию идентификаторов. Например: Res : = Unit. A. Limit + Unit. B. Limit(L, 5); 7
Преимущества модулей unit n n Независимая компиляция и кодирование подсистем большой программной системы (особенно важно в случае коллективной разработки). Инкапсуляция (скрытие) деталей реализации. Возможно использование реализации модуля unit как. tpu файла и текстового файла с интерфейсной секцией. 8
Стандартные модули unit n n Коды модулей System, Crt, Overlay, Dos, System Crt Overlay Dos Printer составляют библиотеку времени выполнения и содержатся в файле turbo. tpl Модуль System подключается к программе автоматически, остальные нужно указывать в предложении uses Не включенны в turbo. tpl модули: Graph, Graph Turbo 3, Graph 3. Turbo 3 Graph 3 9
Назначение стандартных модулей n n n System – содержит все подпрограммы стандартного Pascal и встроенные подпрограммы Turbo Pascal, не вошедшие в другие модули. Crt – содержит подпрограммы управления текстовым режимом работы экрана, работы с расширенными кодами клавиатуры, цветовой палитрой, окнами и звуками. Printer – обеспечивает вывод текстов на принтер. 10
Назначение стандартных модулей n n n Overlay – позволяет снизить минимальный размер свободной памяти, необходимой для запуска Turbo Pascal программы. Программа разбивается на непересекающиеся фрагменты кода, называемые оверлеями. Минимальный размер свободной памяти для программы с оверлейной структурой определяется размером наибольшего оверлея. Graph – содержит подпрограммы управления графическим режимом работы экрана. Turbo 3, Graph 3 – обеспечивают совместимость программ, написанных на Turbo Pascal версии 3. 0. 11
Разработка собственных модулей unit n n n Модуль unit оформляется в виде отдельного текстового. pas файла. Имя файла должно совпадать с именем модуля. В одном файле может быть только один модуль unit. Способы компиляции модуля unit в Turboоболочке (команды меню Compile): Compile – Compile создание файла. tpu, Make и Build – автоматическая компиляция модуля при компиляции программы, использующей этот модуль. Большую программную систему необходимо строить как иерархию модулей 12
СТРУКТУРА МОДУЛЯ В СРЕДЕ OBJECT PASCAL Unit <имя>; interface <интерфейсная часть> implementation <исполняемая часть> initialization <инициирующая часть> finalization <завершающая часть> end.
Замечание: 1. не допускается одновременное использование модулей с одинаковыми именами; 2. идентификатор модуля, указанный в заголовке (unit), должен совпадать с именами файлов, содержащих исходный (. pas) и объектный (. dcu) код. Пример: если Unit Global; то global. pas
Связь с модулями устанавливается специальным предложением Uses <сп. модулей> Например: Uses Windows, Sys. Utils, My. Unit;
Interface (Интерфейсная часть) В этой части содержатся объявления всех глобальных объектов модуля (типов, констант, переменных и подпрограмм), которые должны стать доступными основной программе и/или другим модулям. При объявлении глобальных подпрограмм в интерфейсной части указывается только их заголовок.
Implementation (Исполняемая часть) содержит описания подпрограмм, объявленных в интерфейсной части. В ней могут объявляться локальные для модуля объекты - вспомогательные типы, константы, переменные и подпрограммы. В заголовке подпрограмм можно опускать список формальных переменных (и тип результата для функции), так как они уже описаны в интерфейсной части.
Initialization (Инициирующая) часть n В инициирующей части размещаются операторы, которые исполняются до передачи управления основной программе и обычно используются для подготовки ее работы.
Finalization (завершающая) часть n n В завершающей части указываются операторы, выполняющиеся после завершения работы основной программы (в них освобождаются выделенные программе ресурсы, закрываются файлы и т. д. ). Инициирующая и завершающая части чаще всего отсутствуют вместе с начинающим их словами initialization и finalization.
ДОСТУП К ОБЪЯВЛЕННЫМ В МОДУЛЕ ОБЪЕКТАМ Рассмотрим на примере создания модуля, реализующего арифметику с обыкновенными дробями
unit drob; interface type dr=record ch, zn: integer; end; function slo(a, b: dr): dr; function umno(a, b: dr): dr;
implementation function NOD(x, y: integer): integer; begin while x<>y do if x>y then x: =x-y else y: =y-x; result: =y; end; function slo(a, b: dr): dr; begin result. zn: =(a. zn*b. zn) div nod(a. zn, b. zn); result. ch: =a. ch*(result. zn div a. zn)+b. ch*(result. zn div b. zn) end;
function umno(a, b: dr): dr; var del: integer; begin result. ch: =a. ch*b. ch; result. zn: =a. zn*b. zn; del: =nod(result. ch, result. zn); result. ch: =result. ch div del; result. zn: =result. zn div del; end.
program Project 1; {$APPTYPE CONSOLE} uses Sys. Utils, drob; var x 1, x 2, x: dr; Begin writeln('1 drob'); readln(x 1. ch, x 1. zn); writeln('2 drob'); readln(x 2. ch, x 2. zn); x: =slo(x 1, x 2); writeln(x. ch, ' ', x. zn); x: =umno(x 1, x 2); writeln(x. ch, ' ', x. zn); readln; end.
ИНИЦИАЦИЯ ПЕРЕМЕННЫХ При объявлении глобальных переменных разрешается одновременно присваивать им значения (инициировать). Только глобальным переменных, объявляемых в интерфейсной или исполняемой частях модулей (локальным переменным, объявляемым в теле процедуры, нельзя).
Инициированная переменная получает присвоенное ей значение один раз - в момент старта программы; в дальнейшем она хранит последнее присвоенное ей значение. Пример инициации переменной: unit Unit 1; implementation var My. Var: Integer = 10; end. n Инициировать переменные следует с учетом тех же ограничений и по тем же правилам, что и типизированные константы. n
ТИПЫ МОДУЛЕЙ В DELPHI n n n Форма - модуль со связанным с ним окном. Модули данных имеют связанные с ними окна, однако, эти окна никогда не появляются на экране. Модули динамических библиотек предназначены для создания динамически связываемых библиотек DLL (Dynamic-Link Libraries). n Пакеты - это особым образом откомпилированные DLL
Л.2. Модули в Паскале.ppt