gtool4/Fortran 90 リファレンス - ライブラリ概観

オブジェクト指向構成

2001年06月04日 豊田英司


オブジェクト指向スタイル

gtgraph, gtdata ライブラリは独自のオブジェクト指向スタイルで記述されています。

実例を示しましょう。

データアクセスをするには必ず変数を開かなくてはなりません。変数を開くというのを Fortran ではどう書くかというと、たとえば

use gtool
type(GT_VARIABLE):: var
type(VSTRING):: filename
  ...
filename = "gtool.nc"
call Open(var, filename)

のようになります。ある gtool 変数というのは type(GT_VARIABLE) 型の (Fortran の) 変数であらわされます。これを Open というサブルーチンに突っ込むと、変数が開かれるわけです。ではこの Open の実体はどこにあるかというと、gtdata_generic モジュールにその手がかりが書かれています。

! 一部省略があります
interface open
    subroutine GTVarOpen(var, url, writable, err)
        type(GT_VARIABLE), intent(inout):: var
        type(VSTRING), intent(in):: url
        logical, intent(in), optional:: writable
        logical, intent(out), optional:: err
    end subroutine
    subroutine GTVarOpenByDimOrd(dimvar, var, dimord, ount_compact, err)
        type(GT_VARIABLE), intent(inout):: dimvar
        type(GT_VARIABLE), intent(in):: var
        integer, intent(in):: dimord
        logical, intent(in), optional:: count_compact
        logical, intent(out), optional:: err
    end subroutine
end interface

ここで open というインターフェイスは GTVarOpen と GTVarOpenByDimOrd という2つのサブルーチンが提供するのであるといっています。上の例をコンパイルすると、単に Open と書いてあるところでコンパイラが引数リストに合う GTVarOpen を選択してくれるのです。GTVarOpen については別に書いたのでそちらを見てくださいね。

Fortran 90 言語では Open のような interface 文に書かれている名前を総称名、GTVarOpen などのような本当の名前を個別名といいます。引数の型の違うサブルーチンは同じ総称名を持つことができます。同様に、引数の型の違う関数は同じ総称名を持つことができます。gtool4/Fortran 90 ではこの総称名というメカニズムを使って多数のサブルーチンや引数を整理しています。

構造型名や総称名のリストは別のページにしました

動的多相性をポインタで実現するアイデアは V.K.Decyk et al. (1998) から得たものです。これによって gtgraph 層はすべて GT_DEVICE と GT_OBJECT の操作であるかのように利用できますし、gtdata 層はすべて GT_VARIABLE の操作であるかのように利用できます。