Web教材一覧データベース

オブジェクト指向データベース

学習のポイント

最近は,オブジェクト指向によるシステム設計が実用化されてきた。それに伴いオブジェクト指向データベース(OODB:Object Oriented Database)が注目されている。しかし,これらについて理解するには十分な時間がないので,ここではごく簡単に考え方を示すだけにとどめる。

キーワード

オブジェクト指向,OODB,抽象データ型,インスタンス,カプセル化,メッセージ,ポリモアフィズム,クラス,インヘリタンス,部品化


OODBの概念

最近のRDBは,OODBの考え方を取り込んで発展してきているので,以下に述べる事項は,OODBだけの特徴だとはいえないようになってきた。

OODBの用語

OODB(Object Oriented Database)の用語を,ファイルやRDBでの用語と対比して示す。この表は,理解しやすいように直感的に対比したものであり,概念としては,必ずしも厳密なものではない。

  ┌────┬────┬──────┐
  │ファイル│RDB │OODB  │
  ├────┼────┼──────┤
  │ファイル│テーブル│オブジェクト│
  │レコード│行   │インスタンス│
  │項目  │列   │属性    │
  └────┴────┴──────┘

属性

項目や列のデータの型は,数値や文字列など一つの値だけを持つ基本データ型だけであるが,属性では,不定長の文字列,画像,音声などのマルチメディア情報も格納できる。これらは不定長の長いビット列になるので,BLOB(binary large objects)型という。また,複数の値や他のオブジェクト,他のオブジェクトへのリンク(ポインタ)なども格納することができる。このようにOODBでは,多様なデータの型を持つことができるが,それを抽象データ型という。

インスタンス

レコードや行のように,オブジェクトから1組の属性を取り出したものがインスタンスであるが,RDBは値指向であるから,個々の行を識別するにはそれを構成する項目の値を用いるが,インスタンスを識別するにはオブジェクト識別子という識別子(ビット列)を用いる。

オブジェクト指向の概念

オブジェクト

ファイルやテーブルがデータだけの集まりであるのに対して,オブジェクトには,データだけではなく,そのデータを変更したり取り出したりする手続き(メソッドという)も含んでいる。すなわち,オブジェクトにはデータとプログラムを一緒にしたようなものだともいえる。このように,データとメソッドを一緒にして外部から見えないようにすることをカプセル化という。

メッセージ

そして,オブジェクトを操作するには,メソッドで設定したパラメタを与えることにより行う。それをメッセージという。システムは,図のようにオブジェクトからオブジェクトへメッセージを送るという考え方で構築する。

同一のメッセージをオブジェクトに送っても,受取側オブジェクトのメソッドの違いにより,異なる処理が行われるが,それをポリモーフィズム(多相性)という。たとえば,出荷数量のメッセージを在庫オブジェクトに送れば在庫量を減少させるし,会計オブジェクトに送れば売掛金額が増大する。

クラスとインヘリタンス

クラスとは,属性の構造やメソッドに共通な要素を持ったオブジェクトの集合(単一のオブジェクトのこともある)である。クラスを定義するときには,上位のクラスで定義した属性やメソッドを下位のクラスで引き継ぐことができる。それをインヘリタンス(継承)という。


OODBの意義

上記のように,OODBは難解な概念が多く理解しにくいので,RDBとの比較で説明する。

多様な機能

OODBでは属性の構造が柔軟であることにより,RDBに比較して多様な機能を持っている。

多様な情報

単純な事務処理ではRDBでも十分に対処できるが,最近では写真や設計図あるいは音声などのマルチメディア情報も取り扱う必要が出てきた。OODBではそれらを効果的に取り扱うのに適している。

複雑な関係

