« アプリケーションドライバ発表会(3/26,Fri) | トップページ | クラウドと基幹システム »

2010.03.13

オブジェクト指向とイパネマの娘

 以前にDAW(演奏を録音したりプログラミングして音源を作るためのツール)の話を書いたが、そのソフトもオブジェクト指向言語で作られている。しかし、それを使う際に、ユーザである私はオブジェクト指向を意識する必要はない。同様に何でもいいが、たとえば工場で工業用ロボットの動作プログラム(シーケンス)を管理している製造管理者が、シーケンスデータを編集する際にも、オブジェクト指向を意識することはない。

 当たり前のことを言っているように思われるかもしれない。では、こう言ったらどうだろう。業務支援システム(生産管理システムのような事務処理支援システムのこと)の開発者はオブジェクト指向を意識しなくてよい――これには反論があるかもしれない。オブジェクト指向を知らずにシステム開発などできるわけがない、と。

 確かに、個別の業務支援システムを「丸腰」で、つまりプログラミング言語を使っていきなり開発するとしたら、オブジェクト指向の知識は必要だし意識しないわけにはいかない。しかしそれはシステムを開発するための特殊なやり方かもしれないのだ。

 たとえばミュージシャンが、「イパネマの娘演奏プログラム(ipanema.exe)」を、C++あたりを使っていきなりプログラミングするとしたら、オブジェクト指向の知識は必要だ。しかしふつうそんなことはしない。DAWを使って演奏シーケンスデータを作って、既存のエンジン(ドライバ)に読ませて演奏させるだろう。その過程でミュージシャンがオブジェクト指向を意識する必要はない。

 つまり、「業務支援システムの開発者にはオブジェクト指向の知識が必要である」という主張は「音楽演奏シーケンスを作るミュージシャンにも、工業用ロボットの動作シーケンスを管理する製造管理者にも、オブジェクト指向の知識が必要である」という奇妙な主張と同形なのである。次の図を見てほしい。


図1┌─────────────────┐
  |  c.特定曲の演奏シーケンス   |
 ┌┴─────────────────┴┐
 | b.演奏シーケンス制御用ソフトウエア |
┌┴───────────────────┴┐
|   a.オブジェクト指向言語処理系    |
└─────────────────────┘

 C++やJavaのようなオブジェクト指向言語の処理系(a)があって、その上にDAWのような演奏シーケンス制御用ソフトウエア(b)が開発される。これを用いてたとえば「イパネマの娘」の演奏シーケンスデータ(c)が作成され、それをDAWで再生したり、変換してiPodで演奏させることで成果物の効用を得られる。

 ミュージシャンがbを利用する際、オブジェクト指向を意識する必要はない。音楽自動演奏の諸問題を認識する知識の枠組み(DSL)と、プログラミング言語の特性(オブジェクト指向)とを、bが結びつけてくれているからだ。bを開発する者はDSLとオブジェクト指向の双方に通じていなければいけない。しかし、bのユーザ(ミュージシャン)は、DSLさえ理解しておけばbを使いこなせる。図の各層は「それより下位レベルの諸問題が、それより上位レベルに影響しない」ためのインタフェースとして機能している。

 同様に、工場の製造管理者が製造シーケンス制御ソフト(図2のb)を利用する際、オブジェクト指向を意識する必要はない。ロボットオートメーションに関するDSLとオブジェクト指向とをbが結びつけているからだ。bの開発者はDSLとオブジェクト指向の双方に通じていなければいけない。しかし、bのユーザ(製造管理者)はDSLさえ理解しておけばよい。


図2┌─────────────────┐
  | c.特定部品製造の動作シーケンス |
 ┌┴─────────────────┴┐
 | b.製造シーケンス制御用ソフトウエア |
