自己組織化するアプリケーション(第2部)(3)

  • 投稿日:
  • by

分割と階層化の限界(2)

アプリケーションの本質が、情報と機能の関係性にあるのは、コンピュータ誕生以来当時も今も変わりありません。

この情報と機能の関係性において、機能の方の分割と階層化を目指したのが構造化と言われる設計技法です。この設計技法のメリットは、アプリケーションが稼働するオペレーティングシステムとの親和性が高いことです。

つまり、汎用機のOSを初めとしてUNIX、Linux、Windowsといずれもすべて機能駆動型のOSであるため、アプリケーションを実行させる環境としてネイティブにオペレーティングシステムの機能を利用することができました。実は、この問題が自己組織化アプリケーションのアーキテクチャにも大きな影響を与えるのですが、これは後述します。

一方の情報の分割と階層化を目指したのが、リレーショナルデータベースの概念を初めとしたデータオリエンティッドの設計技法です。

しかし、この技法はうまく行きませんでした。情報と機能の関係の問題でもあるのですが、実際に情報を操作するのは機能であるプログラムです。いくら情報を正規化という形で分割しても、その構造を、それを扱う機能側が理解していないと操作できません。しかもOSは機能駆動型ですから、常に最初に呼び出されるのは機能です。データ中心と言いながら実行は機能であるためプログラムの構造が犠牲になって大半のプログラムは遅くて使い物になりませんでした。

ここで登場したのがオブジェクト指向です。

情報と機能を一つのパッケージで扱うことで、情報と機能の関係をオブジェクトと呼ぶパッケージの中に隠蔽し、かわりに継承と言う形でオブジェクトの階層化を実現します。

Javaの登場がオブジェクト指向の普及を決定的なものにしましたが、当初のJavaは、データオリエンティッドアプリケーションと同様、遅くて使い物になるものではありませんでした。これがOSのAPIと言われるインターフェイスの改善によって、それなりに使い物になりつつあると言うのが現状です。更に、アプリケーションの特性に合ったフレームワークと呼ぶ、機能駆動型OSをオブジェクト駆動型として機能させるための環境の開発プロジェクトがOSSプロジェクトと言う形で進行中です。

ここで問題となるのが継承と言う階層化です。

前回のエントリーで触れた通り、情報と機能の関係は「ノンリニア」であり「疎」です。これが継承と言う形で階層化されれば、本来の階層化の目的である単純化、複雑性の除去と言う方向とは逆に働くと言うのは容易に想像できます。

つまり階層化によって単純化されるどころか複雑性が増してしまうのです。 KAI