Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
8-14.docx
Скачиваний:
11
Добавлен:
01.03.2025
Размер:
52.71 Кб
Скачать

Interface type

Complex = record

re,im: real

end;

Function AddC(x,y: Complex): Complex;

Function MulC(x,y: Complex): Complex;

Implementation

Function AddC(x,y: Complex): Complex;

begin

end; Function MulC;// Вариант описания подпрограммы без

// повторения списка параметров

begin

end;

end.

Х отя допускается краткое объявление заголовка подпрограммы ( как в предшествующем примере—функции MulC), тем не менее использовать такую форму в серьезной программе не рекомендуется: перечень параметров непосредственно в заголовке подпрограммы облегчает чтения кода и понимания деталей реализации алгоритма.

Повторение заголовка в исполняемой части должно быть полным и точным. Если бы мы использовали заголовок

Function AddC(x,z: Complex): Complex; begin

end;

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

ИНИЦИИРУЮЩАЯ И ЗАВЕРШАЮЩАЯ ЧАСТИ

Инициирующая и завершающая части чаще всего отсутствуют

Вместе с начинающим их словами initialization и finalization.

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

Конфликт имен

Язык Delphi поддерживает два вида импортируемых идентификаторов: неквалифицированные и квалифицированные. В исходном тексте Delphi-модуля импортируемые идентификаторы обычно используются как есть (неквалифицирующий импорт), без префиксирования именем соответствующего модуля. Могут возникать ситуации, когда идентификатор с одним и тем же именем (напр., константа maxndx) описан в двух разных Delphi-модулях, причем оба импортируются данным модулем. Как быть? В этом случае применяется "правило последнего", т.е. без всякого сообщения об ошибке коллизия считается допустимой и применяется идентификатор из того модуля, который в uses-списке импорта стоит ближе к концу (т.е. отменяет совпадение предшествующего).

Если требуется явно указать конкретный идентификатор, то Delphi предоставляет возможность квалифицированных идентификаторов (напр., MyModule2.maxndx). В языке Modula-2 также поддерживаются оба вида импортируемых идентификаторов, но без права разрешения коллизии по умолчанию (это считается ошибкой, обнаруживаемой компилятором). В языке Оберон допустимы только квалифицированные идентификаторы, что снимает подобные проблемы. Более того, для удобства использования Оберон поддерживает синонимы модулей. Другими словами, в списке импорта можно вводить соответствие внешнего имени (импортируемого модуля) его внутреннему имени в данном модуле (синоним, псевдоним). Это позволяет снять зависимость по разработке модулей разными группами, которые не координированы по формированию имен.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]