TypingMonkee2:自動四字熟語 021−025TypingMonkee2:自動四字熟語 026−030

2016年10月02日

ブラック・マトリョーシカ

オブジェクト指向の本質は「ブラックボックスの利点の応用」というところにある。

「オブジェクト」という単位を作り、それを「カプセル化」することによって、オブジェクトの中身を見えなくする=意識できなくすることで、オブジェクト内で完結するようにプログラムを作る。
これによってプログラマーは、プログラム全体で矛盾がないように常に全体に気を配る必要が無くなり、プログラムをシンプルにすることができるようになる。
つまり、オブジェクト内を完結させることと、オブジェクト間のやりとり、という二点についてだけを考えればよくなる、ということだ。

言い換えれば、オブジェクト指向以前のプログラミングでは、「全知全能」の視点が必要だったことに対し、オブジェクト指向では、ひとつひとつのオブジェクトを完結させることとそれらをつなげることに集中できる、ということである。



オブジェクト指向において、オブジェクトというものは一般に入れ子構造になっている。

たとえば「ロボットが街を歩く」というアニメーションをプログラムで書くとする。
そこには「ロボット」というオブジェクトと「街」というオブジェクトがある。

このとき、「ロボット・オブジェクト」はまずその内部に「体オブジェクト」を持っている。
「体オブジェクト」には、「胴体オブジェクト」、「頭オブジェクト」、「腕オブジェクト」、「脚オブジェクト」を持っている。
まず「胴体オブジェクト」に「頭オブジェクト」、「腕オブジェクト」、「脚オブジェクト」が繋げられている。
「頭オブジェクト」には「目オブジェクト」、「鼻オブジェクト」、「耳オブジェクト」、「口オブジェクト」があり、「腕オブジェクト」には「前腕オブジェクト」、「掌オブジェクト」があり、「掌オブジェクト」にはさらに「指オブジェクト」が。。。
という入れ子になっている。

一方「街オブジェクト」には、「道路オブジェクト」、「街路樹オブジェクト」、「建物オブジェクト」があり。。。
。。。ここらでやめておこう。

とにかく、すべてのオブジェクトはその内部にさらにそれを構成するオブジェクトがあって、入れ子構造になっている。
ここで重要なことは、それぞれのオブジェクトはその内部で完結したブラックボックスになっている、ということである。

それぞれのオブジェクトはアニメーションとして描かれるため、それぞれが自分の座標位置をオブジェクトのデータとして持っている。
この座標位置というものは、それが描かれる世界における絶対位置ではなく、自分が属する親オブジェクト(たとえば「指オブジェクト」にとっての「掌オブジェクト」上での相対位置である。

なので、たとえば腕が動いたために掌と指の絶対位置が大きく変化することになったとしても、指が動かなかった場合においては指オブジェクトが内部で保持している位置を変えることはない。
これが「オブジェクト内部で完結している」という意味である。

内部で完結したブラックボックスを開けてみるとその中にはいくつものブラックボックスがあり、それを開けるとさらにその中にブラックボックスがあり、、、という入れ子構造。

あるオブジェクト(親オブジェクト)は、その中にあるオブジェクト(子オブジェクト)の中身についてはまったく意識する必要がない。
一方、その親オブジェクトに属する子オブジェクト側について言えば、それらは親オブジェクトのことを知らなくてよい。
お互いに疎な関係で、それぞれが自分の内部だけで完結していればよいのだ。

これはプログラミングにおいてだけではなく、実際の世界においても同じ構造になっている。
それぞれのオブジェクトが「世界は俺様を中心に回っている」と思っていればいいのである。

OLランキングで1位になりたい!賛同していただける方は下記をクリック!

コメントする

名前
 
  絵文字
 
 
TypingMonkee2:自動四字熟語 021−025TypingMonkee2:自動四字熟語 026−030