Двухуровневая структура программ
Решая сложную задачу, программист выстраивает систему обозначений объектов, комбинируя компоненты проекта:
- внешние программы (с пачкой внутренних программ) имеют независимые системы обозначений и могут компилироваться отдельно;
- внутренние процедуры, будучи вложены во внешние программы, не являются самостоятельными и импортируют обозначения носителя данных, а потому не могут компилироваться отдельно;
- внешние и, транзитом, внутренние процедуры импортируют общедоступные обозначения модуля;
- сопоставляются аргументы вызывающей/вызываемой программ.
Во внешнюю программу после оператора contains может быть вложена одна или несколько внутренних процедур. Внутренняя процедура компилируются только в составе внешней ПЕ, внутреннюю процедуру нельзя вызывать извне. Кроме того, внутренние процедуры импортируют обозначения носителя данных – внешней ПЕ. Программа может быть без оператора contains и без внутренних процедур, как в Фортране-77, где не было внутренних процедур.
Разновидности программ.
В проекте одна главная программа и любое количество процедур и модулей. В таблице 35, приведенной ниже, объекты пронумерованы [1-7], а курсивом выделены части, необязательные в той или иной из перечисленных разновидностей программных единиц:
1. у внешней функции (Function) аргументы обычно только входные, в наличии все виды объектов [1-7], но видимыми являются [1-4];
2. у внешней подпрограммы (Subroutine) аргументы могут быть входными, входными - выходными и выходными, и с ее именем [2]не связывают результатов;
3. модульнаяпроцедура (Function, Subroutine) аналогична внешней процедуре, но вложена в модуль и потому не является самостоятельной. В ПЕ, использующей модуль,можно вызывать модульныепроцедуры, но нельзя вызывать их внутренние процедуры;
4. главная программа (Program) может быть только внешней, не имеет аргументов [3] и с ее именем [2]не связывают результатов;
внутренняя процедура не самостоятельна – она вложена во внешнюю или в модульную программу, импортируя её обозначения. Саму её не компилируют и не вызывают извне.
Таблица 35.
Видимыми объектами внешней_программы являются [1-7].
Заголовок имя_внешней_программы(аргументы) ! уровень 1 [1] use имя_модуля ! делает объекты модуля видимыми [2] описание имя_внешней_программы ! только для функции [3] описание аргументов ! видимы из внутренних процедур [4]описание переменных ! видимы из внутренних процедур действия над всеми видимыми объектами [1-4] внешней программы имя_внешней_программы = выражение ! только для функции [2] contains ! уровень 2 -внутренние процедуры | ||
Заголовок имя_внутренней_процедуры(аргументы) [5] описание имя_внутренней_процедуры ! только для функции [6] описание аргументов [7] описание переменных действия над всеми (внутри и вне) видимыми объектами [1-7] имя_внутренней_процедуры=выражение ! для функции [5] end Заголовок имя_внутренней_процедуры .. ..пачкавнутренних_процедур.. .. | ||
end Заголовокимя_внешней_программы |
6.2. Трёхуровневая структура модуля
Модуль, как трёхуровневая структура, может содержать (contains) модульные процедуры, которые, в свою очередь, могут содержать (contains) внутренние процедуры. Имена общедоступных public-объектов модуля - заимствуют его модульные и их внутренние процедуры. Эти имена также заимствуют все, кто использует этот модуль, как-то: другие модули, внешние программы и, транзитом, их внутренние процедуры. Атрибут public по умолчанию имеют все объекты модуля. Модульныепроцедуры также имеют атрибут public и их можно вызывать из используемого модуля. В то же время их внутренние процедурынедоступны в программной единице, использующей модуль.Private-объектымодуля доступнытолькомодульным процедурам и их внутренним процедурам. Глобальный объект проекта можно однократно описать в модуле. Затем в проекте любой сложности, используя модуль, можно получить доступ к его объектам и модульным процедурам. Важно иерархическое описание объектов, которое реализуется через иерархию использования модулей.
Таблица 36. Видимыми объектами модуля являются [1-6]
Moduleимя_модуля! уровень 1[1] use имя_другого_модуля и его объекты [2] описания производных типов данных [3] public! описания общедоступных переменных (по умолчанию) [4] private! описания переменных, доступных только в модуле [5] описания интерфейсов [6] описания списков Namelist ! д е й с т в и й в м о д у л е н е т contains |
.. .. пачка модульных процедур…. End module имя_модуля |
Дата добавления: 2016-02-13; просмотров: 950;