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

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

Модуль, как трёхуровневая структура, может содержать модульные процедуры, которые, в свою очередь, могут содержать внутренние процедуры. Имена общедоступных public-объектов (в модуле атрибут public – по умолчанию) - заимствуют его модульные и их внутренние процедуры, а также все, кто использует этот модуль, как-то: другие модули, внешние программы и, транзитом, их внутренние процедуры. Можно вызывать модульные процедуры используемого модуля, тогда как их внутренние процедуры недоступны. Private-объекты модуля доступны только модульным процедурам и их внутренним процедурам. Использование модулей позволяет глобальный объект проекта описать однократно в модуле. Затем в проекте любой сложности, используя модуль, получить доступ к его объектам и модульным процедурам. Немаловажно иерархическое описание объектов, которое реализуется через иерархию использования модулей.

Module имя_модуля ! уровень 1 [1] use имя_другого_модуля

[2] описания производных типов данных

[3] public ! описания общедоступных переменных (по умолчанию)

[4] private ! описания переменных, доступных только в модуле

[5] описания интерфейсов

[6] описания списков Namelist

! д е й с т в и й в м о д у л е н е т contains

End module имя_модуля

Вопрос 38. Модульные, внешние и внутренние программы

Когда проект становится не простым для восприятия, самое время подразделить текст на так называемые процедуры. Часть кода, которая повторяется неоднократно, или легко управляется и подстраивается аргументами образует Процедуру.

Различают 2 вида процедур:

  • процедуру с единственным результатом можно оформить как функцию Function

  • процедуру с любым количеством результатов оформляют как подпрограмму Subroutine

Следует понимать, что системы обозначений вызывающей программы и вызываемой процедуры совершенно независимы. Данные между вызывающей программой и вызываемой процедурой передаются в обоих направлениях и могут быть входными IN, выходными OUT и входными-выходными INOUT. При вызове процедуры надо соблюдать соответствие типов аргументов вызывающей программы и вызываемой процедуры. Если в главной программе надо вычислить функцию poisson(m,s) для аргументов m и s, то эти аргументы в порядке следования попарно должны соответствовать типам аргументов функции poisson. Нарушения приводят к сообщениям об ошибках несоответствия типов.

Fortran-90 декларировал еще 2 способа общения между вызывающей программой и вызываемой процедурой:

  • присоединение данных носителя

  • присоединение данных модуля

Имеется 4 вида программных единиц

  • Program Module subroutine Function

Процедура-функция Function - это функция, которая слишком сложна, чтоб её определить однострочной операторной функцией, как это делалось в предыдущих уроках.

Программные единицы в Fortran-90 подразделяются на

  • внешняя программная единица с собственной системой обозначений - она может компилироваться самостоятельно - главная программа и модуль могут быть только внешними программными единицами - subroutine или function могут быть и внешними, и внутренними программными единицами

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

  • внешняя программа может содержать несколько внутренних процедур после единственного contains и до её end

  • сложнее устроен модуль - он содержит модульные программы, каждая из которых может содержать внутренние процедуры

Внешняя процедура-функция Fortran-90 снимает ряд ограничений, присущих внутренним процедурам-функциям. Их свойства

  1. собственно определение внешней функции - это непосредственно текст до contains, если он есть и end после пачки внутренних процедур, в которых видны объекты внешней программы (но не наоборот)

  2. процедура-функция содержит объявления объектов и необходимые действия; причем где-либо среди действий должна быть хотя бы одна строчка, присваивающая функции значение

  3. Внешняя процедура-функция может быть вызвана в любом месте проекта

  4. Внешняя процедура-функция имеет собственную систему обозначений и может компилироваться самостоятельно

  5. Внешняя процедура-функция может использовать модуль, присоединяя описанные в нем общедоступные объекты и вызывая модульные процедуры