У вас вопросы?
У нас ответы:) SamZan.net

Лекция 19 413 Модули

Работа добавлена на сайт samzan.net: 2015-07-10

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 4.2.2025

Лекция № 19

4.13. Модули.

Модуль - это отдельно компилируемая, специальным образом оформленная программная единица, которая может содержать описание типов данных, описание переменных процедуры и функции. Модуль - это мощное средство для создания библиотек прикладных подпрограмм.

Расположение модуля и ссылка на него.

Модуль транслируется отдельно от программы и размещается в отдельном сегменте памяти. Для того чтобы можно было использовать в программе тот или иной модуль, необходимо указать его имя в разделе модулей, который располагается сразу после заголовка программы и обозначается ключевым словом Uses.

Например, запись вида

                                          Program Pm1;

                                           Uses  Mtx, Mfa ;

означает, что в программе Pm1 используется два модуля : Mtx и Mfa.

Правило. Если какой либо модуль в списке модулей использует другие модули из этого списка, то он должен быть указан после всех используемых модулей. Смысл использования модулей заключается в том, что при трансляции программы составные части модуля будут помещены в соответствующие разделы программы.

Структура модуля.

        Unit <имя> ;                                - заголовок модуля

        interface

         . . . . . . . . . . .                          интерфейсная часть

        implementation

        . . . . . . . . . . . .                         исполняемая часть

        initialization

         . . . . . .                                   инициирующая часть (необязательна)

        finalization

        . . . . . . . . . .                           завершающая часть

        END.

  Здесь Unit (единица) – зарезервированное слово; <имя> - имя модуля (формируется пр общим правилам); interface (интерфейс), implementation (выполнение), initialization (инициализация), finalization (завершение) – зарезервированные слова, открывающие соответствующие разделы модуля. Как видно из структуры модуль состоит из заголовка и четырех разделов любой из которых может быть пустым.

4.13.1. Составные части модуля.

Заголовок модуля состоит из ключевого слова UNIT и имени модуля. Имя формируется по общим правилам. Для правильной работы среды ТР имя модуля должно совпадать с именем дискового файла в котором располагается исходный текст модуля. Например, если заголовок модуля имеет вид

                         Unit Global ;

то текст модуля должен быть помещен в файл

                            Global . pas .

   Модуль может использовать другие модули. Как и в случае главной программы, используемые модули объявляются с помощью ключевого слова Uses. Объявление используемых модулей может располагаться после зарезервированных слов interface и implementation.

   Пример.

                          Unit  MyMod;

                            interface

                               Uses ModA, ModB;

                            . . . . . . . . . . .       

                            implementation

                               Uses ModC, ModD;

                                   . . . . . . . . . . . . .

4.13.2. Интерфейсная секция.

Эта секция предназначена для связи модуля с программой, которая использует этот модуль. В ней можно указывать:

модули, используемые данным модулем;

константы , типы данных, переменные;

заголовки процедур и функций.

Все эти описания делаются по правилам языка ТР. Все, что указано в интерфейсной секции является видимым для программы, поэтому данные указанные в этой секции являются глобальными.

   При описании процедур и функций в интерфейсной секции записываются только заголовки процедур и функций.

4.13.3. Секция реализации (implementation).

В этой секции размещаются тексты процедур и функций, объявленных в интерфейсной секции, а также здесь можно объявлять локальные для модуля объекты – вспомогательные типы, константы, переменные и подпрограммы

    При записи подпрограмм заголовки процедур и функций можно указывать без описания списка формальных параметров. Но если заголовок подпрограммы приводится в полном виде (со списком формальных параметров) он должен совпадать с заголовком, объявленным в интерфейсной секции. Запись текста подпрограммы без указания списка формальных параметров является плохим стилем программирования – использовать такой способ записи в серьезных программах не рекомендуется. Указание перечня формальных параметров непосредственно в заголовке подпрограммы облегчает чтение кода и понимание алгоритма.

      Инициализирующая секция предназначена для размещения операторов, которые выполняются до передачи управления основной программе и обычно используются для подготовки ее работы (например, инициализация переменных, открытие нужных файлов и т.п.)

   Завершающая секция предназначена для указания операторов, которые выполняются после завершения работы основной программы (освобождение ресурсов, закрытие файлов). Если эти две секции пустые, то зарезервированные слова initialization и finalization не указываются.

Пример. Запишем модуль в котором:

определяется константа МУ = 900;

реализуется процедура (имя PV) перестановки двух переменных Р1 и Р2;

