本カテゴリーは手続き型言語になれている人がどうやったらオブジェクト指向を理解できるのかを考えて書いている記事です。

多少の言語知識があることを前提に進めます。


では、オブジェクト指向が何故産まれてきたのかを私なりに考えた例をあげて説明します。

(書いてあるとおり、実際の理由ではありません。あくまで分かりやすく説明することを年頭に書いています。)


オブジェクト指向を理解する上で、知らなければならないことが二つあります。

それは、


構造体とポインタ


この二つです。
厳密に言うならば、構造体は理解しなくても良いです。(*1)

ただし、今回の説明を行う上で説明しやすいと考えたため構造体をあげました。


では、まず今回は構造体だけに焦点を絞って説明していきます。


次のようなプログラムを作らなければならないとします。


画面に三角形を三つ表示するプログラムを書け


では実際にソースを書いてみると・・・(*2)


void main()

{

// 三角形一つ一つを配列として定義して考える。

int sankakuA[3][2];

int sankakuB[3][2];

int sankakuC[3][2];


// 三角形には三点の頂点があるため、三つの頂点を設定する。


// 一つ目の頂点のX軸に値を設定(値は適当です。)

sankakuA[0][0] = 100;

// 一つ目の頂点のY軸に値を設定(値は適当です。)

sankakuA[0][1] = 100;

// 二つ目の頂点

sankakuA[1][0] = 50;

sankakuA[1][0] = 50;

// 三つ目の頂点

sankakuA[2][0] = 50;

sankakuA[2][1] = 100;


// 以下、あと二つの三角の頂点を設定する。

sankakuBの設定

sankakuCの設定


// 実際に三角を表示する。

sankakuWrite(sankakuA[0],sankakuA[1],sankakuA[2]);

sankakuWrite(sankakuB[0],sankakuB[1],sankakuB[2]);

sankakuWrite(sankakuC[0],sankakuC[1],sankakuC[2]);

}


// 三角を描画する関数

void sankakuWrite(int[2] tyouten1,int[2] tyouten2,int[2] tyouten3)

{

// 頂点を元に三角形を書く関数

}


大体、このようなソースが出来たとします。


さて、ここで以下のような仕様変更があったとします。


三角形では無く四角形を描画するようにして欲しい。


・・・。

プログラム殆ど作り直しだ・・・。


完全手続き型言語では、このような問題が発生しやすいのです。

ここで、産まれたのが構造体です。


そう、描画するために持つ情報を配列ではなく、構造体という変数を使って持つことにより、上記のような仕様変更に耐えやすくなるのです。


長くなったのでこの続きは次回説明します。

--------------------------------------------------

*1・・・構造体は純粋なオブジェクト指向では存在しないからです。

*2・・・C言語を意識していますが、分かりやすく考えるために書いているため言語ベースでは間違っている個所もあります。

*3・・・実際配列にデータを格納する際にはもう少し簡単に入れれます。