┌┴───────────────────┴┐
|   a.オブジェクト指向言語処理系    |
└─────────────────────┘

 同じことが業務支援システムでもいえる。「特定事務処理の動作シーケンス(図3のc。業務支援システムのこと)」の作成者(つまりシステム開発者)が「事務処理シーケンス制御用ソフトウエア(b)」を利用する際、オブジェクト指向を意識する必要はない。事務処理に関するDSLとオブジェクト指向とをbが結びつけているからだ。bの開発者はDSLとオブジェクト指向の双方に通じていなければいけない。しかし、bのユーザ(システム開発者)はDSLさえ理解しておけばbを使いこなせる。


図3┌─────────────────┐
  | c.特定事務処理の動作シーケンス |
 ┌┴─────────────────┴┐
 |b.事務処理シーケンス制御用ソフトウエア|
┌┴───────────────────┴┐
|   a.オブジェクト指向言語処理系    |
└─────────────────────┘

 おわかりだろうか。問題の本質は、従来の業務支援システム開発において図3のbが整備されていなかった点にある。これまでわれわれは図4のような「丸腰」な体制でがんばってきたということだ。さまざまな補助ツール(d)が提案されたものの、aはcに対して「剥きだし」のままだった。それゆえにこそ、個別案件の開発現場でオブジェクト指向の知識がいまだに必要とされている。紺屋の白袴とはこのことで、その不合理に居直ろうとするかのような「ドメイン駆動開発」なんて方法論まで提唱されている。


図4┌─────────────────┐
  | c.特定事務処理の動作シーケンス |
  |        ┌────────┴┐
  |        |  d.補助ツール  |
┌─┴────────┴─────────┴┐
|   a.オブジェクト指向言語処理系    |
└─────────────────────┘

 では、これまで欠落していた「事務処理シーケンス制御用ソフトウエア(b)」とはどんなものなのか。そして、それが立脚している「事務処理の諸問題を認識する知識の枠組み(DSL)」とは何なのか。後者は前者を実装するための基本的なアイデアを提示できるものでなければならない。そしてそれはオブジェクト指向とは異質なものでなければならない(そうでないとaはcに対して剥きだしであり続ける)。私はそれが「DOA」であると考えて、bであるところの「XEAD Driver」を開発している。

 ともあれ、業務システムの開発企業であれば、それぞれが信ずるところのDSLの体系にもとづいて「事務処理シーケンス制御用ソフトウエア」を優先的に開発したほうがいい。結果的に、個別案件の開発者がいちいちオブジェクト指向を意識する必要がなくなるし、なによりも開発効率が向上するからだ。

 このように、オブジェクト指向の優れたパワーは「個別案件(c)」ではなく、「事務処理シーケンス制御用ソフトウエア(b)」の開発に投入されるべきである。「イパネマの娘演奏プログラム(ipanema.exe)」や「いとしのレイラ演奏プログラム(layla.exe)」を個々にオブジェクト指向プログラミング(ドメイン駆動開発)する、なんて不合理なやり方はもうやめよう。

|

« アプリケーションドライバ発表会(3/26,Fri) | トップページ | クラウドと基幹システム »

コメント

本日3月26日のアプリケーションドライバ発表会
に参加しました柳川です。

仕様を作り上げると同時にアプリケーションが出来上が
る光景は「驚き半分/(将来の)怖さ半分」でした。

データモデリングの重要性も再確認でき、気づきの多い
発表会でした。

あっという間の2時間、ありがとうございました。

投稿: 柳川直紀 | 2010.03.26 22:59

柳川さん

楽しかったですねー。ややこしい話はしたくなかったのですが、アプリケーションドライバみたいな実装技術が発展するほど、分析・設計スキルが大事になってくるんですよね。懇親会も熱かったですよ。次回はそちらにもぜひご参加くださいませー(^^)

投稿: わたなべ | 2010.03.27 01:23

渡辺先生へ。やっぱりあなたは素晴らしい。この業界で仕事をしている私にとってのバイブル的な「書」になっています。これからの文筆活動も期待しています。

投稿: 春木秀明 | 2010.06.23 19:17

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: オブジェクト指向とイパネマの娘:

« アプリケーションドライバ発表会(3/26,Fri) | トップページ | クラウドと基幹システム »