<目次>
(1) インピーダンスミスマッチとは?を分かりやすく説明
(1-1) 概要
(1-2) 具体例
(1) インピーダンスミスマッチとは?を分かりやすく説明
(1-1) 概要
「インピーダンスミスマッチ」というのは「オブジェクト指向言語(※注1)」と「リレーショナルデータベース(※注2)」との間の構造のギャップの事です。
(図111)
(※注1)
オブジェクト指向言語はソフトウェア開発の手法で、「オブジェクト」と呼ばれるデータ(変数、プロパティ)と手続き(関数、メソッド)を一体化した基本単位をベースに、様々な役割を持ったオブジェクトが相互にやり取りする事でアプリケーションの処理を行うスタイルです。
オブジェクトは現実世界の物体と似ていて、例えば「車」には「トヨタ」や「日産」や「ホンダ」など様々ありますが、オブジェクト指向でも「車」オブジェクトを作り、それを「継承」した「トヨタ」オブジェクトや「日産」オブジェクトなどを定義するような形となり、人間が直感的に理解しやすい構造になっています。
(※注2)
「リレーショナルデータベース」はデータベースの一種で、データを行と列を持つ表形式にして保持するデータベースです。表同士の情報が関連しあって結合する事が出来る事から「リレーショナル」と呼ばれています。
(1-2) 具体例
例えばフルーツを例に考えてみると、オブジェクト指向では「Fruitsクラス」は次のように表せます。
(サンプルクラス)
public class Fruits {
private String name;
private int price;
private String origin;
Fruits(String name,int price,String origin){
this.name = name;
this.price = price;
this.origin = origin;
}
public void setName(String name) {this.name = name;}
public void setPrice(int price) {this.price = price;}
public void setOrigin(String origin) {this.origin = origin;}
public String getName() {return this.name;}
public int getPrice() {return this.price;}
public String getOrigin() {return this.origin;}
}
(図121)Fruitsクラス
一方リレーショナルデータベースにおいて「フルーツ」を表す次のようなテーブルがあるとします。
(※カラムの列数とか若干不一致ですが、あくまでイメージです)
(図122)
項目的には、テーブルもクラスも同じ「名前」「価格」「原産地」等の項目を持っていますが、実際にデータベース⇒クラス(あるいはその逆)にデータを受け渡しするには、逐一データをマッピングする必要があり、簡単ではあるものの、非常に手間のかかる非効率な受け渡しになってしまいます。
例えば、JavaとOracleDBの組み合わせの例ですと、JDBCドライバを使ってConnection⇒Statement⇒ResultSetと生成していき、ResultSetからwhile文等で各カラムの値を取り出し、それをクラスのメンバ変数にマッピング・・・と行っていくのは単純な作業ですが、非常に手間が掛かります。
(図123)
このような不一致(ギャップ)がインピーダンスミスマッチになります。