реализуется функция (имя Мах) определения максимального значения из двух переменных Р3 и Р4.

                                       Unit Prs;

                                       Interface

                                           Const My = 900;

                                           Procedure Pv( Var P1, P2 : Integer);

                                     Function Max (P3, P4 : Extended) : Extended;

                                     Implementation

      Procedure Pv( Var P1, P2 : Integer);

       Var S : Integer;

      Begin

      S := P1 ; P1 : = P2 ; P2 : = S

       End ;                {конец процедуры PV}

       Function Max (P3, P4 : Extended) : Extended;

      Begin

           If  P3 >P4  Then   Max : = P3

                              Else   Max : = P4

       End ;         {конец функции Max}

END .

     В процедуре Pv используется внутренняя переменная для запоминания значения переменной P1.

      Пример программы использующей модуль PRS. Пусть в программе РХ надо поменять местами переменные К и М целого типа и вычислить переменную У как сумму переменной Z и максимального значения из переменных А и В. Фрагмент такой программы можно записать так

Program  MOD;

Uses  PRS ;

         .  .  .  .  .  .  .

    Var   Y , A , B , Z : Real ;

                       K , M : Integer ;

           .  .  .  .  .  .  .

     Begin

          .  .  .  .  .  .

      PV ( K , M ) ;

      Y : = Z + MAX ( A , B ) ;

            .  .  .  .  .

Вопрос ? Что будет если в модуле и программе определяются переменные с одинаковыми именами?

Правило. Если в модуле и программе, использующей этот модуль, объявляются одинаковые имена (переменные, константы, подпрограммы), то при использовании в тексте программы действует последнее объявление, то есть объявление в программе. Чтобы можно было использовать подобные имена из модуля необходимо записывать составное имя в виде

                                 имя модуля . имя переменной  

Пример.

Program  USMOD ;

  Uses  PRS ;

  Const  My = 200 ;

  Var Tk , Mz : Integer ;

      Begin

       .  .  .  .  .  .  .

       Tk : = My + 25 ;   {Tk = 225}

        Mz : = Prs . My + 25 ;  { Mz = 115 } 

                       4.14. Типизированные константы

   В Delphi (и в Турбо Паскале) можно использовать типизированные константы. В отличие от нетипизированных констант, объявляемых в разделе CONST, типизированные константы можно изменять в процессе выполнения программы. Фактически они представляют собой переменные, которые получают начальные значения до начала выполнения программы. В процессе выполнения программы им можно присваивать новые значения также как и обычным переменным соответствующего типа.

   Замечание. Изменять значения типизированных констант можно во всех версиях Delphi, но в версиях 6 и 7 надо установить флажок Assignable typed constants на вкладке Project>options>compiler.

   Типизированная константа приобретает указанное в ее объявлении значение только один раз – до начала выполнения программы. При повторном входе в блок, в котором она объявлена, инициализация не производится и она сохраняет то значение, которое имела к моменту выхода из данного блока.

   Типизированные константы объявляются в разделе Const. Форма объявления имеет вид

                            <идентификатор>  : < тип>  = <значение>

  Здесь <идентификатор>  - имя константы; < тип> -тип константы; <значение> - значение константы.

Пример.                      X : Extended = 1.25;

                                  Max : Integer  = 50;

                                  Sm : char         = 'Y' ;

                                  St  : String    = '*****';

  Правила. Нельзя использовать типизированные константы в качестве границ диапазона. Нельзя указывать в левой части список идентификаторов.

Следующие записи является ошибочными

                                    Ms : Array [0 .. Max] of Extended;

                                     M, N, J  : Integer = 1;

  При объявлении констант массивов список начальных значений элементов массива заключается в круглые скобки. Разделителем значений в скобках является символ "запятая".

Пример.                            Const

                                            Msa : Array [1 . . 4 ] Of  Integer  = (0, 1, 2, 3);

  При объявлении многомерных констант массивов самый правый индекс изменяется быстрее всего. Множество констант, соответствующих каждому измерению, заключается в дополнительные круглые скобки и отделяется от соседнего множества запятыми.

Пример.

                                      Const

                                          Msb : Array [ 1 .. 3, 1 .. 4 ] of Integer =

                                                      ((1, 2, 3, 4),

                                                             (5, 6, 7, 8),

                                                                 (9, 10, 11, 12));

  Нетрудно заметить, что набор значений для двумерного массива располагается по строкам.




1. ПОЯСНИТЕЛЬНАЯ ЗАПИСКА 1
2. Прибыли и убытки
3. Тема- Фітомеліоративна діяльність рослинного покриву
4. Енисейский меридиан п
5. Шпаргалка Издательский договор
6. Нижегородский государственный университет им5
7. революционной романтикой полотна о Гражданской и Великой Отечественной войнах цикл Годы боевые 1961; Кр
8. Баренц Виллем
9. Современные способы страхования валютных рисков Форвардные, фьючерсные, опционные сделки, сделки своп
10. тематических моделей систем Введение