Wort der Woche

15.01.1988

"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)

...