■ ORM(Object Relational Mapper)とは
◆オブジェクト指向言語
人間同士でコミュニケーションする時には言語を使用する。コンピュータとコミュニケーションする時にも言語を使用する。
前者は(ほとんど)自然言語であるが、後者は人工的に作られたものである。
実務に使われた主要な言語をあげていくと、FORTRAN、COBOL、PL/I、RPG、C、C++、Javaなどとなる。最近はRubyやPythonが伸びてきている。
機械語からアセンブラ言語、高級言語となり、構造化プログラミングが提唱され、オブジェクト指向言語となった。C++、Javaなど現在主流の言語、新たに作られている言語は、オブジェクト指向言語である。
今後また新しいタイプの言語が出現するかもしれないが、オブジェクト指向言語というものは、現在のプログラミング言語の到達点である。プログラミングの作業効率、プログラムの品質を大きく向上させることが可能となった。
いろいろと難しいことを言う人はいるのだが、設計やプログラミングを開始しようとするときに、まず「クラス構成をどうするか?」と考えるのは、頭がオブジェクト指向に染まっていることを示している。
これを読まれている方には、隠蔽、継承、多態性などを説明する必要はないので、後の議論との関連で、「オブジェクト指向言語は、メモリ上に展開されたデータをツリー構造で管理する」ということを確認しておく。
処理の進行に伴って、各種のデータが必要となる。そのデータをオブジェクトとして格納するために、動的にメモリを確保することが必要であり、確保されたメモリすなわちオブジェクトが、リファレンスでつながる構造となっている。
◆リレーショナルデータベース
コンピュータの用途の主要部分を占める事務処理システムの本質は何かといえば、「各種の業務データを、業務の進展に応じて、作成・保管・変換していくものである」ということができる。
各種の業務データはハードディスクに保管・管理される。保管・管理するためのソフトウェアとしてデータベースが使用される。
昔は階層型データベースというものが使用されたが、現在ではリレーショナルデータベースというものが使われている。遅い遅いと文句を言われながらも、データベースはみんなリレーショナルとなってしまった。
オブジェクトデータベースというものも存在するが、少なくとも現在ではリレーショナルデータベースに取って代わるものではない。
上記の事務処理システムの本質を考えるならば、リレーショナルデータベースの取り扱いは、プログラムにおいて、きわめて重要な位置を占めるものである。これは理解していただけるだろう。
リレーショナルデータベースは、IBMのコッドが提唱したものであり、一階述語論理と集合論を基礎としている。一階述語論理を基礎としたプログラミング言語Prologがほとんど消えかかっているのとは対照的である。
一階述語論理と集合論といったが、安直にいえばリレーショナルデータベースは、表形式のイメージでデータを表現する。これは多くの人間にとって理解しやすいものである。
当然ながら世の中には、表形式の表現が適さないデータも多いのだが、とにかく無理やりにでも表形式でデータを表現する。ここでは論じないが、このように制限を設けて表現形式を統一することにより、逆に汎用性を確保し、大きな力を発揮することができた。
◆インピーダンスミスマッチとORM(Object Relational Mapper)
あまりにも簡単に展開してしまったが、現在の事務処理システムのプログラミングでは、オブジェクト指向言語を用いてリレーショナルデータベースを取り扱うということになる。
すなわちツリー構造のデータの取り扱いを得意とするものが表形式のデータを扱うということになる。相反するとまではいわないにしても、そぐわないということは言える。
これが俗に言うインピーダンスミスマッチというもので、実際のプログラミングにおいては、本質的なことから、仔細なことまで、いろいろと問題が発生する。
もしかすると「扱うデータの形式を統一すれば?」というご意見もあるかもしれない。しかしメモリ上の動的なデータを扱うものとディスク上の静的なデータを扱うものとして、それぞれほぼ必然的な発展を遂げてきたものである。そのような統一・統合が可能であったならば、すでに実現されているだろう。
このような事情があるので、業務処理のロジック以外に、雑多なプログラミングをしなければならないという状況が発生する。これらの処理は定型的なものではあるが、煩雑であり、またバグの温床となる。
このインピーダンスミスマッチを解消しようとするのが、ここで説明しようとしているORM(Object Relational Mapper)である。
天下り的に提示すれば、ORM(Object Relational Mapper)がサポートする機能は、簡単には次のようにまとめることができる。
1.テーブルとクラスの対応をとる
2.カラムとフィールドの対応を取る
3.表形式とツリー構造の対応をとる.
4.その他
==
・目次 - Java言語プログラミング入門
http://blogs.yahoo.co.jp/artery2020/39975776.html
・目次 - ビジネスパーソンの常識と非常識
http://blogs.yahoo.co.jp/artery2020/39728331.html
・目次 - 論理・発想・思考についての考察と鍛え方
http://blogs.yahoo.co.jp/artery2020/39657784.html
==