"Ich kämpfe nicht so sehr gegen Florencio Campomanes, den Präsidenten des Weltschachbundes, als Person, sondern gegen das System, das Phänomene wie Campomanes produziert".
Gari Kasparov
Weitere Einschränkungsmöglichkeiten für den Zugriff auf Objekte eines Moduls über die USE-Anweisung bestehen durch die Attribute PRIVAT und PUBLIC. Auf Objekte, die mit dem Attribut PRIVAT versehen sind, kann außerhalb des Moduls nicht zugegriffen werden.
Auf Objekte, die mit dem Attribut PUBLIC versehen sind, kann von anderen Programmeinheiten über die USE-Anweisung zugegriffen werden.
Beispiel für ein Modul, der nur Datenobjekte enthält:
MODULE DATEN PRO2
REAL A(10), B, C(20, 20)
INTEGER, INITIAL:: I = 0
INTEGER, PARAMETER, PRIVATE:: J= 10
COMPLEX D/J, J)
END MODULE
Möglichkeiten der Benutzung:
USE DATEN PRO 2
In diesem Fall kann auf alle Datenobjekte mit Ausnahme von J zugegriffen werden, weil nur J als PRIVAT spezifiziert wurde.
USE DATEN PRO2, ONLY: A, B, D
In diesem Beispiel kann nur auf die Variablen A, B, und D zugegriffen werden.
USE DATEN PRO2, A = > ALPHA, D = > DELTA
In diesem Fall werden die importierten Variablen A und D im Programm in ALPHA und DELTA umbenannt. Das ist zum Beispiel erforderlich, wenn bereits andere Variable mit den Namen A und D im Programm existieren.
Datenstruktur im Modul
Datenstrukturen können ebenfalls in einem Modul definiert werden. Nur auf diese Art und Weise kann von verschiedenen Programmeinheiten auf dieselben Datenstrukturen zugegriffen werden.
Beispiel:
MODUL STRUKTUREN
TYPE PERSON
INTEGER ALTER
CHARACTER (LEN = 50) NAME
END TYPE PERSON
END MODULE
Globale Matrizen mit dynamischer Speicherverwaltung
Viele Programme müssen umfangreiche globale Matrizen verarbeiten, deren Speicherbedarf vor der Programmausführung nicht bekannt ist. Ein einfaches Beispiel für solch ein Programm ist das folgende:
PROGRAM HAUPTPROGRAMM
CALL CONFIGURE ARRAYS
CALL COMPUTE
END PROGRAM HAUPTPROGRAMM
MODULE WORK ARRAYS
INTEGER N
REAL, ALLOCATABLE, SAVE:: A(:), B(:,:), C(:,:)
END MODULE WORK ARRAYS
SUBROUTINE CONFIGURE ARRAYS
USE WORK ARRAYS
READ (INPUT, *) N ,
ALLOCATE (A(N), B(N,N),C(N,N,2*N))
END SUBROUTINE CONFIGURE
ARRAYS
SUBROUTINE COMPUTE
USE WORK ARRAYS, ONLY A, B, C
!Bearbeitung der Matrizen A, B und C
END SUBROUTINE COMPUTE
Beim Aufruf des Unterprogramms CONFIGURE ARRAYS wird mit den Matrizen A, B und C dynamisch Speicher zugewiesen; nach Ausführung der ALLOCATE-Anweisung kann mit ihnen gearbeitet werden. In diesem Beispiel sollen die Matrizen in dem separaten Unterprogramm COMPUTE bearbeitet werden. Alle Unterprogramme, die auf diese Matrizen zugreifen wollen, brauchen nur den Modul WORK ARRAYS zu importieren.
Prozedur-Bibliotheken
Wenn man eine Bibiothek aus externen Unterprogrammen schreibt, kann man sämtliche Schnittstellen in einem Modul zusammenfassen. Dies erlaubt auch die Benutzung der Schlüsselwörter und optionaler Argumente; außerdem können die Unterprogramm-Aufrufe dadurch statisch auf ihre Korrektheit geprüft werden.
Beispiel:
MODULE MATHE BIBLIOTHEK
INTERFACE
FUNCTION COTAN (X)
REAL(* *), INTENT(IN):: X
REAL (EFFECTIVE_PRECISION(X), EFFECTIVE EXPONENT
RANGE(X)) COTAN
END INTERFACE
...
END MODULE
Dieses Modul erlaubt den Aufruf der Funktion COTAN:
USE MATHE BIBLIOTHEK
...
A = COTAN (X = ARCUS)
...