转自:http://itpro.nikkeibp.co.jp/free/NIP/NIPCOLUMN/20021225/2/
「オブジェクト」と似て非なる言葉に「エンティティ」がある。リレーショナル・データベース設計で使用されるER図(エンティティ・リレーションシップ・ダイアグラム)の「エンティティ」だ。だが「エンティティ」という言葉は,オブジェクト指向の本にも登場する。それが「エンティティ・クラス」という言葉だ。また,UML(Unified Modeling Language)という表記法が登場するまでは,オブジェクト指向分析・設計においてもクラス図の代わりにER図が使用されていたことがある。
それと同様に,いくら説明を聞いても釈然としないのが,リレーショナル・データベースとオブジェクト・データベースの違いだ。それらの違いを概念から探り,整理していく必要がありそうだ。
今回は「オブジェクト」と「エンティティ」の概念の違いについて,アリストテレス先生に聞いてみたい。
(アリストテレスの経歴と業績などについては,末尾に詳しく紹介)
<問答>
筆者:アリストテレス先生,先日はどうもありがとうございました。おかげさまでオブジェクトとクラスとインスタンスの関係については,なんとなく分かるようになりました。
アリストテレス(以下ア):なんとなく? まあ,しかたないな。
筆者:なんせ哲学については素人なので申し訳ありません。ところで先生,実は,今回も似たような相談なので恐縮なのですが,実はシステム開発の世界には『エンティティ』という言葉も使われているんですよ。
ア:『エンティティ』……。それはまさしく実体のことじゃな。
筆者:えっ,またこれも実体ですか。
ア:だって君,エンティティを日本語訳するとまさしく『実体』じゃろ。
筆者:そうですが……。どうしてそんなにいろいろとご存知なんですか。
ア:実は先日も,同じ質問をされたんじゃよ。たしか,彼は「DOA」とかいう本を読んでいるといってたな。そこに書かれていた『エンティティ』という言葉がどうも分からんといってたんじゃ。それで私が説明したというわけじゃ。
筆者:私もそれが分からないから困っているんです。
ア:だから,どちらも『実体』だと言っておるだろう。
筆者:同じですか。
ア:君もしつこいな。オブジェクトは実体,エンティティも実体。それ以上何が疑問なんじゃね。
筆者:分かりました。するとクラス図とER図は同じと考えてよいのですか。
ア:わしは表記法の詳細はよく知らんが,どうも同じようじゃな。ただし,エンティティはどちらかというと,第二実体のクラスなのだと思うがね。
筆者:ER図には第一実体であるインスタンスはないのですか。
ア:確かER図は,リレーショナル・データベースというものを設計するときに使うものじゃったな。
筆者:そうです。
ア:例えば,社員というテーブルの中には,個々の社員の情報がレコードという形で格納されている。そして……。
筆者:あ,そうか!分かりました。
ア:ほんとに分かったのかな?!?!
「エンティティ」とは「クラス」のことだ
オブジェクト指向のモデルとリレーショナル・データベースは異なるモデルだ。したがって,両者は完全には重ならない。
オブジェクト指向においては,オブジェクトという実体は,クラスとインスタンスという形でとらえられる。このとき,オブジェクトはインスタンスとして生成され,このインスタンスは通常,あるタイミングで消滅する。ただし,インスタンスを消滅させずに「永続化」することもできる。データベース・レコードにあたるエンティティ・クラスのインスタンスを「永続化」することで,データベース・レコードのように情報を保存することができる。これが,オブジェクト・データベースの基本的な発想だ。
一方,リレーショナル・データベースはエンティティという集合(概念的にはクラス)によって実体をとらえる。この際,インスタンスは個々のテーブル・レコードになる。そうなるともはやインスタンスではなく,それはあくまでも個々のレコードとして意識される。
実際のオブジェクト指向の実装においても,クラスからテーブルにマッピングする形で,リレーショナル・データベースが使用される。ただし,これは純粋に実装上のテクニックの話なのだ。オブジェクト指向の話が混乱する一因は,コンセプトや考え方としてのオブジェクト指向の視点と,実装におけるプログラミング・テクニックとしてのオブジェクト指向の視点が混同されることによる。
オブジェクト指向は実装を重視する考え方なので,プログラミング言語や開発環境とペアーで利用しないと意味が無いという側面を持つ。このためプログラミング言語やオブジェクト指向開発環境ごとに微妙に異なるオブジェクト指向論が存在することになる。
オブジェクト指向もリレーショナル・データベースも,どちらも「実体」という概念で実世界をモデル化しようとしている点では同じだが,そのモデル化の方法(哲学で言う実世界の写像の仕方,表現方法)が異なるのだ。