ObjectSquare [1999 年 7 月号]

[トレーニングの現場から] 第2回 - オブジェクトって何ですか? -



■ はじめに

オブジェクト指向システムを考えていこうとすると、オブジェクトというものが何をさておいても理解されなければならない概念だということは予想がつきます。
そして、トレーニングでもオブジェクトの理解が、オブジェクト指向システム理解の第1歩となるのです。
しかしこの「オブジェクト」、とても厄介なのです。

object という単語は、
「物体、もの、対象、目的(物)」(デイリーコンサイス 英和 和英 辞典第3版)
あるいは、
オブジェクト=「[哲学で]客観、対象」(三省堂 新明解 国語辞典第3版 )とあります。
さらに、
『ANSI C言語辞典』(技術評論社)を見ると、
「指定した型に応じた大きさと値をもつ(実行環境の)データ記憶域.ただし、定数、関数、演算子、ラベル、文はオブジェクトではない」とあります。

オブジェクトという用語は、一般的用語としての背景も持っていますし、コンピュータ用語としての背景も持っています。当然のことながら、オブジェクト指向世界の用語でもあるのです。

オブジェクト指向の世界においても、様々な意味あいで使われています。

■ オブジェクト指向分析設計方法論の定義

ブーチ(** 3大オブジェクト指向方法論者の一人)をひも解いてみますと、
「人間の認知の側面からは、オブジェクトは以下のいずれかである:
・有形 かつ/または 目にみえるもの
・理知的に考えて意味を理解することのできるなにか
・思考や行動が向けられるなにか」(*1 P88)
というふうに紹介されています。

「有形 かつ/または 目に見えるもの」というと、
具体的に存在するものや概念、人などが考えられます。
机とか椅子、テレビにビデオ、パソコン、申し込み用紙、領収証といった、ものを例に取ることができます。

「理知的に考えて意味を理解することのできるなにか」となると、少し難しくなります。
8月3日の山田さんの取引、冷蔵庫の販売、チョコレート3ケースの注文、10月8日開催のJavaプログラミングコースといったものを例に取ることができます。

注文の明細や、コースのリストもオブジェクトであるというあたりから、「オブジェクト」が、たんなる「もの」とは、少し違ったものであるということがわかってきます。

さらに、「思考や行動が向けられるなにか」となると、表現が抽象的なため、さらにつっこんだ定義が必要になってくることがわかります。

もう一人、J.ランボー(** 3大オブジェクト指向方法論者の一人)をひも解きますと、
「概念や抽象あるいは対象となる問題に対して明確な境界と意味を持つ何ものかとして定義する。」
とあります。(*2 P25)

■ オブジェクト指向プログラミングの定義

オブジェクト指向プログラミングの観点からオブジェクトを考えてみますと、データと関数が共存して構造体のようにひとかたまりになったものをクラスといい、そのクラスから生成された実体がオブジェクトであるとあります。

注意:オブジェクト指向プログラミングの世界では、生成された実体を「インスタンス」と呼んで区別する傾向にあるようです。(後述)

関数を装備した構造体から生成された(メモリを割り付けられた)実体、として理解することができます。

■オブジェクトという用語の曖昧さ

オブジェクトという用語は広く使われており様々なコンテキストの中で使用される単語です。そのために、オブジェクト入門者には(入門者でなくとも)オブジェクトとは一体何なのか?という疑問が生じます。

オブジェクトには3つの側面があると考えられます。

実際の世界に存在するオブジェクト。
(オブジェクト指向)モデル要素として存在するオブジェクト。
メモリにバインドされたオブジェクト。

モデル要素として存在するオブジェクトといっても、2つに分けて考えることができます。それは、
実際の世界にあるものを、モデル化したものと、
実際の世界にはないけれども、モデルの中に組み込んだものです。

J.ランボーの定義がそのあたりをうまく説明してくれています。
「オブジェクトは2つの役割を果たす。それは、実世界を理解しやすくすることと、コンピュータ上への実装に関して実質的な基盤を与えることである。」(*2 P25)

現実世界に存在する実体や概念そのものをオブジェクトと呼びますし、現実世界に存在する実体や概念を擬似的にモデルとしてシミュレートするための実体もオブジェクトです。そして、モデル内部にしか存在しない(現実世界のものとダイレクトにマッピングすることのできない)バーチャルな実体もオブジェクトと呼びます。クラスから生成されメモリにバインドされたものもオブジェクトと呼びます。


■オブジェクトの境界

オブジェクトの形についても考えてみましょう。
明確な境界を持っているとする時、アトミック(分割不可能)なオブジェクトを考えますが、 同時に、複数のオブジェクトから構成される複合オブジェクトもオブジェクトと 呼びます。 アトミックなものも、複合体のものもオブジェクトと呼びます。

■まとめ

「オブジェクト」が、 様々なコンテキストで使用されているということがおわかりいただけたでしょうか? オブジェクト指向の解説本を色々読んでいましても、このあたりの区別を 「もの」・「object」・「モノ」・「オブジェクト」・「インスタンス」と 書き分けて苦労している様子が伺えます。 現実世界の話は「もの」、モデリングの世界では「オブジェクト」、 プログラミングの世界では「インスタンス」という程度の使い分けが 傾向としてあるようですが、 今のところ一般的に認知されているというわけではないため、 これらすべてをオブジェクトと呼ぶことができるのです。

また、分析、設計、プログラミングという活動の、 境界線上では、ものや、オブジェクトや、インスタンスが混在し、 問題は簡単ではありません。

オブジェクト指向モデルにおける、オブジェクトの定義(狭義)は、 「ある良く定義された振る舞いを見せる有形の実体」(*1 P88)、あるいは、 「状態と振る舞いと識別性を持つ。」(*1 P89) となります。 広義には、ものや概念やモデル要素やインスタンスを指します。

このあたりは、UMLの定義を待つ一方で、翻訳の問題として 我々が取り組んでいかなければならない問題と思われます。

★参考文献

*1 『Booch法:オブジェクト指向分析と設計』第2版 Grady Booch著(アジソンウェスレイ)
*2 『オブジェクト指向方法論OMT』 J.ランボー/M.ブラハ/W.プレメラニ/F.エディ/W.ローレンセン(プレンティスホール)


次回は、「OOAの視点について」です。

お楽しみに。


© 1999 OGIS-RI Co., Ltd.
Prev Index Next
Prev. Index Next