Двухуровневая структура программ

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

- внешние программы (с пачкой внутренних программ) имеют независимые системы обозначений и могут компилироваться отдельно;

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

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

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

Во внешнюю программу после оператора 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;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.