Реферат: Модули и объекты в языке Турбо Паскаль 7.0
Министерство образования Российской Федерации
Таможенный колледж
Оренбургский ГосударственныйАграрный Университет
Бузулукскоепредставительство
КУРСОВАЯ РАБОТАпо дисциплине «Основыалгоритмов и программирования»
Модули и объекты в языке Турбо Паскаль 7.0Руководитель работы
________________СимоноваС.В.
"______"________________2002г.
<span Times New Roman",«serif»;font-weight:normal; mso-bidi-font-weight:bold;font-style:normal;mso-bidi-font-style:italic"> ИсполнительСтудент гр. 34 АСОИ и У
______________Кислинский С.В.
"______"________________2002г.
Бузулук2002
Содержание
Введение…… стр.3
1 Модули…………………………………………………...……… стр. 4
1.1 Структурамодулей………………………………………… стр. 6
1.2 Заголовок модулей и связьмодулей друг с другом……….…стр. 8
1.3 Интерфейснаячасть……………………………………………стр. 9
1.4 Исполняемаячасть………………………………………...…… стр. 10
1.5 Инициирующаячасть………………………....…………...…стр. 11
1.6 Компиляциямодулей………………………………….......…стр. 12
1.7 Доступ к объявленным в модулеобъектам……………… стр. 14
1.8 Стандартныемодули…………………………………………стр. 15
2 Объекты……………………………………………………………… стр. 17
2.1 Основные принципыООП……………………………………стр. 19
2.2 Инкапсуляция………………………………………………….стр.20
2.3 Наследование…………………………………………………стр.22
2.4 Полиморфизм…...……………………………………………стр.24
Заключение……………………………………………………………стр. 26
Список используемых источников…………………………………… стр. 27
Приложение А………………………………………………………… стр. 28
<span Times New Roman",«serif»;mso-fareast-font-family: «Times New Roman»;mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language: AR-SA">Введение
В 1992 году фирма BorlandInternationalвыпустила два пакета программирования на использовании языка Паскаль, — BorlandPascal7.0 и TurboPascal7.0.
Пакет BorlandPascal7.0 учитывает многие новейшие достижения в программировании и практике созданияпрограмм и включает в себя три режима работы: в обычном режиме операционнойсистемы MSDOS, взащищенном режиме MSDOSи в среде Windows.Обладая расширенными возможностями, пакет BorlandPascal7.0 тем не менее требует для использования всех своих возможностей довольнобольшую память – примерно 30 Мбайт на жестком диске и не менее 2 Мбайтоперативной памяти.
Пакет TurboPascal7.0 обладает ограниченными возможностями и позволяет работать только в обычномрежиме MSDOS.Начинающему программисту, по-видимому, целесообразно начать изучение языка и среды именно с этого пакета.
Язык характеризуетсярасширенными возможностями по сравнению со стандартом, хорошо развитойбиблиотекой модулей, позволяющих использовать возможности операционной системы,создавать оверлейные структуры, организовывать ввод-вывод, формироватьграфическое изображение и т.д.
Среда программированияпозволяет создавать тексты программ, компилировать их, находить ошибки иоперативно их исправлять, компоновать программы из отдельных частей, включая стандартныемодули, отлаживать и выполнять отлаженную программу.
В данной работе будутописаны основные возможности языка, работа в интегрированной среде, наборстандартных модулей.
Паскаль <span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol">-
замечательный язык программирования, которыйотносительно прост в изучении, довольно ясен и логичен и, будучи первымизучаемым языком программирования, приучает к хорошему стилю. Паскальвоспитывает дисциплину структурного программирования и программирования вообщелучше, чем другие языки программирования, такие, как, например Бейсик.Паскаль – гибкий и развитыйв отношении типов данных язык. Привлекательны его рекурсивные возможности, атакже поддержка технологии объектно-ориентрованного программирования.
<span Times New Roman",«serif»;mso-fareast-font-family: «Times New Roman»;mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language: AR-SA">1 Модули
Модуль <span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol">-
это автономно компилируемая программная единица, включающаяв себя различные компоненты раздела описаний (типы, константы, переменные,процедуры и функции) и, возможно, некоторые исполняемые операторы инициирующейчасти.Наличие модулей в TurboPascalпозволяет программировать и отлаживать программу по частям, создаватьбиблиотеки подпрограмм и данных, воспользоваться возможностями стандартныхмодулей, практически неограниченно увеличивать кодовую (содержащую коды команд)часть программы.
Модуль содержит описаниятипов данных, переменных и других объектов, а также подпрограммы, которыеиспользуются в различных программах. Подпрограмму имеет смысл включать в составмодуля в том случае, когда она реализует действие, которое приходится выполнятьдостаточно часто. Подпрограммы, входящие в модуль, можно написать, отладить иоткомпилировать один раз, а использовать многократно.
Модули представляют собойпрекрасный инструмент для разработки библиотек прикладных программ и мощноесредство модульного программирования. Важная особенность модулей заключается втом, что компилятор Турбо Паскаля размещает их программный код в отдельномсегменте памяти. Максимальная длина сегмента не может превышать 64 Кбайта,однако количество одновременно используемых модулей ограничивается лишьдоступной памятью, что дает возможность создавать весьма крупные программы.
Доступ к описаниям, функциями процедурам модуля обеспечивает оператор использования Uses, в которомуказывается имя модуля. Этот оператор размещается в разделе описаний программы,сразу после заголовка. Если в программе используется не один модуль, анесколько, необходимо указать имена всех модулей, перечислив их через запятую.Исключением является модуль System, ссылкана который необязательна. Этот модуль содержит, в частности, процедурыфайлового ввода/вывода, процедуры и функции для работы со строками и некоторыедругие.
Модуль начинается заголовком
unit unit_name;
где unit_name– имямодуля, которое выбирается в соответствии с правилами Паскаля. Файл, содержащиймодуль, обязан иметь то же имя, что и модуль.
Разберем в качестве примерамодуль с описанием гиперболических функций, которых нет в числе встроенныхфункций языка Паскаль, но эти функции достаточно часто появляются в прикладныхзадачах, и поэтому имеет смысл включить их в состав библиотечного модуля.Доступ к функциям из этого модуля обеспечивает оператор использования Uses, в котором указывается имя модуля. Итак, сам модульвыглядит следующим образом.
<span Tahoma",«sans-serif»">
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">{$N+}
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">unit hyp_fun;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">interface
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">type
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> Float =Extended;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">function sinh(x: Float): Float;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">function cosh(x: Float): Float;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">function tanh(x: float): Float;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">implementation
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">var
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> t: Float;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">function sinh(x: Float): Float;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">begin
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> t :=Exp(x);
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> sinh :=0.5*(t – 1.0/t);
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">end;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">function cosh(x: Float): Float;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">begin
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> t :=Exp(x);
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> cosh :=0.5*(t + 1.0/t);
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">end;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">function tanh(x: Float): Float;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">begin
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> t :=Exp(2.0*x);
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> tanh := (t– 1.0) / (t + 1.0);
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">end;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">end.
Зарезервированные слова interface<span Tahoma",«sans-serif»">
и implementationздесьиграют важную роль. Каждый модуль имеет части (секции), озаглавленные этимисловами. Секция interface(она называетсяинтерфейсной секцией) содержит описания констант, типов, переменных и процедур,доступных из вызывающей программы или модуля. Секция implementation<span Tahoma",«sans-serif»">(секция реализации) содержит исходныйкод программы. Она может также содержать локальные описания, такие как var t: Real; из нашегопримера.Каждый модуль начинается сзарезервированного слова unitи заканчивается словом end, за котором следует точка. Для этого endне требуется соответствующего слова begin, хотя можно и поставить его непосредственно перед end. Оператор typeв начале нашего модуля определяеттип Float, который в данном случае эквивалентен типу Extended. Указав, справа от знака равенства любой другойэквивалентный тип, можно изменить точность вычисления гиперболических функций.
1.1 Структурамодулей
Модульимеет следующую структуру:
Unit module_name
Interface
Интерфейсная секция
Implementation
Секция реализации
Секция инициализации
Рис. 1.Структура модуля
Здесь Unit<span Times New Roman";mso-hansi-font-family: «Times New Roman»;mso-char-type:symbol;mso-symbol-font-family:Symbol">-
зарезервированное слово (единица), начинает заголовокмодуля; name <span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol">- имя модуля(правильный идентификатор). Interface– интерфейсная секция – содержит теописания типов, переменных и других объектов данных, которые можно использоватьв других программах или модулях. Секцияреализации начинается с зарезервированного слова <span Tahoma",«sans-serif»; mso-ansi-language:EN-US">implementation.Все описания, содержащиеся в секции реализации, являются локальными, их областьдействия – данный модуль. Здесь же содержаться полные описания функций ипроцедур модуля. Последняя часть модуля – секцияинициализации. Она может быть пустой и содержать только зарезервированноеслово endиливключать в себя исполняемые операторы, выполняющие необходимые действия поинициализации (например, по присваиванию начальных значений переменным) модуля.В качестве примерарассмотрим модуль func1 /см. приложение А/,расширяющий вычислительные возможности Турбо Паскаля, так как он содержитфункции, отсутствующие в стандартных модулях системы. Среди «стандартных»функций – синус (Sin), косинус (Cos), арктангенс (ArcTan), экспонента (Exp), натуральный логарифм (Ln), квадрат числа (Sqr) и квадратный корень из него (Sqrt). В модуле func1имеются тангенс (Tan), арксинус (ArcSin) и арккосинус (ArcCos), функции перевода градусной меры в радианную инаоборот (Degrees_to_Radians, Radians_to_Degrees), набор гиперболических функций (Sinh, Cosh, Tanh), а также десятичный логарифм (Log10) и произвольная степень числа (Power).
Напомню математическоеопределение гиперболических функций:
<img src="/cache/referats/7602/image002.gif" v:shapes="_x0000_i1025">
<img src="/cache/referats/7602/image004.gif" v:shapes="_x0000_i1026">
<img src="/cache/referats/7602/image006.gif" v:shapes="_x0000_i1027">
В нашем примере интерфейснаясекция содержит описания вещественного типа float, а также константу Infinity– «бесконечно большое значение». Бесконечность здесьпонимается, разумеется, в смысл машинной арифметики, как значение, близкое кмаксимально допустимому для типа Extended. Далееследуют заголовки функций модуля.
Секция реализации содержитконстанты, используемые в подпрограммах-функциях. Затем идут полные описанияфункций. Вычисление тангенса использует «классическое» определение этой функциикак отношение синуса к косинусу. Учтено также приближение значения тангенса кбесконечности при определенных значениях аргумента. В этом случае функциявозвращает «машинную бесконечность».
При программированииарксинуса и арккосинуса следует учитывать то, что эти функции – многозначные. Внашем случае вычисляется «главное значение», лежащее в интервале [-<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol">p
/2, <span Times New Roman";mso-hansi-font-family:«Times New Roman»; mso-char-type:symbol;mso-symbol-font-family:Symbol">p/2] (для арксинуса) или [0, <span Times New Roman";mso-hansi-font-family: «Times New Roman»;mso-char-type:symbol;mso-symbol-font-family:Symbol">p] (для арккосинуса) радиан. Для этого используютсяформулы, известные из курса элементарной математики.При вычислениигиперболических функций учитывается то обстоятельство, что уже при относительнонебольших значениях аргумента вычисление экспоненты приводит к арифметическомупереполнению. В этом случае функция возвращает «бесконечное» значение.
1.2 Заголовок модуля и связь модулейдруг с другом
Заголовок модуля состоит иззарезервированного слова Unit<span Times New Roman";mso-hansi-font-family:«Times New Roman»;mso-ansi-language: EN-US;mso-char-type:symbol;mso-symbol-font-family:Symbol">-
следующего за ним имени модуля. Для правильнойработы среды Турбо Паскаля и возможности подключения средств, облегчающихразработку крупных программ, это имя должно совпадать с именем дискового файла,в который помещается исходный текст модуля. Если, например, имеем заголовокUnitGlobal;
то исходный текстсоответствующего модуля должен размещаться в дисковом файле GLOBAL.PAS. Имямодуля служит для его связи с другими модулями и основной программой. Эта связьустанавливается специальным предложением
Uses<сп.модулей>
Здесь Uses — зарезервированное слово (использует);
<сп.модулей>- список модулей, с которыми устанавливается связь;
элементами списка являютсяимена модулей, отделяемые друг от друга
запятыми, например:
Uses CRT, Graph, Global:
Если объявление Uses… используется, оно должно открывать разделописаний основной программы. Модули могут использовать другие — модули.Предложение Uses в модулях может следовать либосразу за зарезервированным словом Interface,либо сразу за словом Implementation.
1.3 Интерфейсная часть
Через интерфейсосуществляется взаимодействие основной программы с модулем (модуля с модулем).В интерфейсе указываются константы, типы, переменные, процедуры и функции,которые могут быть использованы основной программой (модулем) при вызове этогомодуля.
Интерфейсная частьоткрывается зарезервированным словом <span Tahoma",«sans-serif»">Interface
. В этой части содержатся объявления всех глобальныхобъектов модуля (типов, констант, переменных и подпрограмм), которые должныстать доступными основной программе и/или другим модулям. При объявленииглобальных подпрограмм в интерфейсной части указывается только их заголовок,например:<span Tahoma",«sans-serif»;mso-ansi-language:EN-US">UnitCmplx;
<span Tahoma",«sans-serif»;mso-ansi-language:EN-US">Interface
type
complex= record
re, Im: real
end;
ProcedureAddC (x,
ProcedureMulC (x, <span Tahoma",«sans-serif»">у<span Tahoma",«sans-serif»;mso-ansi-language:EN-US">:complex; var z: complex);
Если теперь в основной программе написать предложение
Uses Cmplx;
то в программе станут доступными тип Complex и двепроцедуры <span Times New Roman";mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol; mso-symbol-font-family:Symbol">-
AddCи МulCиз модуля Cmplx.Отметим, что объявлениеподпрограмм в интерфейсной части автоматически сопровождается их компиляцией сиспользованием дальней; модели памяти. Таким образом, обеспечивается доступ кподпрограммам из основной программы и других модулей.
Следует учесть, что всеконстанты и переменные, объявленные интерфейсной части модуля, равно как иглобальные константы и переменные основной программы, помещаются компиляторомТурбо Паскаля в общий сегмент данных (максимальная длина сегмента 65536 байт).Порядок появления различных разделов объявлений и их количество может бытьпроизвольным. Если в интерфейсной части объявляются внешние подпрограммы илиподпрограммы в машинных кодах, их тела (т.е. зарезервированное слово External,в первом случае, и машинные коды вместе со словом Inline <span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol">-
во втором) должны следовать сразу за их заголовками висполняемой части модуля (не в интерфейсной). В интерфейсной части модулейнельзя использовать опережающее описание.В интерфейсах различныхмодулей недопустимо циклическое обращение друг к другу, т.к. компилятор в этомслучае не может установить связей.
1.4 Исполняемая часть
Исполняемая часть включаетвсе подпрограммы модуля. Она может также включать локальные метки, константы,типы и переменные.
Исполняемаячасть начинается зарезервированным словом Implementation и содержит описанияподпрограмм, объявленных в интерфейсной части. В ней могут объявлятьсялокальные для модуля объекты — вспомогательные типы, константы, переменные иблоки, а также <span Times New Roman";mso-hansi-font-family:«Times New Roman»; mso-char-type:symbol;mso-symbol-font-family:Symbol">-
метки, если они используются в инициирующей части.Описанию подпрограммы,объявленной в интерфейсной части модуля, в исполняемой части долженпредшествовать заголовок, в котором можно опускать список формальных переменных(и тип результата для функции), так как они уже описаны в интерфейсной части.Но если заголовок подпрограммы приводится в полном виде, т.е. со спискомформальных параметров и объявлением результата, он должен совпадать сзаголовком, объявленным в интерфейсной части, например:
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">Unit Cmplx;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">Interface
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> type
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> complex= record;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> re,im: Real;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> end;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">Procedure AddC (x,
<span Tahoma",«sans-serif»">у<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">: complex; var r: complex);<span Tahoma",«sans-serif»">Implementation
<span Tahoma",«sans-serif»;mso-ansi-language:EN-US"><span Tahoma",«sans-serif»">ProcedureAddC;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"><span Tahoma",«sans-serif»; mso-ansi-language:EN-US">begin
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">
<span Tahoma",«sans-serif»">z.re :=<span Tahoma",«sans-serif»;mso-ansi-language:EN-US"> <span Tahoma",«sans-serif»">x.re + y.re<span Tahoma",«sans-serif»;mso-ansi-language:EN-US">;<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">
<span Tahoma",«sans-serif»">z,<span Tahoma",«sans-serif»;mso-ansi-language:EN-US">i<span Tahoma",«sans-serif»">m := x.Im * y.<span Tahoma",«sans-serif»;mso-ansi-language:EN-US">i<span Tahoma",«sans-serif»">m<span Tahoma",«sans-serif»;mso-ansi-language:EN-US">;<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">end;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">end.
Локальныепеременные и константы, а также все программные коды, порожденные прикомпиляции модуля, помещаются в общий сегмент памяти.
Вотличие от интерфейсов модулей в исполнительных частях модулей допустимоциклическое обращение друг к другу, т.к. все равно взаимодействиеосуществляется через интерфейсы, и здесь не возникает проблемы с установлениемнеобходимых связей.
1.5 Инициирующая часть
В некоторых случаях перед обращениемк модулю следует провести его инициализацию (например, установить связь с темиили иными файлами с помощью процедуры Assign,инициализировать какие-то переменные и т.д.). Необходимые действия можновыполнить в секции инициализации модуля. Эта секция начинается словом begin, после которого идут исполняемые операторы, а затемпомещается слово end. (с точкой), например:
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">begin
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> Assign(F1, ‘ FILE1.DAT ‘);
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">end.
В инициирующей частиразмещаются исполняемые операторы, содержащие некоторый фрагмент программы. Этиоператоры исполняются до передачи управления основной программе и обычноиспользуются для подготовки ее работы. Например, в них могут инициироватьсяпеременные, открываться нужные файлы, устанавливаться связи с другими ПК покоммуникационным каналам и т.п.:
<span Tahoma",«sans-serif»">UnitFileText;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"><span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> Interface
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">Procedure Prlnt (t: string);
<span Tahoma",«sans-serif»">Implementation
<span Tahoma",«sans-serif»;mso-ansi-language:EN-US"><span Tahoma",«sans-serif»; mso-ansi-language:EN-US">var f: Text;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">const
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">name = ' OUTPUT. TXT ';
<span Tahoma",«sans-serif»">ProcedurePrint
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">;<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">begin
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> WriteLn(f, s);
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">end;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">{
<span Tahoma",«sans-serif»">Начало<span Tahoma",«sans-serif»;mso-ansi-language:EN-US"> <span Tahoma",«sans-serif»">инициирующей части:<span Tahoma",«sans-serif»;mso-ansi-language:EN-US">} <span Tahoma",«sans-serif»"><span Tahoma",«sans-serif»; mso-ansi-language:EN-US">begin
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> Assign (f,name);
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">
<span Tahoma",«sans-serif»">Rewri<span Tahoma",«sans-serif»;mso-ansi-language:EN-US">t<span Tahoma",«sans-serif»">e<span Tahoma",«sans-serif»;mso-ansi-language:EN-US"> <span Tahoma",«sans-serif»">(f);<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"><span Tahoma",«sans-serif»; mso-ansi-language:EN-US">{
<span Tahoma",«sans-serif»">Конецинициирующей части:<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">}<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">end.
Следует иметь в виду, чтооператоры секции инициализации выполняются единственный раз в момент запускапрограммы.
Если инициализация модуля ненужна, то в секции помещается лишь слово end.
1.6 Компиляциямодулей
В среде Турбо Паскаляимеются средства, управляющие способом компиляции модулей и облегчающиеразработку крупных программных проектов. В частности, определены три режимакомпиляции: COMPILE, МАКЕ и BUILD. Режимы отличаются только способом связи,компилируемого модуля или основной программы с другими модулями, объявленными впредложении USES.
При компиляции модуля илиосновной программы в режиме COMPILE все упоминающиеся в предложении USES модулидолжны быть предварительно откомпилированы, и результаты компиляции помещены водноименные файлы с расширением .TPU. Например, если в программе (модуле)имеется предложение
UsesGlobal;
то на диске в каталоге, объявленном опцией UNITDIRECTORIES, уже должен находиться файл GLOBAL.TPU. Файл с расширением TPU (отангл. Turbo Pascal Unit) создается в результате компиляции модуля.
В режиме МАКЕ компиляторпроверяет наличие TPU-файлов для каждого объявленного модуля. Если какой-либоиз файлов не обнаружен, система пытается отыскать одноименный файл срасширением .PAS, т.е. файл с исходным текстом модуля, и, если .PAS-файл найден, приступает к его компиляции. Крометого, в этом режиме система следит за возможными изменениями исходного тексталюбого используемого модуля. Если в PAS-файл (исходный текст модуля) внесеныкакие-либо изменения, то независимо от того, есть ли уже в каталогесоответствующий TPU-файл или нет, система осуществляет его компиляцию передкомпиляцией основной программы. Более того, если изменения внесены винтерфейсную часть модуля, то будут перекомпилированы также и все другиемодули, обращающиеся к нему. Режим МАКЕ, таким образом, существенно облегчаетпроцесс разработки крупных программ с множеством модулей: программистизбавляется от необходимости следить за соответствием существующих TPU-файлових исходному тексту, так как система делает это автоматически.
В режиме BUILD существующиеTPU-файлы игнорируются, и система пытается отыскать (и компилировать)соответствующий PAS-файл для каждого объявленного в предложении USES модуля.После компиляции в режиме BUILD программист может быть уверен в том, что учтенывсе сделанные им изменения в любом из модулей.
Подключение модулей косновной программе и их возможная компиляция осуществляются в порядке ихобъявления в предложении USES. При переходе к очередному модулю система предварительноотыскивает все модули, на которые он ссылается. Ссылки модулей друг на другамогут образовывать древовидную структуру любой сложности, однако запрещаетсяявное или косвенное обращение модуля к самому себе. Например, недопустимыследующиеобъявления:
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">Unit A; Unit B;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">Interface Interface
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> Uses S;Uses A;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> Implementation Implementation
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">end.
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">end.
Это ограничение можнообойти, если «спрятать» предложение USESвисполняемые части зависимых модулей:
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">Unit A; Unit B;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> InterfaceInterface
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> ImplementationImplementation
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US"> Uses B;Uses A;
<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">end
<span Tahoma",«sans-serif»">.<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">end
<span Tahoma",«sans-serif»">.<span Tahoma",«sans-serif»;mso-ansi-language:EN-US">Дело в том, что ТурбоПаскаль разрешает ссылки на частично откомпилированные модули, чтоприблизительно соответствует опережающему описанию подпрограммы. Еслиинтерфейсные части любых двух модулей независимы (это непременное условие!),Турбо Паскаль сможет идентифицировать все глобальные идентификаторы в каждом измодулей, после чего откомпилирует тела модулей обычным способом.
1.7 Доступ кобъявленным в модуле объектам
Пусть, например, мы создаеммодуль, реализующий арифметику комплексных чисел (напомню, что такая арифметикани в стандартном Паскале, ни в Турбо Паскале не предусмотрена). К сожалению, вТурбо Паскале нельзя использовать функции, значения которых имели бы структурированныйтип (запись, например), поэтому арифметика комплексных чисел реализуетсячетырьмя процедурами: <span Tahoma",«sans-serif»; mso-ansi-language:EN-US">
<span Tahoma",«sans-serif»;mso-ansi-language:EN-US">{UNIT Cmplx};
INTERFACE
{.............................................}
type
complex = record;
re, Im: real;
end
Procedure AddC (x,
Procedure SubC (x, <span Tahoma",«sans-serif»">у<span Tahoma",«sans-serif»;mso-ansi-language:EN-US">: complex;var z: complex);
Procedure MulC (x, <span Tahoma",«sans-serif»">у<span Tahoma",«sans-serif»;mso-ansi-language:EN-US">: complex;var z: complex);
Procedure DIvC (x, <span Tahoma",«sans-serif»">у<span Tahoma",«sans-serif»;mso-ansi-language:EN-US">: complex;var z: complex);
const
<span Tahoma",«sans-serif»">с<span Tahoma",«sans-serif»; mso-ansi-language:EN-US">: complex = (re: 0.1; Im: -1);
IMPLEMENTATION
{..........—. —… — — — ——… }
PROCEDURE AddC;
begin
z.re := x.re + y.re;
z. Im := x. im + <span Tahoma",«sans-serif»">у<span Tahoma",«sans-serif»;mso-ansi-language:EN-US">. Im;
end{AddC};
PROCEDURESubC;
begin
z .re := x.re — y.re;
z. im := x.Im — y. Im;
end {SubC};
PROCEDUREMulC;
begin
z.re := x.re * y.re — x.im * y.im;
z.lm:= x.re * y.im + x.im * y.re;
end{MulC};
PROCEDUREDivC;
var zz: real;
begin
zz :=sqr(y.re) + sqr(y.im);
z.re := (x.re * y.re + x.im * y.im) /zz;
z.lm:= (x.re * y.im — x.lm * y.re) / zz;
end{DIvC}:
END.
Текст этого модуля следуетпоместить в файл CMPLX.PAS. Его можно откомпилировать, создав TPU-файл, после чего программе станут доступныпроцедуры из новой библиотеки.
1.8 Стандартныемодули
В Турбо Паскале имеетсявосемь стандартных модулей, в которых содержится большое число разнообразныхтипов, констант, процедур и функций. ЭтимимодулямиявляютсяSYSTEM, DOS, CRT, PRINTER, GRAPH, OVERLAY, TURBO3 и</s