トップ :: G 物理学 :: G06 計算;計数




【発明の名称】 静的・オブジェクト・インタ―フェ―スからのポリモアフィックの振る舞いを容易にするデ―タ処理装置、方泡コンピュ―タ・プログラム製品
【発明者】 【氏名】グラハム・カストリー・チャータース

【氏名】デビット・ジョーン・ビネス

【要約】 【課題】データ処理システムにおいて静的・クラスのためにポリモアフィックな振る舞いを与える最適な装置及び方法を提供することである。

【解決手段】静的クラス階層及び非静的クラス階層とういう2つの継承階層を有するオブジェクト指向プログラミング・ソフトウエア・アーキテクチャを用いて、データ処理を実行するデータ処理装置を開示する。この装置は、静的階層の静的クラスに関するメソッド呼び出しを受取る手段と、その静的クラスにおいて静的ポインタを用いて、受取られたメソッド呼び出しを、前記非静的階層の非静的クラスのインスタンスにリダイレクトする手段とを備える。各前記メソッド呼び出しの各々は、特定のメソッドを前記データ処理装置によって処理することをリクエストし、非静的クラスのインスタンスは受取られたメソッド呼び出しにおいてリクエストされたメソッドのインプリメンテイションを提供する。
【特許請求の範囲】
【請求項1】静的クラス階層及び非静的クラス階層という2つの承継階層を有するオブジェクト指向プログラミング・ソフトウエア・アーキテクチャを用いてデータ処理を実行するデータ処理装置であって、前記静的階層の静的クラスに関するメソッド呼び出しを受取る手段と、前記静的クラスの静的ポインタを用いて、受取られたメソッド呼び出しを、前記非静的階層の非静的クラスのインスタンスにリダイレクトする手段とを備え、前記メソッド呼出の各々は、特定のメソッドを前記データ処理装置によって処理することをリクエストし、前記インスタンスは、前記受取られたメソッド呼び出しにおいて要求されるメソッドのインプリメンテイションを与えることを特徴とするデータ処理装置。
【請求項2】前記メソッド呼び出しを受取る手段は、前記静的階層の静的基本クラスに関する呼び出しを受取り、前記リストダイレクトする手段は、受取られたメソッド呼び出しを前記非静的階層の非静的基本クラスのインスタンスに、リダイレクトすることを特徴とする請求項1に記載の装置。
【請求項3】前記リストダイレクトする手段は、前記静的基本クラスに含まれる、前記受取られたメソッド呼び出しのインプリメンテイションが、前記非静的クラス階層の非静的派生クラスに含まれる変更されたインプリメンテイションによってオーバーライドされている場合に、前記受取られたメソッド呼び出しを前記非静的クラスのインスタンスにリダイレクトすることを特徴とする請求項2に記載の装置。
【請求項4】静的クラス階層及び非静的クラス階層という2つの承継階層を有するオブジェクト指向プログラミング・ソフトウエア・アーキテクチャを用いてデータ処理を実行するデータ処理方法であって、前記静的階層の静的クラスに関するメソッド呼び出しを受取るステップと、前記静的クラスの静的ポインタを用いて、受取られたメソッド呼び出しを、前記非静的階層の非静的クラスのインスタンスにリダイレクトするステップとを備え、前記メソッド呼出の各々は、特定のメソッドを前記データ処理装置によって処理することをリクエストし、前記インスタンスは、前記受取られたメソッド呼び出しにおいて要求されるメソッドのインプリメンテイションを与えることを特徴とするデータ処理方法。
【請求項5】前記メソッド呼び出しを受取るステップは、前記静的階層の静的基本クラスに関する呼び出しを受取り、前記リストダイレクトするステップは、受取られたメソッド呼び出しを前記非静的階層の非静的基本クラスのインスタンスに、リダイレクトすることを特徴とする請求項4に記載の方法。
【請求項6】前記リストダイレクトするステップは、前記静的基本クラスに含まれる、前記受取られたメソッド呼び出しのインプリメンテイションが、前記非静的クラス階層の非静的派生クラスに含まれる変更されたインプリメンテイションによってオーバーライドされている場合に、前記受取られたメソッド呼び出しを前記非静的クラスのインスタンスにリダイレクトすることを特徴とする請求項5に記載の方法。
【請求項7】データ処理装置上で実行された際に、静的クラス階層及び非静的クラス階層という2つの承継階層を有するオブジェクト指向プログラミング・ソフトウエア・アーキテクチャを用いて、データ処理方法を実行する、コンピュータ可読媒体に記憶されたコンピュータ・プログラム製品であって、前記データ処理方法は、前記静的階層の静的クラスに関するメソッド呼び出しを受取るステップと、前記静的クラスの静的ポインタを用いて、受取られたメソッド呼び出しを、前記非静的階層の非静的クラスのインスタンスにリダイレクトするステップとを備え、前記メソッド呼出の各々は、特定のメソッドを前記データ処理装置によって処理することをリクエストし、前記インスタンスは、前記受取られたメソッド呼び出しにおいて要求されるメソッドのインプリメンテイションを与えることを特徴とするデータ処理製品。
【請求項8】前記メソッド呼び出しを受取るステップは、前記静的階層の静的基本クラスに関する呼び出しを受取り、前記リストダイレクトするステップは、受取られたメソッド呼び出しを前記非静的階層の非静的基本クラスのインスタンスに、リダイレクトすることを特徴とする請求項7に記載の製品。
【請求項9】前記リストダイレクトするステップは、前記静的基本クラスに含まれる、前記受取られたメソッド呼び出しのインプリメンテイションが、前記非静的クラス階層の非静的派生クラスに含まれる変更されたインプリメンテイションによってオーバーライドされている場合に、前記受取られたメソッド呼び出しを前記非静的クラスのインスタンスにリダイレクトすることを特徴とする請求項5に記載の製品。
【発明の詳細な説明】【0001】
【産業上の利用分野】本発明は、データ処理の分野に関する。詳しくは、オブジェクト指向プログラミング・ソフトウエアを使用したデータ処理に関する。
【0002】
【従来の技術】データ処理の分野では、オブジェクト指向プログラミング(OOP)がコンピュータ・ソフトウエアを扱う好ましい方法になっている。OOPでは、関連データと該データを処理するためのコマンドとは、オブジェクトとエンティティにカプセル化される。データ処理を実行するために、呼び出しオブジェクトは、メッセージを別のオブジェクト(呼ばれたオブジェクト)に送り、呼び出されオブジェクトにそのコマンドの1つを実行することを頼む。呼び出されたオブジェクトは、メッセージを受取りカプセル化されたデータに関するコマンドを実行する。コマンドの名前(”メソッド”として知られている)を各オブジェクトに知らせることによって、オブジェクトは別のオブジェクトを呼び出し、呼び出されたオブジェクトにその方法を実行することを頼む。このことは、各オブジェクト内に、オブジェクトのメソッドの詳細と、そのメソッドが操作するデータとを隠せる利点がある。これは、共通のデータ処理機能の容易な再利用を可能とする。
【0003】共通の特徴(例えば、類似のデータ又はメソッド)を共有するオブジェクトは、1つのクラスにグループ化される。オブジェクトは、クラスのインスタンス化したものとして知られ、これは、そのオブジェクトが現時点で活動化されているクラスのメンバーであることを意味する。クラスは、階層化的に構成されて、1つのクラスが別のクラスから派生する。その派生クラスは、派生元のクラスのサブクラスと呼ばれる。
【0004】しばしば、単一インスタンスのみ存在するクラスを持つことが必要である。これは、シングルトン・クラスと呼ばれる。そのようなクラスを実装現実する1つの方法は、文献(E.Gamma 外,Design Patterns,Addison−Wesley出版社、1995、p.127ー134)に説明されている。この文献によれば、クラス自体が、単一のインスタンスを獲得するためのメソッドを提供し、そのインスタンスが次にクラスの非静的メソッドを呼び出すために用いられる。しかしながら、これは、呼び出し前に、インスタンスが得られることを要求するから、これは使用に時間を浪費することがわかっている。更に、これは、単一インスタンスをグローバル変数として表わす必要があるので、結果として誤使用または破壊のおそれがある。
【0005】このようなクラスを実装現実する別の方法は、全てのメソッドとデータを静的にすることである。各メソッドは、いつも同じ所定の機能を同じデータに関して実行する。このタイプのクラスが以下で静的クラスと呼ぶ。これは、呼び出しプログラムが、最初にインスタンス化する、即ちクラスからインスタンスを得る必要なしに、単一のメソッドの呼び出しを介して、クラスを利用しることを可能にする利点がある。このように、データ処理システムのオブジェクト指向デザインにおいて静的クラスを用いると有利になることが多い。
【0006】しかしながら、静的クラスを選択する場合に生ずる問題は、それらクラスが所定のアクションを実行するようにプログラムされ、その静的アーキテクチャの性質のため、決まったコースから変化されにくいということである。これは、静的クラスがシステムに実装される時、代替機能を提供することを非常に困難にする。代替機能を与えることは、しばしばポリモアフィズム(多形性)のオブジェクト指向概念を用いて実行される。これは、1つの基本クラスで呼び出しが、そのベースクラスから派生したクラスに提供される多くの様々な振る舞いを見せることを可能にする。呼び出し側のソフトウエアは、別のクラスを呼び出すように変更され得るが、これは全く望ましいことでない。というのは、そのような呼び出しアーキテクチャは既に確立されておいり、それらを手直しようとすると、静的クラスを呼び出したい各呼び出しアーキテクチャに対して、同じようなソフトウエアの手直しを繰返す必要があり、大変だからである。
【0007】静的クラスにポリモアフィック(多形的)な振る舞いを加える1つの可能な方法は、IBM社の1997年8月14日に出願された欧州特許出願第97114041.3号に提案されているように、静的クラスの非静的サブクラスを構成することである。このアーキテクチャでは、静的基本クラスからインスタンス化された1つのオブジェクトにメソッド呼び出しがきた時、非静的サブクラスが構築されているかどうかを決定するテストが実行され、構築されている場合、そのメソッド呼び出しは、処理のためにそのサブクラスに送られる。サブクラスが構築されていない場合その方法呼び出しは、多くの静的クラスによっ共有された、デフォルトの非静的インプリメンテイションによって処理される。従って、このアーキテクチャは、特別に構築された非静的サブクラスを用いて、単一のメソッドをオーバーライドする。この技術は、メソッド呼び出しを受取るクラス構造の内部に処理ステップを留めておく(変数を外部に見せない)という利益がある。しかしながら、この技術は、単一のメソッドだけをオーバーライドするという制限と、別のメソッドにポリモアフィックな振る舞いを与える場合別のサブクラスを構築しなけらばならない(従って用いられれる全クラスの数は増加する)という制限とがある。別の不利益は、サブクラスが構築されているかどうか決定するためのテストを実行しなけらばならず、その分だけデータ処理装置の処理量が増えることである。
【0008】
【発明が課題しようとする課題】本発明の目的は、データ処理システムにおいて静的クラスのためにポリモアフィックの振る舞いを与える最適な装置及び方法を提供することにある。
【0009】
【課題を解決するための手段】本発明の1つの態様は、静的クラス階層及び非静的クラス階層という2つの承継階層を有するオブジェクト指向プログラミング・ソフトウエア・アーキテクチャを用いてデータ処理を実行するデータ処理装置である。本発明の装置は、前記静的階層の静的クラスに関するメソッド呼び出しを受取る手段と、静的クラスの静的ポインタを用いて、受取られたメソッド呼び出しを、非静的階層の非静的クラスのインスタンスにリダイレクトする手段とを備え、方法呼出の各々は、特定のメソッドを当該データ処理装置によって処理することをリクエストし、インスタンスは、受取られたメソッド呼び出しでリクエストされたメソッドを実現する。
【0010】好ましい実施態様では、メソッド呼び出しを受取る手段は、静的階層の静的基本クラスに関する呼び出しを受取り、静的ポインタを用いる手段は、受取られたメソッド呼び出しを非静的階層の非静的基本クラスのインスタンスにリダイレクトする。
【0011】更に好ましい実施態様では、静的ポインタを用いる手段は、非静的派生クラスに含まれる前記受取られたメソッド呼び出しの変更されたインプリメンテイションによって、非静的基本クラスに含まれる前記受取られたメソッド呼び出しのインプリメンテイションがオーバーライドされた時、受取られたメソッド呼び出しを、非静的階層の非静的派生クラスのインスタンスにリダイレクトする。
【0012】本発明の第2の態様は、第1の態様のデータ処理装置の機能を実行する方法である。
【0013】本発明の第3の態様は、前記第1の態様の機能をコンピュータ上で実行するための、コンピュータ可読媒体に記憶された、コンピュータ・プログラム製品である。
【0014】ポリモアフィックな振る舞いを静的クラス・インターフェースに与える能力は、大きな利点である。ポリモアフィックな振る舞いがなければ、静的クラス・インターフェースが、本来の設計目的である静的機能の実行に制限される。これは、静的インスタンスを呼び呼び出しソフトウエア・コードを再利用する能力を大幅に制限する。というのは、このような呼び出しコードは、静的インターフェースが常に同じ機能を実行しなければならないという状況において、再利用され得るだけだからである。ポリモアフィックな振る舞いを有するこのような静的インターフェースを与えることにより、特定の方法に対して代替機能が提供され、静的インターフェースを呼び出しコードの再利用を大きく増やす。これは、静的インターフェースが存在する状況において新規なコードを書く必要性を回避するが、その振る舞いはその方法の少なくとも一つに関して変更する必要がある。
【0015】このように、本発明によって、変数を外部に見せることなく、ポリモアフィックな振る舞いが静的クラスに与えられる。それに加えて、クラスの1つのメソッドではなくクラス全体がオーバーライドされるから、必要なデータ処理の量を減少させながら全クラス数を減少できる。なぜなら本発明における自動的参照は、特別に構成されたサブクラスが存在するかどうかを決定するテストの必要性(上述の欧州特許出願の技術では必要であった)を無くするからである。
【0016】
【発明の実施の形態】図1に示すように、本発明の好ましい実施例を動作させる環境は、第1のデータ処理装置11例えば標準のPC(パーソナル・コンピュータ)がソフトウエア・プログラム111を実行する環境である。このソフトウエア・プログラムは、呼び出しプログラム・コードと呼ばれる。なぜなら、このソフトウエア・プログラム111は、別のデータ処理装置12を呼び出して、第1の装置11のために、ある作業を実行することを頼むからである。これに対応して、第2の装置12は、ソフトウエア・プログラム112を実行する。このソフトウエア・プログラムは呼び出されたプログラム・コードと呼ばれる。なぜなら、ソフトウエア・プログラム112は第1のデータ処理装置11から呼び出しを受取っているからである。装置12は、その呼び出されたプログラム・コード112を用いて、呼び出しプログラム・コード111が要求しているデータ処理作業を実行する。
【0017】2つのデータ処理装置は、標準の通信プロトコルを用いてネットワークを介して互いに通信する。呼び出しプログラム・コード111と呼び出されたプログラム・コード112は、同じデータ処理装置に配置することができる。この場合には、作業リクエストを送るためにネットワークを必要としない。そのようなリクエストは、2つのコードを含む単一のデータ処理装置の内部で生じるからである。
【0018】ポリモアフィックの振る舞いを与えるために、メソッド呼び出しが呼び出されたプログラム・コード112により受取られた時に、対応するメソッドのインプリメンテイションを変更できることが必要である。そもないと、あるメソッド呼び出しが入って来たとしても、同じメソッドのインプリメンテイションが、いつもそのメソッド呼び出しを処理するために使用される。このような静的インターフェースを呼出す、呼び出しプログラム111は、再使用されにくい。なぜなら、呼び出されたプログラム・コード112の機能が、限定的すぎるからである。呼び出されたプログラム・コード112がポリモアフィックな振る舞いを示すように作られるなら、呼び出しログラム111の再使用可能性は大きくなる。
【0019】呼び出されたプログラム・コード112は、図2に示すようなオブジェクト指向プログラミング技術を使って構築される。図2において分かるように、そのソフトウエア・アーキテクチャには2つの階層が含まれる。即ち、静的階層112Aと非静的階層112Bである。静的階層112Aは、StaticBaseクラス1121と呼ばれる基本クラスと、StaticBase クラス1121から派生した派生クラスであるStaticOverride 1122とを含む。同様に、非静的階層112Bは、NonStaticImplBaseクラス1123と呼ばれる基本クラスと、NonStaticImplBaseクラス1123から派生した派生クラスであるNonStaticImplOverride 1124とを含む。
【0020】呼び出しプログラム・コード111は、作業リクエスト(呼び出しコード111は、呼び出されたコード112上のメソッドを呼び出して、メソッド名により識別される特定の作業を実行することを、呼び出されたコード112に要求するので、以下メソッド呼び出しと言う)を出す。メソッド呼び出しは、呼び出されたコード112によって、そのコードのStaticBase クラス1121を介して受取られる。即ち、呼び出しプログラム・コード111は、StaticBase クラス1121の”静的インターフェース”への呼び出しを行う。静的インターフェースを介してプログラム・コード111からのメソッド呼び出しを受取ると、呼び出されたコードのStaticBase クラス1121は、呼び出しを、NonStaticImplBase クラス1123への図3のポインタ1121Aを介してメソッドのインプリメンテイションに転送する。そしてメソッド呼び出しは、メソッドのインプリメンテイションに含まれる命令に従って、データ処理装置12によって処理される。
【0021】メソッドのインプリメンテイションは、NonStaticImplBaseクラス1123によって与えられる。即ちStaticBase クラス1121内の静的メソッドの各々に対して、1つのインプリメンテイションを、NonStaticImplBaseクラス1123内に見つける事が出来る。従って入って来る呼び出しが、StaticBase クラス1121によって受取られた時に、その呼び出しは、処理のためにNonStaticImplBaseクラス1123に転送される。静的基本クラス1121の方法のいかなる数のメソッドに対しても、代替の振る舞いが要求される時、新しい振る舞いをインプリメントする非静的クラス1124が、非静的クラス1123から派生する。その後この新しいインプリメンテイションは、最初に非静的基本クラス1123によって与えられた古いインプリメンテイションを置換えられる。これは、基本クラス1122から静的クラス1122を派生させて、この静的派生クラス1122からポインタ1121Aへのアクセスを与えることにより実行される。次に、入って来る呼び出しは、StaticBase クラス1121によって受取られた時に、そのポインタを介してNonStaticImplBase クラス1123に転送される。そして仮にそのメソッドが、派生クラス1124においてインプリメントされているのならば、そのメソッド呼び出しにより要求されるデータ処理を実行するために呼び出されるのは、このインプリメンテイションである。
【0022】このように、呼び出しコード111は、依然としてメソッド呼び出しをStaticBase クラス1121に送る事ができ、従ってコード111は変更される必要はない。即ちコード111は、StaticBase クラス1121がその呼び出しをインプリメントしていると”考える”。しかし実際には、StaticBase クラス1121は、静的ポインタを介して、呼び出しをNonStaticImplBase クラス1123に転送する。そしてNonStaticImplBase クラス1123は、その呼び出しのインプリメンテイションを与える。
【0023】次に、NonStaticImplBase クラス1123に含まれるインプリメンテイションで提供された振る舞いを変更することが望まれるならば、基本クラス1123のサブクラス1124を派生し、このサブクラス1124内に新しい振る舞いのインプリメンテイションを含めることにより、1又はそれ以上のメソッドに対して代替の振る舞いを提供できる。このように1つのメソッド呼び出しが、静的基本クラス1121に入って来ると、静的ポインタを介してその呼び出しは、非静的基本クラス1123を呼び出しようにリダイレクトされる。しかし実際にはその呼び出しを受取るのはサブクラス1124である。なぜなら、サブクラス1124は、現在呼び出されるメソッドに関して基本クラス1123をオーバーライドしているからである。
【0024】本発明の擬似コードのインプリメンテイションの例を与える。


