gt4f90io リファレンス

オブジェクト指向構成

2004年02月16日 森川靖大


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

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

実例を示しましょう。

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

use gt4f90io

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 などのような本当の名前を個別名といいます。引数の型の違うサブルーチンは同じ総称名を持つことができます。同様に、引数の型の違う関数は同じ総称名を持つことができます。gt4f90io ではこの総称名というメカニズムを使って多数のサブルーチンや引数を整理しています。

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

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