Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы 36-42.docx
Скачиваний:
3
Добавлен:
27.09.2019
Размер:
38.69 Кб
Скачать

Вопрос36. Двухуровневая структура программ. Присоединение (ассоциирование) данных носителя к процедуре

Решая сложную задачу, программист выстраивает систему обозначений объектов, комбинируя компоненты проекта:

    • внешние программы, имеющие независимые системы обозначений, могут компилироваться отдельно от других ПЕ проекта;

    • вложенные процедуры, не будучи самосто­ятельными компонентами, импортируют обозначения носителя данных (внешней ПЕ) и не могут компилироваться отдельно;

    • внешние и, транзитом, внутренние процедуры импортируют общедоступные обозначения модуля;

    • сопоставляются аргументы вызывающей/вызываемой программ.

Во внешнюю программу после оператора contains может быть вложена одна или несколько внутренних процедур. Внутренняя процедура компилируются только в составе внешней ПЕ, внутреннюю процедуру нельзя вызывать извне. Кроме того, они импортируют обозначения носителя данных – внешней ПЕ. Программа может быть без оператора contains и без внутренних процедур, как в Фортране-77– не было внутренних процедур.

П р о г р а м м н ы е е д и н и ц ы (ПЕ)

П р о г р а м м ы

Модуль как хранилище данных (только внешний)

Главная программа

Процедуры

Подпрограмма

Функция

Program P

Subroutine S(аргументы)

Function F(аргументы)

Module M

ПЕ может быть только внешней

ПЕ может быть внешней внутренней, модульной

ПЕ может быть внешней внутренней, модульной

Mодульные процедуры

Объект модуля доступен по имени в ПЕ, где модуль использовали

Разновидности программ.

В проекте одна главная программа и любое количество процедур и модулей. В таблице, приведенной ниже, объекты пронумерованы [1-7], а курсивом выделены части, необязательные в той или иной из перечисленныхразновидностей программных единиц:

  1. у внешней функции (Function) аргументы обычно только входные, в наличии все виды объектов [1-7], но видимыми являются [1-4];

  2. у внешней подпрограммы (Subroutine) аргументы могут быть входными, входными-выходными и выходными, и с ее именем [2] не связывают результатов;

  3. модульная процедура (Function, Subroutine) аналогична внешней процедуре, но вложена в модуль и потому не является самостоятельной. В ПЕ, использующей модуль, можно вызывать модульные процедуры, но нельзя вызывать их внутренние процедуры;

  4. главная программа (Program) может быть только внешней, не имеет аргументов [3] и с ее именем [2] не связывают результатов;

  5. внутренняя процедура не самостоятельна – она вложена во внешнюю или в модульную программу, импортируя её обозначения. Саму её не компилируют и не вызывают извне.

Видимыми объектами являются [1-7].

Заголовок имя_внешней_программы(аргументы) ! уровень 1

[1] use имя_модуля ! делает объекты модуля видимыми [2] описание имя_внешней_программы ! только для функции [3] описание аргументов ! видимы из внутренних процедур

[4] описание переменных ! видимы из внутренних процедур

действия над всеми видимыми объектами [1-4] внешней программы имя_внешней_программы = выражение ! только для функции [2]

contains ! уровень 2 - внутренние процедуры

Заголовок имя_внутренней_процедуры(аргументы)

[5] описание имя_внутренней_процедуры ! только для функции [6] описание аргументов

[7] описание переменных

действия над всеми (внутри и вне) видимыми объектами [1-7] имя_внутренней_процедуры=выражение ! для функции [5] end Заголовок имя_внутренней_процедуры .. .. пачка внутренних_процедур.. ..

end Заголовок имя_внешней_программы