オブジェクト指向と一口で言っても、色々有って物凄くややこしいので、 その辺は物凄くざっくりと。
例えば、 COBOLでいうところのデータ部と手続き部の様にデータと手続きとを切り離し別々に管理するのではなく、 処理するモノ単位で、データとそのデータを処理するのに適切な手続きとをまとめて管理してしまえ、という発想。
従来型の手法の主語は「私」。
オブジェクト指向の手法の主語は、各々の「オブジェクト」。
例えば、ドア。
「ドア」というモノ。
これはクラス。いわば、設計図。
「赤い」ドア。或いは、「白い」ドア。
「赤い」「白い」は、ドアの持つ色のデータ(データメンバと言う)。
最初から指定することも、途中で色を塗り直すことも出来る。
縦横のサイズや、「開いている」「閉じている」といった状態も、此処に入る。
ドアが「開く」。或いは、ドアが「閉じる」。
「開く」「閉じる」はドアの動作、変化。これをメソッドという。
オブジェクト指向でドアが「開く」場合、
開けようとする側はドアが開けば良いので、
例えば、ノブに手を掛け手前に引くのか、
或いは取っ手に手を掛け右にずらすのか、など、
ドアがどの様に「開く」のか、を意識する必要は無い。
それは、「開く」時の各々のドア(クラス)の動き(メソッド)が
予め定義されており、ドア自体がそれを判っているからである。
いわば、自動ドアの状態。
「ドア1」を作る。「ドア2」を作る。
「ドア」という設計図(クラス)から、
実際に操作するためのもの(オブジェクト)である、ドア1、ドア2、を作る。
幾つでも作ることが出来、また、配列にすることも出来る。
設計図(クラス)は幾つでも作ることが出来る。
また、1つの設計図を元にし、
新しくデータメンバやメソッドを追加などすることで、別の設計図を作ることも出来る。
例えば、「ドア」クラスを基本的な定義にしておき、
そこから、
手前に引いて開ける構造の「ドアA」クラスや、
右にずらして開ける構造の「ドアB」クラス、などを定義したり、
さらに、別に定義したカード式やキー式の鍵を付けることも出来る。
これらの設計図(クラス)を上手に管理すれば、
既存のクラスの有効活用が出来、
内部仕様の変更(ドアや鍵の付け替え)もクラスを換えれば良いので、プログラムが効率的に運用出来る。
設計図「ドアA」から「ドアA1」を作る。
設計図「ドアB」から「ドアB1」を作る。
これは「ドアA」「ドアB」という設計図(クラス)から作られた、
実際に操作するためのもの(オブジェクト)。
ドアA1が「開く」、ドアB1が「開く」。
「開く」は、ドアA、ドアBのメソッド。動作。
しかし、実は、
ドアAは手前に引いて開ける構造、
ドアBは右にずらして開ける構造なので、
同じ「開く」という動作なのだが、実際の動きは全く違う。
それを「開く」という同じ言葉で言い表すことが出来るのは、
この言葉を使う場合の各々のドア(クラス)の動き(メソッド)が
予め決められ、判っているからである。
従来型のプログラム風に記述すると、
サブルーチン化するとしても最終的には、
「私は、ドアXのノブに手を掛け手前に動かす」
或いは、
「私は、ドアXの取っ手に手を掛け右に動かす」
となる。
私が各々のドアの構造を考えて動かさなければならないのでエラーをし易くなる。
オブジェクト指向のプログラム風に記述すると、
「ドアA1が、開く」
「ドアB1が、開く」
となる。
各々のドアがどの様に開くか、は
各々のドア自体が判っていれば良いので、此処で意識する必要は無く、
また、ドアの付け替えも簡単である。
また、各々のドア(クラス)の動作(メソッド)への
外部からのアクセスは制限出来るため、
例えばドアA1を右にずらす様なエラーも防ぐ事も出来る。
以下、まだ続きます。