|
|
先輩教えて!プログラミングのabc(オブジェクト指向編)---コンポーネントって,どうなってるの(上)
ソフトウェア部品,すなわちコンポーネントが現実になったのは,米Microsoft社が複合文書の実現機構「OLE(Object Linking and Embedding)」を拡張して,アプリケーション間連携機構に発展させてからだ。そしてその最大の推進役が,Visual Basicである(写真[拡大表示])。
Visual Basicが導入したコンポーネント規約は2種類ある。4.0版で導入した「VBX」と,OLEベースにした「OCX(OLE Control)」である注1) 。VBXはVisual Basicが普及したことからそれなりに使われたが,Visual Basic以外で使えないという決定的な問題があった。そこで5.0版でOCXを導入した。OCXはOLEから複合文書のための機能などを取り除き,コンポーネントで発生したイベントをコンポーネントを利用するプログラムに通知するインタフェースを設けたものである(詳細は後述)。 このほか,Javaのコンポーネント規約「JavaBeans」と「Enterprise JavaBeans」,Linuxなどのデスクトップ環境KDE(K Desktop Environment)における「DICOP」など,さまざまある。 オブジェクトであることが第1歩コンポーネントを独立した部品として使えるのは,オブジェクト指向の考え方による部分が大きい。オブジェクトであることによって,単に呼び出して処理をするだけでなく状態を保持できるからだ。このことがGUI(グラフィカル・ユーザー・インタフェース)を作る上で非常に有効である。状態の維持をプログラム側で管理しなくて済む。これが一つの独立性である。オブジェクト指向以前の手続き型のライブラリの場合,呼び出したきりになってしまうので,状態に関してはプログラム側で保持しなければならない。そのぶん,ライブラリとのやり取りも発生してしまう。
そしてその独立したコンポーネントは,入れ替えが可能である(図1[拡大表示])。同じ機能を備え,しかも同じインタフェースのコンポーネントであれば,プログラム本体をほとんど改変することなく入れ替えることができる。例えばWebブラウザのコンポーネントとしてInternet Explorerを使っているプログラムがあるとする。このとき,IEのバージョンが5であるか6であるかは,ごく基本的なAPIのレベルではあまり違いがない。だからOSに組み込まれたIEのバージョンによらず,利用可能なのである注2)。複数企業間でインタフェースを統一すれば,その利用範囲はさらに拡大するだろう。 オブジェクトの実装を関知しないもう一つ独立性として挙げられるのは,その動作をするオブジェクトの実装をなんら考慮しなくていいということである(図2[拡大表示])。コンポーネントを利用するインタフェースを遵守しさえすれば,実際にどのように実現しているのかを関知しなくていい。クラスやオブジェクトの単位で再利用しようとすると,クラスの階層構造や参照関係が複雑に絡み合って適切に取り出せないことがある。コンポーネントであればその心配がない。
ただこの結果として構造が冗長になる可能性はある。例えば同じGUI部品であっても,Borland Software社が作ったものとMicrosoft社が提供するものを混在させても問題なく利用できる。しかしそれぞれのGUI部品は似たようなものであり,どちらも同じ処理をしている可能性が高い。しかし,独立しているがゆえに,それぞれのコンポーネントで個別にその処理を実装しなければならない注3)。 プログラムにとっては1個のクラス利用者から見たコンポーネントは,基本的に1個のクラスである。そこからそのオブジェクトをプログラム中で生成することになる。プログラマが独自に定義したクラスのオブジェクトと,利用するうえでは何ら変わりがない。ただ統合開発環境で利用する場合には,一度コンポーネントをインストールしなければならないことが多い。インストールすれば,ごく普通のクラスとして使える。 このようにコンポーネントの場合,オブジェクトの大きさ(粒度などとも呼ぶ)がプログラミングにおけるクラスよりも大きいのが一般的である。粒度が大きいことにも意味がある。クラス単位のオブジェクトの粒度では,システム設計の段階では考慮しがたい。しかしコンポーネントのように粒度が大きいと,その単位を想定してシステム設計に反映させやすくなるからだ注4) 。ただ,すべてのコンポーネントが必ず設計段階で考慮されるわけではない。例えばGUI部品などは設計段階ではあまり考慮しない。 (北郷 達郎、八木 玲子)
連載新着連載目次へ >>
|