- •Вопрос36. Двухуровневая структура программ. Присоединение (ассоциирование) данных носителя к процедуре
- •Вопрос37. Трёхуровневая структура модуля. Присоединение (ассоциирование) данных модуля к программе
- •Вопрос 38. Модульные, внешние и внутренние программы
- •Вопрос 41. Оператор и конструкция forall
- •Вопрос 42. Оператор и конструкция where
Вопрос36. Двухуровневая структура программ. Присоединение (ассоциирование) данных носителя к процедуре
Решая сложную задачу, программист выстраивает систему обозначений объектов, комбинируя компоненты проекта:
внешние программы, имеющие независимые системы обозначений, могут компилироваться отдельно от других ПЕ проекта;
вложенные процедуры, не будучи самостоятельными компонентами, импортируют обозначения носителя данных (внешней ПЕ) и не могут компилироваться отдельно;
внешние и, транзитом, внутренние процедуры импортируют общедоступные обозначения модуля;
сопоставляются аргументы вызывающей/вызываемой программ.
Во внешнюю программу после оператора contains может быть вложена одна или несколько внутренних процедур. Внутренняя процедура компилируются только в составе внешней ПЕ, внутреннюю процедуру нельзя вызывать извне. Кроме того, они импортируют обозначения носителя данных – внешней ПЕ. Программа может быть без оператора contains и без внутренних процедур, как в Фортране-77– не было внутренних процедур.
П р о г р а м м н ы е е д и н и ц ы (ПЕ) |
||||
П р о г р а м м ы |
Модуль как хранилище данных (только внешний) |
|||
Главная программа |
Процедуры |
|||
Подпрограмма |
Функция |
|||
Program P |
Subroutine S(аргументы) |
Function F(аргументы) |
Module M |
|
ПЕ может быть только внешней |
ПЕ может быть внешней внутренней, модульной |
ПЕ может быть внешней внутренней, модульной |
Mодульные процедуры |
|
Объект модуля доступен по имени в ПЕ, где модуль использовали |
Разновидности программ.
В проекте одна главная программа и любое количество процедур и модулей. В таблице, приведенной ниже, объекты пронумерованы [1-7], а курсивом выделены части, необязательные в той или иной из перечисленныхразновидностей программных единиц:
у внешней функции (Function) аргументы обычно только входные, в наличии все виды объектов [1-7], но видимыми являются [1-4];
у внешней подпрограммы (Subroutine) аргументы могут быть входными, входными-выходными и выходными, и с ее именем [2] не связывают результатов;
модульная процедура (Function, Subroutine) аналогична внешней процедуре, но вложена в модуль и потому не является самостоятельной. В ПЕ, использующей модуль, можно вызывать модульные процедуры, но нельзя вызывать их внутренние процедуры;
главная программа (Program) может быть только внешней, не имеет аргументов [3] и с ее именем [2] не связывают результатов;
внутренняя процедура не самостоятельна – она вложена во внешнюю или в модульную программу, импортируя её обозначения. Саму её не компилируют и не вызывают извне.
Видимыми объектами являются [1-7].
Заголовок имя_внешней_программы(аргументы) ! уровень 1 [1] use имя_модуля ! делает объекты модуля видимыми [2] описание имя_внешней_программы ! только для функции [3] описание аргументов ! видимы из внутренних процедур [4] описание переменных ! видимы из внутренних процедур действия над всеми видимыми объектами [1-4] внешней программы имя_внешней_программы = выражение ! только для функции [2] contains ! уровень 2 - внутренние процедуры |
||
|
Заголовок имя_внутренней_процедуры(аргументы) [5] описание имя_внутренней_процедуры ! только для функции [6] описание аргументов [7] описание переменных действия над всеми (внутри и вне) видимыми объектами [1-7] имя_внутренней_процедуры=выражение ! для функции [5] end Заголовок имя_внутренней_процедуры .. .. пачка внутренних_процедур.. .. |
|
end Заголовок имя_внешней_программы |