ObjectSquare [1999 年 1 月号]

[Happy Squeaking!!]


2.オブジェクトの定義


オブジェクトをソフトウェアの中に表すといっても、まさか現実世界の「もの」そのものがソフトウェアの中に存在できるわけではありません。あくまで現実世界の「もの」ににたメタファとしての「もの」が存在することになります。
つまり、現実世界のもやもやとした複雑怪奇な「もの」を、ソフトウェア上に表現するために、ある程度「ものとはこういうもの」と定義することが必要になります。

一般的にオブジェクト指向の世界ではオブジェクトを以下のようなものとして扱います。

1:識別できる(object id をもつ)
2:属性をもつ (内部にデータを保持できる)
3:操作をもつ (外部からの刺激に対して反応する)

この定義は、大体において現実世界の「もの」に近いといえるでしょう。
一つ欠けている点といえば、現実世界の「もの」は、特に生き物などの場合、「外部からの刺激を受けなくとも自律的に、勝手に動き出す」ということがあります。一般的なオブジェクト指向では通常ここまでは扱いません。後でも出てきますが、オブジェクトは必ず外部からの刺激によって動き出すことになっています。(勝手に動く自律的振る舞いを持つオブジェクトをエージェントと呼び、ソフトウェアの中に表そうという試みもあります。エージェント指向として知られていますが今回の範囲外です。)

1:の識別性は、「これは何々であって、ほかの何々ではない」と区別がつくことを表します。ソフトウェア上にできたAさんの銀行口座は、Bさんの銀行口座とは区別できなければなりません。両方が識別できずに入れ替わってしまったら大変なことです。また、動物育成シミュレーションを作るとして、ポチとシロはやはり区別できねばなりません。銀行口座のように、「口座番号」が振られればお互いの区別は簡単なことです。しかし自分のペットとして飼うことにしたポチとシロにはそうした番号をつけることは通常しません。そこで、こうした番号が振られてないオブジェクトをソフトウェア上で識別するため、オブジェクト指向のシステムでは、オブジェクトIDという番号が、システムによって自動的に振られることになります。(実装によっては単なるアドレスだったりもします)。こうしたIDは開発者は通常意識することはありませんが、識別のために水面下で役立っているのです。

2:では、「オブジェクトはそれぞれ固有のデータを持っている」ということを表しています。銀行口座の例では、Aさんの口座では残高が15,000であり、住所が東京都、Bさんの口座では残高が200,000、住所が大阪府であるということになります。
こうしたオブジェクトの持つ属性は、通常は、第三者が勝手に覗き見たり、値を変更したりということはできません。Aさんの残高がいつのまにか第三者に知られていたら大変なことです。
オブジェクトが持つデータは、オブジェクトの外からは通常見えないのです。これをオブジェクト指向の用語では「データがカプセル化されている」などと呼んだりします。「情報隠蔽」と呼ばれることもあります。「情報隠蔽」というと何だかいけないことをしているかのようですが、個々のオブジェクトが固有のデータを持ち、外側から勝手に見れないというのは、現実世界に照らしあわせてもごく自然といえるでしょう。

もう一つ、3:についてですが、オブジェクトは、何らかの刺激に対し反応できる能力を持つということです。これを「操作をもつ」という言葉で言い表します。
通常オブジェクトに対し何らかの刺激を送ると、その反応が帰ってきます。例えば、ポチに対し「お手」というと、ポチが反応して手を(足ですか)差し出します。このようにオブジェクトに対して刺激を送ることを「メッセージを送る」と通常いいます。メッセージを送る側が「センダ(送信者)」、受け取る側は「レシーバ(受信者)」です。
送られてきたメッセージに対して、レシーバが反応できるのは、レシーバの側にそのメッセージに対応した反応の仕方が覚え込まれていたからに他なりません。ポチの例ですと、「お手」という刺激に対する一連の動きを教え込まれて知っていたからこそ、前足が差し伸べられたということになります。この、「刺激に対する反応の仕方」は、「メソッド」という風に呼ばれています。

オブジェクト指向でのプログラミングの処理は、あるオブジェクトに対してメッセージ送信を行い、その結果を受けてさらにあるオブジェクトにメッセージを送るといった処理の連続によって成り立っています。
現実世界でも、多くの仕事はこのような「もの」と「もの」同士の間の連鎖反応的なメッセージ送信の繰り返しで行われていると見ることができます。、ソフトウェアの販売という仕事を例にとれば、実際に販売する人や、在庫管理をする人、マーケティングをする人など、様々な役割をもつ人々(オブジェクト)が、互いに連絡をとりあいながら(メッセージ送信)全体の販売処理を進めていっているのです。


© 1999-2001 OGIS-RI Co., Ltd.

Prev.

Index

Next