【0025】上記コードは、本発明の主要な点を強調している。しかしもちろん本発明は、このインプリメンテイションに限定されるものではない。例えば新しいインプリメンテイション・クラス(ImpDeriv)の置換は、StaticDerivコンストラクタ内で実行されるものとして示されているが、これは、 StaticDerivクラス内の任意のメソッドで実行することができ、1つの代替インプリメンテイション・クラスの置換に限定されない。 Derivクラスが定義されない環境において、上記の"main()"内に示された呼び出し "StaticBase::doit()"は、ImpBase内のdoit()を呼び出すようにする。"Deriv"クラスが定義される環境における同じ呼び出しは、ImpDeriv内のdoit()メソッドを呼び出し、結果的に"main()"内のコードを変更することも要求しない。
【0026】使用例:本発明者は、Java環境のデバッグ・トレーシングのために本発明を利用した。2つのトレーシング機構が要求された。1つは、トレースされるコードが(基本クラス1121と1123を含む)スタンド・アローン環境において使用される場合である。他方は、コードが、(派生クラス1122と1124を含む)自身のトレーシング機構を提供するサーバー環境内で使用される場合である。それゆえ、コードが静的トレース呼び出しを実行できるようにする要求は、コードを変更しないで、その呼び出しがスタンド・アローン・トレース・ファイル(静的基本クラス1123内に存在する)、又はサーバー・トレース・ファイル(非静的クラス1124内に存在する)のどちらかに行うことである。
【出願人】 【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレイション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MASCHINES CORPORATION
【出願日】 平成11年(1999)3月23日
【代理人】 【弁理士】
【氏名又は名称】坂口 博 (外1名)
【公開番号】 特開平11−327907
【公開日】 平成11年(1999)11月30日
【出願番号】 特願平11−77784