Fortranでオブジェクト指向プログラミング

Fortran でオブジェクト指向プログラミングしてみようと思います。基本的に Fortran90 の知識が必要です。でもって使うのは Fortran2003 です。Fortran90 がわからない人はNAGのFortran入門を一通り読んでください。NAGのWebページにはFortran 2003入門もあります。下手な入門書を買って読むよりも NAG のページを読む方が良かったりします。

オブジェクト指向プログラミングって?

そもそもオブジェクト指向 って?っていうことで、まぁ…なんというか…その…オブジェクト主体で考えるプログラミングです…
大きく分けてクラスベースとプロトタイプベースの2つがあるわけですが、前者だと構造体を拡張したクラスでもってひな形を定義してそれでプログラミングしていけばいいわけです。

もうちょっというと、プログラミング言語には普通、基本的な型が用意されています。整数型とか実数型とか文字列型とかです。Fortran だと integer とか real とか character とかで宣言します。でもって、異なる型をひとまとめにして、新たな『型』を定義することができます。これが構造体ってやつです。例えば


type myIntData
    integer :: array(10)
    integer :: ndata
    real(8) :: average
    real(8) :: variance
end type

みたいにして整数型や実数型をまとめて『myIntData』という型として定義できるわけです。

でもこれだけだとデータのかたまりを定義できるだけです。そのデータを『操作』することはあくまでも構造体の外部からしかできません。そこで操作もその一部になるような何かを定義できないか、ってことでそれがクラスっていうやつです。クラスは『データ』と『そのデータに対する操作』をひとまとめにしたもの です。
例えば次の例、


type myIntData
    private
    !///  instance variables
    integer, allocatable :: array(:)
    integer, allocatable :: ndata
    real(sp),allocatable :: average
    real(sp),allocatable :: variance
    contains
    private
    !///  instance methods
    procedure,public :: read        => readMyIntData
    procedure,public :: delete      => deleteMyIntData
    procedure,public :: getAverage  => getAverageMyIntData
    procedure,public :: print       => printMyIntData
end type

なんかだと、contains 以下が「データに対する操作」、メソッド と呼ばれるやつです。プログラミング言語によってはメソッドじゃなくて『メンバ関数』と呼ばれたりもします。実際のプログラミングでは、この後でさらにメソッドの中身、つまり具体的にどのような操作をさせるのかというのを書いて定義することになります。

あとはこのクラスで定義した変数でもってプログラミングしていけば一応オブジェクト指向プログラミングってことになります。

ってことで構造体の拡張がクラス、でもってクラスで定義した変数を使ってプログラミングするのがオブジェクト指向プログラミング、みたいな感じで捉えておけばいいんじゃないでしょうか。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です