第2回 オブジェクトに必要な4つの特性とは?
河合昭男
(有)オブジェクトデザイン研究所
2002/11/12
「第1回 オブジェクト指向の考え方」では、人間関係を中心にしてオブジェクト指向の基本的な考え方を説明しました。オブジェクトとはただ存在するだけのものではなく、認識する人がまず存在し、その人がある意図、目的を持って認識した対象がオブジェクトとなる、というお話しをしました。つまり同じ対象物でも、人によって違う理解をするかもしれないということで、これは日常生活では普通のことです。今回はもう1歩踏み込んで、オブジェクト指向で用いられる基本的用語(カプセル化、オブジェクトの特性、クラスとインスタンスなど)について具体例を交えながら説明します。
カプセル化 |
オブジェクトは外部からのメッセージを受け取るためのインターフェイスを公開しています。メッセージを受け取ると、それに対応する振る舞いを実行するのですが、外部からは、公開されているインターフェイス以外にオブジェクトの状態に直接アクセスする方法はありません。これは、オブジェクトが、「固有の状態」と「振る舞い」をカプセル化して隠ぺいしているという特徴に起因しています。そして、公開されているインターフェイス以外にオブジェクトの状態に直接アクセスできないことを「情報隠ぺい」と呼んでいます(図1)。
図1 カプセル化による情報隠ぺい
|
人間社会における、人と人との会話をオブジェクト指向流に解釈してみましょう。人はそれぞれ言葉を使ってメッセージを送り合うと考えることができます。
Aさんは週末に映画を観に行く予定ですが、Aさんの個人的な情報は隠ぺいされているのでBさんにはそれが分かりません。BさんがAさんに「週末の予定は?」と尋ね、AさんがBさんに「映画を観に行く予定」と返事をして初めて、BさんはAさんが週末に映画を観に行くという情報を得ることができます。一方、BさんはCさんに同様のことを尋ねますが、「それは秘密」といって教えてもらえませんでした。つまり、Bさんにとって、Aさんは情報を取得するためのインターフェイスを公開しており、Cさんは公開していない、と考えることができます。図2は、オブジェクトの固有データを取得するためのインターフェイスが公開されている場合(Aさん)とされていない場合(Cさん)を表したものです。
つまり、オブジェクトが持っている固有データは、外部から直接参照することはできず、メッセージによってのみ取得することができるのです。
図2 カプセル化の例
|
オブジェクトに必要な4つの特性 |
オブジェクトは、「物理的なオブジェクト」と「概念的なオブジェクト」の2つの種類に分けられますが、種類に関係なく、オブジェクトにはオブジェクトになれる特性が備わっています。以下に示す4つの特性を満たして初めて、対象はオブジェクトになることができます。
(1)属性
オブジェクトは、固有の姿・形・性質などを持っています。このようなオブジェクトの状態は、属性(attribute)の値で表現されます。属性は一般的に名詞で表現します。
物理的なオブジェクトの属性としては、「大きさ」「重さ」「色」などがあります。人をオブジェクトと考えると、「名前」「生年月日」「身長」「体重」「血液型」などはその属性です。
Aさんのあるときの状態は、名前=“赤坂太郎”、生年月日= “1/1/1980”、身長=“170”、体重=“70”、血液型=“A”と表現することができます。状態は時間とともに変化するかもしれません(図3)。
概念的なオブジェクトの場合も考えてみましょう。例えば会議というオブジェクトを考えた場合、「日時」「場所」「議題」などの属性が挙げられます。例えば「Aさんの12月の定例会議」というオブジェクトのあるときの状態は、日時=“12/1/2002”、場所=“201会議室”、議題=“開発進ちょく状況レビュー”というように表すことができます。
(2)操作
各オブジェクトは固有の振る舞いを持ちます。これを操作(operation)と呼び、動詞で表現します。
物理的なオブジェクトの振る舞いとして、例えば「人」をオブジェクトとして考えると、「話す」「歩く」「食べる」「寝る」「働く」などの操作(振る舞い)を挙げることができるでしょう(図3)。
概念的なオブジェクトの場合は、「会議」をオブジェクトとすると、「開催場所を設定する」「開催日時を設定する」「議題を設定する」といった操作(振る舞い)を考えることができます。
図3 オブジェクトの状態と振る舞い
|
(3)関係
オブジェクトは単独で存在することはありません。必ずほかのオブジェクトと関係を持っています。
「第1回 オブジェクト指向の考え方」で挙げた、自分を取り巻くオブジェクトは人と人との関係を表しています。人以外に、勤務先の会社や所有している車といったオブジェクトとの関係も考えられます(図4)。
図4 オブジェクトの関係
|
(4)アイデンティティ
各オブジェクトは、ほかのオブジェクトから自らを識別できるアイデンティティを持っています。
車というオブジェクトは、ナンバープレートで識別できますし、人というオブジェクトは、同姓同名であっても、別人は別人であり、いずれなんらかの方法(指紋、虹彩、声紋など)で明確に識別することができます。つまり、人という存在は、オブジェクトの4つの特性(属性、操作、関係、アイデンティティ)を満たしているのでオブジェクトと考えることができるのです。
オブジェクトになれないものの例 |
では、オブジェクトになれないものには、どんなものがあるのでしょうか。
【雲、風、雨などの自然現象】
空に浮かんでいる雲は、くっついたり離れたりして1つ1つを明確に識別することができません。雨、風も同様です。ただし自然現象が絶対にオブジェクトではないかというと、そうではありません。例えば台風はオブジェクトと考えることができます。
台風の属性には、「位置」「中心気圧」「半径」「最大風速」などが考えられます。また、操作は、「移動する」「風を起こす」「雨を降らせる」などがあります。さらに、気象庁が台風と認定した時点で「第X号」という名前で識別されます。台風オブジェクトが熱帯性低気圧になって消滅するのも気象庁の認定によります。つまり気象庁の判定基準(認識)により、台風は「台風第X号」というオブジェクトになるわけです。
【赤、青などの色】
色はオブジェクトと考えるより、あるオブジェクトの属性と考えるのが一般的です。
例を挙げましょう。Aさんは色白です。しかしある夏、海に行ったら日焼けして黒くなってしまいました。白い人が黒い人に変わってしまったのです。ただし、白いAさんと黒いAさんを別々のオブジェクトであると考えるのはちょっと変ですね。あるいは白と黒というオブジェクトがあって、その状態がAさんだったり、Bさんだったり、と考えるのも無理があります。
これは「Aさん」というオブジェクトの、「色」という属性値が変化した、つまり状態が変化したと考えるのが自然です(図5)。
図5 状態の変化
|
【1cm、2kgなどの数量】
数量についても色と同様、オブジェクトと考えるより、あるオブジェクトの属性と考えるのが一般的です。
Aさんは、昨年の秋の健康診断で身長170cm、体重70kgでした。1年間ダイエットした結果、今年の秋の健康診断では身長は変化しませんでしたが、体重は60kgに減少しました。このとき170cmや60Kgという数量は、「Aさん」というオブジェクトの「身長」と「体重」の状態であり、「Aさん」というオブジェクトの属性値として表現したものにすぎません。
【愛、憎などの人の感情】
感情は、人とほかのオブジェクト、あるいは人と人との関係と考えるのが一般的です。
Aさんが好きなのはBさんだとします。一方、BさんはCさんが嫌いです。つまりここでは好き、嫌いは人と人との関係を表しています。その後、AさんとBさんは別れることになってしまいます。Aさんは苦しみました。BさんもCさんと一緒に仕事をしなければならなくなって苦しみます。この苦しみは、Aさん、Bさん自身の心の状態と考えることができます。
オブジェクトの特性 |
ところで、属性と関係を合わせて「プロパティ」と呼びます。属性と関係は別のようですが区別できないときもあります。
ある人が車を所有しているとしましょう。この場合、人と車というオブジェクトの間に所有するという関係があると考えてもよいし、または人に所有車という属性を作ることも可能です。対象としている問題領域で、車というオブジェクトにさまざまな属性を持たせたいときや固有の操作を割り当てたいときはオブジェクトとして独立させることができます(図6)。プロパティと操作を合わせてオブジェクトの特性と呼ぶときもあります。
図6 属性と関係
|
クラスとインスタンス |
■クラス
クラスとは、同じ特性を持つオブジェクトの集合に名前を付けたものです。オブジェクトの特性を抽象化したものともいえます。クラスは一般的に名詞で表現します。
ある会社で働いている人をオブジェクトと考え、その会社で働いている人の集合を「従業員」というクラスにすることができます。あるいは、オブジェクトを用いない抽象的な表現として、ある会社で働いている人を「従業員」というクラスにすることもできます。
■概念の内包と外延
上述したように、クラスの定義の仕方は2通りあります。1つは、オブジェクトの集合というとらえ方で、これを「外延(extension)」と呼びます。もう1つは、オブジェクトの抽象概念というとらえ方で、これを「内包(intension)」と呼びます(図7)。
図7 内包と外延
|
クラスをオブジェクトの集合と考える場合、集合の表現方法は2通りあります。
- 従業員={ある会社で働いている人}
- 従業員={Aさん、Bさん、Cさん}
1のように一般的に定義する表現方法が「内包」で、2のように具体例を列挙する表現方法が「外延」です。
■インスタンス
インスタンス(instance)の言葉の意味は「例」です。クラスに属するオブジェクトをインスタンスと呼びます。つまりインスタンスとは、クラスに属するオブジェクトの例です。通常、クラスは複数のインスタンスを持ちます。クラスをオブジェクトの集合ととらえるなら、集合の要素がインスタンスです。
■クラスとインスタンスの例
物理的なクラスの例として「車」クラスを考えてみましょう。もしもあなたが車を所有しているのならその車、あるいは今朝あなたが利用したタクシー(具体的な車)などがインスタンスです。
概念的なクラスの例として「会議」クラスがあります。来週開催予定のあなたの課内会議や、昨日行ったある客先での会議など具体的な会議がインスタンスです(図8)。
図8 クラスとインスタンス
|
■問題
楽器というクラスを考えてみましょう。楽器にはピアノ、バイオリン、フルートなどがありますが、これらは「楽器」クラスのインスタンスでしょうか? この問題については、次回考えます。
■次回予定
「ここから始めるオブジェクト指向 第3回」は、クラス階層と複合オブジェクト、ポリモフィズム(多態性)の説明を行います。
IT Architect 連載記事一覧 |
【参考文献】
『まるごと図解 最新 オブジェクト指向がわかる』、河合昭男、技術評論社
『まるごと図解 最新UMLがわかる』、河合昭男、技術評論社
『ゼロからわかるオブジェクト指向の世界』、岩田裕道+手島歩三、日刊工業新聞社
『Object-Oriented Methods:A Foundation』、James Martin+James Odell、Prentice Hall
プロフィール |
河合昭男(かわいあきお) 大阪大学理学部数学科卒業、日本ユニシス株式会社にてメインフレームのOS保守、性能評価の後、PCのGUI系基本ソフト開発、クライアント/サーバシステム開発を通してオブジェクト指向分析・設計に携わる。 オブジェクト指向の本質を追究すべく1998年に独立後、有限会社オブジェクトデザイン研究所設立、理論と実践を目指し現在に至る。 事業模型倶楽部、日本XPユーザ会、パターン言語のコミュニティなどソフトウェア新技術の学習と普及を行うコミュニティ活動に参画。著書『まるごと図解 最新オブジェクト指向がわかる』(技術評論社)、『まるごと図解 最新UMLがわかる』(技術評論社)。『UML Press』(技術評論社)、『ソリューションIT』(リックテレコム)ほかの専門誌に多数執筆。ホームページ「オブジェクト指向と哲学」。 |