キーワード辞典
自動ドアの話(かなり乱暴なオブジェクト指向)

登録日 13/12/21   更新日 13/12/21



オブジェクト指向と一口で言っても、色々有って物凄くややこしいので、 その辺は物凄くざっくりと。

例えば、 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を右にずらす様なエラーも防ぐ事も出来る。


以下、まだ続きます。





[ 赤い玉の画像 ] 「キーワード辞典」の目次へ

[ 黒板消しとチョーク受けの画像 ]