製造業での製品と部品の関係を考えよう。自動車1台には,ブレーキなど多くの部品があり,さらにブレーキも歯車など多くの孫部品を持つ。その歯車はブレーキだけでなく多くのところに使われている。また,ブレーキも歯車も多くの仕入先から仕入れている。仕入先,部品,孫部品の間の関係はM:Nの関係が複雑にからみあっている。RDBでは正規化することが基本であるから,このような複雑な関係をRDBで表現するのは大変であるし,できたとしても,そのテーブルは人間の感覚からみると不自然なものになる。OODBでは,オブジェクトの属性にオブジェクトを持てるなど,複雑な関係を比較的容易に表現できる。それにより,人間の感覚と比較的似通ったオブジェクトを設定することができる。

複雑な結合処理

結合処理はコンピュータに負荷のかかる処理であるが,RDBでは正規化されているので,複雑な検索をするには結合が多くなり,処理に非常な時間がかかってしまう。OODBでは,必ずしも正規化する必要がないので,処理が簡単になることもある。

データベースの品質保証

データベースのなかに誤ったデータが入っていると,それを用いた情報が誤ったものになるので,データベースを更新するときには,更新プログラムで入力データを十分にチェックすることが重要である。

ファイルやRDBでは,データとプログラムが独立しているので,データベースを更新するプログラムを自由に作成することができる。それらのプログラムのすべてに厳重な入力チェック機能を持たせることは現実にはかなり困難である。プログラマが知識不足であるとか,チェック処理を書くのが面倒であるとの理由で,厳密なチェックを組み入れないかもしれない。

それを回避するには,入力チェック機能の部分をサブルーチンにしておき,データベースを更新するときにはかならずこのサブルーチンを使うように標準化すればよいが,その標準化を守らないプログラムでもデータベースを更新できる。

むしろ,データベースの内部にチェック機能を埋め込んでおき,それ以外ではこのデータベースを更新できないようにするほうがよい。OODBでは,プログラマはカプセル化したメソッドを通してしかデータベースをアクセスできないので,更新メソッドに厳重な入力チェック機能を持たせれば,データベースの品質を維持させることができる。

部品化による再利用

システムの開発や改訂において,既に作成してあるデータやプログラムを再利用できれば,コスト面でも品質面でも効果が大きい。逆にいえば,システムを構築するときには,個々の要素を後で再利用できるように部品化しておくことが効果的である。

正規化したRDBは,データの部品化としての効果は大きいが,処理プログラムの部品化には別途のアプローチが必要である。これに対してOODBは,メソッドを含めたデータを部品化することができるので,好都合である。

しかも,インヘリタンスにより,既存の部品に追加するとき(たとえば,バスも取り扱うようになったとき),スーパクラス(自動車)で定義したデータやメソッドは継承されるので,サブクラス(バス)に固有のものだけを定義すればよい。また,スーパクラスの定義が不適切なときは,その部分だけ再定義すればよい。このような改訂をしても,他のクラス(乗用車やトラック)については何ら影響を与えない。


理解度チェック

第1問

  1. オブジェクト指向では,データとその処理手続きである[ 1 ]を一体化して外部に隠蔽することを[ 2 ]化といい,そのような単位をオブジェクトという。オブジェクト指向でのプログラムでは,オブジェクトからオブジェクトへ[ 3 ]を渡すことによって処理を行う。
    1 メソッド 2 カプセル 3 メッセージ
  2. オブジェクト指向での利点として,[ 4 ]化による再利用があげられる。たとえば自動車というクラスで定義された属性が乗用車やトラックなどのクラスに継承することを[ 5 ]といい,自動車は乗用車やトラックの[ 6 ]という。
    4 部品 5 インヘリタンス 6 スーパークラス

第2問

  1. RDBでは困難なことがOODBでは比較的容易にモデル化できる事項にはどのようなものがあるだろうか。また,それを活用するのには,どのような分野が適しているだろうか。
  2. オブジェクト指向アプローチは広く普及してきたが,オブジェクト指向データベースはあまり普及していない。その理由は何だろうか。

過去問題:オブジェクト指向


本シリーズの目次へ