Реферат: Модули и объекты в языке Турбо Паскаль 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,

<span Tahoma",«sans-serif»">у<span Tahoma",«sans-serif»;mso-ansi-language:EN-US">:complex; var z: complex);
            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,

<span Tahoma",«sans-serif»">у<span Tahoma",«sans-serif»;mso-ansi-language:EN-US">: complex:var z: complex); 
                              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

еще рефераты
Еще работы по программному обеспечению