(57)【特許請求の範囲】
【請求項１】
バスと、
中央処理装置と、
前記バスを介して前記中央処理装置に接続されたコンピュータ・システム・メモリと、
マルチタスキング・オペレーティング・システムの制御の下に前記中央処理装置において実行される第１プロセスと、
前記第１プロセスの一部分として前記中央処理装置において実行されるクライアント・プログラムと、
前記コンピュータ・システム・メモリに記憶され、メソッド及びデータを含む少なくとも１つのオブジェクトとを含み、
前記メソッドは、前記コンピュータ・システム内に記憶され前記中央処理装置において実行されるとともに第１バージョンと第２バージョンとを有し、前記メソッドの前記第１バージョンが、その時点において前記クライアント・プログラムにより使用され、
メソッド呼出マネージャは、前記第１プロセスが自然に終了するまで前記クライアント・プログラムから生じた呼出を、前記メソッドの前記第１バージョンに経路指定するとともに、前記クライアント・プログラムが第２プロセスの一部として実行されている場合には、前記クライアント・プログラムからの呼出を前記メソッドの前記第２バージョンへと経路指定しており、前記メソッドの前記第１バージョン及び前記メソッドの前記第２バージョンは、前記クライアント・プログラムが使用する前記データのすべてを共有し、前記第２プロセスは、前記メソッドの前記第２バージョンが作成された後に開始される、コンピュータ・システム。
【請求項２】
第１コンピュータ・システムから第２コンピュータ・システムにコンピュータ・プログラムを伝送して該コンピュータ・プログラムを動作させる方法にして、
前記第１コンピュータ・システム及び前記第２コンピュータ・システムの間に接続を確立するステップと、
前記第１コンピュータ・システムから前記第２コンピュータ・システムにメソッド呼出マネージャを前記第２コンピュータ・システムに実現する前記コンピュータ・プログラムを伝送するステップと、
を含み、
前記第２コンピュータ・システムは、少なくとも１つのオブジェクトがコンピュータ・システム・メモリに記憶されるコンピュータ・システムにおいて使用され、前記少なくとも１つのオブジェクトは中央処理装置における実行のために前記コンピュータ・システム・メモリに記憶される第１バージョンと第２バージョンとを含むメソッド及びデータを含み、
前記メソッドの前記第１バージョンは、前記コンピュータ・システムにおける実行のために前記第２バージョンが作成・利用されるより前に、前記第２コンピュータ・システムにおける実行のために作成・利用され、
前記メソッド呼出マネージャは、前記第２コンピュータ・システムに対して、クライアント・プログラムが第１プロセスの一部分として前記中央処理装置において実行されている場合には、前記第１プロセスが自然に終了するまで前記クライアント・プログラムから生じた呼出を前記メソッドの前記第１バージョンに経路指定し、かつ第２プロセスの一部分として前記クライアント・プログラムが実行されている場合には、前記クライアント・プログラムからの呼出を前記メソッドの前記第２バージョンに経路指定し、前記メソッドの前記第１バージョン及び前記メソッドの前記第２バージョンは、前記クライアント・プログラムが使用する前記データのすべてを共有し、前記第２プロセスを、前記メソッドの前記第２バージョンが作成された後に開始させる、
方法。
【請求項３】
バスと、
中央処理装置と、
前記バスを介して前記中央処理装置に接続されたコンピュータ・システム・メモリと、
マルチタスキング・オペレーティング・システムの制御の下に前記中央処理装置において実行される第１プロセスと、
前記第１プロセスの一部分として前記中央処理装置において実行されるクライアント・プログラムと、
前記コンピュータ・システム・メモリに記憶され、メソッド及びデータを含む少なくとも１つのオブジェクトとを含み、
前記メソッドは、前記コンピュータ・システム内に記憶され前記中央処理装置において実行されるとともに第１バージョンと第２バージョンとを有し、前記メソッドの前記第１バージョンが、その時点において前記クライアント・プログラムにより使用され、
メソッド呼出マネージャは、前記第１プロセスが自然に終了するまで前記クライアント・プログラムから生じた呼出を、前記メソッドの前記第１バージョンに経路指定するとともに、前記クライアント・プログラムが第２プロセスの一部として実行されている場合には、前記クライアント・プログラムからの呼出を前記メソッドの前記第２バージョンへと経路指定しており、前記メソッドの前記第１バージョンと前記メソッドの前記第２バージョンとに、前記クライアント・プログラムが使用する前記データのすべてを共有させる、コンピュータ・システム。
【請求項４】
第１コンピュータ・システムから第２コンピュータ・システムにコンピュータ・プログラムを伝送して該コンピュータ・プログラムを動作させる方法にして、
前記第１コンピュータ・システム及び前記第２コンピュータ・システムの間に接続を確立するステップと、
前記第１コンピュータ・システムから前記第２コンピュータ・システムにメソッド呼出マネージャを前記第２コンピュータ・システムに実現する前記コンピュータ・プログラムを伝送するステップと、
を含み、
前記第２コンピュータ・システムは、少なくとも１つのオブジェクトがコンピュータ・システム・メモリに記憶されるコンピュータ・システムにおいて使用され、前記少なくとも１つのオブジェクトは中央処理装置における実行のために前記コンピュータ・システム・メモリに記憶される第１バージョンと第２バージョンとを含むメソッド及びデータを含み、
前記メソッドの前記第１バージョンは、前記第２コンピュータ・システムにおける実行のために前記第２バージョンが作成・利用されるより前に、前記コンピュータ・システムにおける実行のために作成・利用され、
前記メソッド呼出マネージャは、前記第２コンピュータ・システムに対して、クライアント・プログラムが第１プロセスの一部分として前記中央処理装置において実行されている場合には、前記第１プロセスが自然に終了するまで前記クライアント・プログラムから生じた呼出を前記メソッドの前記第１バージョンに経路指定し、かつ第２プロセスの一部分として前記クライアント・プログラムが実行されている場合には、前記クライアント・プログラムからの呼出を前記メソッドの前記第２バージョンに経路指定し、前記メソッドの前記第１バージョンと前記メソッドの前記第２バージョンとに、前記クライアント・プログラムが使用する前記データのすべてを共有させる、
方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
技術分野
本発明はデータ処理システムに関するものである。更に詳しく云えば、本発明はオブジェクト指向ソース・コードの保守に関するものである。
【従来技術】
背景技術
コンピュータ時代の始まりとして、１９４８年のＥＤＶＡＣコンピュータ・システムの開発が引用されることが多い。その時以来、コンピュータ・システムは現代の生活スタイルのあらゆる場に入り込んでいる。この急成長の１つの理由は、種々のタスクを効率的に遂行するというコンピュータ・システムの能力である。これらのタスクを遂行するためにコンピュータ・システムによって使用されるメカニズムがコンピュータ・プログラムと呼ばれる。
【０００２】
コンピュータ・システムそのものと同様に、コンピュータ・プログラムの開発も長年にわたって発展してきた。ＥＤＶＡＣシステムは、「１アドレス」コンピュータ・プログラミング言語と呼ばれるものを使用した。この言語は、最も基本的なコンピュータ・プログラムしか可能にするものではなかった。１９６０年代までは、コンピュータ・プログラミング言語の改良は、開発及び保守を管理及び制御することが難しい非常に大きく、且つ複雑なコンピュータ・プログラムを生じさせた。
【０００３】
従って、１９７０年代の焦点は、大きなコンピュータ・プログラムの増大する複雑性及びコストをよりよく調整することができるプログラミング方法論及び環境を開発することに向けられていた。そのような方法論の１つがオブジェクト指向プログラミング（ＯＯＰ）と呼ばれる。ＯＯＰの基本的な表記法が最初に開発されて以来ちょっと時間が経ったけれども、ＯＯＰを使用することはコンピュータ・プログラマの能率を大いに高めることを可能にするものと考えられるので、ＯＯＰシステムは益々一般的なものになりつつある。勿論、オブジェクトはＯＯＰテクノロジの中心である。単一のオブジェクトが、そのオブジェクトによって制御される情報に関してコンピュータ・システムにより遂行される個々のオペレーション又は複数オペレーションのグループを表す。オブジェクトは、一定のタスクを遂行するために共同して働く自律的エージェントであると考えることができる。時には、コンピュータ・プログラム全体がオブジェクトのグループ化によって形成されることがあり、時には、オブジェクトが、１つの特定なタスク又はサブタスクを遂行するために、より伝統的なコンピュータ・プログラムによってアクセスされるだけのこともある。オブジェクトが他のオブジェクトによってアクセスされるか否かに関係なく、そのアクセスされたオブジェクトはサーバ・オブジェクトであると云われ、そのアクセスしたエンティティはそのオブジェクトのクライアントであると云われる。
【０００４】
【発明が解決しようとする課題】
ＯＯＰの使用はプログラマの能率をより高いものに導いたけれども、その同じ使用が、従来技術の機構が克服しなければならない幾つかの難問をもたらしている。そのような難問の１つは、保守されるべき１つ又は複数のサーバ・オブジェクトへのアクセスを現在必要としているクライアントによって問題を引き起こさない方法でそのサーバ・オブジェクトを保守すること（即ち、更新すること及び補修すること）に関係する。既存のオブジェクト保守機構は、コンピュータ・システムを停止させることによって、又は保守を必要とするオブジェクトを使用しようとしている特定のプログラムを非活動化することによって、これらの問題を回避している。システム又はプログラムは、それが非活動にされた時に静止されると云われる。勿論、副次的な保守に過ぎないことを行うためにすべてのレベルのシステム活動を停止させることが望ましくないことは容易にわかる。これは、ビジネスが常にコンピュータ・システムに対する分刻みのアクセスに依存している銀行及び金融業界においては特にそうである。
【０００５】
システム又はプログラム・ダウン時間を必要とすることなくオブジェクト保守を行うことができる機構がなければ、商業的コンピュータのユーザは、オブジェクト指向テクノロジの恩恵を十分に利用することができないであろう。
【０００６】
【課題課題を解決するための手段】
発明の開示
本願では、拡張オブジェクト指向保守機構が開示される。
【０００７】
本発明のメソッド保守機構は２つのサブメカニズム、即ち、メソッド更新機構及びメソッド呼出機構より成る。メソッド更新機構は既存のメソッドに変更を施す（即ち、強化又は補修する）ために使用される。重要なことは、これらの変更がコンピュータ・システム又はそれの如何なるプログラムも停止させることなく行われるということである。
【０００８】
メソッド呼出マネージャは、プログラムが再活動化されるか或いは始めて活動化される時、アクティブ・プログラムが新しいメソッド・バージョンにアクセスを行うと同時に古いメソッド・バージョンを使用し続けることを可能にする方法でメソッドの呼出を管理する。換言すれば、本発明のメソッド呼出マネージャはサーバ・オブジェクトのデータに対する共用アクセスを種々のクライアントに与えるが、それにもかかわらず、同じクライアントがそのアクセスを達成するためにサーバ・オブジェクトのメソッドの種々なバージョンを使用することを可能にする。
【発明の実施の形態】
【０００９】
発明を実施するための最良の形態
Ａ．オブジェクト指向テクノロジの概要
背景技術の項で述べたように、オブジェクトは、コンピュータ・システムの必要なタスクを遂行するために共同して働く自律的エージェントであると考えることができる。単一のオブジェクトが、そのオブジェクトによって制御される情報に関してコンピュータ・システムによって遂行される個々のオペレーション又は複数オペレーションのグループを表す。オブジェクトのオペレーションは「メソッド」と呼ばれ、オブジェクトによって制御される情報は「オブジェクト・データ」又は単に「データ」と呼ばれる。オブジェクトは、「クラス」と呼ばれるもののメンバとして作成される（「インスタンス化される」とも云われる）。クラスはそれのメンバを定義するために使用される。クラスは、それらのメンバ・オブジェクトによって制御されるデータ、及びそれらのメンバ・オブジェクトがそのデータへのアクセスを行うべきメソッドを定義する。
【００１０】
上述のように、オブジェクト又はプログラムが第２オブジェクトにより制御されるデータへのアクセスを必要とする時、それは第２オブジェクトのクライアントであると考えられる。第２オブジェクトによって制御されるデータをアクセスするために、クライアント・オブジェクトのメソッドの１つ（即ち、クライアント・メソッド）又はクライアント・プログラムは、そのオブジェクトによって制御されるデータへのアクセスを得るために第２オブジェクトをコールする、即ち、呼び出すであろう。呼び出されたオブジェクトのメソッドの１つ（即ち、この場合は、サーバ・メソッド）は、その呼び出されたオブジェクト（即ち、サーバ・オブジェクト）によって制御されるデータをアクセス又は操作するために使用されるであろう。
【００１１】
Ｂ．詳細な説明
第１図は本発明のコンピュータ・システムのブロック図を示す。その好適な実施例のコンピュータ・システムは拡張ＩＢＭ  ＡＳ／４００コンピュータ・システムである。しかし、コンピュータ・システムが複雑なマルチユーザ・コンピューティング装置であるか或いはシングル・ユーザ・ワークステーションであるかに関係なく、本発明の機構及び装置が任意のコンピュータ・システムに等しく適用することは当業者には明らかであろう。第１図の展開図に示されるように、コンピュータ・システム１００は、メイン・メモリ１４０、端末装置（ディスプレイ）インターフェース１４５、大容量記憶装置インターフェース（ＤＡＳＤ補助プロセッサ）１５５、及びネットワーク・インターフェース１６０に接続されたメイン又は中央処理装置（ＣＰＵ）１０５を含む。これらのシステム・コンポーネントはシステム・バス１５０の使用を通して相互接続される。コンピュータ・システム１００は単一のメインＣＰＵ及び単一のシステム・バスしか含まないように示されているけれども、本発明が、複数なＣＰＵを持ったコンピュータ・システム及び各々が種々な機能を種々な方法で遂行する複数のバスを持ったコンピュータ・システムに等しく適用することは云うまでもない。
【００１２】
好適な実施例において使用されるインターフェース（ＡＳ／４００の用語では、入出力プロセッサと呼ばれる）は、それぞれ、ＣＰＵ１０５からのオフロード計算・集中処理のために使用される個別の完全にプログラムされたマイクロプロセッサを含んでいる。しかし、本発明が、同様の機能を遂行するために単にＩ／Ｏアダプタを使用するだけのコンピュータ・システムにも等しく適用することは当業者には明らかであろう。端末装置インターフェース１４５は、１つ又は複数の端末装置をコンピュータ・システム１００に直接接続するために使用される。非インテリジェントのワークステーション又は完全にプログラム可能なワークステーションでもよいこれらの端末装置は、システム管理者及びコンピュータ・プログラマがコンピュータ・システム１００とコミュニケートすることを可能にするために使用される。ネットワーク・インターフェース１６０は、他のコンピュータ・システム又はワークステーションをコンピュータ・システム１００にネットワーク態様で接続するために使用される。本発明は如何なるネットワーキング機構にも限定されるものではない。コンピュータ・システム１００は、最新のアナログ又はディジタル技術の使用を通して、又は将来のネットワーキング機構を介して他のシステムに接続されることも可能である。
【００１３】
大容量記憶装置インターフェース１５５は、ＤＡＳＤ装置１５５のような大容量記憶装置をコンピュータ・システム１００に接続するために使用される。
【００１４】
メイン・メモリ１４０は、アプリケーション・プログラム１１０、コンパイラ１７２、及びオペレーティング・システム１６５を含む。アプリケーション・プログラム１１０及びオペレーティング・システム１６５はメイン・メモリ１４０に常駐するように示されているけれども、プログラムは一般には実行のために低速の大容量記憶装置から高速のメイン・メモリにロードされるという事実を表すために、これらのエンティティがこのように示されていることは当業者には明らかであろう。これらのプログラムをこのように示すことは、それらがすべて完全にメイン・メモリ１４０に同時に含まれることを意味するものと解釈されてはならない。又、コンピュータ・システム・メモリという用語が本願ではコンピュータ・システムのメモリを全体として（即ち、メイン・メモリ１４０、及びＤＡＳＤ１８５によって表されたものを）総称的に指すために使用されるということも留意すべきである。更に、メイン・メモリ１４０に示されたプログラムが必ずしもすべてコンピュータ・システム１００に常駐する必要はないことも当業者には明らかであろう。例えば、アプリケーション・プログラム１１０のうちの１つ又は複数のプログラムが他のシステムに常駐し、コンピュータ・システム１００に常駐する１つ又は複数のプログラムとの共同処理に参加することも可能である。これは、リモート・プロシージャ呼出（ＲＰＣ）のような周知のクライアント・サーバ機構の１つを使用することによって達成することも可能である。
【００１５】
更に、アプリケーション・プログラム１１０はオブジェクト１１２を含むように示される。オブジェクト１１２は、それぞれ、データ及び少なくとも１つのメソッドを含んでもよいがそれらは図示されていない。前述のように、クライアント・メソッドは、呼び出されたオブジェクトによって制御される情報へのアクセスを得るために又はその情報を操作するために、サーバ・メソッドを呼び出さなければならない。メソッドがクライアント・メソッド又はサーバ・メソッドであるというステートメントは関連性（ｒｅｌａｔｉｖｉｔｙ）の１つであることに留意すべきである。換言すれば、第２メソッドに関してクライアント・メソッドであると云われるメソッドは、完全に、第３メソッドに関してサーバ・メソッドであってもよい。アプリケーション・プログラム１１０は非オブジェクト指向プログラムを含み、それにもかかわらず、オブジェクト１１２に対するアクセスを有することも留意すべきである。更に、クライアント・プログラムという用語の使用は、クライアント・メソッド又は非オブジェクト指向クライアント・プログラムを総称的に指すものと解釈されるべきである。しかし、上記のクライアント・サーバ環境では、クライアント・プログラム（ここで使用されるような）はクライアント・コンピュータ・システムから到来するリクエストを処理するサーバ・コンピュータ・システム上の機構であって、クライアント・コンピュータ・システム上で実行しながらリクエストを発生するプログラムではないことに留意すべきである。
【００１６】
コンパイラ１７２は、後述するように、ソース・コードを実行可能コードにコンパイルするために使用される。
【００１７】
オペレーティング・システム１６５は、ＯＳ／４００のような製造業において知られたマルチタスキング・オペレーティング・システムである。しかし、本発明の趣旨及び技術的範囲が如何なるオペレーティング・システムにも限定されないことは当業者には明らかであろう。更に、オペレーティング・システム１６５は、メソッド更新機構１６７及びメソッド呼出マネージャ１７０を含むメソッド保守機構１６６を含むものとして示される。メソッド更新機構１６７は、オブジェクト１１２のメソッドを補修又は更新するために使用される。第２図と関連した説明において更に詳細に示されるメソッド更新機構１６７は、オブジェクト１１２に対して変更を行う時、コンピュータ・システム１１０を停止させたり、如何なるアプリケーション・プログラム１１０も非活動にしたりすることはない。メソッド呼出マネージャ１７０は、実行プログラムがオブジェクト１１２の古いバージョンを使用して実行し続けることを可能にするが、それにもかかわらず、それらの処理が終了した後、同じ実行プログラムに新しいバージョンのオブジェクトへのアクセスを与えることを可能にするために使用される。
【００１８】
十分に機能的なコンピュータ・システムに関連して本発明を説明した（及び説明を続ける）けれども、本発明のコンピュータ・プログラムは、フロッピ・ディスク、ＣＤ−ＲＯＭ、又は他の形態の記録可能な媒体を介して、或いは任意のタイプの電子的伝送機構を介して、プログラム製品として配布し得ることは当業者には明らかであろう。
【００１９】
第２図は、メソッド更新機構１６７の流れ図である。ブロック２００では、コンピュータ・システム１００のための新しいサービス・プログラムが作成される。「サービス・プログラム」という用語は、ＡＳ／４００用語の特定の用法である。サービス・プログラムは、特定のクラスの各メソッドに割り当てられるタスク又はサブタスクを実行するためにＣＰＵ１０５において実行される実際のプログラム命令を含む。ＡＳ／４００サービス・プログラムの概念は、別の用語（例えば、ユニックス・ライブラリ又はＯＳ／２動的リンク・ライブラリのような）を使用してそれを説明し得るけれども、その概念がその分野において周知であることは当業者には明らかであろう。
【００２０】
サービス・プログラムの初期作成は、任意の周知のソース・コード・エディタ又はジェネレータの使用を通して達成可能である。一旦サービス・プログラムが作成されてしまうと、ブロック２０５において、メソッド更新機構１６７はコンパイラ１７２によって新しいサービス・プログラムをコンパイルさせる。その分野では周知のように、サービス・プログラムのソース・コード・バージョンをコンパイルすることは、そのサービス・プログラムのオブジェクト・コード表示を作成させる。このステップは、コンピュータ・システム・メモリ・ロケーション・アソシエーションに対するプログラム名を暗黙的に作成する。一旦サービス・プログラムがコンパイルされてしまうと、コンパイラ１７２はサービス・プログラム名及びポインタをコンピュータ・システム１００のディレクトリ・サービスに加える（ブロック２１０）。ディレクトリ・サービスは、コンピュータ・システム１００のすべてのプログラムに対するコンピュータ・システム・メモリ・ロケーションを理解するという責任、及びプログラム名を与えられた時に正しい・メモリ・ロケーションを戻すという責任がある。一旦サービス・プログラム名及びポインタがディレクトリ・サービスに加えられてしまうと、メソッド更新機構１６７は新しいサービス・プログラムの名前でもってクラス・オブジェクトを更新する（ブロック２１５）。一旦クラス・オブジェクトが新しいサービス・プログラムを含むように更新されてしまうと、それはクライアント・プログラムによる使用のために利用可能である。この後者のステップの重要性に関しては、第３Ａ図乃至第３Ｄ図と関連して後で説明することにする。メソッド更新機構１６７は、新しいサービス・プログラムを加える時、コンピュータ・システム１００又は如何なるそれのプロセスも停止させないということに留意すべきである。
【００２１】
第３Ａ図はメソッド呼出マネージャ１７０の流れ図である。先ず、メソッド呼出マネージャ１７０は、従来のオブジェクト指向機構には見られない監視機構であるということに留意することが重要である。従来のサーバ・メソッド呼出ステートメントは、呼び出されたサーバ・メソッドをプロセッサに単に実行させる命令にコンパイルされる。これらの従来の機構とは違って、本発明のコンパイラ１７２はメソッド呼出ステートメントをコンパイルして、メソッド呼出マネージャ１７０を活動化し、そして呼び出されるべきサーバ・メソッドのメソッド・シグニチャをメソッド呼出マネージャ１７０に送る命令にする。メソッド呼出マネージャ１７０は、呼出を正しいメソッドに経路指定する責任がある。メソッド呼出マネージャ１７０をメソッド呼出パスに配置することは、メソッド呼出のために管理的機能を遂行することを可能にする。そのような機能の１つが、後述のメソッド・バージョニングである。
【００２２】
ブロック３０５において、メソッド呼出マネージャ１７０は呼出を分析して正しいメソッド・テーブル・エントリにする。第３Ｂ図は、これを生じさせる方法の論理的な表示である。本発明のメソッド分析の正確な詳細に興味がある人は、米国特許第５,４０４,５２５号を参照して欲しい。一般的な例として、クライアント・メソッドがオブジェクト３７０のメソッドに対する呼出を行おうとしているものと仮定する。第３Ｂ図に示されるように、オブジェクト３７０は、オブジェクト・データ３７１及びクラス・オブジェクト・ポインタを含む。オブジェクト３７０は、メイン・メモリ１４０のうちの共用メモリとして知られている部分に常駐している。共用メモリの概念は、複数のプロセスが１回でしかも同時にアクセスし得るメイン・メモリ１４０の部分を意味するものとして当業者にはよく知られている。共用メモリは、単一のプロセスによる使用のために予約されたメイン・メモリの部分であるプロセス・ローカル・メモリとは概念的に逆のものである。
【００２３】
メソッド呼出マネージャ１７０は、一旦呼び出されると、適正なメソッド・テーブル・エントリに対するその呼び出されたメソッドの名前を分析するように進む。メソッド呼出マネージャ１７０は、先ずオブジェクト３７０に含まれたクラス・オブジェクト・ポインタを使用することによってこれを行い、クラス・オブジェクト３７２の動作部分に対するアクセスを得る（クラス・オブジェクトの正確な詳細に興味ある人は前記米国特許を参照して欲しい）。クラス・オブジェクト３７２から、メソッド呼出マネージャ１７０はメソッド・テーブル３７６に対するアクセスを得て、正しいエントリ（エントリ３７８として示される）を見つける。ブロック３１０において、メソッド呼出マネージャ１７０は呼び出されたメソッドに対するメソッド・アレイ・ポインタを適正なメソッド・ロケーション・アレイ（第３Ｂ図のメソッド・ロケーション・アレイ３８０、３８１、及び３８２参照）まで追跡する。各メソッド・ロケーション・アレイは、通常、少なくとも１つのアレイ・エレメントを含むであろう。しかし、問題のメソッドが未だ呼び出されてない場合（即ち、これが最初のものである場合）、メソッド呼出マネージャ１７０は、それの処理のこの段階における空のアレイを見つけるであろう。これが実際である時、メソッド呼出マネージャ１７０はサービス・プログラム名３７４と関連したサービス・プログラムをロードしようとする（第３Ａ図のブロック３２０）。サービス・プログラム名３７４はクラス・オブジェクト３８０に含まれる。
【００２４】
サービス・プログラムは、当該クラス（即ち、この場合にはクラス・オブジェクト３８０のクラス）に対して定義され、実施されたすべてのメソッドに対する実際の実行可能コードを含む。サービス・プログラム名３７４は、そのクラスに対するサービス・プログラムの最新のバージョンの名前を含んでいる。ロードが不成功である場合、メソッド呼出マネージャ１７０はエラー信号を発生し（ブロック３３５）、制御を呼び出しメソッドに戻す（ブロック３４０）。サービス・プログラムのロードが成功である場合、メソッド呼出マネージャは、現在のプロセスに対するアクティブ・サービス・プログラムに新しいサービス・プログラムを加えるように進行する（ブロック３２６）。後者のステップについては、第３Ｄ図と関連して更に詳しく後述することにする。そこで、メソッド呼出マネージャは、そのクラスの各メソッド・ロケーション・アレイ（即ち、メソッド・ロケーション・アレイ３８０、３８１、及び３８２）の前に新しいエレメントを加えるように進行する。一旦これが達成されると、メソッド呼出マネージャはサービス・プログラムから適切なメソッドをアクセスして呼び出すように進行する（ブロック３４２及び３５０）。メソッド呼出マネージャ１７０は、各メソッド・ロケーション・アレイ・エレメントに含まれた情報へのアクセスを通してこれらのステップを達成する。
【００２５】
第３Ｃ図は好適な実施例のメソッド・ロケーション・アレイ・エレメントを更に詳細に示す。メソッド・アレイ・エレメント３８６はサービス・プログラム・ポインタ３８７及びインプリメンテーション・エントリ番号３８８を含む。インプリメンテーション・エントリ番号３８８はサービス・プログラムまでのオフセットである。そこで、メソッド呼出マネージャ１７０はこのポインタ３８７及びインプリメンテーション・エントリ番号３８８を使用してそのメソッドの適切なインプリメンテーションをアクセスし、それを呼び出す。メソッド・インプリメンテーションがサービス・プログラム内のどこかに位置指定されることを可能にするために、好適な実施例ではインプリメンテーション・エントリ番号３８８が使用されるけれども、代替として、メソッド・テーブル・エントリにおけるメソッド・アレイ・ポインタの配列とサービス・プログラム内のメソッド・インプリメンテーションの配列との間の或タイプの論理的対応を単に強化することによって、オフセットを必要としないようにすることもできる。
【００２６】
メソッド・テーブル・エントリと実行可能なコードとの間の間接的な処理が本発明のデータ共有及びメソッド・バージョニング機能の主要な局面である。その間接的な処理は、バージョニングを可能するメソッド・ロケーション・アレイを含むことを可能にする。しかし、間接的処理／アレイの結合が代替の構造を使用することにより得られること及び本発明がその特定の開示された構造に限定されないことは当業者には明らかであろう。メソッド・プログラムがそれの処理を終了した後、それはメソッド呼出マネージャ１７０に制御を戻す（ブロック３５２）。そこで、メソッド呼出マネージャ１７０は呼出メソッド（即ち、クライアント・メソッド）に制御を戻す（ブロック３５３）。
【００２７】
説明を第３Ａ図のブロック３１５に戻すと、ここでは、問題のメソッド・ロケーション・アレイが少なくとも１つのエレメントを含むものと仮定する。このとおりである時、メソッド呼出マネージャ１７０は、メソッド・ロケーション・アレイにおいて識別されたサービス・プログラムの１つがアクティブ・プロセスによって前にロードされたかどうかを知るためのチェックを行う（ブロック３３０）。ＡＳ／４００システムの場合、これはプロセス・リストへのアクセスを通して行われる。第３Ｄ図は好適な実施例のプロセス・リストを示す。プロセス・リスト３９０はコンピュータ・システム１００におけるアクティブ・プロセスのリストである。各プロセス・リスト・エントリはアクティブ・サービス・プログラム・リスト（アクティブ・プログラム・リスト３９５、３９６、及び３９７参照）に対するポインタを含む。
【００２８】
これらのリストの各々は、それぞれのプロセスに対してアクティブであるサービス・プログラムを示す。そのリストの各エレメントは、サービス・プログラムのポインタ（即ち、特定のクラスに対するすべてのメソッドの実際のインプリメンテーション）及び当該プロセスの一部分として実行しようとしているサービス・プログラムの特定なアクティベーションによって割り振られたすべての変数値を含む。本発明の焦点は、サーバ・メソッド及びアクティブ・サービス・プログラム・リストにおけるそれらのサービス・プログラムの存在にあることに留意して欲しい。又、「アクティベーション」という用語は、プロセスの一部として実行するためにロードされたサービス・プログラムを記述するために使用される特定のＡＳ／４００用語であることにも留意して欲しい。ＡＳ／４００アクティベーションの概念は種々の用語（例えば、ロード済みイメージ、又はロード済み動的リンク・ライブラリ）を使用して説明可能であるけれども、その概念がその分野においてよく知られていることは当業者には明らかであろう。
【００２９】
第３Ｄ図に示されるように、プロセス１及びプロセス３２の両方ともサービス・プログラムＸのアクティベーションを有する。しかし、これらのサービス・プログラムアクティベーションの各々が、サービス・プログラムＸにおけるメソッド・インプリメンテーションによって定義されたグローバル変数（「変数」を表す「Ｖ」がサービス・プログラム名に後続して示される）内に種々の値を記憶させるであろう。変数値の処理が本発明によって克服された基本的なメソッド・バージョニング問題であることは当業者には明らかであろう。変数値は変数定義への変更によって破壊され易いので、クライアント・プログラムを１つのアクティベーションから他のアクティベーションに簡単に切り換えることはできない。本発明は、プロセスが自然に終了するまで、クライアント・プログラムが同じメソッド・バージョン及び関連の変数定義を使用し続けることを可能にすることによってこの問題を解決する。「自然に」は、プロセスがそれの処理を終了し、そしてそれが最早中央プロセッサにおいて実行することがないように或いは中央プロセッサにおいて正規の過程で実行すべくスケジュールされないように停止することを意味する。換言すれば、プロセスは、他の何れかのプロセス（例えば、従来のメソッド保守機構）によって早めに停止させられることなく終了することを可能にされる。
【００３０】
メソッド・ロケーション・アレイにおける識別されたサービス・プログラムの１つが要求プロセスに対するアクティブ・サービス・プログラム・リストにも存在する場合、メソッド呼出マネージャ１７０はそのサービス・プログラムにおけるメソッド・インプリメンテーションをアクセスして呼び出すことを知る（ブロック３４２及び３５０）。当該メソッド・ロケーション・アレイによって識別されたサービス・プログラムが要求プロセスに対するアクティブ・サービス・プログラム・リストに全く存在しない場合、メソッド呼出マネージャ１７０はサービス・プログラム名３７４から新たなサービス・プログラムをロードしようとする（第３Ａ図のブロック３６５）。メソッド呼出マネージャ１７０は、コンピュータ・システム１００のディレクトリ・サービスを使用することによって、当該サービス・プログラムに対するポインタにサービス・プログラム名３７４をマップする（ディレクトリ・サービスに関しては、第２図に関連した記述において説明した）。
【００３１】
ロードが不成功である場合、メソッド呼出マネージャ１７０はエラー信号を発生し（ブロック３４３）、しかる後、制御を呼出メソッドに戻す（ブロック３４４）。サービス・プログラムのロードが成功である場合、メソッド呼出マネージャ１７０は、現在のプロセスに対するアクティブ・サービス・プログラム・リストに新たなサービス・プログラムを加える（ブロック３４６）。そこで、メソッド呼出マネージャ１７０は、最も新しいサービス・プログラムに対するエレメント・ポインタがメソッド・ロケーション・アレイに存在するかどうか（当該クラスのメソッドのうちのどれかが最新のサービス・プログラムを使用して呼び出されたかどうか）をチェックする（ブロック３４９）。その結果が否定的である場合、メソッド呼出マネージャ１７０は、そのクラスに対する各メソッド・ロケーション・アレイ（即ち、メソッド・ロケーション・アレイ３８０、３８１、及び３８２）の前に新しいエレメントを加える。一旦これが達成されると、メソッド呼出マネージャ１７０は、前述のように、サービス・プログラムから適切なメソッドをアクセスして呼び出すように進行する（ブロック３４２及び３５０）。
【００３２】
更なる特定の例として、メソッド呼出マネージャ１７０がプロセス１（第３Ｄ図）の下で実行するプログラムからの呼出を処理する方法と、メソッド呼出マネージャ１７０がプロセス３２（第３Ｄ図）の下で実行するプログラムによる呼出を処理する方法とを比較することにする。両方のクライアント・プログラムがオブジェクト３７０の第１メソッド（即ち、メソッド・ロケーション・アレイ３８０によって表されたメソッド）を呼び出すものと仮定する。前述のように、各メソッドは、メソッド呼出マネージャ１７０を呼び出すこと及び呼び出されるべきメソッドのメソッド・シグニチャをメソッド呼出マネージャ１７０に送ることによってそれの呼出を行う。これは第３Ａ図のブロック３００に示される。ブロック３０５において、メソッド呼出マネージャ１７０はその呼出を正しいメソッド・テーブル・エントリに分解する。この例の両方の場合とも、エントリは第３Ｂ図のメソッド・テーブル・エントリ３７８となるであろう。
【００３３】
ブロック３１０において、メソッド呼出マネージャ１７０は、メソッド３７０の第１メソッドに対するメソッド・アレイ・ポインタを適切なメソッド・ロケーション・アレイ（この場合、メソッド・ロケーション・アレイ３８０）までフォローするであろう。メソッド・ロケーション・アレイ３８０は、呼び出されたメソッドの３つの異なるバージョンがクライアントによって前に呼び出されたことを意味する３つのアレイ・エレメントを含む。従って、ブロック３１５は、プロセス１又はプロセス２のどちらが問題であるかに関係なく、肯定的に応えられるであろう。次に、メソッド呼出マネージャ１７０は、メソッド・ロケーション・アレイ３８０におけるサービス・プログラムがアクティブ・プロセスによって前にロードされたかどうかを決定するであろう。前述のように、メソッド呼出マネージャは、第３Ｄ図のプロセス・リスト３９０を参照することによってこの決定を行うであろう。プロセス１の場合、メソッド呼出マネージャ１７０は、サービス・プログラムＡが前にロードされたことを決定するであろう。従って、メソッド呼出マネージャ１７０はメソッド・ロケーション・アレイ３８０のエレメントに含まれた情報を使用してサービス・プログラムＡ（即ち、第３Ｂ図においてサービス・プログラム３８５として示される）のメソッド・インプリメンテーション２をアクセスして呼び出す（第３Ａ図のブロック３４２及び３５０参照）。各サービス・プログラムは各メソッド・ロケーション・アレイに（即ち、第３Ｂ図に示されたように）論理的に接続されるけれども、各サービス・プログラムのアクティベーションも（第３Ｄ図に示されるように）それのプロセスに論理的に接続される。
【００３４】
しかし、プロセス３２の場合、メソッド呼出マネージャ１７０は、プロセス３２によって前にロードされたサービスプログラムに関するロケーション情報をメソッド・ロケーション・アレイ３８０のアレイ・エレメントが全く持っていないことを確認するであろう。従って、メソッド呼出マネージャ１７０はサービス・プログラム名３７４から新しいサービス・プログラムをロードしようとするであろう（第３Ａ図のブロック３６５）。ここでは、サービス・プログラム名３７４に含まれた名前はサービス・プログラムＣという名前であると仮定する。
【００３５】
ロードが不成功である場合、メソッド呼出マネージャ１７０はエラー信号を発生し（ブロック３４３）、しかる後、制御を呼出メソッドに戻す（ブロック３４４）。しかし、ここでは、サービス・プログラムＣのロードが成功であると仮定する。そこで、メソッド呼出マネージャ１７０はプロセス３２に対するアクティブ・サービス・プログラム・リストにサービス・プログラムＣを加える（ブロック３４６）。そこで、メソッド呼出マネージャ１７０は、サービス・プログラムＣがメソッド・ロケーション・アレイに存在するかどうか（即ち、当該クラスのメソッドのうち、サービス・プログラムＣを使用して呼び出されたものがあるかどうか）をチェックする（ブロック３４９）。第３Ｂ図に示されるように、サービス・プログラムＣ（即ち、サービス・プログラム３８３）はメソッド・ロケーション・アレイに存在する。従って、メソッド呼出マネージャ１７０は、メソッド・ロケーション・アレイ３８０のエレメントｃに含まれた情報を使用してサービス・プログラムＣのメソッド・インプリメンテーション１をアクセスして呼び出すであろう（第３Ａ図のブロック３４２及び３５０参照）。
【００３６】
上記の例は、２つの異なるプロセス（即ち、プロセス１及びプロセス３２）が共にオブジェクト３７０のオブジェクト・データ３７１を共用することができるが、それにもかかわらず、同じメソッドの２つの異なるバージョン（即ち、サービス・プログラムＡ及びＣのバージョン）を使用することができるということを示していることに留意し欲しい。又、プロセス１は、それが自然に実行を終了した後に（即ち、サービス・プログラムＡはアクティブ・サービス・プログラム・リスト３９５から除去されるため）、最新のメソッド・バージョン（即ち、その例におけるサービス・プログラムＣのバージョン）へのアクセスを自動的に与えられるであろうと云うことも留意して欲しい。
【００３７】
産業上の利用可能性
本発明の第１の利点は、先ずコンピュータ・システム又はそれの如何なるプログラムも休止させる必要なくオブジェクトを更新及び補修するという機能である。
【００３８】
本発明の第２の利点は、実行プログラムがそれらの処理を完全に終了してしまうまでその実行プログラムが古いバージョンのオブジェクトを使用して実行し続けることを可能にすることである。
【００３９】
本発明の第３の利点は、新しいオブジェクト・バージョンが利用可能になった時、たとえ複数のプログラムが同じオブジェクトの古いオブジェクト・バージョンをアクセスしようとしていても、本発明がそれらのプログラムに新しいオブジェクト・バージョンへのアクセスを与えることである。
【００４０】
本発明の第４の利点は、複数のプログラムがサーバ・オブジェクトのデータを共用することを可能にするが、それにもかかわらず、同じ複数のプログラムがそのサーバ・オブジェクトのメソッドの異なるバージョンを利用することを可能にすることである。
【００４１】
本発明の第５の目的は、複数のプログラムがサーバ・オブジェクトのデータを共用することを可能にするが、それにもかかわらず、同じ複数のプログラムのサブセットがそのサーバ・メソッドの新しいバージョンを利用することを可能にすることである。
【００４２】
本願で示された実施例は、本発明及びそれの実用的な応用を最もよく説明するために、及び当業者が本発明を作り及び使用することを可能にするために与えられた。しかし、前記説明及び例が単に説明及び例示の目的で与えられたことは当業者には明らかであろう。前記の説明は網羅的であることを意図するものではなく、或いは、開示された形態そのものに本発明を限定しようとするものでもない。上記の教示するところに照らして、本発明の精神及び技術的範囲を逸脱することなく、多くの修正及び変更が可能である。以下に、本発明を開示する。
【００４３】
（１）  バスと、
中央処理装置と、
前記バスを介して前記中央処理装置に接続されたコンピュータ・システム・メモリと、
マルチタスキング・オペレーティング・システムの制御の下に前記中央処理装置において実行される第１プロセスと、
前記第１プロセスの一部分として前記中央処理装置において実行されるクライアント・プログラムと、
前記コンピュータ・システム・メモリに記憶され、メソッド及びデータを含む少なくとも１つのオブジェクトとを含み、
前記メソッドは、前記コンピュータ・システム内に記憶され前記中央処理装置において実行されるとともに第１バージョンと第２バージョンとを有し、前記メソッドの前記第１バージョンが、その時点において前記クライアント・プログラムにより使用され、
メソッド呼出マネージャは、第１プロセスが自然に終了するまで前記クライアント・プログラムから生じた呼出を、前記メソッドの前記第１バージョンに経路指定するとともに、前記クライアント・プログラムが第２プロセスの一部として実行されている場合には、前記クライアント・プログラムからの呼出を前記メソッドの前記第２バージョンへと経路指定しており、前記メソッドの前記第１バージョンと前記メソッドの前記第２バージョンとは、前記クライアント・プログラムのかわりに前記データのすべてを共有し、前記第２プロセスは、前記メソッドの前記第２バージョンが作成された後に開始される、コンピュータ・システム。
（２）  メソッド呼出マネージャが記録されたコンピュータ可読な記録媒体であって、
前記メソッド呼出マネージャは、少なくとも１つのオブジェクトがコンピュータ・システム・メモリに記憶されるコンピュータ・システムにおいて使用され、前記少なくとも１つのオブジェクトは中央処理装置における実行のために前記コンピュータ・システム・メモリに記憶される第１バージョンと第２バージョンとを含むメソッド及びデータを含み、
前記コンピュータ・システムにおける実行のために前記第２バージョンが作成・利用されるより前に、前記メソッドの前記第１バージョンが前記コンピュータ・システムにおける実行のために作成・利用され、
前記メソッド呼出マネージャは、前記コンピュータ・システムに対して、クライアント・プログラムが第１プロセスの一部分として前記中央処理装置において実行されている場合には、前記第１プロセスが自然に終了するまで前記クライアント・プログラムから生じた呼出を前記メソッドの前記第１バージョンに経路指定し、かつ第２プロセスの一部分として前記クライアント・プログラムが実行されている場合には、前記クライアント・プログラムからの呼出を前記メソッドの前記第２バージョンに経路指定し、前記メソッドの前記第１バージョンと前記メソッドの前記第２バージョンとは、前記クライアント・プログラムのかわりに前記データのすべてを共有し、前記第２プロセスを、前記メソッドの前記第２バージョンが作成された後に開始させる、
コンピュータ可読な記録媒体。
（３）  第１コンピュータ・システムから第２コンピュータ・システムにコンピュータ・プログラムを伝送して該コンピュータ・プログラムを動作させる方法にして、
前記第１コンピュータ・システム及び前記第２コンピュータ・システムの間に接続を確立するステップと、
前記第１コンピュータ・システムから前記第２コンピュータ・システムにメソッド呼出マネージャを含む前記コンピュータ・プログラムを伝送するステップと、
を含み、
前記メソッド呼出マネージャは、少なくとも１つのオブジェクトがコンピュータ・システム・メモリに記憶されるコンピュータ・システムにおいて使用され、前記少なくとも１つのオブジェクトは中央処理装置における実行のために前記コンピュータ・システム・メモリに記憶される第１バージョンと第２バージョンとを含むメソッド及びデータを含み、
前記コンピュータ・システムにおける実行のために前記第２バージョンが作成・利用されるより前に、前記メソッドの前記第１バージョンが前記コンピュータ・システムにおける実行のために作成・利用され、
前記メソッド呼出マネージャは、前記コンピュータ・システムに対して、クライアント・プログラムが第１プロセスの一部分として前記中央処理装置において実行されている場合には、前記第１プロセスが自然に終了するまで前記クライアント・プログラムから生じた呼出を前記メソッドの前記第１バージョンに経路指定し、かつ第２プロセスの一部分として前記クライアント・プログラムが実行されている場合には、前記クライアント・プログラムからの呼出を前記メソッドの前記第２バージョンに経路指定し、前記メソッドの前記第１バージョンと前記メソッドの前記第２バージョンとは、前記クライアント・プログラムのかわりに前記データのすべてを共有し、前記第２プロセスを、前記メソッドの前記第２バージョンが作成された後に、開始させる、
方法。
（４）  バスと、
中央処理装置と、
前記バスを介して前記中央処理装置に接続されたコンピュータ・システム・メモリと、
マルチタスキング・オペレーティング・システムの制御の下に前記中央処理装置において実行される第１プロセスと、
前記第１プロセスの一部分として前記中央処理装置において実行されるクライアント・プログラムと、
前記コンピュータ・システム・メモリに記憶され、メソッド及びデータを含む少なくとも１つのオブジェクトとを含み、
前記メソッドは、前記コンピュータ・システム内に記憶され前記中央処理装置において実行されるとともに第１バージョンと第２バージョンとを有し、前記メソッドの前記第１バージョンが、その時点において前記クライアント・プログラムにより使用され、
メソッド呼出マネージャは、前記第１プロセスが自然に終了するまで前記クライアント・プログラムから生じた呼出を、前記メソッドの前記第１バージョンに経路指定するとともに、前記クライアント・プログラムが第２プロセスの一部として実行されている場合には、前記クライアント・プログラムからの呼出を前記メソッドの前記第２バージョンへと経路指定しており、前記メソッドの前記第１バージョンと前記メソッドの前記第２バージョンとは、前記クライアント・プログラムのかわりに前記データのすべてを共有させる、コンピュータ・システム。
（５）  メソッド呼出マネージャが記録されたコンピュータ可読な記録媒体であって、
前記メソッド呼出マネージャは、少なくとも１つのオブジェクトがコンピュータ・システム・メモリに記憶されるコンピュータ・システムにおいて使用され、前記少なくとも１つのオブジェクトは中央処理装置における実行のために前記コンピュータ・システム・メモリに記憶される第１バージョンと第２バージョンとを含むメソッド及びデータを含み、
前記コンピュータ・システムにおける実行のために前記第２バージョンが作成・利用されるより前に、前記メソッドの前記第１バージョンが前記コンピュータ・システムにおける実行のために作成、利用され、
前記メソッド呼出マネージャは、前記コンピュータ・システムに対して、クライアント・プログラムが第１プロセスの一部分として前記中央処理装置において実行されている場合には、前記第１プロセスが自然に終了するまで前記クライアント・プログラムから生じた呼出を前記メソッドの前記第１バージョンに経路指定し、かつ第２プロセスの一部分として前記クライアント・プログラムが実行されている場合には、前記クライアント・プログラムからの呼出を前記メソッドの前記第２バージョンに経路指定し、前記メソッドの前記第１バージョンと前記メソッドの前記第２バージョンとに、前記クライアント・プログラムのかわりに前記データのすべてを共有させる、
コンピュータ可読な記録媒体。
（６）  第１コンピュータ・システムから第２コンピュータ・システムにコンピュータ・プログラムを伝送して該コンピュータ・プログラムを動作させる方法にして、
前記第１コンピュータ・システム及び前記第２コンピュータ・システムの間に接続を確立するステップと、
前記第１コンピュータ・システムから前記第２コンピュータ・システムにメソッド呼出マネージャを含む前記コンピュータ・プログラムを伝送するステップと、
を含み、
前記メソッド呼出マネージャは、少なくとも１つのオブジェクトがコンピュータ・システム・メモリに記憶されるコンピュータ・システムにおいて使用され、前記少なくとも１つのオブジェクトは中央処理装置における実行のために前記コンピュータ・システム・メモリに記憶される第１バージョンと第２バージョンとを含むメソッド及びデータを含み、
前記コンピュータ・システムにおける実行のために前記第２バージョンが作成・利用されるより前に、前記メソッドの前記第１バージョンが前記コンピュータ・システムにおける実行のために作成・利用され、
前記メソッド呼出マネージャは、前記コンピュータ・システムに対して、クライアント・プログラムが第１プロセスの一部分として前記中央処理装置において実行されている場合には、前記第１プロセスが自然に終了するまで前記クライアント・プログラムから生じた呼出を前記メソッドの前記第１バージョンに経路指定し、かつ第２プロセスの一部分として前記クライアント・プログラムが実行されている場合には、前記クライアント・プログラムからの呼出を前記メソッドの前記第２バージョンに経路指定し、前記メソッドの前記第１バージョンと前記メソッドの前記第２バージョンとは、前記クライアント・プログラムのかわりに前記データのすべてを共有させる、
方法。
【図面の簡単な説明】
第１図は、本発明のコンピュータ・システムのブロック図である。
第２図は、好適な実施例に従って、本発明のメソッド更新機構を実行するために使用されるステップを示す流れ図である。
第３Ａ図は、好適な実施例に従って、本発明のメソッド呼出マネージャを実行するために使用されるステップを示す流れ図である。
第３Ｂ図は、好適な実施例において使用されるデータ構造のブロック図である。
第３Ｃ図は、好適な実施例において使用されるメソッド・アレイ・エレメントのブロック図である。
第３Ｄ図は、好適な実施例において使用されるアクティブなサービス・プログラム・トラッキング機構のブロック図である。
【図１】
0003771589.tif 000002
【図２】
0003771589.tif 000003
【図３Ａ−１】
0003771589.tif 000004
【図３Ａ−２】
0003771589.tif 000005
【図３Ｂ】
0003771589.tif 000006
【図３Ｃ】
0003771589.tif 000007
【図３Ｄ】
0003771589.tif 000008