(57)【特許請求の範囲】
【請求項１】
第４世代言語プログラミングツールによって設計されるアプリケーションを実行するための方法であって、前記方法は、
第４世代言語プログラミングツールによって生成されるアプリケーションのコンポーネントのインプリメンテーション・クラスの設定を受け付けるステップを含み、前記インプリメンテーション・クラスは、デフォルトのインプリメンテーション・クラス、または、前記アプリケーションの開発者によって指定される、前記デフォルトのインプリメンテーション・クラスと異なるインプリメンテーション・クラスを含み、
前記アプリケーションに含まれるアプリケーションコードから、前記アプリケーションコードの部分を読出すステップを含み、前記アプリケーションコードは当該アプリケーションの開発者によって指定されたインプリメンテーション・クラスを特定するデータを含み、前記部分は
ａ）  前記アプリケーションのための前記コンポーネントを特定し、当該コンポーネントは前記第４世代言語プログラミングツールとともに配布される実行時ライブラリに含まれる標準インプリメンテーションである第１のインプリメンテーションを用いて実現される特定のコンポーネントタイプであり、前記部分はさらに、
ｂ）  前記第１のインプリメンテーションと異なり、かつ前記第４世代言語プログラミングツールとともに配布される実行時ライブラリの外部にある、前記コンポーネントのためのカスタムインプリメンテーションである第２のインプリメンテーションを特定し、
前記方法はさらに
前記設定されたインプリメンテーション・クラスが前記アプリケーションの開発者によって指定されたインプリメンテーション・クラスである場合に、前記アプリケーション内に前記コンポーネントを作成するために前記第２のインプリメンテーションにおいて実現されるコンストラクタを呼出すことにより前記アプリケーションコードの前記部分を実行するステップを含み、
第１のインプリメンテーションおよび第２のインプリメンテーションは両方とも共通インターフェイスをサポートし、コンストラクタを呼出すステップは、前記特定のコンポーネントタイプのためのメッセージハンドラによって前記共通インターフェイスを介して行なわれる、方法。
【請求項２】
前記読出すステップは、サーバ上に存在する実行時エンジンによって行なわれ、
前記コンストラクタを呼出すステップは、前記アプリケーションコードの前記部分を実行することに応答して前記実行時エンジンによって生成されるメッセージのクライアントでの受信に応答して前記クライアント上で行なわれる、請求項１に記載の方法。
【請求項３】
前記実行時エンジンは、メッセージをディスパッチャに送ることにより前記アプリケーションコードの前記部分を実行し、
前記ディスパッチャは、前記特定のコンポーネントタイプのためのメッセージハンドラのインスタンスを生成することにより前記メッセージに応答し、
前記メッセージハンドラは前記コンストラクタを呼出す、請求項２に記載の方法。
【請求項４】
前記実行時エンジンはサーバ上にあり、
前記ディスパッチャはネットワークを介して前記サーバに作動的に結合されるクライアント上にあり、
前記実行時エンジンは前記ネットワークを介して前記ディスパッチャに前記メッセージを送る、請求項３に記載の方法。
【請求項５】
第４世代言語プログラミングツールによって設計されるアプリケーションを１つ以上のプロセッサが実行するための命令の１つ以上のシーケンスを担持するコンピュータ読出可能記録媒体であって、前記１つ以上のプロセッサが、
第４世代言語プログラミングツールによって生成されるアプリケーションのコンポーネントのインプリメンテーション・クラスの設定を受け付けるステップを行い、前記インプリメンテーション・クラスは、デフォルトのインプリメンテーション・クラス、または、前記アプリケーションの開発者によって指定される、前記デフォルトのインプリメンテーション・クラスと異なるインプリメンテーション・クラスを含み、
前記アプリケーションに含まれるアプリケーションコードから、前記アプリケーションコードの部分を読出すステップを行い、前記アプリケーションコードは当該アプリケーションの開発者によって指定されたインプリメンテーション・クラスを特定するデータを含み、前記部分は
ａ）  前記アプリケーションのための前記コンポーネントを特定し、当該コンポーネントは前記第４世代言語プログラミングツールとともに配布される実行時ライブラリに含まれる標準インプリメンテーションである第１のインプリメンテーションを用いて実現される特定のコンポーネントタイプであり、前記部分はさらに
ｂ）  前記第１のインプリメンテーションと異なり、かつ前記第４世代言語プログラミングツールとともに配布される実行時ライブラリの外部にある、前記コンポーネントのためのカスタムインプリメンテーションである第２のインプリメンテーションを特定し、前記１つ以上のプロセッサがさらに
前記設定されたインプリメンテーション・クラスが前記アプリケーションの開発者によって指定されたインプリメンテーション・クラスである場合に、前記アプリケーション内に前記コンポーネントを作成するために前記第２のインプリメンテーションにおいて実現されるコンストラクタを呼出すことにより前記アプリケーションコードの前記部分を実行するステップを行ない、
第１のインプリメンテーションおよび第２のインプリメンテーションは両方とも共通インターフェイスをサポートし、コンストラクタを呼出すステップは、前記特定のコンポーネントタイプのためのメッセージハンドラによって前記共通インターフェイスを介して行なわれるように、前記１つ以上のプロセッサにより実行される命令の１つ以上のシーケンスを担持するコンピュータ読出可能記録媒体。
【請求項６】
前記読出すステップは、サーバ上に存在する実行時エンジンによって行なわれ、
前記コンストラクタを呼出すステップは、前記アプリケーションコードの前記部分を実行することに応答して前記実行時エンジンによって生成されるメッセージのクライアントでの受信に応答して前記クライアント上で行なわれる、請求項５に記載のコンピュータ読出可能記録媒体。
【請求項７】
前記実行時エンジンは、ディスパッチャにメッセージを送ることにより前記アプリケーションコードの前記部分を実行し、
前記ディスパッチャは、前記特定のコンポーネントタイプのためのメッセージハンドラのインスタンスを生成することにより前記メッセージに応答し、
前記メッセージハンドラは前記コンストラクタを呼出す、請求項６に記載のコンピュータ読出可能記録媒体。
【請求項８】
前記実行時エンジンはサーバ上にあり、
前記ディスパッチャは、ネットワークを介して前記サーバに作動的に結合されるクライアント上にあり、
前記実行時エンジンは前記ネットワークを介して前記ディスパッチャに前記メッセージを送る、請求項７に記載のコンピュータ読出可能記録媒体。
【請求項９】
前記コンポーネントは、ユーザインタフェースコンポーネントである、請求項１に記載の方法。
【請求項１０】
前記コンポーネントは、ユーザインタフェースコンポーネントである、請求項５に記載のコンピュータ読出可能記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、コンピュータシステムに関し、より具体的には、第４世代プログラミングツールを用いて生成されたアプリケーションの属性を拡張することに関する。
【背景技術】
【０００２】
コンピュータ自体は、前もって手動で行なわれた多くのタスクを自動化しているが、コンピュータをプログラムするというタスクがある程度の自動化を達成したのはかなり最近になってからのことである。初期のコンピュータプログラミング言語は、プログラマが、通常テキストファイルでソースコードをタイプすることにより、アプリケーションのコードのすべてを手動で入力することを必要とした。そのような手動のコード入力は面倒で間違えやすいが、それは、結果として得られたアプリケーションの実質的にすべての局面が完全にプログラマの制御下に置かれるという利点を有していた。プログラマは、基礎となるコードを修正するだけで、どんなにふさわしいと考えていても彼らのプログラムを修正することができた。
【０００３】
やがて、アプリケーションの作成を自動化するための技術が開発された。特に、ユーザがアプリケーションを設計し、ユーザインターフェイスコントロールと対話するだけでそれらのアプリケーションを実現するコードを自動的に生成することを可能にするツールが開発された。そのようなツールは、一般的に、第４世代（４ＧＬ）プログラミングツールと呼ばれている。
【０００４】
たとえば、４ＧＬプログラミングツールは、生成されるべきアプリケーションがそのユーザに対して表示するインターフェイスを表わすウィンドウをアプリケーション設計者に与える。４ＧＬプログラミングツールは、アプリケーション設計者が標準ユーザインターフェイスコンポーネントをウィンドウの上に視覚的に「ペイント」することを可能にするユーザインターフェイス設計ツールをアプリケーション設計者にさらに与えるかもしれない。たとえば、ユーザインターフェイス設計ツールは、アプリケーション設計者がチェックボックス、メニュー、ダイアログボックス、リストボックスおよびボタンをウィンドウの上に置くことを可能にし、かつアプリケーション設計者が、ユーザがこれらのコンポーネントと対話するとき何が起こるべきかを指定することを可能にするかもしれない。
【０００５】
ユーザは、ユーザがウィンドウ上に置いた各ユーザインターフェイスコンポーネントごとに「プロパティパレット」を見るかもしれない。プロパティパレットは、ユーザによって指定可能であるユーザインターフェイスコンポーネントのプロパティ、およびこれらのプロパティの現在値を列挙する。たとえば、ボタンコンポーネントに対するプロパティは、ラベルプロパティに割当てられた値が、ボタン上に表示されるテキストである、「ラベル」であるかもしれない。
【０００６】
アプリケーション設計者がアプリケーションの設計を終えると、４ＧＬプログラミングツールはアプリケーションのためのコードを自動的に生成する。このように生成されるコードの形は、インプリメンテーションによって異なってよい。たとえば、４ＧＬプログラミングツールは、マシンで実行可能なコード、ソースコードおよび／またはメタデータを生成してもよい。説明のために、「アプリケーションコード」という言葉は、ここでは、そのデータの形にかかわらず、４ＧＬプログラミングツールによって生成され、４ＧＬプログラミングツールを用いて設計されるアプリケーションを指定するデータのことをいうために用いられる。
【０００７】
しばしば、４ＧＬプログラミングツールは、コンピュータによって直接実行可能でないアプリケーションコードを生成するために使用されるが、このアプリケーションコードは、特定の実行時エンジンによって実行されると、４ＧＬプログラミングツールを用いて設計されたアプリケーションを実現する。たとえば、実行時エンジンは、４ＧＬプログラミングツールによって生成されたアプリケーションコードを読出し、アプリケーション設計者によってウィンドウに追加されたユーザインターフェイスコンポーネントのすべてとともに、アプリケーション設計者によって前もって設計されたウィンドウを表示することによりアプリケーションコードを「実行」する。ユーザがこれらのユーザインターフェイスコンポーネントと対話するとき、アプリケーションは、アプリケーションプログラマが４ＧＬプログラミングツールを用いてこれらのコンポーネントに割当てた動作を行なう。
【０００８】
４ＧＬプログラミングツールは、アプリケーションの設計を手動のコーディング技術より遥かに簡単で高速かつ誤りにくくする。しかしながら、４ＧＬプログラミングによって獲得される容易さおよび速度は、その代価を必ず伴う。特に、手動のコーディングによって提供される実質的に無制限の柔軟性および制御が失われる。代わりに、４ＧＬプログラミングツールのユーザには、典型的には、標準のユーザインターフェイスコンポーネントの「決まりきった」セットが与えられる。これらのコンポーネントを実際に実現するコードは、典型的には、４ＧＬプログラミングツールとともに配布されるコンパイルされたライブラリに含まれ、そのため一般的にはユーザにはアクセス可能でない。したがって、ユーザは、（１）４ＧＬプログラミングツールによって与えられるコンポーネントの組、（２）これらのコンポーネントによって与えられるプロパティ、および（３）これらのコンポーネントに対して与えられたメソッドによって行なわれる機能に制限される。長方形のボタンの代わりに楕円形のボタンを提示するなどの、規範からの僅かなずれでさえも、４ＧＬプログラミングツールによって与えられるコンポーネントがずれを可能にするユーザ設定可能なプロパティを有していなければ、可能でない。たとえば、４ＧＬプログラマが楕円形ボタンを使用するためには、４ＧＬプログラミングツールによって与えられるボタンコンポーネントは、「長方形」から「楕円形」に変更可能な「形状」プロパティを提供しなければならないであろう。ボタンコンポーネントが「形状」プロパティを有していないか、または「楕円形」が形状プロパティに対してサポートされる値でなければ、ユーザは、楕円形ボタンを有するアプリケーションを設計することができない。
【０００９】
４ＧＬプログラマがアプリケーションに組込む可能性のあるソフトウェアコンポーネントおよびユーザインターフェイス（ＵＩ）の属性および振る舞いは、４ＧＬプログラミングツールとともに提供されるライブラリ内に供給されるオブジェクトクラスにおいて実現される。ライブラリは、典型的には、コンパイルされた形で提供され、そのためそれは編集可能でない。たとえば、ユーザがボタンを使用するアプリケーションを設計するとき、４ＧＬプログラミングツールは、実行時エンジンによって実行されると、４ＧＬプログラミングツールとともに提供されるライブラリ中の「ボタン」クラス内のメソッドに対して呼出がなされることになるコードを生成する。ボタンクラスの「ディスプレイ」メソッドが長方形のボタンを表示するよう設計されているならば、設計者が楕円形のボタンを好んでいたとしても、長方形のボタンが表示される。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
前の説明に基づいて、アプリケーションが４ＧＬプログラミングツールを用いて簡単かつ迅速に設計されることを可能にするが、現在の４ＧＬプログラミングツールよりも高い柔軟性を可能にする方法およびシステムを提供することが、明らかに望ましい。特に、４ＧＬプログラミングツールとともに供給されるコンポーネントのインプリメンテーションにのみユーザを制限することのない４ＧＬプログラミングツールを提供することが望まし
い。
【課題を解決するための手段】
【００１１】
この発明のある局面に従えば、アプリケーション設計者が、４ＧＬプログラミングツールを用いて設計するアプリケーションにおいて使用されるコンポーネントのインプリメンテーション・クラスを指定することを可能にする４ＧＬプログラミングツールが提供される。このように指定されたインプリメンテーション・クラスは、４ＧＬプログラミングツールで提供される対応のコンポーネント・インプリメンテーションによってサポートされない属性および振る舞いを定義し得る。実行時に、指定されたインプリメンテーション・クラス中のメソッドが呼出される。ユーザ指定のインプリメンテーション・クラスのメソッドを正しく呼出すために、メソッドのインターフェイスは、呼出を行なうエンティティに知られていなければならない。したがって、好ましくは、４ＧＬプログラミングツールで提供される「標準」のコンポーネント・インプリメンテーションおよびアプリケーション設計者によって指定される「カスタム」コンポーネント・インプリメンテーションの両方を含む、アプリケーションによって使用されるべきすべてのコンポーネント・インプリメンテーションが、共通インターフェイスを実現する。
【００１２】
この発明は、添付の図面の図に制限のためではなく例示のために示され、同様の参照番号は同様の要素を指す。
【発明を実施するための最良の形態】
【００１３】
４ＧＬプログラミングツールを用いて生成されるアプリケーションの属性を拡張するための方法および装置が記載される。以下の説明においては、説明の目的のために、この発明を完全に理解するために多くの具体的な詳細が述べられる。しかしながら、当業者には、この発明がこれらの具体的な詳細なしに実施され得ることが明らかである。他の場合には、この発明を不必要にわかりにくくすることを避けるために、周知の構造および装置がブロック図の形で示される。
【００１４】
機能概要
従来の４ＧＬプログラミングツールと同様に、ユーザがアプリケーションのためのコードを手動でタイプすることなしにアプリケーションを設計することを可能にする４ＧＬプログラミングツールが提供される。ある実施例に従えば、ユーザは、４ＧＬプログラミングツールを用いて、ユーザインターフェイスコンポーネントを選択し、選択されたユーザインターフェイスコンポーネントをウィンドウ内に置き、これらのコンポーネントのためのプロパティ値を指定することにより、視覚的にアプリケーションを設計する。しかしながら、従来の４ＧＬプログラミングツールと異なって、アプリケーション設計者によって制御されるある１つのコンポーネントプロパティは、コンポーネントのインプリメンテーション・クラスである。アプリケーション設計者がコンポーネントのインプリメンテーション・クラス・プロパティに設定する値が、コンポーネントを実現するために実行時に実行されるプロパティおよびメソッドを定義するオブジェクトクラスを決める。たとえば、ボタンのための指定されたインプリメンテーション・クラスは、４ＧＬプログラミングツールによって提供される標準のボタンクラスであっても、または、アプリケーション設計者によってもしくはサードパーティのコンポーネント開発者によって書かれたカスタム設計の楕円形のボタンクラスであってもよい。
【００１５】
実行時に、指定されたインプリメンテーション・クラス中のメソッドが呼出され、コンポーネントのインスタンスを生成し、コンポーネントのプロパティを設定し読出す。これらのメソッドを正しく呼出すために、メソッドのインターフェイスは、呼出を行なうエンティティに知られていなければならない。したがって、この発明のある局面に従えば、４ＧＬプログラミングツールとともに提供されるライブラリ中の「標準」のコンポーネント
・インプリメンテーションおよびアプリケーション設計者によって指定される「カスタム」コンポーネント・インプリメンテーションの両方を含む、アプリケーションによって使用されるべきコンポーネント・インプリメンテーションの各々が、共通のインターフェイスを実現する。
【００１６】
例示の４ＧＬシステム
図１は、この発明の実施例に従う４ＧＬシステム１００を示す。４ＧＬシステム１００は、アプリケーションプログラムを定義するアプリケーションコード１１４を生成するためにアプリケーション設計者１１０が使用する４ＧＬプログラミングツール１１２を含む。前述のように、アプリケーションコード１１４は、マシンによって直接実行可能な形であってもよく、仮想マシンによって実行可能な形であってもよく、または単に、アプリケーションを記述するメタデータであってもよい。例示の実施例では、アプリケーションコード１１４は、この発明を実現するために実行時エンジン１１６によって使用される形である。
【００１７】
実行時に、アプリケーションコード１１４は、実行時エンジン１１６によって「実行」される。アプリケーションコード１１４の性質に依存して、アプリケーションコード１１４を実行するプロセスは、たとえば、アプリケーションコード１１４に含まれる命令を解釈することや、またはアプリケーションコード１１４に記述されるアプリケーションコンポーネントを実現するルーチンを呼出すことを伴ってもよい。
【００１８】
例示のシステム１００では、アプリケーションは、クライアント／サーバモデルにおいて実現され、アプリケーションのある部分はサーバ上で実行し、アプリケーションの他の部分はクライアント上で実行する。典型的には、サーバ側コンポーネントは、クライアント側コンポーネントと異なったマシン上にあり、２組のコンポーネント間の通信はネットワーク接続を介して行なわれる。
【００１９】
アプリケーションのサーバ側コンポーネントは、アプリケーションコード１１４および実行時エンジン１１６を含む。アプリケーションのクライアント側コンポーネントは、アプリケーションユーザ１２４に表示されるアプリケーションのユーザインターフェイスを実現するコンポーネントを含む。これらのコンポーネントは、ディスパッチャ１４０、メッセージハンドラ、およびビューを含む。例示の実施例は、３つのメッセージハンドラ１２８、１３０および１３２と３つのビュー１３４、１３６および１３８とを備えるものと示される。
【００２０】
アプリケーションのユーザインターフェイスの各コンポーネントは、対応するビューおよびメッセージハンドラを有する。たとえば、アプリケーションのユーザインターフェイスがボタンＢ１と２つのチェックボックスＣＢ１およびＣＢ２とを含むものとする。ビュー１３４およびメッセージハンドラ１２８はボタンＢ１に対応してもよく、ビュー１３６およびメッセージハンドラ１３０は第１のチェックボックスＣＢ１に対応してよく、ビュー１３８およびハンドラ１３２は第２のチェックボックスＣＢ２に対応してもよい。
【００２１】
ビューは、コンポーネントのインプリメンテーション・クラスのインスタンスである。したがって、コンポーネントに対応するビューは、そのコンポーネントを実現するコードを含む。たとえば、ビュー１３４は、ボタンＢ１を実現するインプリメンテーション・クラスのインスタンスである。同様に、ビュー１３６および１３８は、それぞれ、チェックボックスＣＢ１およびＣＢ２を実現するインプリメンテーション・クラスのインスタンスである。チェックボックスＣＢ１およびＣＢ２のためのビュー１３６および１３８は、たとえば、ＣＢ１がデフォルトのチェックボックス・インプリメンテーション・クラスを用いて実現され、ＣＢ２がユーザ指定のチェックボックス・インプリメンテーション・クラ
スを用いて実現されるならば、同じコードを含まない。これらの条件下では、ＣＢ１を実現するコードは、典型的には、４ＧＬプログラミングツール１１２とともに配布される実行時ライブラリに含まれるが、ＣＢ２を実現するコードは、別個のファイルにおいて実現されるであろう。
【００２２】
コンポーネントの各タイプは、メッセージハンドラの対応のタイプを有する。所与のコンポーネントタイプに対するメッセージハンドラのタイプは、そのコンポーネントタイプと関連づけられるメッセージのタイプを処理するよう設計される。たとえば、ボタンメッセージハンドラは、ボタンが受取るメッセージのタイプをリッスンし処理し、チェックボックスメッセージハンドラは、チェックボックスが受取るメッセージのタイプをリッスンし処理する。
【００２３】
コンポーネントに対応するメッセージハンドラは、コンポーネントに関わるイベントに関連するメッセージを実行時エンジン１１６に送りかえす。たとえば、メッセージハンドラ１２８は、ユーザがボタンＢ１をクリックしたことを検出するかもしれない。クリックを検出することに応答して、メッセージハンドラ１２８は、ディスパッチャ１４０を介して実行時エンジン１１６にメッセージを送り、実行時エンジン１１６に、ボタンＢ１がクリックされたことを気づかせる。
【００２４】
コンポーネントに対応するメッセージハンドラはまた、実行時エンジン１１６からのメッセージに応答してコンポーネントのビューによって与えられるメソッドを呼出す。たとえば、メッセージハンドラ１２８は、ボタンＢ１の色を変える、ビュー１３４によって与えられるメソッドを呼出すことにより、実行時エンジン１１６からのメッセージに応答してもよい。
【００２５】
実行時環境の動作
実行時に、実行時エンジン１１６は、４ＧＬプログラミングツール１１２によってあらかじめ生成されたアプリケーションコード１１４を読出し実行する。このアプリケーションコード１１４は、アプリケーション設計者１１０がインプリメンテーション・クラスを指定したアプリケーションコンポーネントのインプリメンテーション・クラスを特定するデータを含む。たとえば、ボタンのためのデフォルトのインプリメンテーション・クラスが、DefButton.classであるとする。アプリケーションの設計中、アプリケーション設計者１１０は、アプリケーションのユーザインターフェイス上に表示されるべきＢ１ボタンのための異なったインプリメンテーション・クラスを指定してしまっているかもしれない。説明の目的のために、アプリケーション設計者１１０が、ボタンＢ１のインプリメンテーション・クラスがMyButton.classであると指定したと仮定する。これらの条件下では、アプリケーションコード１１４は、Ｂ１のインプリメンテーション・クラスがMyButton.classであることを示すデータを含む。
【００２６】
アプリケーションコード１１４の実行中、実行時エンジン１１６は、メッセージをディスパッチャ１４０に送って、アプリケーションコード１１４に指定されるコンポーネントを生成させる。デフォルトのクラス・インプリメンテーションを使用しない少なくともこれらのコンポーネントについて、実行時エンジン１１６によって送られたメッセージは、インプリメンテーション・クラスを特定する情報を含む。たとえば、実行時エンジン１１６は、インプリメンテーション・クラスMyButton.classを用いるボタンＢ１の生成を要求するメッセージをディスパッチャ１４０に送ると仮定する。
【００２７】
ディスパッチャ１４０が実行時エンジン１１６からメッセージを受取ると、ディスパッチャ１４０は、そのメッセージを、メッセージ中に特定されるコンポーネントに対応するメッセージハンドラに転送する。メッセージハンドラがメッセージ中に特定されるコンポ
ーネントに対してまだ起動されていなければ、ディスパッチャ１４０は、コンポーネントの適切なコンポーネントタイプのメッセージハンドラのインスタンスを生成する。たとえば、ディスパッチャ１４０によって受取られるメッセージがボタン（たとえばボタンＢ１）の生成を要求し、その特定のボタンに対するメッセージハンドラのインスタンスがまだ生成されていなければ、ディスパッチャ１４０は、そのボタンのためのボタンタイプメッセージハンドラ（たとえばメッセージハンドラ１２８）のインスタンスを生成する。適切なメッセージハンドラのインスタンスを生成した後、ディスパッチャ１４０はメッセージをメッセージハンドラに送る。
【００２８】
メッセージハンドラが、コンポーネントを生成すべきメッセージを受取ると、メッセージハンドラは、メッセージに含まれる情報に基づいて、コンポーネントがデフォルトのクラス・インプリメンテーションを用いて実現されるべきかどうかを決定する。コンポーネントがデフォルトのクラス・インプリメンテーションを用いて実現されるのであれば、メッセージハンドラは、コンポーネントのそのタイプのためのデフォルトのクラス・インプリメンテーションによって与えられるコンポーネントのインスタンスを生成するメソッド（すなわち「コンストラクタ」）を呼出す。これは、典型的には、４ＧＬプログラミングツール１１２とともに提供される実行時ライブラリ中のメソッドを呼出すことにより行なわれる。コンポーネントがユーザ指定のクラス・インプリメンテーションを用いて実現されるのであれば、メッセージハンドラは、ユーザ指定のクラス・インプリメンテーションによって与えられるコンストラクタを呼出す。
【００２９】
たとえば、ボタンＢ１のインスタンスの生成を要求するメッセージに応答して、メッセージハンドラ１２８は、ボタンＢ１がユーザ指定のインプリメンテーション・クラスMyButton.classを用いて実現されるということを決定する。したがって、メッセージハンドラ１２８は、ボタンＢ１のインスタンスを生成するためにMyButton.classインプリメンテーション・クラスによって与えられるコンストラクタを呼出すであろう。ボタンＢ１のインスタンスの生成は、クラスMyButtonのインスタンスを生成し、これはビュー１３４として表される。
【００３０】
クライアント側のコンポーネントのインスタンスが生成されると、コンポーネントのプロパティは、アプリケーション設計者１１０によってコンポーネントに対して指定された値に設定されなければならない。コンポーネントのプロパティに対する値は、４ＧＬプログラミングツール１１２によって生成されるアプリケーションコード１１４に反映される。コンポーネントのインスタンス生成をさせた後、実行時エンジン１１６は、コンポーネントのプロパティの値を示すメッセージをディスパッチャ１４０に送る。ディスパッチャ１４０は、これらのメッセージを、コンポーネントに対応するメッセージハンドラに転送し、メッセージハンドラは、コンポーネントのビューの適切なメソッドを呼出して、指定されたプロパティを指定された値に設定する。
【００３１】
たとえば、アプリケーション設計者１１０が値「OK」をボタンＢ１の「ラベル」プロパティに割当てたものとする。これらの条件下では、４ＧＬプログラミングツール１１２によって生成されるアプリケーションコード１１４は、ボタンＢ１のラベルプロパティに値「OK」が割当てられたことを示すであろう。実行時に、ボタンＢ１のインスタンスを生成させた後、実行時エンジン１１６は、ボタンＢ１のラベルプロパティが「OK」に設定されるべきであるということを示すメッセージをディスパッチャ１４０に送る。ディスパッチャ１４０はこのメッセージをメッセージハンドラ１２８に転送し、これはビュー１３４の適切なルーチンを呼出して、ボタンＢ１のラベルプロパティが「OK」に設定されるようにする。ある実施例に従えば、このプロセスは、設計中に値が指定されたボタンＢ１の各プロパティごとに繰返される。
【００３２】
重要なことには、プロパティがある値に設定されることに応答してビュー１３４によって行なわれる実際の動作は、同じプロパティが同じ値に設定されることに応答してデフォルトのボタンクラスのインスタンスによって行なわれる動作と完全に異なっていてもよい。たとえば、デフォルトのボタンクラスDefButtonは、ボタンのラベルプロパティが「OK」に設定されることに応答してテキスト「OK」が長方形のボタンの表面の上にあるようにしてもよい。反対に、ユーザ指定のボタンクラスMyButtonによって実現されるボタンＢ１は、ラベルプロパティが「OK」に設定されることに応答してボタンが文字「OK」の形になるようにしてもよい。
【００３３】
アプリケーションの実行中、実行時エンジン１１６は、ＵＩコンポーネントのプロパティの現在値を要求してもよい。値を決定するために、実行時エンジン１１６は、コンポーネントを特定し実行時エンジン１１６が現在値を要求するプロパティを指定するメッセージをディスパッチャ１４０に送る。ディスパッチャ１４０は、メッセージを適切なメッセージハンドラに転送し、メッセージハンドラは、指定されたコンポーネントに対応するビューの適切なメソッドを呼出して指定されたプロパティの現在値を取出すことにより応答する。メッセージハンドラは、取出された値をディスパッチャ１４０に戻し、ディスパッチャ１４０はメッセージ中の値を実行時エンジン１１６に送りかえす。
【００３４】
共通インターフェイス
４ＧＬプログラミングツールは、典型的には、アプリケーションプログラマに対して利用可能とされるコンポーネントの各タイプごとに、（１）コンポーネントタイプに対するクラス・インプリメンテーションおよび（２）クラス・インプリメンテーションと協働するメッセージハンドラの両方を与える。４ＧＬプログラミングツール制作者は、それらの特定のクラス・インプリメンテーションと協働するようにメッセージハンドラを設計することが可能である、というのも、彼らはこれらのクラス・インプリメンテーションの提供者であり、したがってそれに対するインターフェイスを知っており制御するからである。
【００３５】
前述のように、この発明の実施例は、アプリケーション設計者が、４ＧＬプログラミングツール制作者によって提供されるものと異なるクラス・インプリメンテーションを指定することを可能にする。ある実施例に従えば、ユーザがコンポーネントのための非デフォルトのクラス・インプリメンテーションを指定したときでも、コンポーネントのそのタイプに対して４ＧＬプログラミングツールによって与えられるメッセージハンドラは、指定されたクラス・インプリメンテーションと協働することができる。
【００３６】
ユーザ指定のコンポーネントクラス・インプリメンテーションとともに正しく機能するために、メッセージハンドラは、コンポーネントクラスのクラス・インプリメンテーションを含むクラスファイルだけでなく、コンポーネントクラスによって実現されるメソッドのインターフェイスも知っていなければならない。たとえば、ボタンＢ１のラベルプロパティを設定するために、メッセージハンドラ１２８は、ビュー１３４内の、ラベルプロパティ値を設定するメソッドのインターフェイスを知っていなければならない。
【００３７】
ある実施例に従えば、デフォルトのクラス・インプリメンテーションおよびユーザ指定のクラス・インプリメンテーションの両方を含むすべてのコンポーネントクラス・インプリメンテーションは、ここではIViewインターフェイスと呼ばれる共通インターフェイスを実現するよう設計されるので、メッセージハンドラは、ユーザ指定のコンポーネントクラスによって実現されるメソッドのインターフェイスを知っている。メッセージハンドラは、IViewインターフェイスを介してビューへの呼出を行なうよう設計される。したがって、メッセージハンドラが設計されるとき、メッセージハンドラがどのクラス・インプリメンテーションと協働しなければならないかがわかっていないとしても、メッセージハンドラはなおも、アプリケーション設計者１１０によって指定されるどのようなクラス・イ
ンプリメンテーションともともに機能することができる。
【００３８】
ある実施例に従えば、すべてのユーザ指定のクラス・インプリメンテーションは、以下のインターフェイス（IView）をサポートするよう設計される：
【００３９】
【数１】
0005520446.tif 000002
【００４０】
前述のインターフェイスにおいて、いくつかのメソッドは、タイプIHandlerのパラメータを含む。IHandlerは、特定のメッセージハンドラインスタンスを特定する値を記憶するためのデータ型である。前述のように、IViewインターフェイスにおけるメソッドへの呼出を行なうエンティティは、メッセージハンドラインスタンスである。したがって、IHandlerが入力変数として送られることを要求するメソッドに対して、呼出を行なうメッセージハンドラインスタンスは、典型的には、それ自体を特定するデータを送る。ある実施例に従えば、各コンポーネントごとに、そのコンポーネントのためのクラス・インプリメンテーションによって供給されるIViewインターフェイスのメソッドは、以下のとおりそのコンポーネントのためのメッセージハンドラによって呼出される。
【００４１】
「init」メソッドは、コンポーネントが構築された後すぐに呼出される。「init」メソッドは、コンポーネントにそのメッセージハンドラに対するリファレンスを送り、コンポーネントに、それが要求するいかなる初期化をも行なうための機会を与える。
【００４２】
「destroy」メソッドは、コンポーネントがもはや必要とされなくなったときに呼出される。このメソッドは、コンポーネントに、それが保持するいかなるシステム資源をも使える状態にするための機会を与える。
【００４３】
「getProperty」メソッドは、要求されたプロパティの値を返す。ある実施例に従えば、特定のコンポーネントタイプに対するすべてのコンポーネント・インプリメンテーションは、ある種のプロパティをサポートするよう設計される。指定されたプロパティがコンポーネントによってサポートされていなければ、このgetPropertyメソッドは、Property.NOT＿SUPPORTEDを返す。
【００４４】
「setProperty」メソッドは、指定されたプロパティの値を設定する。指定されたプロパティがコンポーネントによってサポートされていなければ、このメソッドは偽を返し、さもなくばそれは真を返す。
【００４５】
「addListener」メソッドは、指定されたタイプのリスナーを追加する。ある実施例に従えば、特定のコンポーネントタイプに対するすべてのコンポーネント・インプリメンテーションは、リスナーのあるタイプをサポートするよう設計される。
【００４６】
「removeListener」メソッドは、指定されたタイプのリスナーを除去する。
「paint」メソッドにおいて、ビューは、パラメータ中に指定されたグラフィックスオブジェクトを用いてそれ自身をペイントしなければならない。ある実施例に従えば、コンポーネントは他のコンポーネントを含んでもよい。他のコンポーネントを含むコンポーネントを「コンテナ」と呼ぶ。コンテナの一部であるコンポーネントについて、「paint」メソッドは、コンポーネントのコンテナによって呼出される。他のコンポーネントについて、「paint」メソッドは、コンポーネントのメッセージハンドラによって呼出される。
【００４７】
「repaint」メソッドにおいて、ビューは、与えられた長方形を無効にする。長方形がヌルであれば、オブジェクト全体が無効とされる。
【００４８】
「add」メソッドは、子コンポーネントを別のコンポーネントに追加する。コンテナについて、子はタイプIViewであり、IViewはすべてのビューが導出されるクラスである。リストについて、子はタイプStringである。インデックスが−１であれば、子がリストの終わりに追加される。インデックスが子の現在の数より大きいかまたは−１より小さければ、メソッドは障害を起こす。
【００４９】
「remove」メソッドは、指定されたIViewから子を取除く。コンテナについて、子はタイプIViewである。リストについて、子はタイプStringである。
【００５０】
「removeAll」メソッドは、指定されたIViewからすべての子を取除く。
アプリケーション設計者がIViewインターフェイスをサポートしないクラスを使用したいとき、アプリケーション設計者は単にそのクラスのサブクラスを定義するだけでよく、サブクラスはIViewインターフェイスをサポートしない。たとえば、アプリケーション設計者がサードパーティによって提供されるCoolButtonクラスのインスタンスとしてボタンＢ１を実現するアプリケーションを生成したいとする、ただし、CoolButtonクラスはIViewインターフェイスを実現しない。これらの状況下では、アプリケーション設計者は、（１）IViewインターフェイスを実現するCoolButtonのサブクラスを宣言し、かつ（２）IViewインターフェイスのメソッドの各々のインプリメンテーションを指定する。以下は、IViewインターフェイスを実現するサブクラスであるボタンクラスMyButtonがいかにして宣言され得るかの一例である。
【００５１】
【数２】
0005520446.tif 000003
【００５２】
「implementations of the IView Methods」は、一般的には、IViewインターフェイスを介してなされる呼出をCoolButtonによってサポートされるインターフェイスを介してなされる呼出に変換する。たとえば、ある実施例では、IViewインターフェイスのメソッドsetProperty（id, value）は、ビューのすべてのプロパティを設定するために使用される。したがって、IViewインターフェイスを介してボタンのラベルを設定するための呼出は、フォームsetProperty（Label, value）を有するであろう。同様に、IViewインターフェイスを介してボタンの色を設定するための呼出は、フォームsetProperty（Color, value）を有するであろう。しかしながら、CoolButtonクラスは、ボタンのラベルを設定するためのメソッド「setText（value）」、およびボタンの色を設定するためのメソッド「setColor（value）」を実現してもよい。これらの条件下では、IViewインターフェイスのsetPropertyメソッドのためのMyButtonクラスによって与えられるインプリメンテーションは、たとえば、以下のとおりであってもよい：
【００５３】
【数３】
0005520446.tif 000004
【００５４】
したがって、IViewインターフェイスを介するSetPropertyへの呼出は、setPropertyに送られるid値が「ラベル」であるときSetTextへの呼出に変換され、setPropertyに送られるid値が「色」であるときSetColorへの呼出に変換される。
【００５５】
代替の実施例
説明の目的のために、実施例に特有の詳細が前の説明には含まれた。しかしながら、これらの詳細は、この発明を実施するために必要とされるものでなく、この発明を制限するものと意図されるものでは決してない。たとえば、この発明は、代替の実施例を用いて実施可能であり、そのいくつかをここに記載する。
【００５６】
上述の実施例では、すべてのコンポーネント・インプリメンテーションは、メッセージハンドラに同じインターフェイスを提示する。しかしながら、代替の実施例では、所与のコンポーネントタイプの各々に対するユーザ指定のクラス・インプリメンテーションのすべてが、所与のコンポーネントタイプのデフォルトのクラス・インプリメンテーションと同じインターフェイスをサポートするが、これらのインターフェイスは、コンポーネントの異なったタイプによって異なってもよい。たとえば、ボタンのためのユーザ指定のクラス・インプリメンテーションは、ボタンのためのデフォルトのクラス・インプリメンテーションと同じインターフェイスを実現するであろうし（かつしたがって、ボタンメッセージハンドラとともに正しく機能することができる）、チェックボックスのためのユーザ指定のクラス・インプリメンテーションは、チェックボックスのためのデフォルトクラス・インプリメンテーションと同じインターフェイスを実現するであろう（かつしたがって、チェックボックスメッセージハンドラとともに正しく機能することができる）。しかしながら、ボタンインプリメンテーションのためのインターフェイスは、チェックボックスインプリメンテーションのためのインターフェイスと異なっていることがある。
【００５７】
上述の実施例では、ＵＩコンポーネント（たとえばボタンおよびチェックボックス）は、４ＧＬプログラマに利用可能とされるコンポーネントのタイプの例として与えられ、４ＧＬプログラマはいまや、それに対して非デフォルトのインプリメンテーションを指定することができる。しかしながら、ＵＩコンポーネントは、４ＧＬプログラミングツールによって提供されるコンポーネントの１つのタイプにすぎない。コンポーネントの他のタイプは、たとえば、データソースを表わすコンポーネントを含む。ここに記載される技術を用いて、ユーザが、視覚的にアプリケーションのユーザインターフェイスの一部でないものを含む、アプリケーションコンポーネントのいずれかのタイプに対する非デフォルトのインプリメンテーションを指定することを可能にする４ＧＬプログラミングツールが提供されてもよい。同様に、４ＧＬプログラマが非デフォルトのインプリメンテーション・クラスを指定し得るコンポーネントは、サーバ側で実行するコンポーネントであっても、クライアント側で実行するコンポーネントであってもよい。
【００５８】
ハードウェア概要
図２は、この発明の実施例が実現され得るコンピュータシステム２００を示すブロック図である。コンピュータシステム２００は、情報をやり取りするためのバス２０２または他の通信メカニズムと、バス２０２に結合され情報を処理するためのプロセッサ２０４とを含む。コンピュータシステム２００は、バス２０２に結合され、プロセッサ２０４によって実行されるべき命令および情報を記憶するための、ランダムアクセスメモリ（ＲＡＭ）または他の動的記憶装置などの主メモリ２０６も含む。主メモリ２０６は、プロセッサ２０４によって実行されるべき命令の実行中、一時変数または他の中間情報を記憶するために使用されてもよい。コンピュータシステム２００は、バス２０２に結合され、プロセッサ２０４のための命令および静的情報を記憶するための、リードオンリメモリ（ＲＯＭ）２０８または他の静的記憶装置をさらに含む。磁気ディスクまたは光ディスクなどの記憶装置２１０が設けられ、バス２０２に結合され、情報および命令を記憶する。
【００５９】
コンピュータシステム２００は、情報をコンピュータユーザに表示するための陰極線管（ＣＲＴ）などのディスプレイ２１２にバス２０２を介して結合されてもよい。アルファベット数字および他のキーを含む入力装置２１４がバス２０２に結合され、プロセッサ２
０４に対して情報およびコマンド選択を交信する。ユーザ入力装置の別のタイプは、プロセッサ２０４に対して方向情報およびコマンド選択を交信しかつディスプレイ２１２上のカーソルの動きを制御するための、マウス、トラックボール、カーソル方向キーなどのカーソル制御２１６である。この入力装置は、典型的には、装置が平面における位置を指定することを可能にする、第１の軸（たとえばｘ）および第２の軸（たとえばｙ）の２つの軸における２自由度を有する。
【００６０】
この発明は、４ＧＬアプリケーションを設計するためのコンピュータシステム２００の使用に関する。この発明のある実施例に従えば、プロセッサ２０４が主メモリ２０６に含まれる１つ以上の命令の１つ以上のシーケンスを実行することに応答して、アプリケーションプログラマがコンポーネントクラスの非デフォルトのインプリメンテーションを指定することを可能にする４ＧＬプログラミングツールがコンピュータシステム２００によって与えられる。そのような命令は、記憶装置２１０などの別のコンピュータで読出可能な媒体から主メモリ２０６に読出されてもよい。主メモリ２０６に含まれる命令のシーケンスの実行により、プロセッサ２０４は、ここに記載されるプロセスステップを行なうようになる。代替の実施例では、この発明を実現するためにソフトウェア命令と組合されてまたはその代わりにハードワイヤード回路構成が使用されてもよい。したがって、この発明の実施例は、ハードウェア回路構成およびソフトウェアのいかなる特定の組合せにも限られるものでない。
【００６１】
ここに使用される「コンピュータ読出可能媒体」という言葉は、命令をプロセッサ２０４に与えて実行させることに関与する任意の媒体のことをいう。そのような媒体は、不揮発性媒体、揮発性媒体および伝送媒体を含むがこれに限られるものでない多くの形をとり得る。不揮発性媒体は、たとえば、記憶装置２１０などの光ディスクまたは磁気ディスクを含む。揮発性媒体は、主メモリ２０６などのダイナミックメモリを含む。伝送媒体は、バス２０２を含むワイヤを含む、同軸ケーブル、銅線および光ファイバを含む。伝送媒体は、無線および赤外データ通信の際に生成されるものなどの、音波または光波の形をとってもよい。
【００６２】
コンピュータ読出可能媒体のよくある形は、たとえば、フロッピー（Ｒ）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、または任意の他の磁気媒体、ＣＤ−ＲＯＭ、任意の他の光学媒体、パンチカード、紙テープ、穴のパターンを備える任意の他の物理的媒体、ＲＡＭ、ＰＲＯＭおよびＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、任意の他のメモリチップもしくはカートリッジ、以下に記載されるような搬送波、またはコンピュータが読出すことのできる任意の他の媒体を含む。
【００６３】
さまざまな形のコンピュータ読出可能媒体が、１つ以上の命令の１つ以上のシーケンスをプロセッサ２０４に運び実行させるのに必要とされてもよい。たとえば、命令は最初に遠隔コンピュータの磁気ディスク上に担持されていてもよい。遠隔コンピュータは、命令をそのダイナミックメモリにロードし、モデムを用いて電話線を介して命令を送信することができる。コンピュータシステム２００にローカルなモデムは、電話線によりデータを受信し、赤外トランスミッタを用いてデータを赤外信号に変換することができる。赤外検出器が、赤外信号で運ばれるデータを受取ることができ、適切な回路構成がデータをバス２０２に与えることができる。バス２０２はデータを主メモリ２０６に運び、プロセッサ２０４はそこから命令を取出して実行する。主メモリ２０６によって受取られた命令は、任意選択で、プロセッサ２０４による実行の前または後のいずれかで記憶装置２１０に記憶されてもよい。
【００６４】
コンピュータシステム２００は、バス２０２に結合される通信インターフェイス２１８も含む。通信インターフェイス２１８は、ローカルネットワーク２２２に接続されるネッ
トワークリンク２２０に結合する双方向データ通信を提供する。たとえば、通信インターフェイス２１８は、統合サービスデジタル網（ＩＳＤＮ）カードまたはモデムであって、データ通信接続を電話線の対応するタイプに与えてもよい。別の例として、通信インターフェイス２１８は、ローカルエリアネットワーク（ＬＡＮ）カードであって、データ通信接続を互換性のあるＬＡＮに与えてもよい。ワイヤレスリンクが実現されてもよい。いずれかのそのようなインプリメンテーションでは、通信インターフェイス２１８は、さまざまなタイプの情報を表わすデジタルデータストリームを運ぶ電気信号、電磁信号または光信号を送受信する。
【００６５】
ネットワークリンク２２０は、典型的には、１つ以上のネットワークを介して他のデータ装置にデータ通信を与える。たとえば、ネットワークリンク２２０は、ローカルネットワーク２２２を介してホストコンピュータ２２４に、またはインターネットサービスプロバイダ（ＩＳＰ）２２６によって作動されるデータ機器に接続を与えてもよい。ＩＳＰ２２６は、現在普通「インターネット」２２８と呼ばれているワールドワイドのパケットデータ通信ネットワークを介してデータ通信サービスを提供する。ローカルネットワーク２２２およびインターネット２２８はどちらも、デジタルデータストリームを運ぶ電気信号、電磁信号または光信号を用いる。コンピュータシステム２００におよびそれからデジタルデータを運ぶ、さまざまなネットワークを介する信号ならびにネットワークリンク２２０上のおよび通信インターフェイス２１８を介する信号は、情報を転送する搬送波の例示の形である。
【００６６】
コンピュータシステム２００は、ネットワーク、ネットワークリンク２２０および通信インターフェイス２１８を介してプログラムコードを含むデータを受取りメッセージを送ることができる。インターネットの例では、サーバ２３０が、インターネット２２８、ＩＳＰ２２６、ローカルネットワーク２２２および通信インターフェイス２１８を介してアプリケーションプログラムのための要求されたコードを伝送し得る。この発明に従えば、あるそのようなダウンロードされたアプリケーションは、ここに記載される４ＧＬプログラミングツールを与える。
【００６７】
受取られたコードは、受取られたときにプロセッサ２０４によって実行されてもよく、および／または記憶装置２１０もしくは他の不揮発性記憶装置に記憶されて後に実行されてもよい。このように、コンピュータシステム２００は搬送波の形のアプリケーションコードを獲得し得る。
【００６８】
前の明細書において、この発明は、その具体的な実施例を参照して記載された。しかしながら、この発明のより広い精神および範囲から逸脱することなしにこれにさまざまな変形および変更をなし得ることが明らかである。したがって、この明細書および図面は、限定的な意味ではなく例示的な意味にみなされるべきである。
【図面の簡単な説明】
【００６９】
【図１】この発明の実施例に従うユーザ指定のコンポーネント・インプリメンテーションの使用をサポートする４ＧＬアプリケーション開発システムのブロック図である。
【図２】この発明の実施例が実現され得るコンピュータシステムを示すブロック図である。
【図１】
0005520446.tif 000005
【図２】
0005520446.tif 000006