(57)【特許請求の範囲】
【請求項１】
通信路に接続され、当該通信路を通じてデジタルメッセージを交換する複数のデジタルコンピュータを有する通信システムにおいて、当該コンピュータ間で情報を処理する方法であって、
デジタルプログラム命令シーケンスを含む第１移動プログラムを第１コンピュータ上で実行するステップであって、前記命令シーケンスは当該命令シーケンスを受信する少なくとも１つの次のあて先を決定する命令を含んでおり、前記命令シーケンスは当該命令シーケンスにバインドされる複数のオブジェクトインスタンスを定義するものであり、前記第１移動プログラムは前記複数のオブジェクトインスタンスのうちの少なくとも１つのクラスを定義するプログラムのハッシュ値を示すデータを含む、ステップと、
少なくとも前記複数のオブジェクトインスタンスから成るデジタル情報を含む第２移動プログラムを、前記命令シーケンスに関連するデジタルデータと一緒に次のあて先に送信するステップと、
前記第１コンピュータにおいて前記第１移動プログラムが実行し得るオペレーションを制限するステップとを備えた方法。
【請求項２】
前記第１移動プログラムが、前記複数のオブジェクトインスタンスのうちの少なくとも１つに関連するクラスを定義するプログラムを含んでいることを特徴とする、請求項１に記載の方法。
【請求項３】
前記複数のオブジェクトインスタンスのうちの１つが、前記第１移動プログラムおよび前記第２移動プログラムのうちの少なくともいずれか一方がオブジェクトとして呼び出されたときに、制御を受け取るインスタンスとして指定されていることを特徴とする、請求項１に記載の方法。
【請求項４】
前記第１移動プログラムおよび前記第２移動プログラムのうちの少なくともいずれか一方の一部として、構成要素たるオブジェクトインスタンスのうちの少なくとも１つのクラスを定義するプログラムが含まれていることを特徴とする、請求項１に記載の方法。
【請求項５】
前記含まれているプログラムが、ソースの形式で表現されていることを特徴とする、請求項４に記載の方法。
【請求項６】
前記含まれているプログラムが、コンパイルされた形式で表現されていることを特徴とする、請求項４に記載の方法。
【請求項７】
前記複数のオブジェクトインスタンスのうちの少なくとも１つのクラスを定義するプログラムのハッシュ値を示す前記データが、当該プログラムのハッシュ値への参照であることを特徴とする、請求項１に記載の方法。
【請求項８】
前記ハッシュが、ソースプログラムから求められるハッシュであることを特徴とする、請求項７に記載の方法。
【請求項９】
前記ハッシュが、コンパイルされたプログラムから求められるハッシュであることを特徴とする、請求項７に記載の方法。
【請求項１０】
前記第１移動プログラムに関するプログラム特性を識別するデジタルデータ構造を付与するステップをさらに備えることを特徴とする、請求項１に記載の方法。
【請求項１１】
前記デジタルデータ構造を付与するステップが、前記プログラムが実行を許可されているオペレーションを規定する許可情報を識別するための電子的な証印を格納するステップを含むことを特徴とする、請求項１０に記載の方法。
【請求項１２】
前記デジタルデータ構造を付与するステップが、前記第１移動プログラムが実行してもよい関数を規定するステップを含むことを特徴とする、請求項１０に記載の方法。
【請求項１３】
前記複数のオブジェクトインスタンスのうちの少なくとも１つのためのクラスを決定するステップをさらに備えることを特徴とする、請求項１に記載の方法。
【請求項１４】
格納された移動プログラムの一部として、オブジェクトインスタンスを格納するステップをさらに備えることを特徴とする、請求項１に記載の方法。
【請求項１５】
前記第１移動プログラムが、実行が一時的に中断されてファイルとして格納されている前記複数のオブジェクトインスタンスを含んでいることを特徴とする、請求項１に記載の方法。
【請求項１６】
前記第１移動プログラムによってデジタル署名を検査するステップをさらに備えることを特徴とする、請求項１に記載の方法。
【請求項１７】
前記第２移動プログラムの少なくとも一部をデジタル署名するステップをさらに備えることを特徴とする、請求項１に記載の方法。
【請求項１８】
前記デジタル署名するステップが、少なくとも１つのクラス定義プログラムをデジタル署名するステップを含むことを特徴とする、請求項１７に記載の方法。
【請求項１９】
前記第１移動プログラムが、関連しているクラスが実行を許可されているオペレーションを規定する許可情報を格納していることを特徴とする、請求項１に記載の方法。
【請求項２０】
前記第１移動プログラムのうち、関連しているクラスが実行を許可されているオペレーションを規定する部分をデジタル署名するステップをさらに備えることを特徴とする、請求項１９に記載の方法。
【請求項２１】
前記第１移動プログラムのうちの少なくとも一部をデジタル署名するステップをさらに備えることを特徴とする、請求項１に記載の方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、主としてオブジェクト指向型プログラムの制御のもとでデジタルコンピュータを操作する装置および方法に関する。より特定的には、デジタル署名法を用いた特有の進行オブジェクト指向型プログラムを有効に利用する方法および装置に関する。
【０００２】
【関連出願】
本願は、１９９２年４月６日に出願の許可された米国出願番号第０７／８６３，５５２号の出願、名称は「進行型プログラムの作成、処理および使用方法ならびにその装置」（以下「進行型プログラム出願」とする）と、米国出願番号第０７／８８３，８６８号の出願、名称は「プログラム許可情報を用いたコンピュータシステム方法および装置」（以下「プログラム許可情報出願」とする）に関連する。
【０００３】
【従来の技術】
「Ｃ言語」や「スモールトーク」等の既存のオブジェクト指向型言語を用いたオブジェクト指向型プログラミングにおいては、プログラマはオブジェクト「データ型」（または「クラス」）を定義することができる。「データ型」とはデータ構造であって、あるデータ型をどう処理するかを知っているプログラムとそれぞれ関連している。オブジェクト指向型プログラミングによって、プログラムを変更することなく、既存のプログラムを再使用したり拡張したりすることが可能になる。オブジェクト指向型プログラミングのこの特性は「継承特性」として知られており、他の（より基本的な）データクラスの「拡張子」として引き出される新規のデータ型クラスを定義することができる。
【０００４】
拡張子クラスは、既存の（「ベース」）クラスとは異なる新規のデータ型用の（オブジェクトの「メソッド」として周知の）関数を定義するだけでよい。このようなメソッドは全く新しいものであってもよいし、またはベースクラス用に定義されているメソッドに（それを置き換えるか、または拡大することによって）取って代わってもよい。このように、新規の関数を付け加えるか、または既存の関数に取って代わる（変更する）ことにより、既存のデータクラスの新規の変種作成を容易にする。
【０００５】
オブジェクト指向型法の中には「多重継承」を認めるものもある。「多重継承」においては、１つ以上の「ベース」クラスが存在することができ、規定のクラスがその「ベース」クラスから特性を継承する。本発明は、多重継承の可能な使用法を考察している。規定のクラス列とは、ベースクラスとベースクラス列の集合体セットである。
【０００６】
より慣用的な「手続型」プログラミング法を使用すると、異なるデータ型は、そのデータ型用に定義された処理規則に基づくそれぞれ異なる方法で処理される。オブジェクト指向型プログラミングは、異なった処理法を提供する。プログラマが定義したオブジェクトデータ型またはクラスの個々の実現値は、そのクラスの「インスタンス」として知られている。いったんクラスを定義すると、そのデータ型は、再度プログラミングをしなくても、異なるプログラム内で何度も繰り返し使用することができる。
【０００７】
それぞれのデータ型用にクラスプログラムを定義すると、そのデータ型のインスタンスに対して適用されうる関数が定義される。プログラムは、オブジェクトの特定のインスタンスと共にそのオブジェクトメソッドの内の１つ（すなわち、あるデータ型のインスタンスに対して適用されうる関数）を呼び出すことによって、オブジェクトを使用する。その後、そのメソッドがデータのある特定のインスタンスを処理する。
【０００８】
このように、同一のメソッド名を異なるデータ型クラスにおいて違うように実現しうることが、オブジェクト指向型プログラミング法の利点の１つである。アプリケーションプログラムはデータ上の「総称」操作が正確にはどのように実現されているかに関知せず、それを実行することができる。このことにより、データ型の新規の種類（クラス）を最小限の変更で、これらのデータ型を使用しているアプリケーションプログラム（もしあれば）に付け加えることができる。
【０００９】
これらの「メソッド」を実行するための論理は、それぞれのデータクラスにいったん組み込まれる。このように、異なるデータ型がそれぞれのデータ型に適した方法で特定の関数を実現することを可能にすることにより、プログラムがそのようなデータ型を使用する方法が容易になる。
【００１０】
オブジェクト指向型プログラミングは、上記のように、プログラムを区分するための異なる手法を提供している。それは多くの異なる複合アプリケーション領域において非常に有効である。オブジェクト指向型プログラミングにおいては、データは一般的には隔離されたビットストリームとしては扱われず、むしろそのデータを管理しているプログラムに結合される。
【００１１】
オブジェクト指向型法のこの特性、つまり特定の関数を様々なデータ型上で異なるように動作させる能力は、「多義性」として知られている。
【００１２】
多義性は、データが何を表現しているかに関知せず、プログラムがそのデータ上に対して動作することを可能にする。オブジェクト指向型法の多義的特性は、関数があるデータ型に対して適切に実行されるように、そのデータ型によって異なる方法で特定の操作が実現できるようにする。多義性の例としては、例えば、「乗算」操作がある。実スカラデータ型に対しては、２つのスカラが共に算術的に掛けられる。しかし、マトリックスデータ型に対しては、その「乗算」メソッドが実現され、より複雑な「マトリックス」乗法がなされる。これらをオブジェクトとして扱うことによって、プログラムデザイナは特定のオペランドが実数であるのかまたはマトリックスであるのかを気にすることなく、乗法を使用することができる。そして将来、例えば、新たにプログラミングをしなくても、異なる乗算機構を有する新規の「複素数」データ型を、既存のプログラムに導入することができる。
【００１３】
オブジェクト指向型法の例として、他にグラフィックディスプレイに関するオブジェクトを含んでもよい。そのようなオブジェクトの大半は「クイック」クリックメソッドを備えている。そのメソッドは、マウスポインタがオブジェクトと関連するグラフィックイメージ上にある時、またはユーザがマウスのスイッチをクリックした時は必ず呼び出される。
【００１４】
ボタンのグループのグラフィックディスプレイを考えると、各「ボタン」グラフィックは、「ボタン」クラスの個々のインスタンスによって表現され、制御されてもよい。データフィールド等の他の型のグラフィックアイテムは、それぞれの独自のクラスのインスタンスと共に制御される。「アイコン」を、「ボタン」の特殊なクラスであって、追加の性質または変更された性質を備える「ボタン」として扱うことが可能である。
【００１５】
「アイコン」クラスを「ボタン」の拡張子として開発する際に、独自の「アイコン」クラス定義用に特別に供給されるメソッドルーチン以外は、「ボタン」用の全てのメソッドルーチンがその「アイコン」クラスに対して有効である。ユーザがマウスのスイッチをクリックすると、システムはマウスが位置すると思われるアイテムを決定し、そのグラフィックアイテムに関連するオブジェクトインスタンス用の「クリック」メソッドを呼び出す。
【００１６】
「内容を上にスクロールする」とか「このオブジェクトを削除する」、「内容を印刷する」、「マウスボタンを操作する、つまり要求をクリックする」等の異なる関数が、含んでいる特定のグラフィックオブジェクトによって違うように解釈される。許可可能な関数はデータが使用されるごとに定義されるのではなく、データが定義される時に作成される。
【００１７】
本発明は、上述したような従来のオブジェクト指向型プログラミング法に比べて、より一層強力に拡大されたオブジェクト指向型プログラミング法に従って、デジタルコンピュータを操作する装置および方法を提供することを目的とする。
【００１８】
【本願発明の概要および効果】
すなわち、本発明は、自動化された業務処理を効率的に行うフレームワークを構築する非常に拡大されたオブジェクト指向型プログラミング法に向けられる。本発明のオブジェクト指向型プログラミング法は、全体として本件で明白に援用している前述の進行型プログラム特許出願に記載の、本出願人の「進行型プログラム法」において特に有効である。
【００１９】
進行型プログラムとはデジタルデータ構造であり、命令および関連データのシーケンスを含む。そのシーケンスは進行型プログラムを受信したり、次の受信者またはあて先に送信するプログラムによって決定された全ての関連データと共にそのシーケンス自身を送信する、少なくとも一つの次のあて先または受信者を決定することができる。本件に記載の方法を用いると、データがプログラムにより密接に結合され、そのため受信者であるコンピュータユーザにオブジェクトを事前に知られることなく、一方のコンピュータユーザから他のユーザへと最も効率的にそのオブジェクトを転送することができるようになる。
【００２０】
本発明は、データを組み立て、オブジェクトとして最も高い安全性で保持し、記憶し、そしてコンピュータユーザから他のユーザへと送信することを可能にする。
【００２１】
また、本発明は、再使用可能なプログラミングプールを効率的に作成することにより、今まで以上に効率的にアプリケーションプログラムを開発することを可能にする。
【００２２】
本発明はオブジェクト「セル」を利用している。セルとは、例えばディスク上に記憶されたデータ構造であり、実行が一時中断されているが、後に同一または異なるプラットフォームにおいて再実行が可能な（関連する）オブジェクトインスタンスの集まりを示している。オブジェクトインスタンスの集まりは、記憶するため、または他のコンピュータユーザへ送信するのに都合がよいようにセル（または「電子フォーム」）に集めることができ、インスタンスは各クラス定義に不明確でないように結合される。
【００２３】
本発明は、基礎となるオブジェクトインスタンス値と共に電子フォームの一部として送信されている、データクラス定義プログラムを用いて任意のオブジェクト指向型データクラス構成素から電子フォームを構築することができる。
【００２４】
また、本発明はセル（電子フォーム）を作成および使用するために改良されたツールを作成するので、オブジェクト指向技術を用いて電子フォームを定義することが可能となり、全てのユーザが全てのオブジェクトクラス定義プログラムの互換ライブラリおよびそのクラスの同一同期バージョンを保持することを要求しなくとも、そのようなフォームを種々のコンピュータユーザ間で容易に送信することができるようになる。
【００２５】
このように、本発明は、受信者が必要な全てのオブジェクトクラスを持っているか否か、またはそのようなクラスが特定のデータ転送に適切に対応するバージョンを反映するかどうかを気にすることなく、そのようなセルを電子メールを通して他のユーザに転送できるようにする。そのセルは、他のセルによってオブジェクトとして呼び出すことができる。
【００２６】
本発明は安全性および一貫性を保証するデジタル署名法を提供し、それによりユーザは、セルに挿入されたオブジェクトクラスの一部がユーザのシステムまたはデータの安全性、或いは一貫性を失わせるか、破壊するか、または危うくする可能性のある破壊的な「トロイの木馬」プログラムであるかもしれないという危険性を負うことなく、オブジェクトの集まりから構成される電子フォーム（すなわちセル）を受信および実行することができる。
【００２７】
関連のあるクラス定義プログラムを見つけ出すために、オブジェクトインスタンス自身の中には印が記憶されている。その印には例えば、そのオブジェクトクラスインスタンスの名前がある。
【００２８】
本件では、セルに記憶されているデータインスタンスを、それぞれのオブジェクトクラスプログラムに結合させる特有の方法が説明されている。この方法によって、セルが次の実行を開始して記憶装置から再格納される際に、正しくかつ互換性のあるクラス定義プログラムが既存のインスタンスデータ上で確実に動作する。
【００２９】
これにより、クラスプログラムの変更された「ライブラリ」またはテンプレートバージョンが、より以前のインスタンスデータ上に不本意に動作することができないことを保証することによって、または（たとえそのユーザの内の一人が適した名前を有するクラスプログラムを持っていたとしても）セルが様々なユーザ（受信者）によって異なる時間に起動されている際に、クラスプログラムの正しくない他のバージョンが不本意に使用されないこと（そして混乱や損害を生じさせることのないこと）を保証することによって、一貫性を提供する。インスタンスとクラス間の明確な結合は、次の様なさまざまな方法で供給されうる。
【００３０】
・クラス定義、すなわち（そのクラスプログラム論理がソースコード内にあろうと、疑符号内にあろうと、または機械コード内にあろうと）クラスプログラム論理自身をそのセルデータ構造の一部として含めることにより、そのセル内のオブジェクトインスタンスをクラスに結合させる方法。
【００３１】
・クラスプログラム定義用のソース命令（またはその正規バージョン）、コンパイルの結果生じた擬符号（ｐコード）命令、またはコンパイルの結果生じた機械言語コードの内の少なくとも１つの（暗号）ハッシュをセルに含めることにより、そのセル内のオブジェクトインスタンスをクラスに結合させる方法。
【００３２】
この結合は、各インスタンスと正しい対応クラスプログラムとを明確に関係付け、そのため、同一名を有する他のクラスか、またはそのクラスの（古すぎるか、もしくは新しすぎるために）適切でないバージョンが不本意に選択されて、セルが再格納される際にインスタンスデータの既存のバージョン上で動作する可能性がなくなる。このことは、重要で機密性を有する関数を実行するクラスプログラムに対して、特に有効である。このように、インスタンスが作成される際に、クラス定義の仕様によって決定された既存のインスタンスを損なったり、乱したりすることなく、「マスタ」クラス定義を変更することができる。
【００３３】
本発明に従って、セルが記憶されてから（恐らく他のユーザによって）再使用される間に、そのセルの重要部分を偶然に、または故意に変更することができないように、セルの重要部分にデジタル署名がなされてもよい。しかし、セルの重要でない部分にはデジタル署名はなされず、重要でない情報または別の方法で確認することのできる情報を任意に含めたり、除外したりするよう調節できるようになっている。このようにして、オブジェクトプログラムクラス定義を改ざんできないようにするため、それらをデジタル署名形式で記憶することができる。状況によっては、必ずしも全てのオブジェクトクラス定義プログラムにデジタル署名する必要はなく、重要な操作を実行するもの（例えば、ファイルへのアクセス等、もしくはアセンブリ言語、Ｃ言語、または直接解釈プログラムの管理外で実行する、他のモジュールで書き込まれた外部プログラムの呼出し等）のみに署名するだけでよいこともある。
【００３４】
そのような重要部分とは一般的に、それぞれの重要なオブジェクトクラスプログラム定義の少なくとも一つの互換バージョンに、少なくとも不明確でないように結合されて連結しており、通常そのプログラムのバージョンのハッシュ値を含むデータおよびオブジェクトの構造および値を含む。
【００３５】
本発明は、各クラスが実行することができる操作または関数を決定する許可に関連して、各クラスに更にデジタル署名をすることができるようにしている。この許可は、前述の現在出願中の米国出願番号第０７／８８３，８６８号の出願、「プログラム許可情報を用いたコンピュータシステム方法および装置」に記載のプログラム許可情報データ構造によって定義される。当該出願は本件に明示的に援用されている。
【００３６】
これにより、不正なセルまたは害のあるセルを自動的に検出することができる。また、これは信頼性のない（インスタンス）が（プログラムの故障または故意の悪戯によって）損害をもたらすような可能性を持たないことを保証し、安全性を提供する。また、信頼性のあるクラスと信頼性のないクラスの混合クラスに対する手段を提供する。その手段は、より強力なクラスに関連する無害なまたは制限された関数を供給するために、臨時のインスタンス（およびクラス）を使用する能力を提供し、信頼性のないクラスが秘密裡には何もできないことを保証する。また、これにより、信頼性のある状態において信頼性のないコードを動作させることのできる、モリスインタネットのウィルスまたは寄生虫と類似するオブジェクト指向のウィルス等を予防することもできる。
【００３７】
この手法を用いると、セルにデジタル署名をした後、そのセルの一貫性を損なうことなく、クラスのイメージ（ソースであれ、ｐコードであれ、他のものであっても）をセルに挿入したりまたは削除したりすることができる。
【００３８】
また、本発明は、クラスプログラムのバージョンが、そのクラスプログラムの異なるバージョンによって作成されたインスタンスを処理することができるような手法を提供する。これは、データインスタンスを作成した（または最後にデータインスタンスを操作した）クラスプログラムのバージョンに、データインスタンスを関連させることにより実施することができる。また、クラスプログラムの各バージョンが、それぞれが支援するデータバージョンのセットを指定できるようにすることによっても実施可能である。
【００３９】
本発明は既存のセルを修復またはアップグレードする手法を提供する。それにより、たとえ既存のセルがデジタル署名されていたとしても、一貫性を損なうことなく、そのセルによって記憶または参照されているクラス定義を抽出し、修正（または訂正）された定義に置き換えることができる。
【００４０】
本発明は、様々なオブジェクトから構成されるセル（電子フォーム）を、同一または他のコンピュータ上で実行させるために記憶し、復元することのできる手法を提供する。
【００４１】
本発明は、セル全体を他のセルによってオブジェクトとして呼び出し、処理することを可能にする。このことによりデータのクロスマージ、およびセルからセルへの処理が可能になる。また、その中でセル同士が対話をする、複雑なセルシステムを処理する手段も可能になる。本発明によって、セルが電子メールまたは他のサービスを通して、ユーザからユーザへセル自身を送信させることができるようになる。本発明は、他のセル内にセルを含むことを可能にし、また同様に、セルが後に内部のセルを再び分離するができるようにする。本発明はまた、その内部のオブジェクトの隔離された部分を隔離し、サブセルを作成するために使用することを可能にする。
【００４２】
本発明は、様々なクラスを、異なる言語（例えば、「ＢＡＳＩＣ」および「ＲＥＸＸ」等）で書き込み、共通のオブジェクトセルに結合させる方法を教示する。また、１つのプログラミング言語を用いて定義されたクラスを、別の言語で書き込まれたクラスから拡張することができるようにするために、ＲＥＸＸおよびＢＡＳＩＣ等の本質的に異なる言語を結合する方法を教示する。
【００４３】
本発明の別の側面としては、プログラムがオブジェクトを作成、処理、操作することができ、そのオブジェクトに対してクラス、メソッド、またはその両方のいずれかがプログラムの指定またはコンパイルの後に別々に動的に決定される。このことが可能なのは、クラスおよびメソッド名をストリング値によって制御し、あらゆる入力、決定およびストリング操作に基づいて、そのクラスおよびメソッド名を動的に決定できるからである。
【００４４】
それゆえに、オブジェクトを名前に正確に基づいて作成してもよい。作成の方法は、ユーザによってデータとして入力したり、実行時間値に基づいて動的に計算したり、またはファイルから読み出してもよい。本発明の別の側面として、クラスが使用される実行時にクラス結合が実行されることが挙げられる。そのことにより、様々なクラスを「実行可能な」モジュールに結合させるために、特殊な「リンケージエディタ」を作成する必要がなくなる。
【００４５】
本発明は、オブジェクト指向型プログラムを進行型プログラムと組み合わせ、オブジェクト指向技術を用いて進行型プログラムを構築することができる。そのことによって、進行型プログラムをオブジェクトとして（他の進行型プログラムによって）処理することができるようになる。
【００４６】
本発明においては、進行型オブジェクトを用いてデジタル署名を使用することができる。それにより、関連するクラス（プログラム）定義が改ざんされたり、操作されたり、または変更されることができないようになる。本発明は、安全性および一貫性を守る目的から、特定のオブジェクトクラスのインスタンスおよび実行可能な処理の型によって処理することができるコンピュータおよびデータ資源を制限するために、デジタル署名技術を使用する。
【００４７】
本発明は、コンピュータユーザのネットワークにおいて、受信者が自分のデータが故意に傷つけられたり、危うくされる危険性を負うことなく、送信されたオブジェクトインスタンス内の少なくとも１つのメソッドを安全に実行することができるように、複数のオブジェクトインスタンスを含むデータを交換することを可能にしている。
【００４８】
本発明の特徴の１つに、データ変数が特定のオブジェクトクラスに本来的には結合されないプログラムの開発がある。本発明は、いかなるオブジェクトクラスをも（プログラムが書き込まれた時点では、考慮に入れられていなかったクラスさえも）反映できるように、プログラムの実行中に、変数のクラスを自由に変更することができるプログラムをプログラマが開発できるようにする。
【００４９】
本プログラミング発明の別の特徴として、同一オブジェクトの異なるインスタンスが、関連するデータフィールドの本質的に異なるセットを処理することが挙げられる。
【００５０】
本発明の別の特徴は、通常幾つかのクラスと関連している相互に関連するインスタンスの集まりを、実行状態から退避されたデータファイルに書き込むことができることが本発明の別の特徴である。これはインスタンスのクラスを定義するプログラム自身を、退避されたデータファイルに不明確でないように結合することによってなされる。本発明においては、そのような退避されたデータファイルを「セル」と呼ぶ。
【００５１】
本発明は、全てのインスタンス、そのインスタンスと関連するデータ、およびそのインスタンスと関連するプログラムが正確に復元されるようにセルを適切に再格納し、それによりセル全体の実行処理が将来また開始できるようにする。
【００５２】
本発明の特徴は、セルをオブジェクトそのものとして扱うことができることであり、そのためセルの退避時にセルと関連した実行状態を、後になってからも呼び出すことができる。
【００５３】
本発明の実施例では、各セル内には１つの特定のオブジェクトインスタンスがあり、セルの「フェース」と見なされる。セルに対してメソッドを実行させる要求を行うと、フェースインスタンスのメソッドが起動する。このため、セルは多くの構成素インスタンスを含んでもよいが、セル全体の活動に対する要求を処理する責任はフェースインスタンスにある。
【００５４】
本発明の特徴は、クラスを定義する言語は１つのコンピュータ型のみに特定されておらず、広い範囲の異なるコンピュータアーキテクチャおよびオペレーティングシステムでその言語を処理し、解釈しうることである。
【００５５】
本発明には、オブジェクトクラスを定義する実際の論理を記憶されたセルの一部として記憶および搬送できるという特徴がある。このことは少なくとも次のような２つの利点を提供する。
【００５６】
第一に、たとえ関連するクラス定義プログラムが変更されても、セルは一貫性を保持することである。クラス定義をインスタンスに不明確にしか結合していない他の技術においては、プログラムを変更する（または「改善する」）のは危険である。なぜなら新規のプログラムを用いて「古い」データを処理することにより、プログラムに機能障害をもたらしたり、または間違った結果や誤解を招くような結果をもたらす傾向があるのと同様に、上記のような変更が既存のデータ変数に対して異なる意味を与えたり、新規の変数を導入したり、または古い変数を削除したりする可能性があるからである。
【００５７】
第二に、クラス定義プログラムが他の一方のコンピュータにおいて適応可能であるか否か、および受信者のコンピュータ上の参照クラスプログラムがセル内に組み込まれたデータインスタンスと互換性があるか否かを気にすることなく、セルを一方のコンピュータに送信し、そこでセルを実行させることができることである。
【００５８】
本発明の特徴は、少なくとも１つの関連するクラス定義の論理を、関連するプログラムのハッシュによって、記憶されたセル内で独特の方法で識別することができることである。これにより、プログラム定義自身を記憶するのとは異なる目的を果たすことができる。
【００５９】
本発明は、各セルにおいてクラスプログラムを複写せずに、より小さなスペース内にセルを記憶できるようにし、更にそのプログラムのイメージを記憶しなくても、厳密な一貫性を依然として保証する。このことは、セルの再格納中に、つまり実際のハッシュが再計算され、期待ハッシュと比較される際に行われる。
【００６０】
本発明は、ソフトウェアを（故意に、偶然に、または悪意から）変更しても、それが不本意にも間違って実行されることは決してないことを保証し、更に本発明では、頻繁に使用するクラスを、多くのセルにおいて繰り返し複写する記憶オーバヘッドを要求しない。
【００６１】
ある企業から広く販売されるような、よく使用されるクラスには、プログラム自身の送信を抑制するのが合理的である。そこで、間違ったクラスプログラムが使用されることすらできないようにすることによって一貫性を保証するために、そのクラスプログラムのハッシュが役立つ。クラスプログラムが格納されるときは、そのハッシュがいつも計算され、期待値と比較される。
【００６２】
セルがクラス定義イメージを含んでおらず、そのハッシュと一致する利用可能なイメージが再格納時にない場合は、そのハッシュを使用して正しいクラス定義を見つけ、それを発見した際にその正確さを確認することができる。この方策は、正しい定義がオフラインのアーカイブされた記憶からたとえ復元したとしても有効である。いったん全ての正しいクラス定義が復元され、オンラインで利用可能になれば、そのセルの再実行を開始することが可能になる。
【００６３】
【実施例】
以下に挙げる図面の詳細な説明を参照することにより、本発明の前述の特徴および利点、およびその他の特徴および利点がより明確になるであろう。
【００６４】
図１は、本発明に関連して使用しうる典型的な通信システムを表したブロック図である。当該システムには通信路１２があり、その上で端末装置Ａ，Ｂ，…Ｎ間の通信が行われる。通信路１２は例えば、電話線等のように安全が保証されていない通信路であってもよい。端末装置Ａ，Ｂ…Ｎは、例えば（メインメモリ付）処理装置２を有するＩＢＭパソコン互換コンピュータでもよく、それは従来のキーボードおよびＣＲＴディスプレイ４に結合されている。メインメモリ付処理装置２は、不揮発性記憶装置７にも結合されており、その記憶装置７はディスク記憶装置であってもよい。各端末装置Ａ，Ｂ…Ｎは、従来のＩＢＭパソコン通信ボード（図示せず）も備えており、それは従来のモデム（それぞれ６，８，１０）に結合される際に、端末装置に進行型プログラムを含むメッセージを送受信させることができる。
【００６５】
本件で使用し、本件に援用している進行型プログラム出願、出願番号第０７／８６３，５５２号で詳細に説明しているように、進行型プログラムはデジタルデータ構造であり、命令および関連データのシーケンスを含んでいる。そのシーケンスは、進行型プログラムを受信するため、およびプログラムによって決定されている全ての関連データと共に自分自身をも次の受信者またはあて先に送信するための少なくとも次の一つのあて先または受信者を決定することができる。進行型プログラムのデータ構造の例は、進行型プログラム出願の図２に示されている。進行型プログラム実行時に利用するデータ構造、および進行型プログラムを実行するためのソフトウェアについては、進行型プログラム出願で説明しており、本件に援用している。
【００６６】
各端末装置Ａ，Ｂ…Ｎは、メッセージを生成することができ、また、通信路１２（または通信路１２に接続されうる通信ネットワーク（図示せず））に接続されている他の端末装置にメッセージを送信する際に、進行型プログラム内に本来備わっている論理、データおよび関数を格納し、実行するために必要等のようなデジタル署名操作でも実施することができる。本願で明示的に援用されている本発明者の米国特許番号第４，８６８，８７７号、第５，００５，２００号および第５，００１，７５２号に記載の、拡大されたデジタル署名および証明法をこの場合に用いてもよい。代わりに、より慣用的なデジタル署名法を利用してもよい。
【００６７】
オブジェクト指向型プログラミング技術を拡大した本発明は特に、本出願人の許可された出願、出願番号第０７／８６３，５５２号に記載の進行型プログラム法を促進するのに大変適しており、またそのように設計されている。しかし、本発明はまた、アプリケーションプログラムを効率的に生成する能力を拡大しており、一人のコンピュータユーザに限定して使用しさえすれば、非常に有効である。
【００６８】
本発明は離散型ファイル、または「セル」と呼ばれる電子フォームを利用している。これらのセルはオブジェクトの集合体を表しており、それらは本質的に独立しているものであって、その実行が一時中断され、ファイルとして記憶されることのできるインスタンスの集まりである。その後セルをメインコンピュータメモリに（同一または他のユーザによって）再格納することができ、（そのメインコンピュータメモリにおいて）次に指定されたメソッドで実行を再開することができる。
【００６９】
好ましい実施例においては、データクラスがＲＥＸＸ、または周知のＢＡＳＩＣ言語等の高級プログラミング言語の修正されたバージョンで定義される。これらの言語は、手続型高級プログラミング言語から、本件で記載しているような特有のオブジェクト指向型拡張子に変換されてきた。高級言語のそのオブジェクト指向型拡張子は、プログラムのクラスを定義し、（もしあれば）ベースクラスを指定する方法を提供する。クラスは、そのベースクラスから（継承によって）拡張され、プログラム変数の有効範囲を区別するために（多義性により）特定のクラスに関連する様々なメソッドを定義し、また他のオブジェクトインスタンスを容易に作成し、呼び出し、処理する。
【００７０】
セルはデータのセット、つまり電子フォームと見なすことができ、それはその情報と関連する全てのプログラムを本来それ自身の中に含んでおり、その情報の操作を管理している。セル内には単一の変数として扱うことのできる、プログラムの集まりを含むことができる。例えばセルは、関連するクラスを有するオブジェクトである名前およびアドレスフィールドを含むことができる。その関連するプログラムは、名前およびアドレスフィールドに対して操作すべき様々な異なる操作を定義する。アドレスデータ等の変数はセルに結合されており、そのセルを操作する規則を知っているプログラミング情報を含んでいる。そのため、より高い水準においては、データがその基礎となる情報をどのように管理しているかを気にせずに、変数名を参照することによってのみデータを処理することができる。このようにして、個々のオブジェクトに複雑な処理をゆだねることによって、システム全体を簡潔にすることができる。
【００７１】
インスタンスを変数として識別することにより、プログラムを含む複雑なデータ構造をインスタンス指示子を通して操作することができる。インスタンス変数はオブジェクトインスタンス全体を参照するための機構である。
【００７２】
記憶されたセルはディスク上に記憶されたファイルである。記憶されたセルは、内部制御ブロック「セルブロック」およびオペレーティングシステムの解釈／実行プログラムによって実行中に使用される付随のブロックを作成するために用いられる。
【００７３】
新規の所得税関連オブジェクトクラスを本発明の手法に従って書き込む作業を考慮すると、本発明の操作方法をよりよく説明できる。オブジェクトクラスプログラムは、必要な作業を実行するための他の既存のプログラムを呼び出す文を含んでいる。
【００７４】
この例においては、作成された「セル」は所得税を扱うために設計される電子フォームと見なすことができる。所得税計算を実行するプログラムおよび生成形式は、既存の所得税生成ルーチンを呼び出してもよい。初めに、解釈／実行プログラム（Ｉ／Ｅ）が所得税クラスを実行するよう指示される。そのクラスは既存のデータを有するセルではなく、単なるプログラムであるので、Ｉ／Ｅはそのクラスをコンパイルし（それが既にｐコードに形式的にコンパイルされていない場合）、そしてその後新規のセルを作成する。プログラムはコンパイルされ、主記憶装置に格納される。解釈プログラムはその後、後に詳細に説明するようにプログラム向けのクラスブロックを組み立てる。そのクラスは、例えば「１０４０フォーム」を生成することによって定義してもよい。解釈プログラム内のルーチンは、クラスのこの最初のインスタンス用のセルブロックを作成し、セル実行の準備を行い、そしてその「１０４０フォーム」クラスの「作成」メソッドを実行する。
【００７５】
１０４０フォームに加えてさらに関連するフォームを作成する必要のある場合は、前記クラスにおけるメソッドの実行中に、他のクラスを呼び出して、新規のインスタンスを生成してもよい。追加のフォームを生成することにより、関連するインスタンスを生成するために必要な他のプログラムをさらに主記憶装置に記憶するようにしてもよい。
【００７６】
所得税申告の性質上、それぞれ作成すべき様々なインスタンスを有する様々な種類のクラスがありうる。そのようなインスタンスはそれぞれ、本発明の手法によって自動的に処理される。
【００７７】
関数名または「メソッド」名は、関連する各クラスインスタンスによってそれぞれ異なったように取り扱ってもよい。例えば、支払うべき純所得税額を決定する要求を考えてみると、関連する各クラスおよびインスタンスに対して、異なる純所得税額が生成されるが、そのような情報を集めるために必要なのは一つの関数要求だけである。セルに関連する各インスタンスは、ある手法に基づいて、純所得税額を計算することができる。その手法は、各インスタンス内部では知られているが、高レベルＤの「１０４０フォーム」メインプログラムクラスには知られていないものである。
【００７８】
これらの各インスタンスは完全に異なる関連する変数を有しうるが、高いレベルにおいては、プログラムが「支払うべき純税額」といった１つの変数名を使用して、必要な全ての情報を得ることができる。異なるフォームを生成する関連プログラムは全て、セルを記憶する際にそのセルに書き込まれる。その後、そのように記憶されたセルを独立型モジュールとして、遠隔地の会計士のもとに電子送信することができる。
【００７９】
会計士は記憶され送信されてきたセルを受信すると、それを解釈／実行プログラムを用いて実行させる。そこでそのプログラムは、実行されているのはクラスではなくセルであると決定するか、或いはセルが実行されていると決定する。当該セルは既に実行され送信されているので、実行プログラムはその既存のセルを、「セルブロック」として識別されている内部制御ブロックデータ構造として、会計士のコンピュータのメインメモリに格納させる。また、他の内部制御ブロックも生成される。このことについては後に詳しく説明する。
【００８０】
会計士のコンピュータで実行が始まると、後に説明するように、フォーム生成プログラムが「再起動」モードで実行される。会計士のシステム内で実行しているルーチンは、支払うべき純税額を計算するための適切な税金フォームを表示するために必要な処理を実行する。
【００８１】
好ましいデータ構造を述べる前にまず、後の詳細な説明を理解する際に役立つ定義および概念を幾つか見てみる。
【００８２】
本件に記載の実施例においては、各オブジェクトクラスは別々のソース定義（例えば、コンピュータディレクトリ内の別々のファイル）として定義される。もしくは離散型ｐコードに予めコンパイルされ、それはまた個別のエンティティとして残る。本実施例のケースではないが、将来考慮されることとしては、一つのソース定義またはｐコード定義内に幾つかのクラスを含めることが可能であろう。
【００８３】
ソースコードまたはｐコードのいずれのケースにおいても、一貫性を保証するために、もしくは明瞭なプログラム許可を定義するために、クラス定義にデジタル署名をすることができる。実施例によっては、クラスにデジタル署名し、特定の公開鍵または証書によって認証するか、または証書階層内の特定の鍵または証書をそのクラスに持たせるだけで十分である。また別の方法としては、本件に援用している本発明者のプログラム許可出願、出願番号第０７／８８３，８６８号に記載しているような、より広範囲の許可管理機構を使用することも可能であろう。
【００８４】
本件に記載の例は、ＲＥＸＸプログラミング言語、つまりＩＢＭのシステムのアプリケーションアーキテクチャ（ＳＡＡ）標準に基づいている。複数のプログラミング言語を盛り込んむという本発明のこれらの側面においては、本件に記載の実施例は標準的な「ＢＡＳＩＣ」言語を使用している。前述のように、その標準的な言語は、新規のプログラミング属性および新規の組み込み関数と共に拡張され、本発明に従ってオブジェクト指向型プログラミングを促進する。当然ながら、この決定は変更することが可能であり、他の言語または追加の言語を使用することができる。
【００８５】
オブジェクト指向型拡張子の幾つかは新しい種類のデータ、すなわちインスタンス参照値を含んでいる。ＲＥＸＸ言語は１種類のデータ、つまりストリングのみを定義する。ストリングに対しては、例えば割り当て、連結、演算等の標準操作が行われる（演算操作においては、数値を反映するストリングのみが用いられうる）。
【００８６】
本件に記載の実施例においては、インスタンス値はストリングとは基本的に異なるものとして扱われ、通常のストリング値（演算オペランドもしくはストリングオペランド等）として扱われると、インスタンス値は許可されない。しかしながら、インスタンス値は、例えば割り当て文の中に引数やパラメータとして現れることができる。本発明の他の実施例では、ストリング値が期待されているところにインスタンス値が現れたときは、必ず、そのインスタンスに対する特定の（もしくはデフォルトの）メソッドが無条件に呼び出され、ストリングを生成する。同様に、インスタンス値が現れてストリング値が一般的に許可されない、例えばメソッド呼び出し等の場所もある。
【００８７】
変数はいかなる時でも、そのデフォルト（ＲＥＸＸにおいては、それは一般的にはその名前のストリング値である）、ストリング値、またはインスタンス値を収容することができる。変数には異なる時に異なる種類の値を割り当てることができる。このことは全体的に柔軟なものであり、プログラムの論理のみによって決定される。変数を使用する際には、その変数の現在値だけが有効である。
【００８８】
変数は、「オブジェクト」型の組み込み関数（「新規」、「再格納」等）、インスタンス値を有する他の変数、ケーブルによって渡されたパラメータ値としてインスタンス値を再吟味する他の関数、もしくはＲＥＸＸの場合はパーズ文からの割り当てによってインスタンス値を確保する。
【００８９】
好ましい実施態様においては、プログラム変数は四つの異なるプール（従来のＲＥＸＸおよびＢＡＳＩＣはそのような変数プールの特定の概念を持たない）の内の一つに属することができる。
【００９０】
グローバルは、特定のセル内の全てのインスタンスと関連する変数を定義する。グローバル変数は、変数がグローバルであると宣言していれば、いかなるクラスからも（そのセル内にある）全てのインスタンスへアクセスすることができる。各セルはそれ自身のグローバルプールを有する。本発明の実施例においては、（サブ）セル内にあるインスタンスは、そのセルに対するグローバルプールへのみアクセスし、スーパーセルのグローバルプールへはアクセスできない。一つのセル内に適切に含まれているインスタンスもまた、サブセルのグローバルプールへアクセスできない。本発明の他の実施例では、上記とは異なる操作が可能である。
【００９１】
シェアードは、特定のインスタンスと関連する変数を定義するが、この変数をシェアードとして宣言しているインスタンスの列内の全てのクラス間で共用される（異なるインスタンスはそれぞれ、この変数の独自の実現値を有している）。
【００９２】
プライベートは、特定のインスタンスと関連している。プライベート変数はプライベートを宣言しているインスタンスおよびクラス定義内にのみアクセスできる（当該インスタンス列内の他のクラスへはアクセスできない）。同一列内の異なるクラスでさえ、この変数独自の実現値を有しうる。
【００９３】
ローカルは、特定のインスタンスの特定の現在の実行と関連している。ローカル変数は各メソッドの実行を開始する際には定義されておらず、そのメソッドが完了した際に破棄される。同一のインスタンス内の幾つかのインスタンスが同時に起動している場合、各インスタンスはローカル変数の独自のバージョンを有している。
【００９４】
変数のプールが指定されていない場合は、それはローカルである。
変数をドロップする（ＲＥＸＸスタイル）ことによって、またはその変数値を再び割り当てることによって、何時でも変数を明示的に破棄することが可能である。しかしながら、各変数はまた、それぞれが関連している特定のオブジェクトエンティティが破棄される際に破棄される。
【００９５】
ローカル変数は各メソッド実行後に破棄される。プライベートおよびシェアード変数はメソッド実行後も保存されるが、そのインスタンスが削除されるかまたは壊された時には破棄される。グローバル変数はセルが削除された時にのみ破棄される。
【００９６】
グローバル変数のみが一つ以上のインスタンスによってアクセスすることができる（当然ながら、インスタンス値を含む値はパラメータとしてインスタンス間で引き渡され、引数として受取られる）。
【００９７】
新しいオブジェクト指向型文には以下のものが追加されている。
クラス―このプログラムおよび他の特性によって定義されているデータクラスの名前を明確に指定する。
グローバル―グローバルプールから変数を指定する。
シェアード―その継承階層内の全クラス間にある、このインスタンス内で共用するべき変数を指定する。変数は、シェアードである旨を規定している同一のインスタンス（階層）内のクラス間でのみ共用される。
プライベート―プライベートプール内の変数を指定する。
メソッド―メソッドの起動およびそのメソッドの特性を指定する。その特性には、他のメソッドが規定のインスタンスに対して既に稼働している場合、このインスタンス向けにそのメソッドの入力が許可されるかどうかが含まれている。
【００９８】
好ましい実施態様においては、各オブジェクトインスタンスは、２＋Ｎまでの異なる永久的なデータプール（そこでは、Ｎはインスタンスクラス列におけるクラス定義の数である）に関連する複合データ構造である。当該データプールにはグローバルプール（当該セル用）や、シェアードプール（当該インスタンス用）およびＮ個のプライベートプール（当該プールクラスに関連した継承列内にある各クラス用）がある。
【００９９】
さらに、特定のメソッドがインスタンスに対して稼働している場合は、その実行に関連する追加のローカルプールがある。好ましい実施例においては、インスタンスに対して同時実行が行われる可能性を認めている。同一メソッドの同時実行に関してさえもその可能性を認めており、この場合、それぞれの同時実行に対して特有のローカルプールがある（しかし、同一のプライベート、シェアードおよびグローバル変数は全ての同時実行に対して使用される）。
【０１００】
図２は、「セルブロック」１１データ構造の実施態様を表している。セルブロック１１は、実行するために図１のメインメモリ２に格納される際には、セルのルートである。セルブロック１１は、次のセルブロックを指し示すポインタである「次セル」フィールド１２を含んでおり、その次セルブロックはサブジェクトセルブロック１１によって呼び出される。そのようなポインタは、例えば、セルブロック１１を生成する１０４０フォームが、米国連邦政府規定のフォーム１０４０に添付される州所得税フォームを生成するために別のセルを呼び出す際に使用される。（そして、１０４０セルが実行される時に、連邦政府規定のフォーム１０４０が自動的に呼び出される）。次のセルフィールドは、様々なセルを一緒にリンクさせるために使用することができる。当然ながら、次のセルフィールド内で入力する必要はない。
【０１０１】
「グローバルプール」フィールド１４は、グローバル変数のプールの起動を識別するフィールドであり、グローバル変数とは、先に定義したように、特定のセル内の全てのインスタンスに関連する変数である。例えば、所得税フォーム生成の例では、名前変数は全てのインスタンスに適用できるグローバル変数である。配偶者の有無もまた、グローバル変数であろう。
【０１０２】
また、セルブロック１１は、名前によってセルを識別する「セル識別子」フィールド１６を含んでおり、要求があれば、バージョン番号を含むこともできる。セルブロック１１は、セルの「フェースインスタンス」フィールド１８を含んでいる。そのフェースインスタンスフィールドは、図２に示すように、セルに対する外部要求を処理するためのインスタンスを指し示すポインタを含んでいる。所得税の例においては、セルに対して支払うべき純所得税額に関する質問がなされた場合、そのフェースインスタンスが所望される結果を提供することによって、その要求に応える責任を負っている。このことは、セル内に他のインスタンスを誘導することも含む。フェースインスタンスは、プログラムならびにセルに対する要求または質問を管理および処理するための関連データをすべて含んでいる。
【０１０３】
セルブロック１１はまた、ファイルおよび証書タグを指し示すポインタ１９、およびセルに関連するプログラムを識別するセル（２０）用のクラスを指し示すクラステーブルポインタを含んでいる。さらに、セルブロック１１は、セル用のデジタル署名構造を指し示すポインタであるセル署名フィールド２２を含んでいる。このセル署名は、そのセルが記憶された際に引き出されたデジタル署名である。セルブロックが格納された後に、デジタル署名が認証される。セルブロック１１内にあるセル署名の記憶機構は、要求があればそのデジタル署名を表示し、誰がそのセルに署名したかを決定できるようになっている。
【０１０４】
図３は、「クラスブロック」２３の内部制御ブロックデータ構造を示す実施態様である。セルは一般的に、関連する多くのクラスまたはプログラム部分を備えている。作成された独自のクラスブロック構造２３が、各プログラムに対して存在する。
【０１０５】
好ましい実施態様においては、全てのクラスは一のプログラムに関連している。クラスブロック２３の最初のフィールドは、クラスリンクフィールド２５であり、セル内の他のクラスブロックにリンクしている。次のフィールドは「親クラス」フィールド２４である。このフィールドはクラスブロックを指し示すポインタであって、そのクラスブロックからクラスが拡張される。基本クラスは、他のクラスに依存していないクラスである。しかしながら、他のクラスは基本クラスの関数を拡張し、その基本特性を使用する。そのような基本クラスとは例えば、ディスプレイウィンドウの矩形を構築するプログラムである。そのプログラムは、ディスプレイスクリーン上に特定の高さ、幅および色調特徴を有する矩形を構築するよう機能する。
【０１０６】
２番目のクラスはその矩形クラスの上に構築されてもよい。例えば、「ボタン」クラスがあり、それはウィンドウクラスの全ての特性を利用しているが、さらに、多くの特性または拡張子も含んでいる。ボタンクラスは、親ウィンドウ矩形クラスの特性を「継承」する。
【０１０７】
レベル数フィールド２６の数は、その列に含まれているクラスの数を規定する。先の例においてはクラスの数は２であり、例えば「ボタン」クラスおよびウィンドウ矩形クラスである。また、クラスブロック２３はクラス名フィールド２８を含んでおり、それはクラスと、関連するプログラムのプログラムブロックを指し示すポインタであるクラスプログラムフィールド３０とを定義する。プログラムブロックは、格納されている全てのプログラムのリストである。
【０１０８】
クラスブロック２３はまた、「メソッドテーブル」フィールド３２を含んでおり、それはクラスに使用される有効なメソッドまたは関数のテーブルを指し示すポインタである。このようにして、当該クラスによって実行しうる様々な操作または関数が識別される。そのクラス用のメソッドテーブルの各項目は、図３に記載のフィールド３２で識別されている形式を有する。
【０１０９】
実行すべきプログラムをコンパイルする際、プログラムはより高速で実行されるようにｐコードに分解される。メソッド項目テーブル３２は、関連するクラスプログラムの特定のメソッドに対して、ｐコードがどこで起動するかに関する識別子を提供する。このように特定のインスタンスが実行し、実行すべき有効なメソッドの内の一つを要求すると、メッソドに高速かつ効率的にアクセスおよび実行することができる。
【０１１０】
図３に示すように、各メソッド項目はテーブル内の他の関連メソッドにリンクするための機構を含んでいる。そのリンクは様々な方法によって為しうるが、例えば平衡多方向探索樹を用いてもよい。また、テーブルは実行が求められているメソッドの定義に関連するクラスブロックを指し示すポインタを含んでいる。例えば、クラスウィンドウ矩形は、「ボタン」クラスで実行されるべきメソッドの定義を含んでもよい。
【０１１１】
メソッドテーブルはまた、関連するクラス内のメソッドに対するｐコードの起動を決定するオフセットを記憶する。メソッドテーブルの追加の項目としては、メソッド名の長さおよびメソッドフィールド名等が含まれる。
【０１１２】
クラス許可フィールド３４は認証された許可構造を指し示すポインタであり、それは本出願人の出願中のプログラム許可情報出願、出願番号第０７／８６３，５５２号に従って実行することのできる幾つかの操作を定義する。クラスブロック２３はまた、処理可能なインスタンスを作成するプログラムの最低レベルおよび最高レベルの表示３６を含んでいる。
【０１１３】
図４は、「プログラムブロック」内部制御ブロック３７に対する典型的なデータ構造である。当該プログラムブロックフィールドは、そのプログラムが現在の実行中に他の情報の中のどこに位置しているかを識別する。プログラムブロックデータ構造３７は、「次プログラム」フィールド３８を含んでおり、それはサブジェクトプログラムによって呼び出される次のプログラムブロックを指し示すポインタである。「次プログラム」フィールド３８は、関連プログラムを一緒にリンクさせるための機構を提供する。また、プログラムブロックデータ構造３７は、プログラム識別要素を指し示すポインタであるプログラム情報フィールド３９を含んでいる。フィールド４２はブロック３７内に記憶されているｐコードプログラムのサイズを定義する。プログラム言語を識別する「プログラム型」フィールド４４も当該プログラムブロックに含まれている。
【０１１４】
フィールド４６および４８は、それぞれ、ソースのハッシュおよびプログラムのコンパイルされたｐコードバージョンのハッシュを含んでいる。これらのフィールドは、同一名を有するプログラムを確実に区別するために使用してもよい。さらに、ハッシュをプログラムに対するデジタル署名を認証するために使用してもよい。また、プログラムブロック３７は、プログラムブロックを参照しているクラスの数を識別するクラスカウントフィールド４９、ならびにプログラム構造制御ブロックおよびそのソースコードを指し示すポインタを識別するプログラム使用フィールド５０を含む。フィールド５１は、本出願人のプログラム許可情報出願に従って構成される、認証された許可構造を指し示すポインタである。
【０１１５】
図５は、典型的な「プログラム構造」制御ブロック５２である。プログラム制御ブロック３７はフィールドを含んでおり、そのうちの幾つかは変化しうるが、「プログラム構造」フィールドは、プログラムを実行しているプラットフォームに拘わらず定数であり、ディスク上に記憶された場合には、形式またはｐコードになる。
【０１１６】
「プログラム構造」制御ブロック５２は、プログラム構造フィールド５４の大きさを識別する５３を含んでいる。プログラム構造フィールド５４は「プログラム識別子」であり、特定のプログラムを識別するために使用する名前を記憶する。また、当該プログラム構造ブロックはフィールド５６を含んでおり、プログラムに関連するメソッドおよびクラス名と、関連するメソッドに対するｐコードの起動を識別するための関連ｐコードオフセットのリストとを識別する。「プログラム構造」ブロック５２は、また、「変数テーブル」フィールド５８および定数フィールド６０のテーブルも含んでいる。
【０１１７】
また、プログラム構造ブロック５２は、図５に示すように、プログラムのｐコード命令６１を含んでいる。
【０１１８】
図６は、典型的な「実行」内部制御ブロック６２である。実行制御ブロック６２は、その実行過程における現状態の経過を追う。実行制御ブロック６２は、次のｐコード命令を指し示すポインタである次命令フィールド６４を含む。
【０１１９】
実行制御ブロック６２はまた、関連するクラスブロックを指し示す「クラスポインタ」フィールド６６を含んでいる。インスタンス実行フィールド６８は、実行されている特定のインスタンスを指し示し、ローカルプールフィールド７０はローカル変数用のプールを指し示す。メソッド開始以前には、ローカル変数は存在しない。プログラムが実行されると、ローカルがスクラッチパッド型メモリに記憶され、当該実行ブロックがこれらのローカル変数がどこに常駐しているかを指し示す。実行ブロック６２はまた、「前実行ブロック」フィールド７２を含んでおり、それは現在の実行ブロックが処理されるより先に制御されていた、前の実行ブロックを指し示す。
【０１２０】
出願人の進行型プログラム出願で概略を述べているような詳細を盛り込むために、このブロックにフィールドを追加することもできる。それらは、本発明に必ずしも特有でない実行の他の側面（ＤＯブロックや手続ブロック等）を用いて考えられている。
【０１２１】
図７は、典型的な「インスタンス値」データ構造７３である。インスタンスは、オブジェクトとしてデータに結合しているプログラムを有する特定のデータである。例えば、インスタンスは純税額を決定するプログラムに結合された、特定の所得税に対するデータであってもよい。
【０１２２】
「インスタンス値」データ構造７３は「クラス参照」フィールド７４を含み、「クラス参照」フィールド７４はデータ構造７３内のインスタンス値を処理するための特定のクラスプログラムを指し示す。また、データ構造７３は「セル参照」フィールド７６を含んでおり、それは（１つ以上のセルが呼び出された場合は）インスタンス用の特定のセルブロックを指し示す。インスタンス値構造７３はまた、インスタンスが実行された後にそのインスタンスをを削除するために使用される削除保留フィールド７８を含んでいる。
【０１２３】
インスタンス値データ構造７３はまた、当該インスタンスに対して稼働中の実行ブロックの数を識別する「実行カウント」フィールド８０、特定の「退避」操作（図１１の説明参照）を識別する走査インジケータフィールド８１、ならびに変数およびフェースインスタンスを含む当該ブロックを指し示すポインタの数を識別する使用カウント８２を含む。当該制御ブロックを指し示すポインタがない場合、そのデータ構造を削除すべきであるという表示を出してもよい。
【０１２４】
データ構造７３は「レベルカウント」フィールド８４を含む。それは図３に関連して前述したような継承特性のレベルを表示する、間連するクラスブロック内のレベルの数を識別する。データ構造７３はまた、シェアード変数のメモリヘッドを指し示す「シェアードプール」フィールド８６を含んでいる。この機構により、データが一定のインスタンスクラス列内にあるプログラム間で共用されるようになる。データ構造７３は、また、図７に示す形式を有するプライベートプールフィールド８８を含んでいる。プライベートプールフィールドは、インスタンスの列内にある特定のクラスとのみ関連しているプライベート変数と関連している。
【０１２５】
図８は典型的な「変数ブロック」データ構造９０である。変数ブロックデータ構造９０は、システム内の同一の変数プール内の他の変数ブロックへのリンケージである「リンク変数」フィールド９２を含む。フィールド９３は、その変数値を与える値ブロックを指し示すポインタである。フィールド９４は、修飾変数用のプールヘッドを識別する。その変数名の長さおよび変数名は、フィールド９５および９６においてそれぞれ指定される。図９は、当該変数値を識別する典型的な値ブロックデータ構造９７である。データ構造９７は、その変数をストリングまたはインスタンスとして識別する、値型フィールド９８を含んでいる。当該データ構造は、図９に示すようなストリング（９９）およびインスタンス（１００）に対する項目を含んでいる。
【０１２６】
図１０は、典型的なマスタ領域ブロックデータ構造１０１である。マスタ領域ブロックは全てのシステム情報を収容し、「メインセル」１０２のような多くのポインタを含んでいる。「メインセル」１０２は、一次セルに対するセルブロック、メッセージ参照テーブルを指し示すメッセージ参照１０３、全ての格納されたプログラムのテーブルを指し示すプログラムテーブル１０４、実行スタック内の最新の実行ブロックを指し示す「実行スタック」１０５、ならびに接続されたファイルのリストおよび証書キャシュリストを指し示すポインタ１０６および１０７を指し示す。
【０１２７】
図１１は、本発明の典型的な実施例に従ってディスクに書き込まれた「記憶されたセル」１１を示している。作成されてディスクに書き込まれたデータ形式は、セルの現状（現在のセルまたは関連するセル）を退避するためにクラスプログラム内から呼び出される組み込み関数によって生成することができる。
【０１２８】
また、退避は解釈／実行プログラムによってユーザに供給される「環境」関数、例えば「プルダウン」ファイルの動作バーフィールド上の選択肢である「退避」等として、当該セルの「外部」から呼び出すことができる。
【０１２９】
セルは少なくとも２つのフェーズにおいて記憶される。第一のフェーズは「印付け」フェーズであり、その中で記憶すべき全ての構造化構成要素セットが決定される。構成要素にはセル（サブセル）や、変数プール、変数、値、およびインスタンス等が含まれる。本実施例では、ローカル変数も現実行タスク構造（すなわち、実行ブロックによって表現されているような稼働中メッソド）も、セルの一部として退避される。このことは、フェースセルがインスタンスの「再起動」メソッド時に復元の一部として実行される方法と一致する。
【０１３０】
「退避」関数を使用しているプログラムは、上記の特殊な側面を考慮したものでなければならない。全実行スタックが一時（ローカル）変数と共にセル内で退避されるという代替方法ももまた実行可能であり、現過程にわずかに変更を付け加えるだけでよい。その方法では、全稼働中メソッドのローカルスタック（関連するローカル一次変数プールを含む）を表示している構造もセルに退避される。そのような方法は、本発明者の進行型プログラム発明出願の記載の方法に類似しており、同様の考慮を行っている。
【０１３１】
第一の走査フェーズにおいて特殊な「退避」メソッドは、「復元」操作が最終的に円滑に行われるようにするのに必要とされる付随処理を実行するために、（当該メソッドを有しているクラスのインスタンスに対して）呼び出される。そのような付随処理には、例えばセルにはすぐには知られない現情報を視覚オブジェクト（恐らく、不完全な入力フィールドデータ等）から引き出す処理等が含まれる。多くのインスタンスの状態は自動的に退避される内部持続変数の値にのみ依存しているため、インスタンスの多くは特殊な条件を有していないであろうと予想される。「退避」メソッドは、他の稼働中のインスタンスの状態を呼び出したり、大きく変更しないようにする義務を負っている。なぜなら、そのようなインスタンスはそれぞれ、駆動された「退避」メソッドを既に備えているからである。
【０１３２】
「退避」メソッドが各インスタンスに対して駆動された後、インスタンスの変数（プライベートおよびシェアードプール内のあらゆる変数ならびに参照されているか、または参照されているステムに属するあらゆるグローバル変数）が調べられる。その後、当該変数内で定義されているが、走査されていないインスタンスは、各インスタンスが一度で正確にスケジュールされるようにスケジュールされ、現在の退避要求の通し番号で印を付けられる。退避すべきセルのフェースインスタンスの走査が開始され、次にその時生じる全（インスタンス）変数が反復的に走査される。
【０１３３】
退避関数に対して指定されるインスタンスは全て、その結果として生ずる退避セルのフェースインスタンスになる。走査フェーズで関連する変数を分析する際に、他のセル内のインスタンスを参照することが決められた場合、これらのセルは作成されている新規記憶セル内のサブセルとして含められる。このようにして、最初のメインセルが先のサブセルの内の１つのサブセルになり、先のサブセルが新規のメインセルになることが可能である。このことは、一般に、セルがリンク間ポインタ変数を有している時に起こる。
【０１３４】
その後第２の走査フェーズが、第一の走査で印を付けられた変数および値の集合体セットを収集し、そこから記憶されたセル（ファイル）構造を出す。
【０１３５】
退避要求の一部として指定された選択肢によって、オブジェクトクラスプログラム定義の全てがファイルの一部として退避されたり、そのうちの幾つかがファイルの一部として退避されたり、または全く退避されなかったりする。これらは認証または許可デジタル署名構造が生じた全てのものと共に、ソースフォームもしくはコンパイルされたフォームの内のいずれか（または両方）に退避される。
【０１３６】
退避されたデータは、セル認証に必要なものと、そうでないものの２つに分けられる。この場合、認証は、セルを復元後実行が再び始まる際に正確に再構築するために必要な情報にデジタル署名をするために使用される。例えばクラスプログラム自身のイメージ等の認証に必要でない情報には署名されない。なぜならば、そのような情報は安全性を損なうことなく付け加えたり、省略することができる「便利なもの」と考えられているからである。しかしながら、様々なクラスプログラムの識別は通常ハッシュを伴っており、正しいクラスが実際に使用されていることを保証するために使用されているので、重要である。セル内にクラスプログラムを任意に含めることができることにより、所望する使用にとって最適な方法でセルを記憶することができる。
【０１３７】
セルはまた、追加のデータ構造を含んでもよい。本件に記載の例においては、そのような追加情報のセットが２つある。それは証書および外部ファイルであり、それらは特に組み込まれており、セルに結合される必要がある。
【０１３８】
デジタル署名証書のリストは「共通証書キャシュ」と呼ばれている。これらの証書は、データ構造の少なくとも３つの異なるクラス上で実行される関連するデジタル署名である。
・（認証および／または許可用の）クラスプログラム定義
・プログラム実行の一部として認証または許可されてきたインスタンス内のデータ（例えば、ＡＮＳＩ（米国規格協会）  Ｘ１２８５０  購入注文処理セット）。これらの署名はプログラム論理そのものによって、構築されたデータ上に請求されており、その証書は共通証書キャシュに明示的に移すことができる。
・送信中に認証されるセルの本体
【０１３９】
証書を「共通証書キャッシュ」に組み合わせることによって、証書は複写されることなくセル内に運ばれる。しかしながら、複写される可能性もある。例えば、異なるオブジェクトプログラムクラスがしばしば共通の信託者によって許可されたり、多くの異なるデータ署名が証書階層において一人のユーザに署名されたり、互いに親密な複数のユーザによって署名されたりする（そしてそのために多くの共通の証書が生じる）ことがある。
【０１４０】
セルの未認証部分に証書を位置指定することにより、セルの使用を明らかにするために証書付け加えたり、削除したりすることができる。例えば、短期間の局所記憶用のセルに証書を挿入する必要はない。なぜならば、証明を過度に複写することによって記憶機構を浪費することになるからである。しかしながら、セルが長期のアーカイブに移動する場合や、他のユーザ（キャッシュに関連する全ての証書を持っていないユーザ）にセルを送信する場合には、セルに証書を挿入するのは妥当である。
【０１４１】
記憶したセル１つに対して１つの証書のキャッシュを保守すると、各種の証明要素が使用カウントを保守することになる。このために、各（サブ）セルは要求する証書の要約を含む。証書の要約は、署名が作成されるかまたは受け取られた時にキャシュを挿入するための証書、および署名値が解放されるかまたは無用になった時にキャッシュを削除するための証書を有している。クラスプログラムに属する署名用に同様の使用カウントが保持されており、またセル自身に対してさえも同様の使用カウントが保持されている。各証書要約は、証書使用カウントのハッシュで構成されているにすぎない。
【０１４２】
挿入されるデータのカテゴリーには他に、セルに付け加えられた「外部」データファイルがある。これを使用する目的及び機構は進行型プログラム出願に詳細に記載されている。しかしながら、多重セルに関しては、いくつかのサブセルが「発生し」て、個別の記憶されたセルエンティティーとして退避された場合に備えて、（サブ）セルが様々なファイルを使用していることに関するインディケータを保持することも望まれる。
【０１４３】
セルの格納に関しては、フェースインスタンス値およびグローバルプールを含む格納しようとするものすべてを走査および印付けすることが重要である。プールに関しては、プール内のすべての変数を走査および印付けする。変数に関しては、変数に関するすべての値およびサブ変数を走査および印付けする。サブ変数は、ステム変数の構成要素として「ＲＥＸＸ」内で発生する。
【０１４４】
値に関しては、ストリング値に対して値がこの格納処理中に見えるように表示する。インスタンス値に関しては、この格納処理過程中に値が見え、かつこのインスタンスに関するクラスに対して「格納」というメソッドを呼び出す（他で説明されている作成のための「新」メソッドを伴うメソッド方法と同様の「優先」を考慮に入れた多重メソッド方法を用いる）。このインスタンスに関連するクラスを印付けし、インスタンスのクラス列内の各クラスと関連するシェアードプールおよびプライベートプールを走査および印付けを行う。
【０１４５】
クラスに関しては、デジタル署名済の（または帰属させられた）許可または認証を含むクラスプログラム定義の印付けと、クラスのベースクラスがあればその走査および印付けとを行う。
【０１４６】
印付けがなされたアイテムを格納するために、クラスの場合には、（現状において適切または決定された）ソースコードおよび／またはｐコードのハッシュが常に格納される。ソースコードまたはｐコードのイメージもしくはその両方のイメージを格納することも可能であるが、それらは、好ましくは、全体的な認証を受けないセルの部分に格納される。
【０１４７】
また、解釈／実行プログラムのレベルおよび各クラスプログラムの適用バージョンのレベルも格納される。これにより、置換しても既存インスタンス内のデータと機能上一致するならば、拡張／修正された置換クラスに将来置換することが可能となる。
【０１４８】
クラスに関連するいかなるデジタル署名、証書および／または許可も格納することが望ましい場合が多く、また、選択されたオプションおよび特定の実施例の目的によっては、格納されたセルの認証または未認証部分のどちらかの中にこれを格納するのが適当な場合もある。
【０１４９】
さらに、本件に援用されている本発明者の上記進行型プログラムの出願に従って、格納されたセルの一部として種々の他のファイルのコピーも格納することが望ましいであろう。
【０１５０】
セルを格納する最終ステップとして、導入選択または退避選択によって要求される場合には、セルの重要な「認証された」部分がデジタル的に署名される。
【０１５１】
進行オブジェクト指向型プログラムを送信するには、（「セルを格納する」ことによって作成されるであろう）格納されたセルのイメージを送信する。もし（すべての）受信者が一定のクラス定義を有していることが知られていれば、格納された（および送信された）イメージ（これはより少量の送信されたイメージでもよい）の中にクラス定義が含まれる必要はない。そうでない場合には、一連の保存行為には、ソースコード、ｐコードまたはその両方が含まれる（ソースコードを含むことによって、異なるバージョンの解釈／実行プログラムがクラスを再翻訳することが可能となり、異なるバージョンの解釈／実行プログラムが互換性のないｐコードを有する場合に便利となる）。
【０１５２】
図１１に戻って、ディスク上に格納されるセル１１１は、セルを識別するセル識別フィールド１１２を含む。例えば、セル識別によって、名前、例えばＸ会社の購入注文が提供され、プログラムが、セルにアクセスするためにファイルを走査してファイル名を引き出すことができる。
【０１５３】
図１１の１１４で示すように、後続の事項すべては、所望するならば暗号化され、かつ圧縮形式で格納され、セルに関連する特定のプログラムは、ディスク上のフィールド１１５に格納される（例えば、クラスプログラム１，２，．．．Ｐを含む）。
【０１５４】
図１１のラベル１１６で示すように、格納されるセル内で後続の事項は、任意で認証されてもよい。従って、いったんこの事項がセル内に格納されると、変更されれば、事項の明確なインテグリティに必ず影響を与えるようになる。
【０１５５】
フィールド１１７は、プログラム参照１からプログラム参照Ｎまでの「プログラム参照ベクトル」のセットを含む。このようにして、すべてのプログラムをディスク上に格納する代わりに、プログラムの明確な参照を用いて、所望通りに、プログラムに対して後からアクセスすることができるようにしてもよい。「プログラム参照ベクトル」１１７は、各セルプログラムを明確に識別し、必要があればプログラムライブラリからセルプログラムに対してアクセスできるようになっている。
【０１５６】
セル（またはサブセル）ベクトルフィールド１１８は、格納されたメインセルを定義し、１つの以上のセルがファイルに関連して１つのメインセルが他のサブセルを包含している場合には、サブセルも定義する。「データファイルベクトル」フィールド１２０は、種々のファイル用のデータファイル仕様を含み、このデータファイル仕様は、上記の進行型プログラム法に従った進行型プログラム出願で用いられるプログラムを有していてもよい。
【０１５７】
「署名認証」フィールド１２２は、認証が所望される場合に、プログラムセルを定義する署名認証事項に関連する署名を格納するために用いられる。最後に、フィールド１２３が、デジタル署名過程で用いられるいかなる証書をも保持する証書仕様のセットを格納する。
【０１５８】
図１２から図２２は、格納されたセルの部分を示す拡張データ構造をさら詳述するものである。図１２に示すプログラムデータ構造１２４は、図１１に示すクラスプログラム１からＰの拡大図である。プログラムデータ構造１２４内の第１のフィールドは、「プログラム日付」フィールド１２６で、プログラムが作成またはコンパイルされた日付を定義しうる。
【０１５９】
プログラム識別子フィールド１２８は、プログラムに関連する名前である。「プログラム識別子」１２８は、図１３で拡大して、後にさらに説明する。
【０１６０】
「プログラム実行可能」フィールド１３０は、プログラムが、ソースコード、ｐコード、またはその両方で実行可能かどうかを特定し、プログラムモードフィールド１３２を用いてプログラムがソースコードまたはｐコードで実行可能かどうかを特定する。
【０１６１】
プログラム自身は、図１２に示すソースコードまたはｐコードでの実行可能イメージフィールド１３３に常駐する。プログラム構造は、上述の図５で特定したフォーマットで構成される。フィールド１３４では、生じうるプログラムの第２の実行可能イメージが、ソースコードおよびｐコードが特定されていれば、格納される。プログラム許可情報およびプログラム識別子のデジタル署名が、フィールド１３６で格納される。前述したように、プログラム許可情報は、本件で援用されている出願人の出願中のプログラム許可情報特許出願に従って用いられる。
【０１６２】
プログラム識別子構造１２８は、プログラミングの型（フィールド１３８）をプログラミング言語を識別することによって識別する。
【０１６３】
フィールド１４０は、オブジェクト識別子が割り当てられたＸ．２０９プログラムを識別する。このオブジェクト識別子は、容認された基準に従ってプログラムを独自の方法で識別するＸ．２０９のプロトコルに従った識別子である。プログラム名フィールド１４２は、特定のプログラムをプログラム名で識別してユーザに表示する。
【０１６４】
プログラム修正レベルフィールド１４４は、プログラムの修正レベルを識別する。互換性フィールド１４６は、互換データを作成する最下位から最上位のプログラム修正の中で他の修正によって作成されたデータと、プログラムがどの程度まで互換可能かを識別する。通常は、最上位の修正レベルは、最新の修正と一致するであろうと思われる。しかしながら、もし最新のプライベート変数、シェアード変数およびグローバル変数が、将来改訂されるものと「上位」互換性を有することが予期される場合には、予定される将来の修正レベルは除外することが可能である。さらに、プログラム識別子構造１２８は、また、ソースプログラムフィールドのハッシュ１４８およびｐコードプログラムフィールドのハッシュ１５０も含む。
【０１６５】
「プログラム参照」構造１５１は、図１１に示すプログラム参照情報を拡大したものであって、図１３の上述したプログラム識別子フィールド１２８を含む。さらに、親クラスプログラムの「整数フィールド」１５２は、１プログラムにつき１つ以上のクラスが許容された実施例において互換可能として参照される親クラスプログラムのバージョンを識別した後、各クラス用に定義された新たな構造に移動されなければならない。
【０１６６】
図１５は、図１１で示す対応セルを拡張したセルデータ構造１１８の例である。セルを識別するセル識別子１５６については、セル識別子の拡張バージョンを示す図１８に関連して、後述する。
【０１６７】
「インスタンスベクトル」フィールド１５８は、セルに関連する各インスタンス毎に１つの入口を有する。第１の入口は、このセルのフェースインスタンスであるとみなされる。フィールド１６０は、（プログラム参照ベクトル内に）索引を定義し、このインスタンスと関連するクラスを含むプログラムを定義する。フィールド１６２は、（１６０で識別される）プログラム内のどのクラスかを識別する。１プログラムにつき１クラスを有するこの実施例では、このフィールドは余分であり、常に第１のクラスを定義する。インスタンスフィールド１６４は、インスタンス内のシェアード変数を有する。フィールド１６６は、インスタンスの列内のクラスと関連するプライベート変数プールのベクトルである。フィールド１６７は、基本の（最も古い）クラスのプライベートプールを定義し、フィールド１７０は、インスタンスの列内の最も拡張された（最新の）クラスのプライベートプールを定義する。
【０１６８】
セルデータ構造１１８は、さらにグローバル変数プールフィールド１７２を含む。さらに、セル１１８は、データファイルタグ参照フィールド１７４を含み、このフィールドは、上述の進行型プログラム関連出願に関連した進行型プログラム関連において本発明が用いられる場合のデータファイルの付加に関連する。このデータファイルタグフィールド１７４は、どのセルが関連する付加データファイルを有するかを監視している。証書フィールド１７６は、特定の（サブ）セル１１８とともに参照された証書を参照する。
【０１６９】
図１６は、変数プールデータ構造１７８を一般的に示すもので、プール内の変数１，２から最後の変数まで（フィールド１７９から１８１まで）を含む。この構造は、シェアード変数プール、プライベート変数プールまたはグローバル変数プールと関連して用いられてもよい。
【０１７０】
図１７は、変数構造１８２を示す。変数データ構造１８２は、変数を識別する変数名１８３と、変数値フィールド１８４とを含む。本発明に従えば、変数は、値としてのストリングまたはインスタンスを有していてもよい。変数値フィールドは、格納されたセル内でＸ．２０９表示で表示される。Ｘ．２０９のデータ型は、値の型を定義するために用いられる。すなわち、格納された値がＸ．２０９ＯＣＴＥＴ型の場合は、この値はストリング値であり、変数の値を直接に表示する。格納された値がＸ．２０９整数型の場合は、この値はセルのインスタンスベクトル（フィールド１５８）内で、整数値によって索引が付けられたインスタンスを表示しているとみなされる。格納された値がＸ．２０９シーケンス型の場合は、この値は、異なる（サブ）セル内のインスタンスとみなされ、そこでは、シーケンスの第１の整数が、セルベクトル１１８内で索引が付けられたセルと関連するインスタンスベクトル１５８内のインスタンスを、シーケンスの第２の整数を用いて定義する。変数が（ステム以外の）単純な変数または修飾された変数を持たないステムで、割当値を有しない場合は、この変数はプールから削除される。しかしながら、変数が修飾は有するが割当値は有しないステムの場合は、格納された値はＸ．２０９のナル基本命令として表示される。
【０１７１】
図１８は、図１５に示すセルデータ構造のセル識別子１５６の分解図を示す。セル識別子１５６は、古いフォーマットと新しいフォーマットとを分別するために用いられるセルフォーマットコードフィールド１８６を含む。「モーメント構成」フィールド１８７は、セルが作成された時刻を決定する。
【０１７２】
フィールド１８８は、Ｘ．２０９オブジェクト識別子を用いてセルカテゴリーを識別するために用いられ、例えば、所得税の書式作成に関するセルカテゴリーを識別するために用いてもよい。セルカテゴリーは、フィールド１８９内で名前によって指定される。セルインスタンス識別子フィールド１９０は、個別のセルに関するインスタンスをさらに識別するために用いられてもよく、例えば、特定の個人の純税額を作成するために用いられてもよい。フィールド１９０から１９６は、特定の場合に必要とされるインスタンスの名前、表題および種々の修飾子を識別することに関する詳細を識別するセルをさらに提供する。
【０１７３】
図１９は、データファイル仕様データ構造１９８の実施例である。このデータファイル仕様データ構造１９８は、特に発明者の出願中の上記進行型プログラム関連出願の手法に従った進行型プログラム関連で用いられると特に有効であり、そこでは、例えば、データファイルが進行型プログラムに付加される。使用カウントフィールド２００は、識別されたデータファイルを用いるセルの数を識別する。データ型フィールド２０２は、ファイル内に含まれるデータの性質を識別して、ファイルが、レコードか、ビットストリームか、または他の型のファイルかを示す。ファイル内容フィールド２０４は、ファイルおよびその構成要素レコードの性質をより特定的に説明するために用いられる。
【０１７４】
図２０は、ファイルタグデータ構造１７４の例を示しており、図１５のフィールド１７４の分解図である。「付加識別子」フィールド２０６は、データストリングであって、出願人の出願中の出願に記載されている進行型プログラムの手法に従って付加されたファイルを識別する。データファイル参照フィールド２０８は、図１９に示すデータファイル仕様データ構造１９８の索引である。「タグ使用カウント」フィールド２１０は、当該セルから発生した付加ファイル要求の数を定義する。
【０１７５】
図１２〜図２２は、証書仕様データ構造１２３の例であり、図１１の「証書仕様」フィールドの分解図である。証書仕様データ構造１２３は、種々のデジタル署名関連で用いられるデジタル署名操作で用いられた各証書のコピーを含む。本発明のデジタル証書の用途の一つは、種々の処理を行う権限をプログラムに与えるために、各プログラムに署名することである。そのようなデジタル署名は、米国特許５，００５，２００，４，８６８，８７７および５，００１，７５２で説明された出願人の拡張デジタル署名法に従って実行されてもよい。デジタル署名および関連する証書の他の用途は、進行型プログラム特許出願に関連するプログラム署名データを有することである。デジタル証書は、また、セル全体に対する署名を含む処理の場合にも有用であり、セル全体があるユーザから他のユーザへ出願人の進行型プログラム法によって送信される場合には、特に有用である。
使用カウントフィールド２１２は、証書の参照数を指定する。使用カウントフィールドは、また、各セルまたはサブセル内のタグ使用カウント、署名された変数の署名および証書仕様キャッシュ内の他の証書による参照も含んでもよい。セル内で用いられたすべての証書は、この共通証書キャッシュメモリ内に格納されてもよい。すべての証書には、「ハッシュ識別」証書フィールド２１４およびフィールド２１６内の証書自体が含まれる。
【０１７６】
「証書タグ」データ構造１７６の実施例を図２２に示す。この構造では、セルが他のセル内に挿入され、挿入されたセル内の証書の使用法を記録する。証書タグデータ構造は、「証書ハッシュ識別」フィールド２１８および「タグ使用カウント」フィールド２２０を含み、当該セル内の使用数を識別する。
【０１７７】
本発明の好ましい実施例は、ＲＥＸＸ（または、代わりにＢＡＳＩＣ）ソースを、オブジェクトクラスの定義か、またはコンパイルされたｐコードとして受け取る。以前は見られなかったオブジェクトクラスが発生する場合はいつでも、そのソースコードは、コンピュータメモリ内のｐコード内に（動的に）コンパイルされる。
【０１７８】
図２３は、解釈／実行プログラムによって実行される操作のシーケンスを示す一般的なフローチャートである。はじめに、解釈／実行プログラムが、基本のコンピュータ処理システムによって格納される。このシステムは、図１０に示す主制御域を作成する。呼出しの一部としてまたは呼出しの直後に、解釈プログラムは、初期実行の対象がクラス定義か、または既存のセルかを決定する。この識別は、実行要求またはユーザからの請求によって実施されてもよい。例えば、明確なパラメータであるかもしれないし、または最初のファイル名から決定することができる場合もある。
【０１７９】
クラスが実行されることになると、それに伴って新たなセルが作成されることになる。解釈プログラムは、活動中のセルの制御ブロックを作成し、クラス列階層を格納する（より詳しくは後で説明する）。このクラスのインスタンスが作成される。このインスタンスは、セルの「フェース」クラスとなる。この「作成」メソッドは、その後、このインスタンス用に呼び出される。
【０１８０】
既存のセルが実行されることになると、このセルは、（別の箇所で説明されるように）「再格納」され、すべての構成素変数、値、プログラムクラス、および挿入されたサブインスタンス等は、実行可能な状態に再構成される。その後、フェースインスタンスが「再開」メソッドを用いて呼び出される。
【０１８１】
好ましい実施例では、今後の作業が認識されるようにするために、「新規」か「再度」かに関わらず、フェイスインスタンスが環境（例えば「ウインドウズ」）とインタフェースしなければならない。そのようなインタフェースは、（解釈プログラムに内蔵されているか、または動的にリンクされていてもよい）種々の関数およびルーチンを呼び出すことによって行われ、例えば表示された画像オブジェクト、タイマー、他のセル、他のプログラム、データベースなどのような「環境」と相互作用するために構築および準備する。
【０１８２】
解釈／実行プログラムにおける上述のインタフェース関数の作業の一つに、最初または実行が通常に進行している間を問わず、外部識別子のテーブルの保守があり、外部の実体から解釈プログラムに対して生成される後続のメッセージが、内部インスタンスおよびメソッドに適切に合致するように保守を行う。このテーブルは、種々のクラスによって実行される関数によって保守される。
【０１８３】
場合によっては、新規または再格納の要求（それぞれ「作成」または「再開」）に関連する最初のメソッド実行は、必要とされるだけの信号、すなわちさらに追加の処理を必要としない信号であってもよい。この場合、解釈プログラムは、そのように（別の環境相互作用を想定していないということを）知らされており、特別の「組み込み」関数を用いることによって処理の中止を行う。
【０１８４】
上述以外では、通常の場合、解釈／実行プログラムが、他のセルを含む環境（例えばウインドウズ）、タイマー、装置、または他のプログラムによって生成されたメッセージを受信することによって、操作が実行される。
【０１８５】
メッセージが受信されるか、または実行プログラムによってメッセージが発生する場合には、メッセージは、インスタンスおよびメソッドを入力メッセージ識別子と関連させるテーブルと合致する。その後、インスタンスが、指示されたメソッドを用いて有効となる。関連するインスタンスが呼び出されたメソッドから戻ると、実行プログラムは、その後のメッセージを再び待つ。このループは、セルは完了したので終了されるべきであるとセルが表示するまで継続する。この表示は、終了組み込み関数によって行われる。
【０１８６】
特に図２３に戻って、解釈／実行プログラムの実行が開始されると、まずシステムがクラスまたはセルのどちらを実行しているかが、決定されなければならない（３０２）。初期実行の段階で、プログラム（クラス）が、セルおよびそのデータの作成のために実行していてもよいし、またはシステムが上述したようにプログラムとデータを一体として既に有している既存のセルを処理していてもよい。
【０１８７】
ブロック３０２におけるチェックにより、セルが実行されていることが明らかになると、ルーチンは分岐してブロック３１２へ進み、指定のセル名に基づいて「セル格納」関数が呼び出される。セル格納ルーチンは、セルに適用されているデジタル署名があれば、認証処理を行う。多くの場合、署名は、セルが格納されてから変更されていない旨を示すために用いられる。セルが再び格納されると、セルは別のものとなり、現在の署名は疑わしいものとなる。
【０１８８】
特筆すべきは、セル内では、デジタル署名は、種々のデータ要素またはデータ構造に対し、無制限の数のセルの実行中における不変のインテグリティを保証するためも実行されうるが、その後の認証は、クラスプログラムによって制御される事項であるということである。セル格納組み込み関数では、署名データは、種々のインスタンスに関連して処理を行うクラス定義プログラムのために認証される。セル格納ルーチンでは、新たなセルブロックが、すべての新たなポインタを保守するために作成される。すべてのクラスについての、後述するクラス再格納ルーチンに対して呼出しが行われる。各拡張クラスが関連するベースクラスに従うように、クラスが列順に格納される。その後、復元プールルーチンが、グローバル変数と、フェースインスタンスおよびその他のインスタンスの復元インスタンスルーチン用に実行される。フェースインスタンスを指し示すポインタは、上述のようにセルブロック内に格納される。いったんインスタンスが確定すると、インスタンスを参照するすべての変数が最終ポインタとともに更新される。
【０１８９】
その後、セル格納ルーチンは、このメソッドを有するすべてのインスタンスのために再開メソッドを実行するように動作する。ルーチンは、各インスタンスに対し、一度だけ再開を実行する。これは、各インスタンスブロック内のフラグによって制御される。まず、ルーチンがフェースインスタンスとともに開始する。インスタンスは、再開メソッドを、他の関連すると思われるインスタンス内で実行することができる。他のインスタンスによって明確に実行されていない再開メソッドを有するインスタンスの場合は、再スタートは、明確な呼出しの後に自動的に実行される。これは、インスタンスの仕様内のフラグによって制御される。各インスタンスに関しては、後述の「新規作成」ルーチンに関してと同様に、複数あり得る再開要求を実行する命令が、クラスフィールド上の「優先」オペランドとともに処理される。
【０１９０】
格納セルブロック３１２では、最新のセルが格納される。ブロック３１２で格納されたセルは、第１のセルとして格納される。ブロック３０４では、新規のセルブロックが、メインセルまたは第１のセルとして作成される。新規のインスタンスが、第１のセルのフェースインスタンスとして退避される。新規のインスタンスが作成される方法は、後述する。
【０１９１】
新規のセルがブロック３０４で作成されるか、または既存のセルが格納されると、ルーチンはブロック３３０に入って、セルが記憶装置に格納されたこととなる。「ディスパッチャループ」と名付けられたループが、セルに関連するプログラムが実際に作動している旨を示す。
【０１９２】
ブロック３３０では、終了が要求されたかどうかを決定するチェックが行われる。終了が要求されていれば、ルーチンは分岐してブロック３４０へ進み、そこで終了操作が行われ、その操作には、セルブロック構造を削除して実行プログラムを終了させる処理を削除するためのメインセルのフェースインスタンスの破棄メソッドの実行も含まれる。
【０１９３】
ブロック３３０のチェックによって終了がなかったことがわかると、処理はブロック３３２へと続き、第１の入力メッセージが検索される。このループを通った後続のパスにおいて、次の入力メッセージが検索される。「メッセージ参照テーブル」がアクセスされて、どのインスタンスが入力メッセージと関連づけられるかを決定する。関連するインスタンスが見つからない場合は、メッセージは破棄され、可能な診断メッセージが発信されて、ルーチンは、分岐してブロック３３０のディスパッチャループの最初に戻る。
【０１９４】
参照テーブルがインスタンスを指定すると仮定して、当該インスタンスが呼び出される。指定のインスタンスの指定されたメソッドが、入力メッセージフィールドをパラメータとして用いて実行される。メソッドが実行される方法は、後で図２４に関連してさらに詳述する。図２４に従ってメソッドが実行されると、メッセージが破棄され（３３６）、ルーチンは分岐してブロック３３０に戻り、ディスパッチャループに再入力する。
【０１９５】
図２４は、図２３のフローチャートに関連して引用されている「メソッド実行」によって実行される操作のシーケンスを示すフローチャートである。「メソッド実行」フローチャートは、繰り返し実行される。ルーチンは、このシステム内で「インスタンスインディケータ」として与えられる変数として扱われる特有のインスタンスを受け取り、与えられた入力パラメータを用いてこのインスタンスと共に特有のメソッドを実行する。実際には、実行メソッドルーチンは、サブルーチンという名の変数として作用する。
【０１９６】
ブロック４０２に従って、「インスタンス標識」がインスタンス値であれば、その「インスタンス値」データに対する処理が、識別されたパラメータに基づいて識別されたメソッドを用いて実行される（４０４）。ブロック４０４では、実際のインスタンスは、インスタンス標識と同一になるようにセットされ、クラスレベルは、インスタンスのクラスと関連する最新の（最高位の）クラスレベルと同一になるようにセットされる。その後、ルーチンは分岐して、ブロック４２０のルーチンの「メソッド検索」部分へ進む。
【０１９７】
インスタンス標識がインスタンス値でない場合には、ブロック４０６において、インスタンス標識が特別のストリング値「．」かどうかがチェックが行われる。特別のストリング値「．」は、現在実行中のインスタンスが入力パラメータとともに動作していることを示す。インスタンス標識が特別のストリング値「．」と同一の場合は、実際のインスタンス変数は現在実行中のインスタンスと同一になるようにセットされ、クラスレベルは、図６に示す実行ブロックから派生した現在実行中のインスタンス内のクラスレベルと同一になるようにセットされる。ルーチンは、その後分岐してメソッド検索へ進み、ブロック４２０の最初の処理を行う。
【０１９８】
ブロック４０６のインスタンス標識チェック結果が否定的な場合、ブロック４１０においてインスタンス標識が特別のストリング値「．．」と同一かどうかがチェックされる。同一であれば、実際のインスタンス変数が現在実行中のインスタンスと同一となるようにセットされ、クラスレベルは現在実行中のインスタンスの親クラス（すなわち、現在実行中のクラスレベルのベースクラスと対応するものであって、現在実行中のブロックからの現在のクラスレベルから１を引いたもの、すなわち、親クラス）のクラスレベルと同一となるようにセットされる。このようにして、親クラスに属するメソッドは、現在のクラスが同名のメソッドを有している場合でも、実行することができる。
【０１９９】
ブロック４２０において、識別されてきたクラスレベルに関連するメソッド名は、図３に関連して上述したクラスブロックフィールド３２に常駐している。その後、ブロック４２２において、メソッドテーブル内にそのようなメソッドが存在するかどうかについてチェックが行われる。そのようなメソッドがない場合には、ルーチンは分岐してブロック４２４へ進み、メソッドエラー表示を生成する。
【０２００】
そのようなメソッドがある場合には、図６に示すように、新規の実行ブロックが作成される（４２６）。ルーチン過程のこの時点で、用いられるべき実際のインスタンス、実際のクラスレベルおよびプログラムは既知である。プライベートおよびシェアード変数は使用可能であり、図６の実行ブロックが作成される。従って、この処理の結果、実際のインスタンスがインスタンス値としてセットされ、インスタンス実行カウントが増分され、現在のメソッドおよびそれに関連する実際のクラスレベルが表示される。実行されたメソッドは、メソッドがベースクラスから継承している場合には、表示されるクラスレベルよりも以前のクラスレベルと関連づけられるであろう。
【０２０１】
その後、現在のｐコードアドレスを新規のメソッドの第１のｐコード命令としてセットすることによって、ルーチンの処理が準備される。新規の実行レベルが実行スタックの先端に配置され、ルーチンは分岐して解釈／実行プログラムへ進み、命令を実行する。
【０２０２】
命令は、実行スタック上の現在の（最高位の）実行ブロックに制御されて実行される。ｐコード命令は、当業者に理解されるような方法によって実行される。図２５，図２６および図２７のｐコード実行関連処理に関して説明している、出願番号０７／８６３，５５２の出願人の出願中の進行型プログラム関連出願を参照してもよい。
【０２０３】
ｐコード処理を実行する場合に、ｐコード処理に関連するすべての変数につき、定数か、もしくはローカル型、プライベート型、シェアード型またはグローバル型かが決定され、また、その値が適切なプールから設定されているかが決定され、もし値が存在しない場合は、デフォルト動作が行われて、正しいプール内に変数が作成される。いったん変数ロケータが見つかると、現在値は、ｐコード処理に用いるために分離される。
【０２０４】
好ましい実施例においては、値の割当ておよび割当て解除が、ポインタおよび使用カウンタを用いて行われる。すべての値が抽出され（およびその使用カウントが増分され）、ｐコード処理のためにいかなる変数を準備する以前に、表にされる。適切なｐコード実行プログラムルーチンが、定数および変数から抽出された値を用いて呼び出される。値の有効性がチェックされる。例えば、数字でないストリングは、計算処理には有効でない。同様に、インスタンス値およびストリング値をそれぞれ認めない種々の状況が存在する。
【０２０５】
命令を実行すると、現在の実行ブロックによって示された次のｐコード命令が選択される。ｐコード命令で示される変数および定数に基づいて、値が抽出される。ｐコード命令に特に関連のあるルーチンが、次に呼び出される。ｐコード実行に関連する後続の処理は、次のようにさらに詳述される。すなわち、クラスからの新規インスタンスの作成、既存セルをオブジェクトとして格納、指定のインスタンスをセルとして格納／発信、インスタンスと関連のあるメソッドの呼出し、セルの終了、機密関数に対する安全性の提供およびメソッドの終了という処理である。ｐコード命令が実行された後に、ルーチンは、実行ブロックが示す次の命令にアクセスする。
【０２０６】
各メソッドが実行されると、種々の変数、すなわち、グローバル変数、シェアード変数、プライベート変数およびローカル変数が、すべて用いられる。各命令の一部として、種々のオペランド値が収集されると、解釈／実行プログラムは、その変数がどのプールの型に割り当てられているかを決定する。ローカル変数の場合は、実行ブロックに関連してプールが決定される。プライベート変数の場合は、各インスタンスブロックは、プール要素のベクトルを含んでおり、クラス列の各クラスにつき１つの要素を有している。プライベート変数が発生すると、このベクトルはメソッドのクラスレベルによって索引が付けられ（メソッドが開始すると、メソッドブロック内に格納される）、所望する変数を含む変数プールにアクセスする。
【０２０７】
シェアード変数の場合は、各インスタンスブロックは、全列にある種々のクラス間で共用されるべきすべての変数用のプールヘッドを含む。グローバル変数の場合は、グローバルプールのヘッドが、インスタンスと関連のあるセル内に格納される。いったんプールがわかれば、従来の方法、例えば名前の平衡多方向探索樹（ｂツリー）またはハッシュ探索を用いて、変数自体を見つけることができる。定数値は、種々の方法で取り扱われうる。一つの方法は、プログラムクラス定義自体と関連する変数として、定数値を取り扱うことである。
【０２０８】
図２５は、新規インスタンス作成サブルーチン内の操作のシーケンスを示すフローチャートである。「新規インスタンス作成」ルーチンは、新規のインスタンスがどのように初期設定されるかを示す。まず、ブロック１４０２において、格納クラスルーチンが、図３に示す関連するクラスブロックの作成のために用いられる。ブロック１４０２では、新規のインスタンス値が構成され、適切な情報が、各クラスレベルに関連するプライベート継続変数プール用のヘッドのベクトルのようなインスタンスブロック内に格納される。ベクトルの第１の要素は、列内最新のクラスのプライベート変数を制御する、最終のベクトル要素までのうち、列内の最も古いクラスの変数プールヘッドである。インスタンスブロック内に格納された情報は、シェアード継続変数プールヘッド、関連クラスブロックのポインタおよび関連セルブロックのポインタをさらに含む。新規のインスタンス値のアドレスは、ブロック１４０２で与えられる。その後、ブロック１４２０で開始する新規実行ルーチンが開始され、継承階層のうち最新のクラスが開始する。
【０２０９】
与えられたインスタンスに関して、「作成」メソッドを有するクラスが、列内のクラスの初期設定を行うために実行される。
【０２１０】
新規のインスタンスを作成する場合には、通常、新規のインスタンス作成の元となる基本のインスタンスが最初に開始して、自動的に初期設定されることを確認するする必要がある。従って、新規のインスタンスが作成される場合には、最も古いインスタンスが最初に作成され、最新のインスタンスに対して働きかけることが重要である。しかしながら、この一般法則には例外がある。「作成」メソッドルーチン内の「優先」オプションにより、いずれかのオプションを選択することができる。ブロック１４２０では、新規のローカル変数プールが各クラスレベルが実行すると、新規のローカル変数プールが提供される。
【０２１１】
ブロック１４２２において、指定クラスの作成メソッドが優先オプションを有しているか、または指定クラスが指定親ベースクラスを有しないかを決定するためのチェックが行われる。もし指定クラスの新規のメソッドが優先オプションを有しているか、または指定クラスが親クラスを有していない場合には、ルーチンは分岐してブロック１４２４へ進み、「作成」メソッドが呼び出される。その後、ルーチンは分岐してブロック１４２８へ進み、呼出者へのルーチンへと進む。この「作成」メソッドは、適切と思われる場合には、親クラスの作成メソッドを明示的に呼び出さなければならない。ブロック１４２６で、ブロック１４２２におけるチェックにより、作成メソッドが「優先」オプションを有していないことを検出したら、逆ルーチンが、親クラスを用いてブロック１４２０を再度呼び出す。インスタンスは作成が呼び出された旨を示すように印付けされる。
【０２１２】
図２６および図２７は、クラスを格納するために用いられる操作のシーケンスを示す。この操作は、以前特に用いられたことが知られていないクラスプログラムを記憶装置に格納するために用いられる。パラメータ「クラス名」は、格納されるべきクラス名である。これは、ファイルまたはライブラリアクセス情報を伴うことも可能である。クラス格納プログラムは、既存のブロックが指定のクラス名用に記憶装置内に既に存在する場合には、まず決定することによって開始する（ブロック１００２）。記憶装置内に存在するかどうかを、ブロック１００４で、格納が完了したかどうかを決定するチェックが行われる。格納が完了していない場合には、ルーチンはエラーを示して終了する。このようなテストは、プログラムが、自分自身の先行プログラムであるかどうか決定し、エラー状態を発生させた循環継承を検知するかどうかを決定する（１００６）。格納が完了した場合には、ブロック１００８においてルーチンはポインタを伴ってクラスブロックに戻る。ブロック１００２のチェックによってプログラムが記憶装置に存在しないことが明らかになった場合は、新規のクラスブロックが、各クラス格納に対応して作成されなければならない。このブロックは、格納失敗の場合には、将来削除される。
【０２１３】
クラスブロックはクラスリストと結合され、クラスブロックが循環継承エラーを検知するために不完全に格納されているかを決定するチェックが行われる。
【０２１４】
その後、ルーチンはブロック１０１２に進み、ローカル環境内のクラスプログラム仕様、例えば検索ライブラリ、ファイルなどを設定する。ブロック１０１２でプログラム仕様を位置指定した後、ブロック１０１４で、仕様が現在バージョンのコンパイラによって処理可能なコンパイルされたｐコードを既に表示しているかどうかを決定するがチェックが行われる。既に表示していれば、ルーチンは分岐してブロック１０２４へ進み、ｐコードが記憶装置に格納される。１０１４でのチェックにより、仕様が既にコンパイルされたｐコードを表示していない場合には、１０１６において、仕様がコンパイラによって処理可能なソース言語を反映しているかどうかのチェックが行われる。仕様がコンパイラによって処理することができないソース言語を反映している場合には、ルーチンは終了し、適切なエラーメッセージが生成される（１０１８）。
【０２１５】
ソース言語が処理可能な場合には、ルーチンはブロック１０２０に進み、ソースコードが適切な解釈プログラムを用いて、ｐコードにコンパイルされる。ｐコードが記憶装置内に格納されると、ハッシュが計算される。ｐコードを作成したコンパイラのバージョンが現在の実行プログラムと互換性があるかどうかを確認するチェックが行われる。元ソースプログラムのハッシュ（またはｐコード内に格納された元ソースプログラムの通常のバージョン）は、複写されてクラスブロックへ入れられる。ソースコード自体を記憶することも可能である。その後、ｐコードに割り当てられたクラス許可が行われるが、その説明は後述する。
【０２１６】
ブロック１０２０および１０２４での処理の後、クラスブロック内にｐコードのハッシュが格納される（１０２６）。種々の情報もｐコードに関連してクラスブロックに提供され、その情報には、関連するｐコードのハッシュ、疑似命令の開始アドレス、およびすべてのｐコードの開始アドレスが含まれる。クラスレベル（全体のクラス列内のクラス数）は１に等しいと推定される。
【０２１７】
ブロック１０３０において、クラスがベースクラスから派生しているかどうかを決定するチェックが行われる。クラスがベースクラスから派生していない場合は、ルーチンは分岐してブロック１０４０へ進み、新規のメソッドをクラスブロックに関連するリストに組み入れるが、これについては後で詳述する。クラスがベースクラスから派生している場合には、クラス格納ルーチンがベースクラスに対して再度実行される（１０３２）。１０３４において、実行中のクラス格納にエラーがあるかどうかのチェックが行われ、エラーがあれば、現在のクラスの格納に失敗しているので、エラールーチンが１０３６において実行される。エラーが検出されなければ、この時点で、現在のクラスと、親またはベースクラスとが（親の親クラスも）格納された状態にある。
【０２１８】
ブロック１０３８において、ポインタがベースクラスブロックに対してセットされ、新規のクラスブロックがベースクラスブロックを拡張したものである旨を示す。さらに、列内のクラス数を反映して、新規のクラスレベルがベースクラスのレベルより１大きくセットされる。さらに、メソッドリストが、ベースクラスから新規のクラスブロックに複写される。処理はブロック１０４０へ続いて、新規のメソッド（ベースクラスから既に格納されている既存のメソッドもあり得る）がクラスブロックに関連するリストに組み入れる。この組み入れは、各メソッドに対するｐコード命令の明示的な開始の設定を含む。
【０２１９】
新規のメソッドが、（既にベースクラスまたは親クラスから格納されている）既存のメソッドを複写する場合には、新規のメソッドに置換される。このクラスブロックに必要とされる他の全てのデータが、どんなものでも提供される。不完全に格納された標識は削除され、すべての相情報が格納され、ルーチンはクラスブロックポインタへ戻る。
【０２２０】
図２８は、クラス許可を作成する処理のシーケンスを示すフローチャートである。格納されると、ルーチンはクラスの権限を認証し、証明する。これは、ソースフォーマットまたはコンパイルされたｐコードのフォーマットで格納されたクラスに適用する。このルーチンで用いられるパラメータは、関連ソースイメージまたはｐコードイメージのハッシュ、構造の型（ソースコード言語またはｐコード）のハッシュ、クラス定義のデジタル署名構造のハッシュおよび関連クラスに関連するクラスブロックのハッシュである。ルーチンは、このコード（もしくは許可定義または署名が無効な場合にはエラー）用の許可構造に戻る。
【０２２１】
ルーチンはブロック１３０２で処理を開始して、与えられたハッシュ値に対して署名が正しいかどうかが決定される。署名が正しくない場合には、エラーを示す（１３０４）。署名が正しい場合には、ブロック１３０６で、構造の型が署名ブロックで示されたとおりであるかどうかを決定するためのチェックが行われる。一致しない場合には、ブロック１３０７において、エラールーチンが呼び出される。構造の型が署名ブロックで示されたとおりである場合には、処理はブロック１３１０に続く。１３１０において、署名がこのクラスに割り当てられた明示的な許可を反映しているかどうかを決定するための１つまたはそれ以上のチェックが行われる。署名が許可を反映していれば、署名者に信頼性があると決定される。このチェックは、様々な方法で行うことが可能である。
【０２２２】
まず、公開鍵が信頼性のある当事者に属しているかどうかのテストを行ってもよい。証書が信頼性のある当事者に属しているかをテストするか、または署名者がより高度の（信頼性のある）権限者による証書または委任によって代表として権限を付与されている旨を決定することによって、許可を決定してもよい。テストには、直接の比較、ハッシュの比較、識別印の比較を含んでもよい。
【０２２３】
明示的な許可が特定されない場合には、状況によっては、署名者の証明者について知られている情報によって許可を推定するのが適当な場合もある。そのようなテストおよび許可がどのように委譲されるかについての詳細は、本件で援用されている出願人の米国特許５，００５，２００に示す。デジタル署名を用いた、可能な多くの方法によって許可を行ってもよく、その方法には、特定の公開鍵または現ユーザによって認識された証書による署名、証書階層内に信頼性のある実体の公開鍵または証書を有する公開／機密鍵を用いた署名、または出願人の米国特許５，００５，２００の手法で説明する電子文書許可のようなプロトコルを用いたプログラム許可の明示的な割当てによる署名が含まれる。
【０２２４】
ブロック１３１０でのチェックによって、署名者に信頼性があると決定されると、処理はブロック１３２０へと続く。信頼しうる許可が決定されるか、または推定される場合には、この許可のデジタル表示がクラスブロックからアクセス可能な構造内に格納される。確認に失敗があると、認証および／または許可は確認できないので、（失敗の詳細、状況、実現、およびユーザ構成などに基づいて）適切な動作が講じられねばならず、その動作にはクラスの圧縮仕様、またはデフォルトの許可の割り当てが含まれる。
【０２２５】
実施例によっては、コードが署名されていないかどうか、署名が無効かどうか、または署名者の権限が承認されていないかどうかによって、種々の例外的な動作が必要となってもよい。実行を中止したり、または最小（デフォルト）許可を不正なまたは署名されていないクラス定義に対して単に割り当てるのが、適当な場合もありうる。図２８に関連して説明したルーチン内に作成した許可情報は、出願人の出願中の上記プログラム許可情報出願において説明および使用したプログラム許可情報データ構造を組み込む。
【０２２６】
図２９は「クラス許可テスト」ルーチンの操作のシーケンスを示すフローチャートで、このルーチンは、プログラム許可情報と一致することを保証するためのテストを行う。このルーチンは、解釈／実行プログラム内にある種々の関数によって呼び出され、インスタンスが機密処理を要求する場合はいつでも呼び出される。入力は、全ファイル名のような詳細を含む関数の型の仕様を含む。入力は、通常、要求の型および要求詳細として提供される。クラスが格納されて処理が容認可能かどうかについての決定がなされると、この要求された処理は、得られた許可に対してチェックされる。
【０２２７】
ブロック１８０２において、クラスが「完全に」許可されたか（すなわち、どの関数も容認可能か）どうかを決定するチェックが行われる。ルーチンが完全に許可されると、ルーチンは分岐してブロック１８５０へ進む。クラスがどんな機密処理でも行うことが完全には許可されていない場合は、処理はブロック１８０４へと続いて、要求の型がプログラム許可情報構造内に定義されているかどうかの決定が行われる。要求タイプが許可構造内で定義されていない場合には、ルーチンは分岐してブロック１８７０へ進み、要求の実行が拒否される。１８０４でのチェックが要求が定義されていることを示すと、ルーチンは要求の詳細につき許可構造に対してテストを行う（１８０６）。ブロック１８０８において、要求詳細がテストに合格していないかどうかを判断するチェックが行われる。もし合格していない場合は、ルーチンはブロック１８７０に分岐して、「拒否」という応答を戻す。要求詳細がＯＫの場合は、ブロック１８５０において、この（またはおそらくあらゆる）セルが実行するであろう許可の上限を強制する解釈／実行プログラムが指定したパラメータが存在するかどうかを決定するチェックが行われる。指定のパラメータが存在しない場合には、「オーケー」という応答が戻される。要求が強制された制限内にある場合には、「オーケー」という応答が提供される。
【０２２８】
図３０、図３１および図３２は、「クラス再格納」ルーチンによって処理される処理のシーケンスを示す。このルーチンは、セルに格納されたインスタンスに関連するクラス用のクラス定義およびｐコードおよびソースコードが知られているクラス定義を復元する。この特定のクラス定義は、既にセル内の既存のインスタンスと関連している。ベースクラス定義を拡張した全てのクラスよりもベースクラス定義が優先するように、クラスがセル内に格納される。
【０２２９】
クラスを再格納する際には、クラスを前に存在したのと全く同じように再構築する必要がある。再格納クラスルーチンがブロック１２０２で開始し、将来の格納に対応する新規のクラスブロックが作成される（失敗の場合にはこのブロックは削除される）。クラスブロックはクラスリストと結合され、クラスブロックが前述したように、循環継承を検出するために不完全に格納されたかどうかにつき表示が行われる。
【０２３０】
ブロック１２０６で、クラスｐコード定義が既にセル内に提供されているかどうかを決定するためのチェックが行われる。提供されていれば、ルーチンは分岐してブロック１２３０へ進み、セル内にあるｐコードイメージを処理する。ｐコード定義がない場合には、クラスソースコードがセル内に提供されているかどうかを決定するチェックが行われる。提供されている場合は、ルーチンは分岐して１２２０へ進み、セル内のソースイメージを処理する。もし、ｐコードもソースコードもなければ、ルーチンはブロック１２１０へ進み、クラス定義がプログラム名、プログラムのバージョン、ｐコードおよびソースコードのハッシュによって示される。クラスの名前（およびおそらくハッシュ）は、ｐコードまたはソースの（他の）ローカルコピーを見つけるために用いられる。
【０２３１】
ブロック１２１２で示すように、正しいプログラムイメージが存在するかどうかを決定するためのテストが行われる。正しいプログラムイメージが存在しない場合にはルーチンは分岐して１２１３へ進み、エラー表示を生成する。正しいプログラムイメージが存在する場合には、ブロック１２１４において、クラスのローカルバージョンがｐコードかどうかを決定するためのチェックが行われる。ｐコードの場合は、ルーチンは分岐してブロック１２３０へ進む。ローカルバージョンがブロック１２１６で決定されたようなべースコードでない場合には、エラーが生じていると確定して、処理はブロック１２１７のエラールーチン内へと続く。
【０２３２】
ソースコードが見つかると、ブロック１２２０でソースコードはコンパイルされて、ソースのハッシュが計算される。計算されたソースハッシュがセルの認証された相情報内で定義されたものと一致する場合には、クラスは受け入れられる。ソースハッシュが、ソースそのものではなく、むしろ例えばコメントが削除されたり、重要でないスペースを削除されたような一般的なフォームに基づく可能性もある。その後、ブロック１２２０で、クラス許可がソースコードに関連して行われる。多重言語が支援されている場合は、ソース定義が当該ソース定義に適切なコンパイラであればどれでも用いてコンパイルされる。
【０２３３】
次に、処理はブロック１２３２へ続く。前の処理がブロック１２３０を含んでいた場合には、ｐコードの指定されたバージョンが、ローカルファイル記憶場所からまたはセル内自身に格納される。ｐコードのハッシュは、格納されると計算される。既にコンパイル済みのｐコードが、この解釈／実行プログラムが処理するのにふさわしいフォーマットである旨確認するためのチェックが行われ、ｐコードと関連するクラス許可が行われる。計算されたｐコードのハッシュが、セルの許可部分内で定義された予想値と同一かどうかを決定するためのチェックが行われる。一致する場合には、クラスは受け入れられる。一致しない場合には、エラー標識が生成される。１２３２での処理により、ｐコード内に与えられた元ソースのハッシュを付加的に格納する。
【０２３４】
ブロック１２３４において、与えられた元ソースコードのハッシュがセルのｐコードクラス定義内で指定されたものと一致する場合には、セルは受け入れられる。その後、ブロック１２３６において、クラスが受け入れられるかどうか決定するためのチェックが行われる。クラスが受け入れ可能であれば、処理はブロック１２５０へ続く。ブロック１２３８で、代わりのプログラムクラス修正レベルを考慮する処理ステップが実行される。この処理によって、所望する場合には、プログラムの代替バージョンが可能となり、従って、ソースコードまたはｐコードのハッシュが一致しなくなるので、互換性は、明示的に示されたバージョン／修正フィールドに基づく。
【０２３５】
ルーチンは、セル内で定義（および使用）されたクラスプログラムの修正／バージョンレベルと、（ローカル記憶場所に見つかるかセルに挿入された）処理中のプログラムイメージで定義された修正／バージョンレベルの範囲とを比較する。セルインスタンスデータ内で用いられた修正／バージョンレベルがプログラムのレベルが支援するカテゴリに当てはまる場合には、プログラムを用いることが可能となる。
【０２３６】
実施例によっては、異なるプログラムがインスタンスに関連する修正／バージョンに責任を有する同一の実体によってデジタル的に署名または許可されることを確認することも有用であろう。この場合には、セル参照のデジタル署名も、デジタル署名を有していなければならない。実際のプログラムの修正／バージョンは、インスタンスと結合された修正／バージョンよりも有効に以前または以後に作成することができる。
【０２３７】
有効な不一致で最も一般的なのは、プログラムがインスタンスのバージョンよりも後に作成された場合で、プログラムが支援するより古い互換性レベル情報を単に有している場合であろう。やや一般的でない場合は、プログラムが自分自身のレベルを超えるある範囲のレベルを支援するという条件で実際に作成される場合であろう。このことは、プログラムのアップグレードが予定され、（少なくとも将来のプログラムレベルの一定の範囲の）将来のデータ構造がより古いプログラムレベルと互換性があるであろうことが知られている場合には、合理的といえるだろう。
【０２３８】
ブロック１２４０において、クラスがまだ受け入れられていないかどうかを決定するためのチェックが行われる。クラスが受け入れられていない場合には、処理は分岐してブロック１２１０に戻り、セル仕様内に与えられた互換説明を有する他のクラス定義候補を探そうとする。
【０２３９】
クラスが受け入れられると、ブロック１２５０において、クラスがベースクラスから派生しているかどうかを決定するチェックが行われる。クラスがベースクラスから派生していない場合には、処理はブロック１２６０へ続く。処理がベースクラスから派生している場合には、処理はブロック１２５２へ続く。
【０２４０】
格納されたセルにおいて（図１１）、関連するベースクラスは、拡張クラスに先行するように特に作成されるので、ベースクラスブロックを直接決定することができる。ベースクラスブロックが拡張の際に与えられたベースクラス名と対応しているかどうかだけをチェックすればよい。ベースクラスは、既に格納され、現在のセル仕様によって示されていなければならない。
【０２４１】
その後、ポインタが、ベースクラスブロックにセットされ、新規のクラスブロックがベースクラスブロックを拡張したものである旨を示す。増分された拡張カウントが、新規のクラスブロックにセットされる。その後、ブロック１２５２の処理が、ベースクラスから新規のクラスブロックにメソッドリストを複写して終了する。ルーチンはブロック１２６０で終了して、結合された新規のメソッド処理が図２６および図２７で説明したクラス格納ルーチンと関連するブロック１０４０で完了したのと同様の方法で、新規のメソッドがクラスブロックと関連のあるリストに（ｐコードと隔離されて）結合される。
【０２４２】
図３３は、「出口メソッド」関数における処理のシーケンスを示すフローチャートである。この関数は、メソッドから抜け出たり、メソッドから戻ったりすることによって作動する。現在実行中のブロックは中断され、制御は以前の実行レベルへ移動する。まだ実行中にインスタンスが（削除組み込み関数で明示的に、またはどの変数もインスタンスを参照しなくなった場合に黙示的に）削除されると、「削除保留」フラグがセットされ、現在実行中のメソッド（実行ブロック）が中断するとすぐに、削除が解除される。いったんこの状態になると、このインスタンスに対してさらに起動が可能か、または（おそらくインスタンスを他の変数に割り当てることによって）インスタンスを復帰させる方法があるはずかどうかは実施例による。実施例によっては、保留中の削除状態を解除するための「削除しない」を許容することも可能であろう。
【０２４３】
ブロック１５０２に戻って、組み込み関数は、実行ブロックに関連するローカル変数プールを解放する。実行ブロックは、実行スタックおよび解除記憶部の最上位から取り除かれる。その後、インスタンスのブロック実行使用カウントが減少する。ブロック１５０６において、実行使用カウントが０より大きいかどうかを決定するためのチェックが行われる。実行使用カウントが０より大きければ、ルーチンは分岐してブロック１５２０へ進む。実行使用カウントが０より大きくなければ、１５０８において中断中の明示的な削除が存在するかどうか（変数使用カウントは０と等しいかどうか）を決定するチェックが行われる。削除が存在すれば、ブロック１５１０において、インスタンスが削除される。
【０２４４】
その後、ブロック１５２０において、他の実行ブロックがスタックに存在するかどうかを決定するためのチェックが行われる。実行ブロックが存在すれば、ルーチンは分岐してブロック５０２へ進み、命令を実行する。実行ブロックが存在しなければ、ルーチンの実行は終了し、ルーチンは最初の解釈／実行プログラム実行処理のブロック３３６に戻る。
【０２４５】
図３４は、「インスタンス削除」組み込み関数の処理シーケンスを示すフローチャートである。インスタンスに対する全ての参照が割り当てられなくなった場合、または「削除」組み込み関数でインスタンスが明示的に削除された場合に、インスタンスは削除される。インスタンス削除処理はブロック１１０２で開始し、列内の各クラスに対する反復が、最新のものから開始するようにセットされる。反復の後、ルーチンは分岐してブロック１１２０へ進む。ブロック１１０４において、このクラスに対して特に定義された（単に継承されたものではない）破壊メソッドがあるかどうかを決定するためのチェックが行われる。クラスが定義する破壊メソッドがない場合には、ルーチンは分岐して１１０２の反復処理に戻る。特に定義された破壊メソッドがある場合には、特定の破壊メソッドがブロック１１０６において実行される。
【０２４６】
その後、ブロック１１０８において、この破壊メソッドがその親の破壊メソッドを呼び出すかどうかを決定するためのチェックが行われる。もし破壊メソッドがその親の破壊メソッドを呼び出さない場合は、ルーチンは分岐して、反復するためにブロック１１０２に戻る。その後、処理はブロック１１２０に続き、変数が、全てのプライベートプール内にあるクラス列の最新のものから最も古いものまで削除される。さらに、シェアードプール内の変数が削除される。関連クラスの実行インスタンスのカウントである実行クラスが減少する。さらに、セル内の実行インスタンスのカウントであるセル実行変数が減少する。
【０２４７】
図３５は、「変数リセット」値ルーチン内の処理のシーケンスを示すフローチャートである。変数値がリセットされる場合はいつでも、この論理が用いられる。ブロック１９０２において、現在の値が削除される。その後、ブロック１９５０において、新規の値がセットされる。新規の値がインスタンスかどうかを決定するためのチェックが行われる（１９５２）。新規の値がインスタンスの場合は、処理はブロック１９５４へ続き、インスタンスの使用カウントが増分される。新規の値がインスタンスでない場合には、ルーチンは呼出しルーチンへ戻る。
【０２４８】
図３６は、現在値を削除する際に実行される操作のシーケンスを示すフローチャートである。ブロック１６０２において、現在値がストリングかどうかを決定するためのチェックが行われる。現在値がストリングの場合には、ストリングが解除され（１６０４）、ルーチンは分岐してブロック１６５０へ進む。ブロック１６０２におけるチェックが現在値がストリングでないことを示す場合には、１６０６において、変数現在値がインスタンスかどうかを判断するためのチェックが行われる。変数現在値がインスタンスである場合には、インスタンス使用カウントが減少する（１６０８）。その後、インスタンス使用カウントが零より大きいかどうかを判断するためのチェックが行われる。インスタンス使用カウントおよびインスタンス実行カウントが０より大きい場合には、ルーチンは分岐して１６５０へ進む。インスタンス使用カウントが０より大きくない場合には、インスタンスはブロック１６２３で削除される。呼出しルーチンに戻る（１６５０）。
【０２４９】
本発明では、これまで特に述べてはいなかったが、種々の他の復元処理もさらに考慮している。例えば、（既に作成済の）関連するクラスブロックを設定させるインスタンス復元ルーチンが考慮されている。その後、インスタンスは、関連するクラスブロックおよび関連するセルブロックと結合される。インスタンス用のシェアード変数プールは、プライベート変数プールと同様に復元される。
【０２５０】
プールは、各変数を関連するプール定義ヘッダと結合し、各変数をその割り当てられた値があればそれに結合することによって復元されてもよい。値は以下のように復元されてもよい。すなわち、ストリング値に関しては、値ブロックが指定のストリング値で作成される。インスタンス値に関しては、値ブロックが関連するインスタンスを参照して作成される。好ましい実施例においては、インスタンス、すなわちプール、クラスポインタなどを制御する情報が、直接インスタンス値ブロックに格納される。復元インスタンス関数は、インスタンス値に対して用いられる。
【０２５１】
（全ての変数などを付加して）再格納してインスタンスを再開する場合、クラスがデジタル的に署名されている場合には、署名は認証され、署名を含む実行された許可はクラス定義と共に格納される。クラスが派生している場合には、ベースクラスも位置設定され（既に格納されていてもよい）、必要であれば格納される。
【０２５２】
サブセルを格納するには、以下の処理を実行してもよい。
セル再格納はインスタンス値を作成し、サブセルのフェースインスタンスはこのインスタンスを呼出者に戻す。
その後、呼出者は、そのインスタンス値を他のインスタンスのように呼び出すことができる。
ディスパッチャは、どのグローバルプールがグローバル変数参照と結合しているかを決定するために、インスタンスに関連するセルを用いる。
【０２５３】
本発明は、全てのセルを呼び出すことおよび他のセル内で全てのセルを論理的にカプセル化することも可能なように設計されている。そのような「内部」セルは、「サブセル」として知られている。本発明の本実施例では、各サブセルは、セル内のインスタンスが共用している自分自身の別個のグローバル変数プールを有している。代替実施例で、全てのサブセルの間でグローバルプールを共用することは可能だが、２つのセルを結合した場合（１つのセルが他のセルによって呼び出され、どちらのセルも同じような名前のグローバル変数を含んでいた場合）、変数の１つのバージョンが他のバージョンによってオーバレイされるので、グローバル変数の衝突を取扱う必要性が生じると思われる。
【０２５４】
重要な操作の認証に戻って、まずクラス認証について考察する。クラス定義のうち特に機密処理を行うクラス定義は、クラス定義を共用する集団が信頼する権限者によってデジタル的に署名される。実施例や状況によって、署名はクラスに対して付与される明示的または黙示的な許可を（種々の方法で）定義してもよい。クラス定義は、ソースフォーム、ｐコードフォームまたはその両方で署名されてもよい。
【０２５５】
未署名のクラス定義が機密処理に参加できないようにしているデフォルト（通常最小）許可に対して、未署名のクラス定義が与えられる。代わりに、実施例によっては、未署名または未許可のクラスが、全く無効で、かつ実行が許可されていないものとして扱うのが適切な場合もある。
【０２５６】
デジタル的に署名するクラス定義は、偽のまたはトロイの馬のようなクラスが害を与えるために用いられ得る可能性を防止する。機密関数は、少なくとも保護されなければならない。状況によっては、確実に全てのクラスが明示的に許可されるようにするのが望ましい場合もある。本発明の好ましい実施例は、個人ユーザまたはユーザの団体が決定する信頼性のある基準を許容する。
【０２５７】
（ソースコードフォームまたはｐコードフォームのうちどちらか適切なフォームの）クラス定義プログラムのハッシュは、格納されると計算される。このハッシュは、他の許可情報と結合されて、デジタル署名を用いて確認される。
【０２５８】
出願人のプログラム許可情報出願は、オブジェクトクラス定義を当てはめて理解されるべきである。これにより、セルが実行を許可されている関数の指定のあて先が許容される。
【０２５９】
セルの確認に関して、格納されたセルまたは他のユーザに送信されたセルに署名すると、エラーまたは故意に害を与えることによって変更される可能性が防止される（たとえ送信者が変更する場合でも、後で証明できる）。
【０２６０】
本発明の好ましい例では、セルの重要部分のみが署名され、その重要部分には以下のものが含まれる。すなわち、種々のクラスの名前、ハッシュおよび他の識別参照、変数プール、変数、値、変数および値の相互関係および種々のクラスとの関係、インスタンス、ならびにプールおよび変数である。
【０２６１】
クラス定義自身は、代理（名前、他の識別子および／またはハッシュ値）によって署名されればよく、デジタル署名全体を無効にすることなく、安全に、格納されたセルに付加または除去されうる。しかしながら、クラスプログラムをそのハッシュによって確認することによって、不正で、変更されたバージョンは置き換えることができないことを保証する。これによって、安全性のある適応性が提供される。
【０２６２】
機密関数の確認に関し、「任意の」アセンブラ言語のような（組み込み）関数（またはシステムに影響を与えるような他の関数）は本発明の解釈／実行プログラム外で処理を行うが、これらは潜在的に機密的で、そのような関数を呼び出すクラスの一部に信頼性がある必要がある。本発明は、関数を要求するインスタンスが関数を実行する権限のあるクラスと関連づけられていない場合には、機密性が求められるいかなる関数活動をも機密にすることによって安全性を強調する。
【０２６３】
信頼性のあるクラスが、信頼性のない方法で生じた情報（例えば、信頼性のない呼出者からのパラメータ、または他の（おそらく信頼性のない）インスタンスを呼び出した結果）を用いて機密関数を呼び出すと、信頼性のあるクラスは、同じ（またはより高位の）許可信頼性のレベルを有するとは知られていないあらゆるソースから得た情報を確認する義務を有する。
【０２６４】
機密性を有する組み込み関数には、以下のものを含むものもある。すなわち、デジタル署名を行う読み込みファイル、書き込みファイル、作成ファイル、削除ファイルである。アセンブラ内に書き込まれたか、または本発明の解釈／実行プログラムを外部で直接監視する他の方法で動作する「外部」モジュールまたは関数を用いる場合はいつでも、潜在的な危険性を有すると考えなければならない。そのような関数は、信頼性のあるクラス内に隔離され、適切に許可されなければならない。そのような関数が適切に書き込まれれば、信頼性のあるクラスは他の通常の（信頼性のない）クラスによって用いられ、危険な可能性に近づくことになりうる。
【０２６５】
実施例の他の態様および修正は、本発明の幾つかまたは全ての新規な特徴および利点があるが、当業者にとって自明であろう。そのような全ての態様および修正は、添付のクレームの範囲内に含まれることが意図されている。
【０２６６】
以上説明した本発明の構成ないし動作を今一度概説すると、拡張されたオブジェクト指向のプログラミング法に関連したコンピュータの操作方法により、自動化された業務処理を効果的に行うフレームワークが構築される。このオブジェクト指向のプログラミング法は、進行型プログラム、すなわちデジタルデータ構造とともに用いられ、このデジタルデータ構造は、進行型プログラムを送受信するために少なくとも一つの次のあて先または受信者を決定することができる命令および関連データのシーケンスと、次の受信者またはあて先に対してプログラムが決定したすべての関連データとを含む。本願で説明する方法を用いて、受信者であるコンピュータユーザがオブジェクトを事前に知らなくても、オブジェクトが一方のコンピュータユーザから他方のユーザへ最も効率よく送信されるように、データがプログラムとより密接に結合される。本発明は、オブジェクト「セル」を用いており、このセルは、例えばディスクに記憶されたデータ構造で、（関連する）オブジェクトインスタンスの集合体を反映しており、実行が一時中断されているが、後に同一または異なるプラットホームにおいて再実行が可能である。オブジェクトインスタンスの集合体は、記憶するためまたは他のコンピュータユーザへ送信するためにセル（または「電子フォーム」）に集められ、インスタンスは各クラス定義に不明確でないように結合される。本発明は、また、セルの作成および使用のために改良されたツールを作成し、電子フォームがオブジェクト指向技術を用いて定義されることが可能となり、すべてのユーザがすべてのオブジェクトクラス定義プログラムの互換ライブラリおよびそのクラス同一同期バージョンを保持しなくても、そのようなフォームを種々のコンピュータユーザ間で容易に送信することができる。本発明は、安全性および一貫性を保証するデジタル署名法を提供し、ユーザは、セルに挿入されたオブジェクトクラスの一部がユーザのシステムまたはデータの安全性または一貫性を失わせるか、破壊するか、または危うくする可能性のある破壊的な「トロイの木馬」プログラムであるかもしれないという危険性を負うことなく、オブジェクトの集合体から構成される電子フォーム（すなわち、セル）を受信および実行することができる。
【図面の簡単な説明】
【図１】本発明と共に使用しうる典型的な通信システムを示すブロック図である。
【図２】本発明の典型的な実施例に従った「セルブロック」のデータ構造を表示すものである。
【図３】本発明の典型的な実施例に従った「クラスブロック」のデータ構造を表示すものである。
【図４】典型的な「プログラムブロック」のデータ構造である。
【図５】典型的な「プログラム構造」のデータ構造である。
【図６】典型的な「実行ブロック」のデータ構造である。
【図７】典型的な「インスタンス値」のデータ構造である。
【図８】典型的な「変数ブロック」のデータ構造である。
【図９】典型的な「値ブロック」のデータ構造である。
【図１０】典型的なマスタ領域ブロックのデータ構造である。
【図１１】本発明の典型的な実施例に従った、ディスクに書き込まれる「記憶されたセル」である。
【図１２】被記憶セルと関連のある拡張されたデータ構造である。
【図１３】被記憶セルと関連のある拡張されたデータ構造である。
【図１４】被記憶セルと関連のある拡張されたデータ構造である。
【図１５】被記憶セルと関連のある拡張されたデータ構造である。
【図１６】被記憶セルと関連のある拡張されたデータ構造である。
【図１７】被記憶セルと関連のある拡張されたデータ構造である。
【図１８】被記憶セルと関連のある拡張されたデータ構造である。
【図１９】被記憶セルと関連のある拡張されたデータ構造である。
【図２０】被記憶セルと関連のある拡張されたデータ構造である。
【図２１】被記憶セルと関連のある拡張されたデータ構造である。
【図２２】被記憶セルと関連のある拡張されたデータ構造である。
【図２３】解釈プログラムまたは実行プログラムによって実行される操作シーケンスを表した、一般的なフローチャートである。
【図２４】図２３のフローチャートに関連して言及されている実行メソッドルーチンによって実行される操作シーケンスを示すフローチャートである。
【図２５】新規インスタンス作成サブルーチンにおける操作シーケンスを示すフローチャートである。
【図２６】クラス格納ルーチンにおける操作シーケンスを示すフローチャートである。
【図２７】クラス格納ルーチンにおける操作シーケンスを示すフローチャートである。
【図２８】クラス許可設定の操作シーケンスを示すフローチャートである。
【図２９】プログラム許可情報との合致を保証するために検査するクラス許可検査ルーチンの操作シーケンスを示すフローチャートである。
【図３０】クラス再格納ルーチンによって実行される操作シーケンスを示している。
【図３１】クラス再格納ルーチンによって実行される操作シーケンスを示している。
【図３２】クラス再格納ルーチンによって実行される操作シーケンスを示している。
【図３３】出口メソッド関数の操作シーケンスを示すフローチャートである。
【図３４】インスタンス削除組み込み関数のための操作シーケンスを示すフローチャートである。
【図３５】変数値リセットルーチンにおける操作シーケンスを示すフローチャートである。
【図３６】現在値を削除する際に実行される操作シーケンスを示すフローチャートである。
【符号の説明】
Ａ〜Ｎ…端末装置
２…メインメモリ付処理装置
４…キーボード／ＣＲＴ
６，８，１０…モデム
７…不揮発性記憶装置
【図１】
0003786722.tif 000002
【図２】
0003786722.tif 000003
【図３】
0003786722.tif 000004
【図４】
0003786722.tif 000005
【図５】
0003786722.tif 000006
【図６】
0003786722.tif 000007
【図７】
0003786722.tif 000008
【図８】
0003786722.tif 000009
【図９】
0003786722.tif 000010
【図１０】
0003786722.tif 000011
【図１１】
0003786722.tif 000012
【図１２】
0003786722.tif 000013
【図１３】
0003786722.tif 000014
【図１４】
0003786722.tif 000015
【図１５】
0003786722.tif 000016
【図１６】
0003786722.tif 000017
【図１７】
0003786722.tif 000018
【図１８】
0003786722.tif 000019
【図１９】
0003786722.tif 000020
【図２０】
0003786722.tif 000021
【図２１】
0003786722.tif 000022
【図２２】
0003786722.tif 000023
【図２３】
0003786722.tif 000024
【図２４】
0003786722.tif 000025
【図２５】
0003786722.tif 000026
【図２６】
0003786722.tif 000027
【図２７】
0003786722.tif 000028
【図２８】
0003786722.tif 000029
【図２９】
0003786722.tif 000030
【図３０】
0003786722.tif 000031
【図３１】
0003786722.tif 000032
【図３２】
0003786722.tif 000033
【図３３】
0003786722.tif 000034
【図３４】
0003786722.tif 000035
【図３５】
0003786722.tif 000036
【図３６】
0003786722.tif 000037