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
以下が「データに対する操作」、メソッド と呼ばれるやつです。プログラミング言語によってはメソッドじゃなくて『メンバ関数』と呼ばれたりもします。実際のプログラミングでは、この後でさらにメソッドの中身、つまり具体的にどのような操作をさせるのかというのを書いて定義することになります。
あとはこのクラスで定義した変数でもってプログラミングしていけば一応オブジェクト指向プログラミングってことになります。
ってことで構造体の拡張がクラス、でもってクラスで定義した変数を使ってプログラミングするのがオブジェクト指向プログラミング、みたいな感じで捉えておけばいいんじゃないでしょうか。