(57)【特許請求の範囲】
【請求項１】
クラス定義をひな型としてメモリ上にオブジェクトを作成するオブジェクト指向プログラミング言語により動作する計算機において、オブジェクトを作成し設定しポインタを設定する手順であり、
（Ａ１）予め与えられていたクラス定義でオブジェクトを作成し、
（Ａ２）予め与えられていた情報源、つまり情報を読み込む記録媒体または通信回線または人間からの入力、を工程（Ａ３）から工程（Ａ５−３）の一連の工程における情報源として指定し、工程（Ａ１）で作成したオブジェクトを工程（Ａ３）から工程（Ａ５−３）の一回目の一連の工程における親オブジェクト、つまり子となるオブジェクトへのアクセス情報を保持するオブジェクト、として指定し、
（Ａ３）予め与えられていたクラス定義でオブジェクトを作成し、工程（Ａ２）により指定された情報源から読み込んだ、「オブジェクト識別情報」を含む情報、を該オブジェクトに設定し、
（Ａ４）該オブジェクトへのアクセス情報を、工程（Ａ２）又は工程（Ａ５−２）により指定された親オブジェクトに設定し、つまり該オブジェクトをこの親オブジェクトの子オブジェクトとし、
（Ａ５）工程（Ａ２）により指定された情報源から次の情報を読込み、
（Ａ５−１）次の子オブジェクトの情報があれば工程（Ａ３）からの工程を繰り返し、
（Ａ５−２）工程（Ａ４）で子オブジェクトとされたオブジェクトを親オブジェクトとする一連の子オブジェクトの情報の始まりを検出したら、該オブジェクトを次回の工程（Ａ３）から工程（Ａ５−３）の一連の工程における親オブジェクトとして指定して、工程（Ａ３）からの工程を再び起動し、
（Ａ５−３）情報の終了を検出すると、この一連の工程を完了する、
一連の工程と、この一連の工程が完了した後で、
（Ｂ０）ポインタに「一連のオブジェクト識別情報」を対応させ、
た後に起動される以下の、
（Ｂ１）該「一連のオブジェクト識別情報」から最初のオブジェクト識別情報を取り出して一回目の工程（Ｂ２）のオブジェクト識別情報として指定し、工程（Ａ１）で作成したオブジェクトを一回目の工程（Ｂ２）における親オブジェクトとして指定し、
（Ｂ２）工程（Ｂ１）又は工程（Ｂ３−２）により指定された親オブジェクトがアクセス情報を保持する子オブジェクトの中から、工程（Ｂ１）又は工程（Ｂ３−２）により指定されたオブジェクト識別情報を持つオブジェクトを特定し、
（Ｂ３）該「一連のオブジェクト識別情報」から次のオブジェクト識別情報を探し、
（Ｂ３−１）次のオブジェクト識別情報が無ければ、工程（Ｂ２）で特定された該オブジェクトを該「一連のオブジェクト識別情報」に対応する該ポインタが指し示す先として、該ポインタを設定し一連の工程を完了し、
（Ｂ３−２）次のオブジェクト識別情報が有れば、これを取り出して次回の工程（Ｂ２）のオブジェクト識別情報として指定し、先の工程（Ｂ２）で特定された該オブジェクトを次回の工程（Ｂ２）における親オブジェクトとして指定し、工程（Ｂ２）からの工程を再び起動する、
一連の工程を具備することを特徴とする、オブジェクトを作成し設定しポインタを設定する手順。
【請求項２】
クラス定義をひな型としてメモリ上にオブジェクトを作成するオブジェクト指向プログラミング言語により動作する計算機において、オブジェクトを作成し設定しポインタを設定する手順であり、
（０−１）予め与えられていたクラス定義でオブジェクトを作成しておき、
（０−２）ポインタに「一連のオブジェクト識別情報」を対応させ、
た後に起動される以下の、
（１）工程（０−１）で作成しておいたオブジェクトを工程（２）以降の一回目の一連の工程における親オブジェクト、つまり子となるオブジェクトへのアクセス情報を保持するオブジェクト、として指定し、該「一連のオブジェクト識別情報」から最初のオブジェクト識別情報を取り出し一回目の工程（２−１）のオブジェクト識別情報として指定し、
（２）工程（１）又は工程（３−２）により指定された親オブジェクトが保持する、子オブジェクトへのアクセス情報の有無を検査し、アクセス情報が有れば工程（２−１）を起動し、アクセス情報が無ければ工程（２−２）を起動し、
（２−１）子オブジェクトの中から、工程（１）又は工程（３−２）により指定されたオブジェクト識別情報を持つオブジェクトを特定し、そのあとで工程（３）を起動し、
（２−２）予め指定されたクラス定義でオブジェクトを作成し、工程（１）又は工程（３−２）で指定されたオブジェクトに設定されている情報源、つまり情報を読み込む記録媒体または通信回線または人間からの入力、から「オブジェクト識別情報」を含むオブジェクトの情報を読込み、「オブジェクト識別情報」を該オブジェクトに設定し、この情報に次の情報源の指定が含まれればこれを該オブジェクトに設定し、残りの情報を該オブジェクトに設定し、
（２−３）該オブジェクトへのアクセス情報を工程（１）又は工程（３−２）により指定された親オブジェクトに設定し、つまり該オブジェクトをこの親オブジェクトの子オブジェクトとし、
（２−４）該情報源に次の子オブジェクトの情報があれば一連の子オブジェクトの情報が終了するまで工程（２−２）からの工程を繰り返し、そのあとで工程（２）を起動して工程（２−１）へと進み、
（３）該「一連のオブジェクト識別情報」から次のオブジェクト識別情報を探し、
（３−１）次のオブジェクト識別情報が無ければ、工程（２−１）で特定された該オブジェクトを該「一連のオブジェクト識別情報」に対応する該ポインタが指し示す先として、該ポインタを設定し一連の工程を完了し、
（３−２）次のオブジェクト識別情報が有ればこれを取り出して次回の工程（２−１）のオブジェクト識別情報として指定し、先の工程（２−１）で特定された該オブジェクトを次回の工程（２）以降の一連の工程における親オブジェクトとして指定し、工程（２）からの工程を再び起動する、
一連の工程を具備することを特徴とする、オブジェクトを作成しポインタを設定する手順。
【請求項３】
クラス定義をひな型としてメモリ上にオブジェクトを作成するオブジェクト指向プログラミング言語により動作する計算機において、オブジェクトを作成し設定しポインタを設定する手順であり、
（Ａ１）予め与えられていたクラス定義でオブジェクトを作成し、
（Ａ２）予め与えられていた情報源、つまり情報を読み込む記録媒体または通信回線または人間からの入力、を工程（Ａ３）から工程（Ａ５−３）の一連の工程における情報源として指定し、工程（Ａ１）で作成したオブジェクトを工程（Ａ３）から工程（Ａ５−３）の一回目の一連の工程における親オブジェクト、つまり子となるオブジェクトへのアクセス情報を保持するオブジェクト、として指定し、
（Ａ３）工程（Ａ２）により指定された情報源から、「クラス識別情報」と「オブジェクト識別情報」を含むオブジェクトの情報を読込み、「クラス識別情報」に対応するクラス定義でオブジェクトを作成し、「オブジェクト識別情報」を含む残りの情報を該オブジェクトに設定し、
（Ａ４）該オブジェクトへのアクセス情報を、工程（Ａ２）又は工程（Ａ５−２）により指定された親オブジェクトに設定し、つまり該オブジェクトをこの親オブジェクトの子オブジェクトとし、
（Ａ５）工程（Ａ２）により指定された情報源から次の情報を読込み、
（Ａ５−１）次の子オブジェクトの情報があれば工程（Ａ３）からの工程を繰り返し、
（Ａ５−２）工程（Ａ４）で子オブジェクトとされたオブジェクトを親オブジェクトとする一連の子オブジェクトの情報の始まりを検出したら、該オブジェクトを次回の工程（Ａ３）から工程（Ａ５−３）の一連の工程における親オブジェクトとして指定して、工程（Ａ３）からの工程を再び起動し、
（Ａ５−３）情報の終了を検出すると、この一連の工程を完了する、
一連の工程と、この一連の工程が完了した後で、
（Ｂ０）ポインタに「一連のオブジェクト識別情報」を対応させ、
た後に起動される以下の、
（Ｂ１）該「一連のオブジェクト識別情報」から最初のオブジェクト識別情報を取り出して一回目の工程（Ｂ２）のオブジェクト識別情報として指定し、工程（Ａ１）で作成したオブジェクトを一回目の工程（Ｂ２）における親オブジェクトとして指定し、
（Ｂ２）工程（Ｂ１）又は工程（Ｂ３−２）により指定された親オブジェクトがアクセス情報を保持する子オブジェクトの中から、工程（Ｂ１）又は工程（Ｂ３−２）により指定されたオブジェクト識別情報を持つオブジェクトを特定し、
（Ｂ３）該「一連のオブジェクト識別情報」から次のオブジェクト識別情報を探し、
（Ｂ３−１）次のオブジェクト識別情報が無ければ、工程（Ｂ２）で特定された該オブジェクトを該「一連のオブジェクト識別情報」に対応する該ポインタが指し示す先として、該ポインタを設定し一連の工程を完了し、
（Ｂ３−２）次のオブジェクト識別情報が有れば、これを取り出して次回の工程（Ｂ２）のオブジェクト識別情報として指定し、先の工程（Ｂ２）で特定された該オブジェクトを次回の工程（Ｂ２）における親オブジェクトとして指定し、工程（Ｂ２）からの工程を再び起動する、
一連の工程を具備することを特徴とする、オブジェクトを作成し設定しポインタを設定する手順。
【請求項４】
クラス定義をひな型としてメモリ上にオブジェクトを作成するオブジェクト指向プログラミング言語により動作する計算機において、オブジェクトを作成し設定しポインタを設定する手順であり、
（０−１）予め与えられていたクラス定義でオブジェクトを作成しておき、
（０−２）ポインタに「一連のオブジェクト識別情報」を対応させ、
た後に起動される以下の、
（１）工程（０−１）で作成しておいたオブジェクトを工程（２）以降の一回目の一連の工程における親オブジェクト、つまり子となるオブジェクトへのアクセス情報を保持するオブジェクト、として指定し、該「一連のオブジェクト識別情報」から最初のオブジェクト識別情報を取り出し一回目の工程（２−１）のオブジェクト識別情報として指定し、
（２）工程（１）又は工程（３−２）により指定された親オブジェクトが保持する、子オブジェクトへのアクセス情報の有無を検査し、アクセス情報が有れば工程（２−１）を起動し、アクセス情報が無ければ工程（２−２）を起動し、
（２−１）子オブジェクトの中から、工程（１）又は工程（３−２）により指定されたオブジェクト識別情報を持つオブジェクトを特定し、そのあとで工程（３）を起動し、
（２−２）工程（１）又は工程（３−２）で指定されたオブジェクトに設定されている情報源、つまり情報を読み込む記録媒体または通信回線または人間からの入力、から「クラス識別情報」と「オブジェクト識別情報」を含むオブジェクトの情報を読込み、「クラス識別情報」に対応するクラス定義でオブジェクトを作成し、「オブジェクト識別情報」を該オブジェクトに設定し、この情報に次の情報源の指定が含まれればこれを該オブジェクトに設定し、残りの情報を該オブジェクトに設定し、
（２−３）該オブジェクトへのアクセス情報を工程（１）又は工程（３−２）により指定された親オブジェクトに設定し、つまり該オブジェクトをこの親オブジェクトの子オブジェクトとし、
（２−４）該情報源に次の子オブジェクトの情報があれば一連の子オブジェクトの情報が終了するまで工程（２−２）からの工程を繰り返し、そのあとで工程（２）を起動して工程（２−１）へと進み、
（３）該「一連のオブジェクト識別情報」から次のオブジェクト識別情報を探し、
（３−１）次のオブジェクト識別情報が無ければ、工程（２−１）で特定された該オブジェクトを該「一連のオブジェクト識別情報」に対応する該ポインタが指し示す先として、該ポインタを設定し一連の工程を完了し、
（３−２）次のオブジェクト識別情報が有ればこれを取り出して次回の工程（２−１）のオブジェクト識別情報として指定し、先の工程（２−１）で特定された該オブジェクトを次回の工程（２）以降の一連の工程における親オブジェクトとして指定して、工程（２）からの工程を再び起動する、
一連の工程を具備することを特徴とする、オブジェクトを作成しポインタを設定する手順。
【発明の詳細な説明】
技術分野
本発明はオブジェクトベース技術におけるオブジェクトの管理方法およびその装置とデータ構造に関する。
背景技術
《セクション１  オブジェクトの保存、再現および転送に関する問題点》
《セクション１.２  オブジェクトベース技術の概観》
オブジェクトベース技術（"object based", Preface to the first edition of The C++ Programming Language, Second Edition, by Bjarne Stroustrup, 1991）では、現実の世界の存在をなぞられたオブジェクトを計算機上に作成する。オブジェクトを用いて現実の世界の物体、組織、概念を表現することができる。
さらに、オブジェクト間の（起動信号、応答などの）メッセージに対応した処理をそれぞれのオブジェクトの関数で実行する事により、全体として複雑な処理を実現することができる。これをオブジェクト指向プログラミング（"Object-oriented programing", pp14, The C++ Programming Language, Second Edition, by Bjarne Stroustrup, 1991）と言う。
オブジェクトベースのプログラミング技術の実現にはSmall TalkやCommon Lisp Object Systemなど様々な言語が開発されているが、最も一般的なのはＣ＋＋言語である。Ｃ＋＋では、クラスと呼ばれるオブジェクトのひな形を用意し、クラスを指定したnew命令を用いてメモリを確保し、オブジェクトとする。
オブジェクト指向プログラミング、Common Object Request Broker Architecture（CORBA）、Ｃ＋＋言語、オブジェクト指向データベース、などのオブジェクトベース技術の現在の技術水準から、オブジェクトの保存、再現、転送に関する問題点を以下に整理する。
《セクション１.３  オブジェクト指向プログラミングの限界》
オブジェクト指向プログラミングでは、オブジェクトを作成する手順をプログラムのロジックとして記述する。そして、外部からの入力に対応したメッセージをオブジェクトに渡すことにより、一連の処理を起動する。つまり、プログラム毎に作成するオブジェクトが事前に決められている。外部からの入力や内部処理に対応して、さらにオブジェクトが作成される場合は、プログラム論理に組み込まれた手順に基づき作成される。
「オブジェクトとその間の関係を計算機の外部からのデータとして与え、計算機がこれを読み込んでオブジェクトの集合を再現し、これらのオブジェクトの間のメッセージで規定される処理を起動する」と言う発想はいままでに無い。
《セクション１.４  CORBAの限界》
Common Object Request Broker Architecture （CORBA）は、通信網で接続された複数の計算機に分散配置されたオブジェクトの間でメッセージを送受する手順を定めたもので、通信網に接続された計算機が協力して処理を行う具体的な手順である。ここで、それぞれの計算機に作成されるオブジェクト（の集合）は、従来のオブジェクト指向プログラミングのプログラムを起動して作成される。
複数の計算機のオブジェクトの間でメッセージを送受して通信網全体で複雑な処理を実行することを目的として、個々の計算機のオブジェクトをデータで与える、つまりデータに基づき個々の計算機がオブジェクトを作成する、と言う発想はいままでになかった。
《セクション１.５  Ｃ＋＋言語の限界》
オブジェクトベースの技術を実現する手段として、最も応用範囲が広いのがＣ＋＋言語である。Ｃ＋＋言語のプログラムはＣ言語のプログラムに変換できるので、幅広いハードウェアで動作可能である。また、そのクラスとオブジェクトの取り扱いはJava言語に引き継がれている。
しかし、Ｃ＋＋言語の仕様では、オブジェクトを保存する仕組みについては触れていない。実際にＣ＋＋言語を用いると、プログラムで作成したオブジェクトを保存するのが困難である事がわかる。また、オブジェクトを示すポインタは、そのオブジェクトが割当てられたメモリのアドレスがあるので、保存するのは困難である。もしメモリのアドレスを保存しても、次回の起動した際のオブジェクトのアドレスと一致する保証は無い。
オブジェクトベース技術に利用出来るプログラム言語は多いが、オブジェクトとポインタの保存にまで考慮した言語は見当らない。アプリケーション毎に工夫をして必要な情報を保存するのが実情である。また、オブジェクトとポインタを保存する汎用的な方法は見当らない。
《セクション１.６  オブジェクト指向データベースの限界》
日経インテリジェントシステム別冊「オブジェクト指向データベース」、日経ＢＰ社、1994年、の14ページの見出しでは「オブジェクト指向技術を適用して開発したアプリケーション・オブジェクトを永続的に保存する目的で、オブジェクト指向データベース（OODB）は登場した」と述べている。オブジェクト指向データベースならば、オブジェクトのみならず、オブジェクトの相互関係まで保存することが可能である。
しかし、オブジェクト指向データベースは、データをサーバ計算機で管理しデータを利用するクライアント計算機に提供する複雑な仕組みである。そのため、オブジェクト指向データベースの価格は高価である。さらに、通信網に接続された複数の計算機にデータが分散して保管され、これらのデータが複雑に関係するケースに対応するのは、現在のオブジェクト指向データベースの技術では容易ではない。
また、オブジェクト指向データベースでは、特定の条件を満たすオブジェクトを全て探し出しその内容を調査するためには、基本的には全てのオブジェクトをサーチする必要があるので、その探索処理に時間がかかる。探索時間を短縮するため、特定の条件を満たすオブジェクトのグループを事前に作成する場合には、そのための処理が前もって必要であり、さらにその結果を保持するためのメモリも必要である。
《セクション２  必要とされる技術》
オブジェクト（の集合）を「保存し再現する技術および別の計算機に転送し再現する」単純な技術があると都合が良い。
また、保存したりオブジェクトを再現したり、別の計算機で再現する場合に、その時に必要なオブジェクトのみ再現する事が出来れば都合が良い。多数のオブジェクトが相互に関係している場合、これらオブジェクトの全体を計算機の主メモリ上に再現すると、他の処理の実行を妨げるなどの問題が生じる。小型の計算機では全体を再現出来ないケースもある。処理に必要なオブジェクトのみ主メモリ上に再現する単純な技術があると都合が良い。
これらの技術を適用するアプリケーションの例をセクション７に示す。
発明の開示
本発明は「オブジェクト（の集合）を保存し再現する単純な方法」であり、「オブジェクト（の集合）を転送して再現する単純な方法」である。これは、「計算機の処理の進展に応じて、必要な部分のオブジェクトの集合を、通信網の複数の計算機に分散収容された情報をつなぎ合わせて、作成する技術」でもある。詳細を以下に示す。
《セクション３  オブジェクトの保存と再現および転送と再現》
《セクション３.１  オブジェクトの保存と再現の基本》
オブジェクトを保存するためには、主メモリ上に存在するオブジェクトの内容情報を記録媒体に書き出せば良い。記録媒体とは、磁気ディスク、磁気テープ、ＦＤ（フロピーディスク）、書込み可能ＣＤ−ＲＯＭ、記憶保持型メモリなど、一時的または永続的に情報を保存する媒体の事である。主メモリの一部に常時通電して記録装置として利用しても良い。主メモリと対比して二次記録媒体と呼んだり外部記憶媒体と呼ぶこともある。
また、通信回線を通じてオブジェクトの情報（内容）を別の計算機に伝え、その情報を（主メモリや外部記録媒体に）保持してもらうケースもある。
オブジェクトには、整数や実数などの値、文字列、ポインタ、等の情報が含まれている。ポインタ以外のオブジェクトの内容情報は、そのまま、記録媒体に書き出せば良い。オブジェクトの中にさらにオブジェクトが含まれる事がある。例えば、Ｃ＋＋やJavaでは、新しいクラスを定義し、そのクラスのオブジェクトを別のクラスの（オブジェクトの）変数として用いる事ができる。オブジェクトの内容情報にさらにオブジェクトが含まれる場合は、中に含まれるオブジェクトの内容をさらに書き出せば良い。
記録媒体に記録された情報、通信回線やユーザーインタフェースからの情報からオブジェクトを再現する場合には、まずオブジェクトのひな形であるクラスから、オブジェクトを作成する。Ｃ＋＋ならば、クラスをclass X{};とした時、X*CNewObj=new X;でクラスＸのオブジェクトが作成され、そのメモリアドレス（オブジェクトが確保された主メモリの先頭番地）がCNewObjに設定される。
Javaならば、X JNewObj=new X;でクラスＸのオブジェクトが作成される。Javaではポインタをプログラマが陽に利用することは出来ないが、上記JNewObjはJava処理系の内部ではポインタとして使われている（p37, D. Flanagan著、永松訳“Javaクイックレファレンス”，オライリージャパン，オーム社，1996）。ちなみに、X JNewObj2=JNewObj;により、JNewObjとJNewObj2が同じオブジェクトを指し示す。
オブジェクトをメモリに作成した後、記録媒体に記録された情報を読み込み、オブジェクトの変数に値を設定する。メモリアドレスは情報を出力した時と異なっても、その内容は正確に再現される。
記録媒体に記録された内容を読み込む前に、オブジェクトのひな形つまりクラスが判っていれば以上の手順を実行できる。つまり、Class Xの定義が与えられているから、new Xでオブジェクトを作成する事が出来る。
もし、どのケースにはどのクラスでオブジェクトを作成するかの指定がプログラムの手順に組み込まれていれば、適切なクラスでオブジェクトを再現することができる。クラスが１種類であれば、そのクラスを常に用いてオブジェクトを再現すれば良い。クラスが複数でもデータを読み込み再現するオブジェクトのクラスの順番が決まっており、その順番でクラスを使用してオブジェクトを作成する様にプログラムされていれば良い。オブジェクトのグループ毎にクラスが指定されていても良い。
単純なケースについては以上の様にしてオブジェクトの再生ができる。
《セクション３.２  オブジェクトの転送と再現およびオペレータ入出力》
オブジェクトの保存と再現の手順では、保存するオブジェクトの情報を、計算機の記録媒体または別の計算機の記録媒体に出力する。この情報を読み込んでオブジェクトを再現する。
出力した情報を別の計算機に読み込ませれば、オブジェクトを別の計算機上に再現する事が出来る。つまり、情報を出力したファイルを別の計算機に送り、その計算機のプロセスが主メモリ上にオブジェクトを再現する。計算機の主メモリ上のオブジェクトの情報を記録媒体上のファイルに出力するかわりに、通信回線を用いて別の計算機に送る事も出来る。この情報を用いて、オブジェクトを別の計算機に再現することができる。
つまり、オブジェクトの情報を記録媒体に出力することは、通信回線を通じ外部へオブジェクトの情報を伝えること、と同じである。ＦＤなどの持ち運び可能な媒体で情報を別の計算機に運ぶこともできる。また、オブジェクトの情報を計算機の表示部に表示することは、オブジェクトの情報を人間に伝える事である。これもオブジェクトの情報を記録媒体に出力する手順と同じである。つまりオブジェクトを保存し再生する技術により、オブジェクトの情報を転送し再現する事ができる。
なお、人間からのオブジェクトの情報の入力は、計算機の入力部から投入され、この情報を用いてオブジェクトを作成することができる。また、入力情報をエディターでファイルに記録し、計算機に読み込ませ、オブジェクトを作成する事もできる。
《セクション３.３  クラス生成情報》
《セクション３.３.１  クラス識別情報》
オブジェクトのクラスが複数有り、そのクラスの指定をプログラムのロジックに組込む事が出来ない場合は、セクション３.１の方法は使えない。そこで、「オブジェクトの内容情報を出力する処理」に加え、「オブジェクトのクラス識別情報を出力する処理」を導入する。つまり、オブジェクトの内容情報を出力する時に、そのオブジェクトのひな形つまりクラスを特定する情報つまり「クラス識別情報」を出力する。例えば、クラスＸの定義を、
class X{ public: cls-print(){文字列"CLS_X"を出力;} };
とし、クラスの名前を出力する関数cl-print()を定義する。クラスＸのオブジェクトの内容を出力する時は、この関数cls-print()も起動して、クラス識別情報である文字列“CLS_X”を出力する。
オブジェクトを再現する時は、記録媒体から読み込んだクラス識別情報に対応するクラスを用いてオブジェクトを作成し、それに読み込んだ（オブジェクトの）内容情報を設定する。上記の例ならば文字列“CLS_X”に対応する命令new X;でメモリを確保し、読み込んだオブジェクトの内容を書き込む。
この場合、文字列“CLS_X”に対応してnew Xの命令を起動する必要がある。プログラムの中にclass Xの定義、および文字列“CLS_X”とnew Xの対応が定めてあれば良い。たとえば、読み込んだオブジェクト識別情報が変数char*cls_str;に設定してあれば、
if( strcmp(cls_str,"CLS_X")==0 ){ new_obj=new X; };
で新しいオブジェクトのメモリがclass Xを雛形として確保され、そのアドレスがnew_objに設定される。なお、new_objの型はvoid*または、class Xの基底クラス（base class）へのポインタ型であれば良い。
数字をクラス識別情報として利用しても良い。この場合、上記if文に相当する命令を複数集めてswitch文で記述する事も出来る。例えば、class Xのクラス識別情報を数字「1000」とし、読み込んだ数字が変数int nに設定してあれば、以下のswitch文で適切なオブジェクトを作成する事ができる。
switch(n){ case 1000: new_obj=new X; break;   ．．．    }
本明細書では、クラス識別情報（例えば“CLS_X”）とクラス生成命令（例えばnew X）の組み合わせを「クラス生成情報」と呼ぶ。
《セクション３.３.２  クラス生成情報の取り扱い》
プログラム本体にクラス生成情報が定義してあれば、読み込んだクラス識別情報からオブジェクトを作成する事は問題なく実行出来る。プログラム本体にクラス生成情報がなくても、ダイナミックに結合するオブジェクトファイル（例えばdllファイル）に「クラス生成情報」が与えられていればオブジェクトを生成する事が出来る。このオブジェクトファイルを入れ替えれば、最新の「クラス対応情報」を供給することができる。
実行中のプログラムが、読み込んだオブジェクトファイルに記録された関数のアドレスを、関数ポインタに設定する事により、その関数を起動する事が可能である。その例は、p328, J. O. Coplien “Advanced C++, Programing Styles and Idioms”、1992に見ることができる。新しく読み込んで起動する関数に、新たな「クラス生成情報」が定義されていれば、その新たなクラス定義でオブジェクトを作成することができる。つまり、クラス識別情報に対応してクラスを作成する作業を、新しく読み込んだ関数にまかせる。
「汎用的なデータ構造と、関数ポインタの先の関数を起動する汎用的なメンバー関数、を備えた汎用的なクラス定義」を用いてオブジェクトを作成し、（プログラムの実行中などに）読み込んだ関数を起動する様にこの関数ポインタを書き換えれば、特別な機能のオブジェクトとする事ができる。この場合は先の「汎用的なクラスに関するクラス生成情報と、関数を定義したオブジェクトファイルの組み合わせ」が、新たな「クラス生成情報」となる。
Java言語では実行中のシステムに対してクラスを動的にリンクする事が可能とされている（p14, D.Flanagan著、JAVAクイックリファレンス、オライリージャパン発行、オーム社発売、１９９６）。
《セクション３.３.３  クラス識別情報の読み込み》
クラス識別情報を始めとするオブジェクトの情報は、一度記録媒体に出力され、別の機会に読み込まれ、オブジェクトが再現される。通信回線を通じ外部からクラス識別情報やオブジェクトの内容情報を受信する場合もある。この時には、元の情報は情報を送る側の計算機の主メモリにあっても良いし、二次記録装置にあっても良い。この他に、エディターで作成した記録媒体のファイルを読み込む場合や、オペレータから入力インタフェースを介して情報が入力される場合もある。
いずれの場合もクラス識別情報からオブジェクトを作成し、さらにオブジェクトの内容情報を設定する。なお、以上のオブジェクト再現の手順を単純にするためには、情報の記録の順番は、まず、オブジェクトのクラス識別情報が記録され、引続きそのオブジェクトのオブジェクトの内容情報が記録されているのが都合がよい。しかし、順番が逆でも、読み込み側でオブジェクトの内容情報を一時待避しておけば対応可能である。つまりオブジェクト識別情報を読み込みオブジェクトを作成してから、待避しておいたオブジェクトの内容情報を設定する。また、クラスの識別情報とオブジェクトの内容情報を、別のファイルに記録し、両方の対応を取り、オブジェクトを作成し内容情報を設定しても良い。
《セクション３.４  ポインタの保存と再現および転送の問題点》
ポインタが用いられるケースを以下の３種類に分類することができる。一番目は、図１（１）に示すように、ポインタ（Ｐ１ポインタ101）とそれが示すオブジェクト（Ｘ１オブジェクト102）が１対１に対応する場合である。この場合は、Ｐ１ポインタ101に設定されたＸ１オブジェクト102のメモリアドレスを出力する替わりに、Ｘ１オブジェクト102の内容情報を出力をすれば良い。ポインタを再現する場合は、まずオブジェクトを作成し、そのメモリアドレスをＰ１ポインタ101に設定する。そして、記録媒体から読み込んだＸ１オブジェクト102の内容を作成したオブジェクトの内容として設定する。このようすれば、Ｘ１オブジェクト102を示すＰ１ポインタ101を再現することができる。
二番目は、複数のポインタが一つのオブジェクトを示す場合である。図１（２）では、Ｐ２ポインタ103、Ｑ２ポインタ104、Ｒ２ポインタ105が全てＸ２オブジェクト106を示している。この場合、Ｘ２オブジェクト106の内容情報を出力し、また再現する作業をどのポインタに対応させるかが問題となる。Ｐ２ポインタ103に割当てた場合、その値つまりＸ２オブジェクト106のメモリアドレスをＱ２ポインタ104とＲ２ポインタ105にも設定する必要がある。つまり、アプリケーションプログラムの構造を分析し、そのアプリケーション固有の手順でポインタ情報を保存再現する処理を実現する必要がある。
Ｐ２ポインタ103、Ｑ２ポインタ104、Ｒ２ポインタ105がＸ２オブジェクト106を示す可能性はあっても、アプリケーションの処理の進展によっては、これらポインタの一部がＸ２オブジェクト106を示さない場合があるならば、ポインタ情報の保存再現手順はさらに困難になる。Ｘ２オブジェクト106の内容情報を出力し、また再現する作業をどのポインタに対応させるかを、状況に応じて切り替える必要がある。また、再現したオブジェクトのメモリアドレスを設定する先も、状況により変化する。また、どのポインタもＸ２オブジェクト106を示さない場合にも対処しなくてはならない。
三番目は、一つのポインタが複数のオブジェクトを示す可能性がある場合である。図１（３）では、Ｐ３ポインタ107がＸ３オブジェクト108、Ｙ３オブジェクト109、Ｚ３オブジェクト110を示す可能性がある事を示している。Ｃ＋＋言語では型チェックが厳密であるが、Ｘ３オブジェクト108、Ｙ３オブジェクト109、Ｚ３オブジェクトのクラスが異なっても、その基底クラス（base class）をＰ３ポインタ107の型とすれば、型チェックの問題は発生せず、これら３種類のクラスのオブジェクトを示す事が出来る。また、Ｐ３ポインタ107の型がvoid*型であれば、Ｐ３ポインタ107には任意のクラスのオブジェクトのアドレスを設定する事ができる。
Ｐ３ポインタ107が示すオブジェクトの内容情報を記録媒体に出力する事は容易であるが、それを読み込み再現する場合に、オブジェクトのクラスを特定する事が出来ない。つまり、Ｘ３オブジェクト108、Ｙ３オブジェクト109、Ｚ３オブジェクト110のうちどのオブジェクトのクラスを用いて、Ｐ３ポインタ107に対応するオブジェクトを再現するかが判らないので、Ｐ３ポインタを再現する事が出来ない。
二番目と三番目をミックスした状況では問題がさらに複雑になる。
また、別の例として、ＡオブジェクトのポインタがＢオブジェクトを示し、ＢオブジェクトのポインタがＣオブジェクトを示し、ＣオブジェクトのポインタがＡオブジェクトを示す場合、つまり、ポインタで指し示す先が一周する場合には、どの順番でオブジェクトを再現するかが問題となる。
オブジェクトの内容情報としてポインタを持つケースがあるが、ポインタの保存、再現、転送が出来ないと、オブジェクトの保存、再現、転送も不十分なものとなる。また、どのオブジェクトにも属さないポインタの保存、再現、転送が必要なケースもある。
《セクション３.５  オブジェクトツリーと保存、再現および転送可能なポインタ》
ポインタの値はメモリのアドレスであるので、そのまま保存、再現、転送しても意味がない。そこで、ポインタの指し示す先のオブジェクトを特定する情報に変換する手順と、逆にその情報をポインタに変換する手順を考案した。この情報を別の計算機に送ればポインタを送る事ができる。この様にして保存、再現、転送可能なポインタを実現する。
なお、ポインタを送るとは、転送元の計算機でポインタが指し示していたオブジェクトと同じ内容のオブジェクトとそのオブジェクトへのポインタを転送先の計算機で再現する事である。つまり、意味として等価なポインタを送ることである。ポインタの値つまり転送元の計算機のアドレスを送ってもその利用価値は無い。
《セクション３.５.１  オブジェクトツリー》
保存、再現および転送可能なポインタを実現するためには、オブジェクトの管理方法を工夫する必要がある。オブジェクトを作成した直後は、そのメモリアドレスがそのオブジェクトへの唯一のアクセス手順である。newコマンドでオブジェクトを作成した場合も、mallocコマンドでメモリを確保した場合も、メモリアドレスが与えられる。
本発明では、オブジェクトのメモリアドレスを集合として管理する。集合の要素は実際にはメモリアドレスであるが、簡単のため、「オブジェクト集合」と呼ぶ。またオブジェクトのメモリアドレスを単純に「オブジェクト」と呼ぶこともある。
オブジェクト集合はオブジェクトにアクセス可能であれば良い。つまり、オブジェクトを収容する集合の構成法として、単純リスト、双方向リスト、アレイ、ハッシュドアレイ、バイナリーツリー、バッグ、スタック、キュー、ディクショナリー（アソシエーションの集合）などを利用することもできる。ここで、ハッシュドアレイは、ハッシュ数が同じオブジェクトを収容するリストをハッシュ番号順に配列（アレイ）としたものである。これらの集合では、「リストをたどる」「ハッシュ数に対応するリストにアクセスする」「ツリーの分岐をたどる」などの方法で、目的のオブジェクトを特定してアクセスする事ができる。
なお、目的のオブジェクトを見つけ出す鍵となる情報として、後で定義する「オブジェクト識別情報」（セクション３.５.２参照）を用いる事が出来る。オブジェクト集合の要素を順番に調べて指定のオブジェクト識別情報に一致するオブジェクトを見つけ出す事ができる。また、ハッシュドアレイの様にオブジェクト識別情報からハッシュ番号を求めて、探索するオブジェクトの範囲を限定する工夫も広く知られている。集合の要素にアクセス可能ならばどのようなプログラム手法でオブジェクト集合を実現しても良い。
本発明ではオブジェクト集合を管理するオブジェクトを導入する。これを「管理オブジェクト」と呼ぶ。管理オブジェクトには、その管理対象の集合を特定する情報を設定する。例えば、管理オブジェクトが保持するポインタ（図５のオブジェクト集合ポインタ503）にオブジェクト集合の先頭を示すリストヘッド506のアドレスを設定する。管理オブジェクトの集合に対してさらに管理オブジェクトを対応させる手順を繰返すとオブジェクト（その多くは管理オブジェクト）をツリー状に収容する事が出来る。これを「オブジェクトツリー」と呼ぶ。
本明細書で示す例では、管理オブジェクトが、オブジェクト集合を管理する情報の他に、オブジェクトとしての情報を持つケースを想定している。別の言い方をすれば「本発明が保存再現転送の対象とするオブジェクトの多くは、管理オブジェクトであり、オブジェクトが本来表現する情報の他に、オブジェクト集合を管理する情報を保持する」と言うことも出来る。そして、管理オブジェクトも普通のオブジェクトも単にオブジェクトと呼ぶ。
しかし「管理オブジェクトはオブジェクト集合を管理する情報のみ持つ」とし「オブジェクトの表現対象の情報は、管理オブジェクトでない普通のオブジェクトのみで扱う」としたケースでも、本発明を何ら修正することなく適用することが出来る。専用の管理オブジェクトから普通のオブジェクトへのポインタを設定しても良い。
オブジェクトツリーの例を図２に示す。a0オブジェクト201にa0リストヘッド203が対応する。これを表現するため、a0オブジェクト201が持つポインタ（オブジェクト集合ポインタ503）にa0リストヘッド203のアドレスを設定する。以下、オブジェクトに対応するリストヘッドと言った場合、オブジェクトが持つポインタ（オブジェクト集合ポインタ503）にリストヘッドのアドレスが設定されている事を意味する。a0リストヘッド203を先頭とするリストにa1オブジェクト204とa2オブジェクト205が収容されている。これがa0オブジェクトに対応するオブジェクト集合202である。a1オブジェクト204にa1リストヘッド207が対応する。これを先頭とするリストにa3オブジェクト208、a4オブジェクト209と、a5オブジェクト210が収容されている。これがa1オブジェクト204に対応するオブジェクト集合206である。a2オブジェクト205にa2リストヘッド212が対応する。これを先頭とするリストにa6オブジェクト213が収容されている。これがa2オブジェクト205に対応するオブジェクト集合211である。
オブジェクトツリーの最小構成は一段である。つまり、a0オブジェクト201とa0オブジェクト201に対応するオブジェクト集合202だけで、構成されるオブジェクトツリーが最小構成の例である。図２ではツリーの構成は２段であるが、必要なだけ段数を増やす事が出来る。また、ツリーの枝によって段数が異なる構成、例えば、a0オブジェクトに対応するオブジェクト集合211を省略したオブジェクトツリー構成とする事もできる。
《セクション３.５.２  オブジェクト識別情報》
オブジェクトツリーに収容するオブジェクトに、そのオブジェクトを特定する情報を設定する。これを「オブジェクト識別情報」と呼ぶ。オブジェクト識別情報は文字列（例えばオブジェクトの名前）でも良いし、数字でも良い。オブジェクト識別情報として新しい変数を導入して、文字列、数字などを設定しても、また、既に定義された変数をオブジェクト識別情報として用いても良い。
オブジェクトを収容するオブジェクト集合のなかでユニークな名前を、オブジェクト識別情報としてオブジェクトに与えると、オブジェクト識別情報の組み合わせで特定のオブジェクトを指定する事が出来る。図２の例では、オブジェクト識別情報はオブジェクトに与えられた名前（文字列）としている。（a0,a1,a5）でa5オブジェクト205を特定する事が出来る。
図２の例では、オブジェクトの名前は図２の全体のオブジェクトのなかでユニークである。しかし、オブジェクト識別情報の組み合わせでオブジェクトを特定する場合には、異なるオブジェクト集合で同じ名前を用いても問題は生じない。例えばもし、a6オブジェクト213の名前を“a5”に変更しても、a6オブジェクト213は（a0,a2,a5）、a5オブジェクト210は（a0,a1,a5）であり、オブジェクト識別情報の組み合わせとして違いがあるので、a5オブジェクト210とa6オブジェクト213が混同される事は無い。
一つのオブジェクト集合のなかで同じオブジェクト識別情報（図２では名前）を用いると、同じオブジェクト識別情報の組み合わせで特定されるオブジェクトが複数存在する。その複数のオブジェクトを常に同じに扱うなど、アプリケーションの目的やその設計思想によっては、同じ集合で同じオブジェクト識別情報の存在が許容される場合もある。
図２のオブジェクトツリー内のオブジェクトを指定する場合には、必ずａ０から指定するので、文字列a0の指定を省くことが出来る。例えば、a5オブジェクト210は（a1,a5）で特定する事が出来る。さらに、オブジェクトツリーからa0オブジェクト201自体を省略する事も可能である。但し、a0オブジェクト201に対応するa0リストヘッド203以降は残す必要がある。オブジェクトツリーの根元のオブジェクト（図２のa0オブジェクト201に相当するオブジェクト）を省略した例を図３に示す。
《セクション３.５.３  ポインタの保存、再現および転送》
前節で、オブジェクト識別情報の組み合わせでオブジェクトを特定出来ることを示した。ポインタをオブジェクト識別情報の連続に変換する工程があれば、そのオブジェクト識別情報の連続を記録媒体に出力する工程により、ポインタ情報を実質的に保存する事が出来る。つまり、ポインタが指し示す先のオブジェクトを特定するオブジェクト識別情報の連続を保存したり転送することができる。
さらに、オブジェクト識別情報の組み合わせからオブジェクトを特定する工程があれば、保存されたポインタ情報を読み込み、ポインタを再現する事が出来る。つまりポインタが指し示す先のオブジェクトを特定する情報があれば、必要な時にそのポインタを再現することができる。オブジェクト識別情報の組み合わせを転送すれば、ポインタを実質的に転送し再現することができる。
オブジェクトの情報を再現する場合は、記録媒体のファイルからの情報、または他の計算機からの情報を読み込み、オブジェクトを再現しながら、オブジェクトツリーも再現する。つまり、図２に示した様に、管理オブジェクトと（その管理対象のオブジェクトの集合である）オブジェクト集合を対にして、ツリー構造を再現する。
オブジェクト識別情報の連続で表現されたポインタ情報を「ポインタ翻訳情報402」と呼び、ポインタに対応付けて管理する。つまり、保存、再現、転送する対象のポインタには「ポインタ翻訳情報402」を対応させる。例を図４に示す。図４では、保存、再現、転送する対象のポインタ401に、ポインタ翻訳情報402を組み合わせ、ポインタ構造体406を構成している。これをクラスとして定義することもできる。ポインタ翻訳情報402はオブジェクト識別情報の連続で構成される。図４では、１番目のオブジェクト識別情報403から、ｎ番めのオブジェクト識別情報405までを順番にリストに収容する。
オブジェクトツリーに収容されたオブジェクトへのポインタを保存する場合は、そのオブジェクトを特定するオブジェクト識別情報の連続であるポインタ翻訳情報を出力する。これを読み込む場合は、「ポインタ翻訳情報402」として読み込み記録する。図４のポインタ構造体406を利用する場合は、ポインタ翻訳情報402にオブジェクト翻訳情報をリスト構造で順番を保存して記録する。
ポインタ翻訳情報の読み込みの場合は、その読み込み時点ではポインタ401の値を設定しないのが便利である。つまりポインタ401の値を零に設定したままとする。一般的には、ポインタが指し示す対象のオブジェクトがオブジェクトツリーに再現された後ならば、いつでも、ポインタ翻訳情報からポインタの値を求める事が可能である。しかし、ポインタ毎にその指し示す対象のオブジェクトが再現されているか否かを管理するのは煩雑である。オブジェクトツリーの全体が再現された後ならば、複数のポインタ構造体を一括してポインタ翻訳情報からポインタを求めることもできる。なお、すべてのポインタ構造体をポインタに変換すると、全部（正確には大部分の）オブジェクトツリーが再現される（セクション５.７）。これは、オブジェクトツリーの必要な部分のみ再現する目的からは不都合である。
ポインタを利用する時点で、ポインタ翻訳情報からポインタを求めるならば、オブジェクトツリーの必要な部分のみ再現するケースにも適用可能である。具体的には、ポインタ構造体406のポインタ401を利用する時点で値が零であれば、オブジェクトツリー上のオブジェクトをオブジェクト識別情報の連続の指定に従って、探索し、目的のオブジェクトを見つける。そのオブジェクトのアドレスが求めるポインタの値である。ポインタにこのアドレスを設定しておけば、それ以降はポインタによる高速アクセスが可能である。
メモリを極限まで削減するために、ポインタ構造体406からポインタ401を省略し、ポインタが必要な時には、毎回オブジェクトツリー内部の目的のオブジェクトを探索することとしてもかまわない。
オブジェクトツリーの複製を他の計算機に作成し、オブジェクト識別情報の連続をその計算機に送れば、オブジェクトツリーのオブジェクトへのポインタを複製することができる。つまり、論理的に意味の有るポインタの転送が可能である。
なお、ポインタ情報を保存する工程がなくても、記録媒体のファイルに、エディターを用いてオブジェクト識別情報の連続をポインタ翻訳情報として書込み、これを読み込ませて、目的とするポインタを設定する使い方もできる。また、オペレータから入力インタフェースを介して直接入力されたオブジェクト識別情報の連続をポインタ翻訳情報として、目的とするポインタを求める事もできる。
従来の技術ではポインタの保存再現が困難なケースとして、セクション３.４では、複数のポインタが一つのオブジェクトを示す場合（図１（２））、一つのポインタが複数のオブジェクトを示す可能性がある場合（図１（３））、および以上の両方をミックスした場合、を示した。オブジェクトツリーを導入し、ポインタをポインタ翻訳情報に変換する事により、このような場合でもポインタの保存再現転送を矛盾なく行うことができる。
《セクション３.６  オブジェクトの保存、再現および転送》
オブジェクトツリーおよびオブジェクト識別情報を導入する事により、ポインタがオブジェクトツリーに収容されているオブジェクトを指し示すならば、そのポインタの保存、再現および転送が可能となった。つまり、保存再現転送する必要のあるポインタならば、その指し示す先のオブジェクトをオブジェクトツリーに収容すれば良い。セクション３.３のクラス識別情報の導入と合わせて、オブジェクトの保存、再現および転送がポインタまで含めて可能となった。
オブジェクトの情報を保存する場合は、クラス識別情報、オブジェクト識別情報、その他のオブジェクトの内容（例えば、文字列、整数値、実数値、等）の情報を出力する。また、オブジェクトツリーに収容されたオブジェクトへのポインタについては、指し示す先のオブジェクトを特定するオブジェクト識別情報の組み合わせであるポインタ翻訳情報を出力する。オブジェクトの情報を別の計算機に送る場合は、一度ファイルに出力した情報を通信回線やＦＤなどの記録媒体で送っても良いし、主メモリの内容を直接通信回線で送っても良い。
オブジェクトの情報を再現する場合はファイルから（または他の計算機やＦＤなどの外部記録媒体のファイルから）情報を読み込みオブジェクトを再現する。またこの過程でオブジェクトツリーも同時に再現される。
オブジェクト識別情報の連続で表現されたポインタ翻訳情報は、そのまま読み込まれ、ポインタに対応して記録される。例えば、ポインタ構造体のポインタ翻訳情報として記録される。そしてアプリケーションプログラムの処理の必要に応じてポインタ翻訳情報をポインタに変換する。
《セクション３.７  効率的な探索》
オブジェクト指向データベースでは、特定の条件を満たすオブジェクトを全て調査する場合、基本的には全てのオブジェクトをサーチする必要があるので、その処理に時間がかかる。これを避けるため、特定の条件を満たすオブジェクトの間に「関係」を設定し、調査対象のオブジェクトのグループを事前に作成する方法があるが、そのための処理が事前に必要であり、またその結果を保持するためにメモリが必要となる。
一方、本発明では、オブジェクトをオブジェクトツリーに収容する。一度の調査の範囲となる可能性の高いオブジェクトをオブジェクトツリーのなかの一つの集合に集めておけば、探索は容易である。
図２のa1オブジェクトに対応するオブジェクト集合206に収容されたオブジェクトを調査するには、まずオブジェクト識別情報の組み合わせ（a0,a1）でa1オブジェクト204を特定し、対応するa1リストヘッド207を特定する。そして、a1リストヘッド207からオブジェクトを順に調査すれば良い。オブジェクトを収容する仕組みがそのまま、探索の範囲を限定するために使える点が、オブジェクト指向データベースに比べ優れている点である。汎用的な使い方を想定したオブジェクト指向データベースに比べ、探索のための余分な処理やメモリを必要とする事なく効率的な探索が可能である。
一度の調査の範囲となる可能性の高いオブジェクトを一つの集合に集める事が、単純で効率の良い（高速な）探索を実現する鍵となる。多くの場合、アプリケーションを分析すれば、一度の調査の範囲となる可能性の高いオブジェクトの集合を、容易に見つける事が出来る。
例えば、通信網の模型を扱うアプリケーションでは、通信網を指定してその通信リンクをすべて順番に探索する事が多い。また、通信網のすべての通信ノードを順番に探索する事も多い。それぞれを集合としてまとめた例を図３に示す。
図３では、オブジェクトツリーの根元のリストヘッド301に、名前が「Ｘ通信網」の網オブジェクト302と、名前が「Ｙ通信網」の網オブジェクト303が収容されている。名前が「Ｘ通信網」の網オブジェクト302に対応するリストヘッド304に、名前が「リンク管理」の網内部管理オブジェクト305と、名前が「ノード管理」の網内部管理オブジェクト306が収容されている。名前が「リンク管理」の網内部管理オブジェクト305に対応するリストヘッド311に、名前が「東京<->ニューヨーク」のリンクオブジェクト312、名前が「ニューヨーク<->ロンドン」のリンクオブジェクト313、名前が「ロンドン<->東京」のリンクオブジェクト314が収容されている。名前が「ノード管理」の網内部管理オブジェクト306に対応するリストヘッド307に、名前が「東京」のノードオブジェクト308、名前が「ニューヨーク」のノードオブジェクト309、名前が「ロンドン」のノードオブジェクト310が収容されている。
なお、図３では、オブジェクトツリーの根元のオブジェクト（図２のa0オブジェクト201に相当するオブジェクト）を省略しているので（セクション３.５.２参照）、オブジェクトツリーに収容されたオブジェクトを特定するオブジェクト識別情報の連続は、網オブジェクト302の「Ｘ通信網」、または網オブジェクト303の「Ｙ通信網」から始まる。
Ｘ通信網のリンクオブジェクト全てを調査する場合には、（Ｘ通信網、リンク管理）でリンク管理の網管理オブジェクト305を特定し、これに対応するリストヘッド311を特定する。あとは、このリストヘッドに収容されているリンクオブジェクトを順に調査すれば良い。
Ｘ通信網のリンクオブジェクト、ノードオブジェクト全てを調査する場合は、（Ｘ通信網）でＸ通信網の網オブジェクトを特定し、対応するリストヘッド304に収容された全ての網内部管理オブジェクトについて、さらに対応するオブジェクト集合も含めて調査すれば良い。つまり、調査する対象がオブジェクトツリーのある枝に集めてあれば、探索は容易である
全ての通信網のリンクオブジェクトを探索する場合にはオブジェクトツリーを深さ優先探索（Depth First Search）でたどる。リンク管理の網内部管理オブジェクトのオブジェクトに到達したら、それに対応するオブジェクト集合を調査し、次の枝の探索に移る。ノード管理の網内部管理オブジェクトに到達した場合は、その枝の更なる探索を中止し次の枝の探索に移る。
《セクション４  必要な情報のみを再現する技術》
記録媒体に記録されたオブジェクトの情報や、別の計算機が保持するオブジェクトの情報を全て読み込み、主メモリに関係するすべてのオブジェクトを再現するには、多量の主メモリが必要になることがある。アプリケーションプログラムの当面の処理に必要最小限のオブジェクトを再現し、処理の展開に応じて再現するオブジェクトを増やす事ができれば都合が良い。
オブジェクトツリーを最初に全部再現するのでなく、必要な部分のみ再現し、必要に応じて再現する部分を増やしてゆく技術を以下に示す。
《セクション４.１  オブジェクトツリーの部分読み込み》
図２のオブジェクトツリーの情報すべてが、ファイルＦに記録されているとする。アプリケーションプログラムの処理の最初の段階では、a0オブジェク201とa0オブジェク201が管理するa1オブジェクト204とa2オブジェクト205のみ必要と仮定する。この場合は、ファイルＦを読み込んで、オブジェクトツリーを再現する時に、a0オブジェクト201、a0リストヘッド203、a1オブジェクト204、a3オブジェクト205のみ再現し、その他の情報を読み飛ばす。
あるポインタ翻訳情報が（a0,a1,a5）の場合、その指し示す先のオブジェクトを特定するために、オブジェクトツリーをa0オブジェクト、a1オブジェクトとたどる。そして、a5オブジェクトを見つける過程で、a1オブジェクトの先にオブジェクトツリーが無いことを発見し、ファイルＦを再度読み込み、a1オブジェクトの先のオブジェクトツリーの情報を取り出して、a1オブジェクトの先のオブジェクトツリーを再現する。その後、再現されたa5オブジェクトを特定して、ポインタ翻訳情報（a0,a1,a5）をa5オブジェクトのアドレスに変換する。なお、a2オブジェクトの先の情報は再度読み飛ばす。
ファイルＦを読み込む時に、オブジェクトツリーをどこまで再現するか（例えば、オブジェクトツリーを何段先まで再現するか）の指定をすることもできる。
《セクション４.２  ファイルの分割》
オブジェクトツリーの情報を出力するファイルを、一度に読み込む情報毎に分割しておくと、読み込みの処理は単純になる。図２のオブジェクトツリーならば、例えば「a1オブジェクト204、a2オブジェクト205の情報をファイルF0に記録」「a3オブジェクト208、a4オブジェクト209、a5オブジェクト210の情報をファイルF1に記録」「a6オブジェクト213の情報をファイルF2に記録」する。
オブジェクトツリーを再現する最初のステップでは、管理オブジェクト501であるa0オブジェクトのみ作成し、そのファイル指定情報504に外部から指定されたファイルF0を書き込む。ポインタ翻訳情報、（a0,a1）からポインタを求める工程の途中で、ファイルF0を読み込み、a1オブジェクト204とa2オブジェクトを再現する。
この時のa1オブジェクト204の詳細を説明するため、管理オブジェクトの構造を図５に示す。管理オブジェクト501は、管理オブジェクトとしての情報である「オブジェクト集合管理情報502」と、通常のオブジェクトとして表現する情報である「オブジェクト個別情報505」で構成される。「オブジェクト集合管理情報502」は、「オブジェクト集合ポインタ」503と「ファイル指定情報」504、「読み込み済みフラグ」507、「情報修正フラグ」508、「子オブジェクト有無フラグ」509で構成される。「オブジェクト集合ポインタ」503の初期値は零であるが、対応するリストヘッド506が作成された時点でそのアドレスが記録される。図２のa1オブジェクトのオブジェクト集合ポインタ503には、a1リストヘッド207が作成された時点でそのアドレスが設定される。
ファイルF0を読み込んだ時点では、a1オブジェクト204の「オブジェクト集合ポインタ503」の値は零であり「a1リストヘッド207」は存在しない。「ファイル指定情報504」には、a1リストヘッドの先のオブジェクト集合の情報を記録したF1が記録されている。これは、a1オブジェクトの情報の一部として、ファイルF0に記録されていた情報の一部である。また、ファイルF1の情報はまだ読み込んでいないので「読み込み済みフラグ」507はオフ（初期値）である。
なお、ファイル指定情報504から読み込んだ情報に修正を加えていないので、「情報修正フラグ」508もオフである。これは、出力対象オブジェクトリストにその管理オブジェクトを登録するか否かを判定するために用いられる（セクション５.５.１）
また、「子オブジェクト有無フラグ」509は、子オブジェクトの有無をオン（有り）オフ（無し）で表示する物であり、ファイル指定情報が設定していない場合の読み込み工程を制御するために用いられる（セクション５.６.４）。
あるポインタ翻訳情報が（a0,a1,a5）の場合、その指し示す先のオブジェクトを特定するために、オブジェクトツリーをa0オブジェクト、a1オブジェクトを辿って行くと、a1オブジェクトのオブジェクト集合ポインタの値が零であることを検出する。オブジェクトツリーの先が無いと判定して、まずa1リストヘッド207を作成し、そのアドレスをオブジェクト集合ポインタ503に設定する。次に、a1オブジェクト204のファイル指定情報504に記録されたファイルF1を取り出し、ファイルF1をオープンにしてその内容を読み取り、「読み込み済みフラグ」507をオンに設定する。読み込み済みフラグ507はセクション５.４の「オブジェクト新規作成収容工程」で使用される。ファイルF1にはa3オブジェクト、a4オブジェクト、a5オブジェクトの情報が記録されているので、これらのオブジェクトを再現し、a1リストヘッド207を先頭とするリストに収容する。a1オブジェクトの「子オブジェクト有無フラグ」509もオンに設定される。
同様に、a2オブジェクトにはファイル指定情報としてF2が記録されている。ポインタ翻訳情報（a0,a2,a6）からポインタを求める際に、F2ファイルを読み込み、a2オブジェクトの先のオブジェクトツリーが再現される。
a0オブジェクトのみ存在する状態に、ポインタ翻訳情報（a0,a1,a5）からポインタを求める工程を起動すると、その過程でファイルF0とファイルF1を読み込み、「a0オブジェクトに対応するオブジェクト集合202」と「a1オブジェクトに対応するオブジェクト集合206」を再現する。
オブジェクトツリーの内容の出力は、管理オブジェクトを指定して行われる。具体的な手順として三種類の手順を示す。
一つ目の手順は以下である。a0オブジェクト201が指定されるとそのファイル指定情報504で特定されるファイルF0がオープンされ、a0オブジェクトが管理するオブジェクトの情報が出力される。a1オブジェクトの内容をファイルF0に出力する段階で、異なるファイル指定情報504（ファイルF1）に遭遇すると、a1オブジェクトが管理する（a1リストヘッド以降の）オブジェクトの情報を別ファイルであるファイルF1をオープンして出力する。また、a2オブジェクトが管理するオブジェクトの情報はファイルF2に書込まれる。なお、書き込む先のファイルが別の計算機のファイルである場合は、その計算機に情報を送り、その計算機のファイルへの出力処理を起動する。
二つ目は、以上の手順で、a1オブジェクトの内容を出力する段階で、異なるファイル指定情報504（ファイルF1）に遭遇すると、a1オブジェクトを、出力対象オブジェクトリスト1501に登録する。登録された管理オブジェクトを指定して、再度オブジェクトツリーの内容の出力を起動する。
三つ目は、最初にオブジェクトツリーを最初に探索して、オブジェクトツリーの内容の出力対象となる管理オブジェクトを出力対象オブジェクトリスト1501に登録する。登録された管理オブジェクトを順に指定して、オブジェクトツリーの内容の出力を起動する。このとき、異なるファイル指定情報504（ファイルF1)に遭遇すると対応するオブジェクト集合の出力をスキップする。この詳細をセクション５.５に示す。
《セクション４.３  ポインタ翻訳情報をポインタに変換するタイミング》
オブジェクトツリーの必要な部分のみ再現する場合は、ポインタ翻訳情報をポインタに変換する工程の起動は、アプリケーションプログラムでそのポインタが必要となった時に行うのが望ましい。もし、アプリケーションプログラムの処理の最初の段階ですべてのポインタ翻訳情報を一度に展開すれば、オブジェクトツリーの全部（または多くの部分）を一度に再現する事になる。
《セクション４.４  オブジェクトツリーの部分解放》
主メモリが不足する場合には、オブジェクトツリーの使用頻度の少ない部分の情報をファイルに出力し、その部分を主メモリから解放（削除）すれば良い。なお解放する場合はオブジェクトツリーの指定された集合から先の枝をまとめて解放することになる。
もし、a1リストヘッド207以降を解放する場合は、a1オブジェクト204の内容を参照して、ファイル指定情報504で特定されるファイルF1に、a3オブジェクト208、a4オブジェクト209、a5オブジェクト210の情報を記録する。なお「情報修正フラグ」508がオフならば、ファイルF1の内容に変更は無いので出力する必要は無い。そしてa1リストヘッド207以降を解放する。そしてオブジェクト集合ポインタ503に零を設定する。
さらに、解放したオブジェクト（a3オブジェクト208、a4オブジェクト209、a5オブジェクト210）を指し示すポインタの構造体406を初期設定する。つまり、ポインタ301を零に設定する。もし、ポインタ翻訳情報302が設定してなければ、a1リストヘッド以降を解放する前に、ポインタ翻訳情報302を設定しておく。
どの部分を解放するかは、オブジェクトおよびオブジェクト集合の使用頻度を観測すれば良い。ファイルを分けている場合には、そのファイル毎に使用頻度を観測すれば良い。または、まったく使用頻度を観測せず、天下りで指定された順番オブジェクトツリーの部分を解放する方法もある。
ファイルが分割されていない場合は、情報をセーブするファイルは一つであるが、解放する区画をあらかじめ決めて以上の手順を行えば良い。
《セクション４.５  ファイルのネットワーク上での分散》
計算機が通信網で接続されている場合、オブジェクトの情報を記録したファイルを、複数の計算機に分散することが出来る。例えば、ファイルF0を計算機Ａに、ファイルF1を計算機Ｂ（ドメイン名を例えばwww.atele.com）に、ファイルF2を計算機Ｃに収容する。これを計算機Ｄで利用する場合には、何らかの手段で計算機ＡについてF0が存在する事を教えて貰う必要がある。
指定の一例として「http://www.atele.com/abc/F1」があげられる。これは「ドメイン名www.atele.comで特定される計算機内部に/abc/F1のパスで指定されるファイルが有り、その内容はこの計算機の（httpのデフォルトのポート番号で動作している）http通信手順で送られる」事を示している。一般にファイルの指定は、計算機を特定する情報（ドメイン名など）と、その計算機の中でファイルを特定する情報（パス名など）で構成される。これにその情報を送信するプロセス（httpなど）を加えても良い。
ファイルに記録するオブジェクトの指定をセクション４.２と同じとすると、ファイルF0を読み込んだ時点で、a1オブジェクト204内部のファイル指定情報504は、「http://www.atele.com/abc/F1」となる。ポインタ翻訳情報（a0,a1,a5）などをポインタに変換する時点で、そのファイルの内容を読み込みオブジェクトツリーを再現する。
オブジェクトツリーの内容をファイルに記録する場合やファイルを読み込む場合には、その出力や読み込みの権限管理が重要になる。UNIX計算機ならば、ファイルに各種の許可情報（permission）を付与して、出力および読み込みを管理する事が出来る。例えば、計算機Ｄ上に図２のオブジェクトツリーを再現し、a5オブジェクト210を書き換えたとする。または、a7オブジェクトをa5オブジェクト210の後に追加したとする。その情報を保存する場合には、a1オブジェクト204のファイル指定情報504をチェックする。そこには、「http://www.atele.com/abc/F1」が記録されている。www.atele.comの計算機に/abc/F1への出力の権限を問い合わせ、書き込めないことが判明すると、この出力を放棄する必要が有る。
もし、出力を放棄出来ない場合は、以下の手順で別のファイルに記録する。つまり、a1オブジクト204が保持するファイル指定情報504を計算機Ｄ自身のファイルパス例えば「/atl/abc/F1-new」に書き換え、そのファイルに書き込む。F1-newのファイルをアプリケーションプログラムで作成すれば、（通常は）そのファイルへの出力に問題は生じない。
この時、a1オブジェクトの内容（ファイル指定情報）が変化するので、ファイルF0へ出力する情報も変化する事に注意する必要が有る。
出力権限を管理して別の計算機のファイルに出力可能とすることも可能である。http手順は情報を読み出して送る（そして受ける）手順であり、ファイルに書き込む手順は定義していない。そこで、書き込むための専用のプロセスを出力先のファイルを保持する計算機で起動するが必要ある。httpの通信プログラムを改造してファイルへの出力機能を付加しても良い。
【図面の簡単な説明】
図１はポインタの各種の使用例である。
図２はオブジェクトツリーの例その１である。
図３はオブジェクトツリーの例その２（通信網の構成要素をオブジェクトツリーに収容した例）である。
図４はポインタ構造体である。
図５は管理オブジェクトの構成である。
図６はオブジェクト管理方法を実現したプログラムを走行させる計算機の一般的な構成である。
図７はオブジェクト管理方法を実現したプログラムの全体構成である。
図８は最初の管理オブジェクトを作成する工程の詳細である。
図９と図１０はオブジェクト新規作成収容工程の詳細である。
図１１と図１２はオブジェクトツリー出力工程の本体の詳細である。
図１３は一括出力フラグと出力対象オブジェクトリストの構成である。
図１４は出力対象オブジェクトリストの作成手順の説明図である。
図１５は出力対象オブジェクトリスト（例）である。
図１６は情報通信出力読み込み工程群の詳細である。
図１７はオブジェクト集合出力工程の詳細である。
図１８と図１９はオブジェクト情報出力工程の詳細である。
図２０はポインタ翻訳情報作成工程の詳細である。
図２１はポインタ翻訳情報作成工程の説明で利用するオブジェクトツリーの例である。
図２２はファイルに記録されたデータ構造の例である。
図２３はオブジェクトツリー読み込み工程の本体の詳細である。
図２４は読み込み制御工程の詳細である。
図２５はオブジェクト集合読み込み工程の詳細である。
図２６はオブジェクト情報読み込み工程の詳細である。
図２７はポインタ翻訳情報からポインタを求める工程の詳細である。
図２８はオブジェクト管理装置の構成である。
図２９はインターネットでの論理模型の再現の様子を説明した図である。
図３０は三次元空間の接続の説明図である。
図３１は三次元空間情報読み込みと削除の制御の説明図である。
図３２は本発明によるショッピングモールの様子である。
図３３は改良されたポインタ構造体である。
図３４は他計算機オブジェクトアクセス情報群である。
図３５と図３６は、改良されたポインタ構造体と他計算機オブジェクトアクセス情報群を用いた、オブジェクトへのアクセス工程の詳細である。
発明を実施するための最良の形態
《セクション５  オブジェクト管理方法の実施形態》
《セクション５.１  計算機の構成》
オブジェクト管理方法の代表的な実施形態は計算機のプログラムである。計算機の一般的な構成を図６に示す。入力部601から入力された指示を中央処理部603で分析し、指示された工程（処理）を実行する。その結果、オブジェクトが主記憶部604のメモリ（主メモリ）上に作成され、さらには、オブジェクトへのポインタに値が設定される。
二次記憶部605に主記憶部604のオブジェクトの情報、（オブジェクト識別情報の連続である）ポインタ翻訳情報が書き出される。また、これらの情報を二次記憶部605に記録することなく表示部602に表示したり、通信制御部607を介して、別の計算機に伝えられるケースも有る。一度二次記憶部605に記録してから表示部602に表示したり、通信制御部607を介して、別の計算機に伝えられる場合も有る。
逆に、二次記録部605が保持するオブジェクトの情報、ポインタ翻訳情報を中央処理部603が読み込み、これらの情報に対応するオブジェクトと、ポインタ主記憶部604に再現する。また、入力部601からの情報や、通信制御部607を経由した別の計算機からの情報を基に、オブジェクトやポインタを主記憶部に再現することもある。
他の計算機のファイルを直接読み込まないなど、オブジェクトの保存再現に他の計算機が直接関係しないケースでは、通信制御部607は不要である。他の計算機と情報交換する場合は、ＦＤ（フロッピーディスク）などの媒体を用いれば情報交換を行う事が可能である。
《セクション５.２  プログラムの全体構成》
本発明のオブジェクト管理方法を実行するプログラムの構成例を図７に示す。このプログラムはイベント起動型のプログラムで、入力部601や通信制御部607からの信号（イベント）を「処理工程起動信号受付工程」701で分析し、信号（イベント）に対応した工程（処理）を起動する。それぞれの工程から、さらに信号（イベント）が出る場合は、さらに「処理工程起動信号受付工程」701で分析して信号に対応した工程（処理）を起動する
アプリケーションプログラムの目的や構成に応じて数多くの工程が起動されるのが、本明細書では発明を説明するのに必要な以下の工程を説明する。「最初の管理オブジェクトを作成する工程」702。「オブジェクト新規作成収容工程」703。「オブジェクトツリー出力工程」704。「情報通信出力読み込み工程群」705。「オブジェクトツリー読み込み工程」706。「ポインタ翻訳情報からポインタを求める工程」707。
《セクション５.３  最初の管理オブジェクトを作成する工程》
オブジェクトツリーの「最初の管理オブジェクトを作成する工程」702の詳細を図８に示す。まず「管理オブジェクト作成」801を行う。管理オブジェクトは、「オブジェクト集合管理情報」502を持つオブジェクトである。「管理オブジェクト作成」801ではこのオブジェクトを表現するメモリを確保する。このメモリアドレスは今後のオブジェクトツリーへのアクセスに備えて（変数などに）記録しておく。この時点では、オブジェクト集合ポインタ503の値は零である。ファイル指定情報504も設定されていない。また「読み込み済みフラグ」507もオフ、「情報修正フラグ」508もオフ、「オブジェクト有無フラグ」509もオフ（無い）である。
この管理オブジェクト以降に、特定のファイルに記録されたオブジェクトを再現してオブジェクトツリーを再現する場合は、そのファイル名をオブジェクト集合管理情報502のファイル指定情報504に設定する。別の計算機のファイルならば、その計算機の指定も含まれる（例えばhttp://www.atele.com/abc/F1）。そして「オブジェクトツリー読み込み工程」706を起動する。この工程の最後で「読み込み済みフラグ」507がオンに設定される。
この管理オブジェクト以降に新規のオブジェクトを追加する場合は、「オブジェクト新規作成収容工程」703を起動する。この時点では、
《セクション５.４  オブジェクト新規作成収容工程》
「オブジェクト新規作成収容工程」703は、オブジェクトを新規に作成し、オブジェクトツリーに収容する工程である。ここで、オブジェクトツリーには少なくとも最初の管理オブジェクトが存在するものとする。「オブジェクト新規作成収容工程」703や、「オブジェクトツリー読み込み工程」704によりオブジェクトツリーに複数のオブジェクトが既に収容されていても良い。
「オブジェクト新規作成収容工程」703の詳細を図９と図１０に示す。新規に作成するオブジェクトを収容するオブジェクト集合を、その管理オブジェクトで指定する。そこで「管理オブジェクトの指定を受け付ける」901。以下では、図２のa1オブジェクト204に対応するオブジェクト集合206にオブジェクトが全く存在しない状況において、a3オブジェクトを追加するケースを想定して説明する。このケースでは、管理オブジェクトとしてa1オブジェクト204が指定される。この指定は、a1オブジェクトのメモリアドレスで指定することが出来る。a1オブジェクトを特定するポインタ翻訳情報（a0, a1）で指定して、「ポインタ翻訳情報からポインタを求める工程」707を起動してオブジェクトのアドレスを求めても良い。
a1オブジェクトの「オブジェクト集合管理情報」502に「ファイル指定情報」504の指定が有り、かつ「オブジェクト集合管理情報」502の「読み込み済みフラグ」507がオフならば、「オブジェクトツリー読み込み工程706を起動」904する。この工程の最後で「読み込み済みフラグ」507がオンに設定される。もしファイルに既に記録されたオブジェクトツリーの情報がまだ読み込まれていなければ、以上の工程で読み込まれる。
ファイル指定情報が設定してあっても読み込み済みフラグ507がオンならば、既にオブジェクトツリーの情報を読み込み済みなので、「オブジェクトツリー読み込み工程706を起動」904をスキップして図１０の処理工程に進む。また、ファイル指定情報504が設定してなくて、「オブジェクト集合ポインタ」503の値が零ならば、「リストヘッド作成処理」907を起動して、a1リストヘッド207を作成して、そのアドレスをオブジェクト集合ポインタ503に設定する。
次に「オブジェクト識別情報を受け付ける」1002。そして「指定の管理オブジェクトに対応するオブジェクト集合のなかに、受け付けたオブジェクト識別情報が既にあるかをチェック」103する。以上で説明した例ではa1オブジェクト204が指定されているので、a1リストヘッド207からたどれるオブジェクトの中に、受け付けたオブジェクト識別情報と同じオブジェクトがあるかをチェックする。このチェックはリストヘッドからオブジェクトを順番にたどり、それぞれのオブジェクト識別情報と指定されたオブジェクト識別情報を照合すれば良い。また集合がハッシュドアレイならば、指定されたオブジェクト識別情報に対応するハッシュ番号のオブジェクトだけを調査の対象とすれば良い。この調査の結果、既に存在するオブジェクト識別情報ならば、「オブジェクト識別情報を受け付ける」1002に戻る。
指定されたオブジェクト集合では新らしいオブジェクト識別情報である事が判明すれば、次に「オブジェクトのクラスの指定を受け付ける」1004。作成するオブジェクトが１種類の場合、または、作成するオブジェクトの指定がプログラムのなかのコードで指定されている場合には、「オブジェクトのクラスの指定を受け付ける」1004工程を省略する事ができる。
アプリケーションプログラムの処理の途中でオブジェクトを新規に作成する場合には、そのオブジェクトのクラスはアプリケーションプログラムのコードのなかで指定されているのが一般的である。オペレータの入力に基づきオブジェクトを作成する場合は、アプリケーションプログラムの入力分析の工程で、対応するクラスを特定するのが一般的である。
次に、オブジェクトのクラスの指定をもとにオブジェクトを作成する（セクション３.１参照）。これが「オブジェクト作成」1005の工程である。「オブジェクト識別情報を受け付ける」1002工程で受け付けた名前を、この新に作成したオブジェクトに設定するのが「オブジェクトにオブジェクト識別情報を設定」1006する工程である。図２の例ではa3オブジェクト208にその名前の文字列"a3"を設定する。
通常、オブジェクトはオブジェクト識別情報の他に整数、実数、文字列、ポインタなどの変数を持つ、また、オブジェクトの内部に別のオブジェクトを持つ場合がある。これらのオブジェクトの情報のなかには、オブジェクト作成時に設定するものがある。これを設定するのが「その他のオブジェクトの情報の指定を受け付け、オブジェクトに書込む」1007工程である。なお、アプリケーションによればオブジェクトの情報の一部または全部を、オブジェクト作成時ではなく、後の工程で設定する場合もある。
そして「オブジェクトを指定の集合に収容」1008する。図２の例では、a1リストヘッド207の先に新規に作成したa3オブジェクトを収容する。これは、ポインタであるa1リストヘッド207（ポインタ）の値にa3オブジェクトのアドレスを設定する事である。なお、オブジェクト集合に定義された方法により、そのオブジェクト収容方法は異なる。
そして親オブジェクトの「子オブジェクト有無フラグをオン」1019にする。最後に、「ファイル指定情報が設定してある管理オブジェクトをオブジェクトツリーの根元方向に探索」1010する。a3オブジェクト208を追加した時は、その管理オブジェクトであるa1オブジェクト204にファイル指定情報504が設定してあるかを調査する。ファイル指定情報504が設定してあれば、そのオブジェクト（a1オブジェクト）の「情報修正フラグをオン」1011する。a1オブジェクト204にファイル指定情報504が設定してなけらば、さらに根元方向の管理オブジェクトであるa0オブジェクトを調査する。
《セクション５.５  オブジェクトツリー出力工程》
「オブジェクトツリー出力工程」704は、セクション５.５.１の「オブジェクトツリー出力工程の本体」、セクション５.５.２「オブジェクト集合出力工程」、セクション５.５.３「オブジェクト情報出力工程」、セクション５.５.４「ポインタ翻訳情報作成工程」で構成される。それぞれ前の工程から次の工程を呼び出すのが基本である。
また、アプリケーションプログラムが動作している計算機（計算機Ａ）とは別の計算機（計算機Ｂ）に情報を記録する場合には、（計算機Ａおよび計算機Ｂの）「情報通信出力読み込み工程群」の各工程を起動する。なお「情報通信出力読み込み工程群」の説明の一部は、セクション５.５.１で「オブジェクトツリー出力工程の本体」と一緒に、残りはセクション５.６.１で「オブジェクトツリー読み込み工程の本体」と一緒に説明する。
《セクション５.５.１  オブジェクトツリー出力工程の本体と情報通信出力読み込み工程群》
「オブジェクトツリー出力工程の本体」の詳細を図１１と図１２に示す。まず情報出力を起動する対象の「管理オブジェクトの指定を受け付ける」1101。
なお、指定した管理オブジェクトに記録されているファイル指定情報504が担当する範囲の（オブジェクトツリーの）情報のみを出力する場合と、指定した管理オブジェクトより先のオブジェクトツリーの情報をすべて（複数のファイルに）出力する場合とでは、オブジェクトツリー出力工程の詳細が異なる。例えば、主メモリの使用量を減らすために、オブジェクトツリーの一部を削除する場合には、指定の管理オブジェクト以降をすべて出力した後に、その部分のオブジェクトツリーを削除する必要がある。
どちらの場合も、セクション５.５.１のオブジェクトツリー出力工程の本体で対応できるが、以下では、指定した管理オブジェクトより先のオブジェクトツリーの情報をすべて記録する場合を想定して説明する。この場合は、オブジェクトツリー出力工程の本体を起動する前に、グローバル変数である図１３の「一括出力フラグ」1301をオンにし、指定の管理オブジェクト以降をすべて出力する事を表示する。
さて図１１「オブジェクトツリー出力工程の本体」の「管理オブジェクトの指定を受け付ける」1101の後で、「一括出力フラグがオン？」1102の検査をし、オフである事を検出すれば、管理オブジェクトの指定はそのままにして「ファイル指定情報を特定する」1107の工程に移る。
一括出力フラグがオンならば、まず「出力対象オブジェクトリストを作成」1103する。出力対象オブジェクトリストの構成を図１３に示す。「出力対象オブジェクトリスト」1302には、「リストヘッド」1303が有り、これを先頭として、管理オブジェクト（へのポインタ）をリスト形式で収容する。「出力対象オブジェクトリストを作成」1103の手順を図１４と図１５を用いて説明する。
図１４はd0オブジェクトからd8オブジェクトまでにより構成される（d0オブジェクトを根元とした）オブジェクトツリーである。それぞれのオブジェクトは単にd0, d8等と表示されている。また、d0オブジェクト1401には、ファイルF0が指定されているので、d0/F0と表記されている。d2/F2、d4/F4、d6/F6、もそれぞれファイルF2、F4、F6が指定されている事を示す。
図１４のオブジェクトツリーを深さ優先探索（Depth First Search）でたどり、探索ルートを戻る時に、ファイル指定が有る管理オブジェクトを、出力対象オブジェクトリストの先頭から登録する。図１４の「スタート」1410から「d5」1404までたどり、戻る途中でd4オブジェクトにファイルF4が設定されている事を発見する。これを「ヒットF4」1411と表現している。そこで「出力対象オブジェクトリスト（例）」1501のリストヘッド1502のすぐ後にd4オブジェクトを登録する。なお、ヒットの対象の管理オブジェクト（d4オブジェクト）の情報修正フラグ508がオフならば、ファイルF4に記録された情報に修正は無いので、出力対象オブジェクトリストには登録しない。
「d7」1407、「d8」1408と探索して、探索ルートを戻る途中で、d6オブジェクトにファイルF6が設定されている事を発見して、「出力対象オブジェクトリスト（例）」1502の「d4」1503の後に、「d6」を登録する。またd2オブジェクトにファイルF2が設定されている事を発見して、「d6」1504の後に、「d2」を登録する。最後に「d2」1505の後に「d0」を登録する。
さて「出力対象オブジェクトリストから先頭オブジェクトを取り出す」1104により、上記の登録したオブジェクトを先頭から順番に取り出す。この順番には意味がある。以下のオブジェクトツリーの出力工程のなかで、出力ファイルに出力不可となったの場合には、そのファイル名を変更する必要が有るが、そのファイル指定情報を記録する管理オブジェクトは、オブジェクトツリーの根元に近い所にある。出力対象オブジェクトリストには、オブジェクトツリーの枝の先に近い（根元から遠い）オブジェクトから登録されているので、ファイル指定情報を変更しても、その変更の記録は必ず後で行われるので、矛盾が生じない。
出力対象オブジェクトリストから管理オブジェクトを順番に取り出して、「取り出したオブジェクトを管理オブジェクトとして指定」1106として、以降の処理を行う。なお、出力対象オブジェクトリストから全ての管理オブジェクトを取り出して処理すれば、一連の処理工程は終了する。
さて次に、指定の管理オブジェクトに記録された「ファイル指定情報504を特定する」1107。ファイル指定情報504が設定してなければ「ファイル指定情報504を受け付ける」1109。そしてそのファイルの「出力可否の確認」1110を行う。
出力ファイルがアプリケーションプログラムが動作する計算機のファイルならば、ファイルの出力可否はそのファイルのアクセス権限を調査すれば良い。オペレーティングシステム（OS）がUNIXの場合、ファイルの許可情報（permission）とアプリケーションプログラムのユーザーを照合して出力可否を判定する。
出力ファイルがアプリケーションプログラムが動作する計算機（以下「Ａ計算機」と呼ぶ）とは別の計算機（以下「Ｂ計算機」と呼ぶ）のファイルならば、図１６の「通信パス設定工程」1602を起動する。図７の「情報通信出力読み込み工程群」705が起動された後、図１６の「処理工程起動信号受付工程」1601で再度信号を分析し「通信パス設定工程」1602が起動される。工程が終了すると再び図７の「処理工程起動信号受け付け工程」701に戻る。
実は「通信パス設定工程」1602、「情報受信工程」1603、「指定ファイル出力工程」1604、「出力可否判定工程」1605、「指定ファイル読み込み工程」1606、「読み込み可否判定工程」1607は、図７の「情報通信出力読み込み工程群」705を、図７の「最初の管理オブジェクトを作成する工程」702から「ポインタ翻訳情報からポインタを求める工程」707までの工程と、同列にならべるのが、自然であり、プログラムの構成も単純かつ明快である。この場合には、図１６の「処理工程起動信号受付工程」1601は不要であり、図７の「処理工程起動信号受付工程」701で、信号に対応する工程を起動する。しかし、以上の様にまとめると一枚の図に入らないので、本明細書では説明の都合により便宜上、図７と図１６を分離している。
さて、Ａ計算機の「通信パス設定工程」1602により計算機Ｂの「通信パス設定工程」1602を起動して両計算機を結ぶ通信パスを設定する。この通信パスを通じてＡ計算機からＢ計算機にファイルの出力可否を問い合わせると、Ｂ計算機の「出力可否判定工程」1605が起動され、その結果はＡ計算機に伝えられる。これが「出力可否の確認」1110の結果となる。出力不可ならば、別のファイルへの出力を試みるため、再度「ファイル指定情報を受け付ける」1109。なお、出力不可ならば処理を中止する処理手順としても良い。
出力可ならば、出力のための「一時ファイルをオープン」1201する。出力ファイルがＡ計算機（アプリケーションプログラムが動作する計算機）のファイルならば直接情報を書き込むことが出来るが、出力ファイルがＢ計算機の場合も含めて一度に手順を説明するため、一時ファイルを用いた手順を説明する。
「オブジェクト集合出力工程を起動」1202し、この一時ファイルにオブジェクトツリーの情報を出力する。「オブジェクト集合出力工程」の詳細は、セクション５.５.２で説明する。情報の出力が終われば「一時ファイルをクローズ」1203する。「ファイル指定情報を特定する」1107で特定されたファイルが、アプリケーションが動作する計算機（自計算機、またはＡ計算機）のファイルならば「一時ファイルを指定ファイルにコピー」1208する工程に移る。
他計算機（Ｂ計算機）のファイルならば、Ａ計算機からＢ計算機への「通信パス設定」1205を行う。つまりＡ計算機の「通信パス設定工程」1602をまず起動し、これにより計算機Ｂの「通信パス設定工程」1602を起動して、両計算機を結ぶ通信パスを設定する。この通信パスを通じてＡ計算機からＢ計算機に「一時ファイルを転送」1206する。Ｂ計算機では「情報受信工程」1603が起動され、一時ファイルを受信する。Ａ計算機では「相手計算機の指定ファイル出力工程起動」1207の工程が起動される。その結果、Ｂ計算機の「指定ファイル出力工程」1604が起動され、一時ファイルの内容を指定ファイルに書き込む。
以上の処理が終わると、「出力対象オブジェクトリストから先頭オブジェクトを取り出す」1104工程に戻る。このリストにある全ての管理オブジェクトの処理が終わると一連の処理は終わる。一括出力フラグがオフの場合は、「出力対象オブジェクトリスト作成」1103を行わないので、出力対象オブジェクトリストから先頭オブジェクトを取り出す」1104工程で直ちに一連の処理工程が終わる。
《セクション５.５.２  オブジェクト集合出力工程》
「オブジェクト集合出力工程」は、オブジェクトツリー出力工程の「オブジェクト集合出力工程を起動」1202、または「オブジェクト情報出力工程」の「オブジェクト集合出力工程を起動」1812から起動される。「オブジェクト集合出力工程」の詳細を図１７に示す。
まず「出力ファイルの指定受け付け」1701を行う。「オブジェクトツリー出力工程の本体と情報通信出力工程」（セクション５.５.１）から起動された場合は、図１２の「一時ファイルをオープン」1201でオープンしたファイルが指定される。図１８の「オブジェクト情報出力工程」から起動された場合は、「出力するファイルの指定を受け付ける」1801で指定されたファイルがそのまま指定される。
指定のファイルに「子オブジェクト開始マークを出力」1702する。また「管理オブジェクトの指定受け付け」1703を行う。「オブジェクトツリー出力工程の本体」（セクション５.５.１）から起動された場合は、図１１の「管理オブジェクトの指定を受け付ける」1101で指定された管理オブジェクト、または「取り出したオブジェクトを管理オブジェクトとして指定」1106する工程で指定された管理オブジェクトがそのまま指定される。図１８の「オブジェクト集合出力工程を起動」1812から起動された場合は、「管理対象オブジェクト？」で判定した対象の管理オブジェクトが指定される。
指定の管理オブジェクトの「オブジェクト集合ポインタ」503の内容が零ならば、「子オブジェクトの終了マークを出力」1708して、一連の処理を終了し、起動元に戻る。
「オブジェクト集合ポインタ」503に値が設定してあれば、それが指定するリストヘッドを特定し、そのリストヘッドからたどれる「子オブジェクトを取り出す」1705。子オブジェクトが無ければ、「子オブジェクトの終了マークを出力」1708して、一連の処理を終了し、起動元に戻る。子オブジェクトが有れば、そのオブジェクトを指定して「オブジェクト情報出力工程を起動」1707する。「オブジェクト情報出力工程」の詳細は、セクション５.５.３で説明する。
子オブジェクトが無くなるまで「オブジェクト情報出力工程」を繰り返し、最後に「子オブジェクトの終了マークを出力」1708して、一連の処理を終了し、起動元に戻る。
《セクション５.５.３  オブジェクト情報出力工程》
「オブジェクト情報出力工程」は、オブジェクト集合出力工程の「オブジェクト情報出力工程を起動」1707から起動される。「オブジェクト集合出力工程」の詳細を図１８に示す。まず「出力するファイルの指定を受け付ける」1801。これは図１７の「出力ファイルの指定受け付け」1701で受け付けたファイルがそのまま指定される。Ｃ言語およびＣ＋＋言語の場合は、指定のファイルをオープンした後は、そのファイルポインタを渡せば、ファイルを指定した事になる。
次ぎに「対象オブジェクトの指定を受け付ける」1802。「オブジェクト情報出力工程を起動」1707の工程ではその対象オブジェクトを指定するので、それがそのまま指定される。以下では例として、a1オブジェクト204が指定されたとする。そしてオブジェクトの情報の出力の最初を意味する「オブジェクト開始マークを出力」1803する。
指定のオブジェクトからそのクラスを特定して「クラス識別情報を出力する」1804。もし、指定されたa1オブジェクト204のアドレスがポインタptr_a1に設定されており、そのクラスがセクション３.３.１で説明したclass Xならば、ptr_a1->cls_print();で「クラス識別情報」が出力される。さらに、指定されたオブジェクトについて「オブジェクト識別情報を出力する」1805。例えば、a1オブジェクトが指定された場合は、a1オブジェクトの名前である文字列“a1”を出力する。
指定されたオブジェクトが管理オブジェクトでなければ、直ちに図１９の処理に移る。指定されたオブジェクトが管理オブジェクトならば、「オブジェクト集合管理情報502を出力」1807する。実際にはファイル指定情報504と「子オブジェクト有無フラグ」509を出力する。ファイル指定情報が設定してなければ、ファイル指定情報が設定していない事を示す情報を出力する。
「ファイル指定情報504が設定してある？」1808の判定が「ある」ならば、この管理オブジェクトが管理するオブジェクトの情報の出力をスキップし図１９の処理に移る。「ファイル指定情報504が設定してある？」1808の判定が「ない」で、「子オブジェクト有無フラグオン？」の判定がオフ（無し）ならば直ちに図１９の処理に移る。
「ファイル指定情報504が設定してある？」1808の判定が「ない」で、「子オブジェクト有無フラグオン？」の判定がオン（有り）ならば、「オブジェクト集合出力工程を起動」1812を行う。つまり、セクション５.５.２の「オブジェクト集合出力工程」を再起的に起動する。
クラス識別情報、オブジェクト識別情報、オブジェクト集合管理情報の他にも、オブジェクトはそれが表現する対象の情報を保持している。しかし、全ての情報を保存する必要は無い。アプリケーションの目的、そのプログラム構成から、保存する情報を選定する。「その他の出力対象のオブジェクトの情報を取り出す」1902により、その選定された情報を取り出す。整数（int）ならば「整数を文字列に変換して出力する」1903。実数（float）ならば「実数を文字列に変換して出力する」1904。文字列（char*）ならば「文字列を出力する」1905。この他のデータ型として文字（char）倍長実数型（double）倍長整数（long int）など、があるが説明を簡単にするため省略した。
「その他の出力対象のオブジェクトの情報を取り出す」1902によりオブジェクトツリー内部のオブジェクトへのポインタが取り出された場合は「ポインタ翻訳情報作成工程を起動」1907する。その詳細はセクション５.５.４で説明する。そして、ポインタ翻訳情報作成工程で得た「ポインタ翻訳情報を出力」1908する。
図１９では示していないが、それ以外のポインタでも図１（ア）の様に、ポインタとそれが示すオブジェクトが１対１の関係ならば、オブジェクトがオブジェクトツリーに収容されていなくても、セクション３.４で述べた方法で保存可能である。つまりポインタの替わりにポインタが示すオブジェクトの情報を出力する。
「その他の出力対象のオブジェクトの情報を取り出す」1902工程は、アプリケーションの特定のクラスの（オブジェクトの）変数を、プログラムのコードで順番を指定して取り出す。情報の出力処理をクラス毎にそのメンバー関数として定義し、そのなかで、出力対象の情報とその順番を指定する。つまり、取り出す順番とそれを処理する手順は全てプログラムに組込まれている。図１９では、これを簡略化して表現している。なお、オブジェクトの情報を読み込むセクション５.６.４のオブジェクト情報読み込み工程の「その他のオブジェクトの情報を読み込む」2609工程では、この順番で情報を読み込むように指定されている。
出力する文字列の間には「区切り符号」が必要である。改行符号、タブ符号、Nullコード、などが文字列の区切り符号として用いる事ができる。「整数を文字列に変換して出力する」1903工程、「実数を文字列に変換して出力する」1904工程、「文字列を出力する」1905工程では、文字列を出力したあと、区切り符号を出力する。
図１９では示していないが、この他に、オブジェクトの中に他のオブジェクトが含まれる場合がある。Ｃ＋＋やJavaではクラスの定義の中に他のクラスのオブジェクトを変数として定義する事ができる。この場合は、そのオブジェクトを再起的に書き出せば良い。
《セクション５.５.４  ポインタ翻訳情報作成工程》
「ポインタ翻訳情報作成工程」は、「オブジェクト情報出力工程」の「ポインタ翻訳情報作成工程を起動」1907から起動される。また、オブジェクトツリーに収容されているオブジェクトへのポインタを保存または転送する場合に直接起動される場合もある。「ポインタ翻訳情報作成工程」の詳細を図２０に示す。この工程の詳細を説明するために、図２１を用いる。図２１は図２のオブジェクトツリーとツリー構造は同じである。個々のオブジェクトから見て、そのオブジェクトを収容する集合の管理オブジェクトを「親オブジェクト」とよぶ。図２１では、オブジェクトから、その親オブジェクトへのポインタが設定してある点が、図２と異なる。また、図２と区別するため、図２１では名称をすべてｂで初めている。
オブジェクトツリーに収容されたオブジェクトへのポインタ翻訳情報を出力する必要が無い場合は、オブジェクトから管理オブジェクトへのポインタは必要ない。しかし、オブジェクトへのポインタからポインタ翻訳情報を求める場合には、オブジェクトから管理オブジェクトへのポインタがあると都合が良い。以下の説明では、オブジェクトから管理オブジェクトへのポインタの存在を前提としている。
「オブジェクトへのポインタの情報を出力する工程」は、まずスタートＡ 2001から起動する。まずポインタ翻訳情報を求める対象の「ポインタの指定を受け付ける」2002、そして「ポインタの先のオブジェクトを特定する」2003。例として図２１のｂ５オブジェクト2110が指定されたとする。以下ではこの指定に対する処理を例として詳細を説明する。
次ぎに「オブジェクト識別情報をバッファに出力する」2004。図２０の例では、ｂ５オブジェクト2110の名前である文字列"ｂ５"を出力する。この後に区切り符号（セクション５.５.３）を出力する。改行符号、タブ符号、Nullコード、などを文字列の区切り符号として用いる事ができる。以下では改行符号を区切り符号とした例を示している。
次ぎに、「親オブジェクトの指定があるかをチェック」2005する。ｂ５オブジェクトの親オブジェクトはｂ１オブジェクトである。この時、「親オブジェクトを指定して“オブジェクトへのポインタの情報を出力する工程”をスタートＢから起動する」2007。つまり、ｂ１オブジェクトを指定して、同じ工程を「スタートＢ」2009から、リカーシブに起動する。その結果、文字列"ｂ１"が同じバッファに出力される。
さらに、ｂ１オブジェクトの親オブジェクトであるｂ０オブジェクトを指定して、スタートＢから、（オブジェクトへのポインタの情報を出力する工程を）リカーシブに起動する。その結果、文字列ｂ０が同じバッファに出力される。ｂ０オブジェクトでは「親オブジェクトの指定があるかをチェック」2005の結果が「無い」、つまり親オブジェクトへのポインタが示す先が無いので、一連の処理が終わる。起動元が有る場合は、起動元に帰る。
b5オブジェクト2110を特定するオブジェクト識別情報の組み合わせは（b0,b1,b5）であるが、バッファへの出力結果は「ｂ５、改行符合、ｂ１、改行符号、ｂ０、改行符号」となる。これを逆順に出力すれば目的のポインタ翻訳情報が得られる。
バッファの内容を逆順に出力せずそのまま出力し、この文字列を読み込む時に、オブジェクト識別情報を組み合わせの先頭に挿入しても良い。つまり、先頭から文字列を読み込む毎に、オブジェクト識別情報の組み合わせは（b5）、（b1,b5）、（b0,b1.b5）と変化する。
なお、Ｃ言語などのリカーシブ関数ならば、先に一番根元の親オブジェクト（boオブジェクト）にアクセスし、その呼び出しを戻る時に、各オブジェクトのオブジェクト識別情報を出力する事が（簡単に）出来る。この場合、バッファに一度蓄積する事も、その内容を逆順に出力する事も不要である。しかし、フローチャートでは説明が複雑になるので、バッファを用いてポインタ翻訳情報作成工程を説明した。
《セクション５.５.５  出力データの構造》
出力の準備として、図２のa1オブジェクト201のファイル指定情報504に「ファイルF0」を指定し、a2オブジェクト205にファイルF2を指定する。さらに「一括出力フラグ」1301をオンに設定する。この状態の時に、a0オブジェクト201を指定して、オブジェクトツリー出力工程の本体（セクション５.５.１）を起動する。
一括出力フラグ1301がオンなので、出力対象オブジェクトリストが作成され、a2オブジェクト、a0オブジェクトの順番で管理オブジェクトが登録される。最初にa2オブジェクトに対応するオブジェクト集合（以降）の情報がファイルF2に書き出される。この出力データの説明は省略する。
次に（ファイルF2に出力された情報を除く）a0オブジェクト以降の情報がファイルF0へ書き出される。ファイルF0に記録されたデータ構造を図２２に示す。「ファイルF0」2201は「（a0オブジェクトの）子オブジェクト開始マーク」2202で始まり、「（a0オブジェクトの）子オブジェクト終了マーク」2218で終わる。「（a0オブジェクトの）子オブジェクト開始マーク」2202の次に「（a1オブジェクトの）オブジェクト開始マーク」2203が記録される。
ここで「(a0オブジェクトの）子オブジェクト開始マーク」「(a1オブジェクトの）オブジェクト開始マーク」などと括弧付きで表現したのは、「子オブジェクト開始マーク、子オブジェクト終了マーク、オブジェクト開始マークは何度出力されても、マークの種類毎にそれぞれ同じであるが、対応するオブジェクトを明確に表示するため」である。
さて次に「a1オブジェクトのクランス識別情報」2204、「a1オブジェクトのオブジェクト識別情報」2205が記録される。a1オブジェクトは管理オブジェクトであるので、次に「a1オブジェクトのオブジェクト集合管理情報」2206が出力される。
次に「(a1オブジェクトの）子オブジェクト開始マーク」2207が出力され、子オブジェクトに関する各種の情報がこれに続く。
a3オブジェクトに関する情報は「（a3オブジェクトの）オブジェクト開始マーク」2208と「a3オブジェクト情報」2209で構成される。「a3オブジェクト情報」2209は「a3オブジェクトのクラス識別情報」「a3オブジェクトのオブジェクト識別情報」「a3オブジェクトのその他のオブジェクト情報」で構成される。図２２で「a3オブジェクト情報」2209が二重線で囲まれているのは、以上の情報の複合体である事を示している。
以下、a4オブジェクトに関する「（a4オブジェクトの）オブジェクト開始マーク」2210と「a4オブジェクト情報」2209、a5オブジェクトに関する「（a5オブジェクトの）オブジェクト開始マーク」2212と「a5オブジェクト情報」2213が続く。これで、a1オブジェクトが管理するオブジェクトの情報が終わるので、「（a1オブジェクトの）子オブジェクト終了情報」2214が出力される。最後に「a1オブジェクトのその他のオブジェクト情報」2215が（図１９の処理で）出力される。
次に、a2オブジェクト205の情報の出力に移り、まず「（a2オブジェクトの）オブジェクト開始マーク」2216を出力する。
その後「a2オブジェクトのクラス集合管理情報」「a2オブジェクトのオブジェクト識別情報」「a2オブジェクトのオブジェクト識別情報」「a2オブジェクトのその他のオブジェクト情報」が出力される。
次にセクション５.５.３の「オブジェクト情報出力工程」の「ファイル指定情報が設定してある？」1808の工程で、a2オブジェクトのオブジェクト集合管理情報502にファイルF2がファイル指定情報504として設定されていることを検出すると、管理対象オブジェクトの出力をスキップする。その結果「a2オブジェクトのその他のオブジェクト情報」と「(a0オブジェクト）子オブジェクト終了情報」1918が出力されてファイルF0が終わる。
なお、図２２では「a2オブジェクトのクラス識別情報」「a2オブジェクトのオブジェクト識別情報」「a2オブジェクトのオブジェクト集合管理情報」「a2オブジェクトのその他のオブジェクト情報」をまとめて「a2オブジェクト情報」1917としている。
《セクション５.６  オブジェクトツリー読み込み工程》
「オブジェクトツリー読み込み工程」707は、セクション５.６.１「オブジェクトツリー読み込み工程の本体」、セクション５.６.２「読み込み制御工程」、セクション５.６.３「オブジェクト集合読み込み工程」、セクション５.６.４「オブジェクト情報読み込み工程」で構成される。それぞれ前の工程から次の工程を呼び出すのが基本であるが、読み込み制御工程やオブジェクト集合読み込み工程は様々な経路で起動される。
また、アプリケーションプログラムが動作している計算機（計算機Ａ）とは別の計算機（計算機Ｂ）の情報を読み込む場合には、（計算機Ａと計算機Ｂの）「情報通信出力読み込み工程群」の各工程を状況に応じて起動する。なお「情報通信出力読み込み工程群」の説明のうち、セクション５.５.１で説明をしなかった工程は、「オブジェクトツリー読み込み工程の本体」と一緒に説明する。
《セクション５.６.１  オブジェクトツリー読み込み工程の本体と情報通信出力読み込み工程群》
「オブジェクトツリー読み込み工程の本体」の詳細を図２３に示す。まず情報読み込みのファイル指定情報504が設定された「管理オブジェクトの指定を受け付ける」2301。そしてその管理オブジェクトに指定された「ファイル指定情報504を特定する」2302。
読み込みファイルがアプリケーションプログラムが動作する計算機のファイルならば、直接「読み込み可否の確認」2306を行う。ファイルの読み込み可否はそのファイルのアクセス権限を調査すれば良い。オペレーティングシステム（OS）がUNIXの場合、ファイルの許可情報（permission）とアプリケーションプログラムのユーザーを照合して読み込み可否を判定する。読み込み不可ならば、一連の処理は終了する。読み込み可なら、その「ファイルをオープン」2310する
読み込みファイルがアプリケーションプログラムが動作する計算機（Ａ計算機）とは別の計算機（Ｂ計算機）のファイルならば、図１６の「通信パス設定工程」1602を起動する。Ａ計算機の「通信パス設定工程」1602により計算機Ｂの「通信パス設定工程」1602を起動して両計算機を結ぶ通信パスを設定する。この通信パスを通じてＡ計算機からＢ計算機にファイルの読み込み可否を問い合わせると、Ｂ計算機の「読み込み可否判定工程」1607が起動され、その結果はＡ計算機に伝えられる。これが「読み込み可否の確認受信」2305である。読み込み不可ならば、一連の処理は終了する。
読み込み可を受信したならば、通信パスを介してＢ計算機からその読み込み情報を（Ａ計算機に）受信し一時ファイルに保存する。これが「一時ファイルに受信」2309である。そしてその「ファイルをオープン」2310する。
次に「読み込み制御工程起動」2311を行う。この詳細をセクション５.６.２で説明する。「読み込み制御工程」が終了し、制御が（returnで）戻れば、読み込みの「ファイルをクローズ」2314して、一連の処理が終了する。この時、始めに指定された管理オブジェクトの先に、読み込んだ情報に基づくオブジェクトツリー（の枝）が再現されている。
《セクション５.６.２  読み込み制御工程》
「読み込み制御工程」の詳細を図２４に示す。まず「管理オブジェクトの指定を受け付け」2401と「読み込みファイルの指定を受け付け」2402を行う。これらはいずれも、起動元で保持する「管理オブジェクト」と「読み込みファイル」がそのまま指定される。つまり、起動元である「オブジェクトツリー読み込み本体」「オブジェクト集合読み込み工程」が「読み込み制御工程」を起動する時点に保持する「管理オブジェクト」と「読み込みファイル」がそのまま指定される。なおＣおよびＣ＋＋言語の場合、読み込みファイルの指定は「ファイルをオープン」2310で求めたファイルポインタを渡すのが簡単である。また、読み込み制御工程から「オブジェクト情報読み込み工程」「オブジェクト集合読み込み工程」が起動されるが、「読み込み制御工程」が保持する「管理オブジェクト」と「読み込みファイル」がそのまま引き継がれる。
次に「制御マーク読み込み」2403を行う。制御マークには図２２に示した様に「オブジェクト開始マーク」「子オブジェクト開始マーク」「子オブジェクト終了マーク」がある。
「オブジェクト開始マーク」を読み込んだ場合は、「オブジェクト情報読み込み工程を起動」2404を実行する。オブジェクト情報読み込み工程の詳細は、セクション５.６.４で示す。
「子オブジェクト開始マーク」を読み込んだ場合は、「オブジェクト集合読み込み工程を起動」2405を実行する。オブジェクト集合情み込み工程の詳細は、セクション５.６.３で示す。オブジェクト集合読み込み工程が終了し、プログラムの制御が読み込み制御工程に戻れば、そのまま（読み込み制御工程の）起動元にプログラムの制御を渡す（return）。
子オブジェクト終了マークを読み込んだ場合は、そのまま（読み込み制御工程の）起動元にプログラム制御を渡す（return）。なお、本明細書の図で「エンド」とある場合、起動元があればその起動元へ制御を渡す（return）ことを意味する。
《セクション５.６.３  オブジェクト集合読み込み工程》
「オブジェクト集合読み込み工程」の詳細を図２５に示す。まず「管理オブジェクトの指定を受け付ける」2501。対応するリストヘッドが無ければ「リストヘッド作成処理」2503を行う。次に「読み込むファイルの指定を受け付ける」2504。最後に「読み込み制御工程を起動」2505を行う。
《セクション５.６.４  オブジェクト情報読み込み工程》
「オブジェクト情報読み込み工程」の詳細を図２６に示す。まず「管理オブジェクトの指定とファイルの指定を受け付ける」2601。
「クラス識別情報を読み込み、オブジェクトを作成する」2602。オブジェクト識別情報を読み込み、オブジェクトに設定する」2603。このオブジェクトを、指定された管理オブジェクトに対応する「オブジェクト集合に収容する」2604。
次に「オブジェクト集合管理情報を読み込み、オブジェクトに設定する」2605。その内容は、「ファイル指定情報」504と「子オブジェクト有無フラグ」509である。ファイル指定情報504が有る場合、およびファイル指定情報504が設定してなくても子オブジェクト有無フラグがオフ（子オブジェクト無し）の場合は、「その他のオブジェクト情報を読み込む」2609に移る。ファイル指定情報504が設定してなく、かつ子オブジェクト有無フラグがオン（子オブジェクト有り）の場合は、「オブジェクト集合読み込み工程を起動」2608する。
「その他のオブジェクトの情報を読み込む」2609工程は、アプリケーションの特定のオブジェクトの変数を、プログラムのコードで順番を指定して読み込む。情報の読み込み処理をクラス毎にそのメンバー関数として定義し、そのなかで、読み込む対象の情報とその順番を指定する。つまり、読み込む順番とそれを処理する手順は全てプログラムに組込まれている。図２６では、これを簡略化して表現している。なお、オブジェクト情報出力工程の「その他の出力対象のオブジェクトの情報を取り出す」1902工程では、読み込みと同じ順番で情報を出力する様に指定されている。
整数（int）ならば「文字列を整数に変換してオブジェクトの変数に設定する」2610。実数（float）ならば「文字列を実数に変換してオブジェクトの変数に設定する」2611。文字列（char*）ならば「文字列の先頭アドレスをオブジェクトの変数に設定する」2612。保存、再現および転送の対象のポインタならば「文字列の組み合わせをポインタ翻訳情報としてポインタ構造体に設定する」2613。
この他のデータ型として文字（char）倍長実数型（double）倍長整数（long int）など、があるが説明を簡単にするため省略した。図２６では示していないが、この他に、オブジェクトの中に他のオブジェクトが含まれる場合がある。例えばＣ＋＋やＪａｖａではクラスの定義の中に他のクラスのオブジェクトを変数として定義する事ができる。この場合は、そのオブジェクトの情報を直接読み込みオブジェクトを作成すれば良い。
以上の読み込みでは、セクション５.５.３の「区切り符号」で、読み込む情報の区切りを検出する。
《セクション５.７  ポインタ翻訳情報からポインタを求める工程》
セクション５.６.４の「オブジェクト情報読み込む工程」で説明したように、ポインタの情報はポインタ翻訳情報、つまりポインタの示すオブジェクトをオブジェクトツリー内で特定するためのオブジェクト識別情報の組み合わせ（文字列の連続）、で読み込まれる。
ポインタ翻訳情報からポインタを求める工程を図２７に示す。まず「ポインタ翻訳情報の指定を受け付ける」2701。例として図２のa5オブジェクト210へのポインタを考え、このポインタ翻訳情報として（ａ１、ａ５）が指定されているとする。なお、図２７の工程は、オブジェクトツリーの根元のオブジェクト（図２ならばa0オブジェクト）を省略した形式のポインタ翻訳情報を扱う工程である。
「探索開始オブジェクトの指定を受け付ける」2702。「ポインタ翻訳情報からポインタを求める工程」はその内部からさらに、「ポインタ翻訳情報からポインタを求める工程」を再帰的に起動するが、最初に起動したときは、探索開始オブジェクトの指定として、オブジェクトツリーの根元のオブジェクト（図２ならばa0オブジェクト）を指定する。
探索開始オブジェクトは管理オブジェクトである事を仮定している。もし管理オブジェクトで無い場合は、処理を中止する。探索開始オブジェクトのオブジェクト集合ポインタ503の値が零で、ファイル指定情報504が設定してない場合も、処理を中止する。オブジェクト集合ポインタ503の値が零で、ファイル指定情報504が設定してある場合は「オブジェクトツリー読み込み工程本体を起動」2705を行う。この工程の後、またはオブジェクト集合ポインタ503に値が設定されている場合は直ちに、「ポインタ翻訳情報の先頭のオブジェクト識別情報をもつオブジェクトを、探索開始オブジェクトに対応するオブジェクト集合のなかから探す」2706。
次に「ポインタ翻訳情報をコピーし、先頭のオブジェクト識別情報を削除する」2707。その結果オブジェクト翻訳情報は（a5）となる。そして「この新しいポインタ翻訳情報に中身があるかを判定する」2708。中身があれば、「探し出したオブジェクトを新たな探索開始オブジェクトとし、この新しいポインタ翻訳情報を指定して、“ポインタ翻訳情報からポインタを求める工程”を再帰的に起動する」2709。
コピーしたポインタ翻訳情報の先頭のオブジェクト識別情報を削除するので、再起的な起動では、いつかポインタ翻訳情報の中身がなくなる。その時に「ポインタ翻訳情報の先頭のオブジェクト識別情報をもつオブジェクトを、探索開始オブジェクトに対応するオブジェクト集合のなかから探す」2706で「探し出したオブジェクトのアドレスを報告する」2710。なお、このアドレスをリターン値で報告すれば、ポインタ翻訳情報からポインタを求める工程を最初に起動した工程にリターン値で報告される。
探し出したオブジェクトのメモリアドレスを、ポインタ構造体406のポインタ401に記録しておけば、ポインタ構造体406への次回のアクセス時にはそれを使い高速なアクセスが可能である。
以上に説明した「ポインタ翻訳情報をポインタに翻訳する工程」により、ポインタが指し示すオブジェクトがオブジェクトツリー上に再現されるまで、管理オブジェクトのファイル指定情報504に指定されたファイルからオブジェクトの情報が読み込まれ、オブジェクトツリーが主メモリ上に再現される部分が拡大する。つまり、当面必要なオブジェクトを自動的に再現するわけである。
《セクション５.８  オブジェクトツリーの修正、削除、解放》
オブジェクトを削除した場合はその管理オブジェクトが持つ「子オブジェクト有無フラグ」509の状態を適正に調整する。つまり、その管理オブジェクトの子オブジェクト、つまりその管理オブジェクトに対応するオブジェクト集合のオブジェクト数、が零になれば、「子オブジェクト有無フラグ」509をオフにする。逆に、オブジェクトを追加した場合は「子オブジェクト有無フラグ」509をオンにする。
また、オブジェクトを削除、修正および追加した時は、ファイル指定のある管理オブジェクトをオブジェクトツリーの根元方向に探索し、その管理オブジェクトの「情報修正フラグ」508をオンにする。
主メモリの使用量を減らすためなどの目的などで、オブジェクトツリーの一部または根元の管理オブジェクト以外の全部を解放する場合には、以下の様にする。まず、解放するオブジェクトツリーの部分の根元の管理オブジェクトを指定する。例えば、図２でa1オブジェクトに対応するオブジェクト集合206を解放する場合には、a1オブジェクト204を指定する。図２のオブジェクトツリーの全体（但しa0オブジェクト201以外）を解放する場合には、a0オブジェクト201を指定する。指定した管理オブジェクトにはファイル指定情報504が必要なので、事前に設定しておく。例えば、a0オブジェクト201にファイルF0、a1オブジェクト204にファイルF1を指定する。また、「一括出力フラグ」1301をオンに設定する。
この状態で、a0オブジェクトを指定し、ブジェクトツリー出力工程の本体を起動すると、a1オブジェクトに対応するオブジェクト集合の情報がファイルF1に記録され、それ以外の情報（a0オブジェクトを除く）がファイルF0に記録される。なお、a0オブジェクトの「情報修正フラグ」508がオフの場合は、情報の修正が無いので、ファイルF0へ出力は行われない。同様に、a1オブジェクトの「情報修正フラグ」508がオフの場合は、情報の修正が無いので、ファイルF1へ出力は行われない。
この様にして情報を出力すると、a0オブジェクト以外のオブジェクトツリーを解放（削除）しても、必要に応じて再現する事が出来る。なお、オブジェクトツリーを解放する前に、解放する予定のオブジェクトへのポインタをポインタ翻訳情報402に翻訳し記録しておく、また構造体406に保持されたポインタ401の値を零にしておく。この様にしておけば、ポインタ翻訳情報からポインタを求める工程で、オブジェクトツリーが再現される。なお、オブジェクト集合を解放した時、その集合の先頭にあるリストヘッド506も解放される。そして、管理オブジェクトのオブジェクト集合ポインタ503の値を零に設定する。
a1オブジェクトを指定し、ブジェクトツリー出力工程の本体を起動すると、a1オブジェクトに対応するオブジェクト集合の情報がファイルF1に記録される。その後、a1オブジェクトに対応するオブジェクト集合をオブジェクトツリーから解放（削除）する。
《セクション６  オブジェクト管理装置》
オブジェクト管理方法を実現したプログラムをロードした計算機はオブジェクト管理装置として動作する。複数のマイクロプロセッサを組み合わせたり、ＩＣ等のハードウエア回路を組み合わせでオブジェクト管理装置を実現する事ができる。以下では、図７（セクション５.２）の各工程をプロセッサまたは論理回路で実現する例を図２８に示す。
「入力部」2801からの入力を「入力分析手段」2802で分析し、対応する手段に信号を送る。図２８では信号を受ける手段として、「最初の管理オブジェクトを作成する手段」2804、「オブジェクト新規作成収容手段」2805、「オブジェクトツリー出力手段」2806、「情報通信出力読み込み手段群」2807、「オブジェクトツリー読み込み手段」2809、「ポインタ翻訳情報からポインタを求める手段」2803、を示している。それぞれ、図７（セクション５.２）の各工程を実現するプログラムをロードしたプロセッサまたは、これらプログラムの動作を論理回路で実現した手段である。アプリケーションの目的に合わせ、これ以外の手段を追加しても良い。
「最初の管理オブジェクトを作成する手段」2804に信号が入力されると、信号が保持する情報や「主記憶部」2810の情報を元にオブジェクトを作成し「主記憶部」2809に記録する。「オブジェクト新規作成収容手段」2805に信号が入力されると、信号が保持する情報や「主記憶部」2810が保持する情報を基にオブジェクトを作成し、「主記憶部」2810内のオブジェクトツリーに収容する。
「オブジェクトツリー出力手段」2806への信号が指定する（管理）オブジェクトから先の（根元から遠い）オブジェクトツリーの情報を「主記憶部」2810から読み取り、「二次記憶部」2811に記録したり、「通信部」2812を介して「通信網」2813の先の「別の装置」2814に送信する。
「オブジェクトツリー読み込み手段」2809では、この手段への信号が指定する（管理）オブジェクトに指定されたファイルからの情報を、「二次次記憶部」2811から、または「通信部」2812を介した「通信網」2813の先の「別の装置」2814から読み込む。そして指定の（管理）オブジェクトの先にオブジェクトツリーを再現する。
「情報通信出力読み込み手段群」2807は、「オブジェクトツリー出力手段」2806および「オブジェクトツリー読み込み手段」2809からの（「入力分析手段」2802経由の）信号により起動される、補助手段を提供する。
「ポインタ翻訳情報からポインタを求める手段」2803は、指定されたポインタ翻訳情報をポインタに変換する手段で、必要に応じて、「オブジェクトツリー読み込み手段」2809を（「入力分析手段」2802経由の）信号により起動する。
《セクション７  アプリケーション》
《セクション７.１  論理模型の取り扱い》
オブジェクトおよびオブジェクト相互の関係を指定する事により、様々な論理的な関係や情報を表現する事ができる。本明細書ではこれを論理模型と呼ぶ。
計画中の通信ノードと通信リンクの関係などを表現した通信網の設計図、および現実の通信網を表現した図面も論理模型である。拠点、拠点での観光などの活動、拠点間の移動手段を組み合わせた旅行計画も論理模型である。架空のまたは現実の３次元の空間の構造も論理模型として表現することが出来る。複雑な処理を実現するために、それぞれ単純な処理を担当するオブジェクトを組み合わせたものも論理模型である。
これらの論理模型を取り扱う場合に本発明は便利である、論理模型の情報が一つの計算機に全て存在する場合にも、インターネットなどの通信網に接続された複数の計算機で取り扱う場合にも、本発明は適用可能である。より複雑な、通信網に情報が分散して保持されているケースを例に、論理模型の取り扱いを説明する。
インターネットでの論理模型の表現の様子を図２９を用いて説明する。インターネットに接続された４台の計算機があり、「計算機Ａ」2901には「ファイルA1」2905と「ファイルA2」2906が、「計算機Ｃ」2903には「ファイルＣ」2907が、「計算機Ｄ」2904には「ファイルＤ」2908が、保持されている。
さて「計算機Ｂ」2902の主メモリに、最初の管理オブジェクトである「B0オブジェクト」2918を作成する（セクション５.３）。B0オブジェクト2918のオブジェクト集合管理情報502のファイル指定情報504に「計算機Ａ」2901の「ファイルA1」2905を設定する。ファイルA1に記録されたオブジェクトを指し示す（予定の）「ポインタ構造体」2919のポインタ翻訳情報を設定し、ポインタ翻訳情報からポインタを求める工程（セクション５.７）を起動する。この時、「ファイルA1」2905に記録されたオブジェクト群が「計算機Ｂ」2902の「主メモリ」2916に再現される。これが「計算機Ｂの論理模型空間」2910の「ファイルA1の論理模型空間」2912である。
再現されたオブジェクトはオブジェクトツリーに収容されているが、オブジェクト相互の関係はオブジェクトが保持するポインタ構造体で表現される。図２９では、これらのポインタ構造体で表現される論理模型を表現し、オブジェクトツリーの構造は示していない。従って、図２９の論理模型空間では、ツリー構造ではなく、論理模型の構造を示すネットワーク型の構造を示している。
「ファイルＡ１の論理模型空間」2912のあるオブジェクトが保持するポインタ構造体が指し示す先のオブジェクトが「ファイルＤ」2908に記録されたオブジェクトならば、このポインタ構造体のポインタ翻訳情報からポインタを求める工程（セクション５.５.４）により、「ファイルＤの論理模型空間」2913が「計算機Ｂの論理模型空間」2919に再現される。ポインタ構造体が表現する関係により「ファイルＡ１の論理模型空間」2912と「ファイルＤの論理模型空間」2913は接続されている。
同じファイルに記録された情報を用いて別の計算機にも、（同時に）論模型を作成する事ができる。それぞれの計算機で必要とする部分の論理模型を再現出来るのが、本発明の特長の一つである。
「計算機C2903の論理模型空間」2911に最初に「ファイルＤの論理模型空間」2914が再現されているとする。「ファイルＣ」2907に記録されたオブジェクトを指し示すポインタ構造体が、「ファイルＤの論理模型空間」2914のあるオブジェクトに保持されていれとする。このポインタ構造体のポインタ翻訳情報からポインタを求める工程（セクション５.５.４）により、「ファイルＣの論理模型空間」2915が「計算機Ｃの論理模型空間」2911に再現される。ポインタ構造体が表現する関係により「ファイルＤの論理模型空間」2914と「ファイルＣの論理模型空間」2915は接続される。
本発明により、現実の世界の存在をなぞられたオブジェクトとその相互関係を表現した論理模型を、通信網に接続された複数の計算機で共同して利用することができる。通信網に接続されていない計算機とは、ＦＤ（フロッピーディスク）やＣＤ−ＲＯＭなどの媒体を情報を交換しても良い。
《セクション７.２  ３次元空間表示プログラム》
架空のまたは現実の３次元の空間の構造も論理模型として表現することが出来る。３次元空間の表現の例としては、ホームページvwww.comが提供する擬似空間があげられる。図３０を用いてこれを説明する。ここでは、３次元の仮想空間内部をウェブブラウザを用いて、あたかも実際に移動する様に見せている。情報量を押さえるために、遠くにある物はその細部を表現しないようにしている。物体に近づけば、その細部を画面に表示する。しかし、一つの空間（a1空間3001）から別の空間（b1空間3002）に移動する場合（例えばドアをクリックした場合）、b2空間3002のすべての情報を始めに計算機に取り込む。その結果、独立した３次元の空間であるb1空間に完全に入れ替わる。元のa1空間3001から別のb1空間3002にワープした感じである。振り向いても、両方の空間が接続されている様子を直接見ることは出来ない。b1空間3002からa1空間3001に戻る情報が設定してないと、戻る事も出来ない。
ところが本発明により、計算機上に再現する三次元空間に、現実の世界の様に広大な広がりを持たせることができる。空間を表現する情報のファイルが細分化され、インターネットで接続された計算機に分散して収容されていても、物体に近づく事により、次々に読み込み、画面に表示することができる。このしかけを図３１に示す。
仮想の３次元空間の最初の情報として、ファイルF0を読み込み、「ファイルF0の論理模型空間」3111が再現されているとする。この論理模型空間には、オブジェクト「Ｏ１」3101からオブジェクト「Ｏ７」3107が再現されている。オブジェクトＯ３にはそのオブジェクト集合管理情報502のファイル指定情報504としてファイルF3が設定されている。これを「Ｏ３/Ｆ３」3103と表現する。同様にオブジェクトＯ５にはそのファイルF5が記録されており、「Ｏ５/Ｆ５」3105と表現する。なお、図３１では、オブジェクトの相互関係を指定するポインタの表現や、オブジェクトの位置を指定する座標情報の表現は省略している。
この空間の中の「現在位置」3113を基準として、「新ファイル読み込みゾーン」3114が設定されている。現在位置から図面の上方を向いているので、「新ファイル読み込みゾーン」3114は図面の上方に膨らんでいる。オブジェクト「Ｏ５/Ｆ５」3105はこの「新ファイル読み込みゾーン」から外れているので、ファイルF5の読み込みは行わない。
しかし、オブジェクト「Ｏ３/Ｆ３」3103は、「新ファイル読み込みゾーン」3114に入っているので、ファイルF3の情報を読み込む。その結果、「ファイルF3の論理模型空間」3112に、オブジェクト「Ｏ８」3108、「Ｏ９］3109、「Ｏ１０」3110が再現される。
この仕掛けを適用した例を図３０（２）に示す。「a2空間」3003の中を移動すると、「新ファイル読み込みゾーン」3114の中に、「b2空間」3004の情報を記録したファイルがファイル指定情報504として設定されたオブジェクトが入るので、「b2空間」3004を読み込む。この結果、「a2空間」3003と「b2空間」が接続される。従って、「b2空間」3004に自然に入っていける。「b2空間」3004で振り向けば、「a2空間」3003との接続部分を見ることも出来るし、「a2空間」3003に戻る事も出来る。さらに、「c空間」3005を接続して、その中に入って行くことも出来る。
管理オブジェクトのファイル指定情報504に設定するファイルの情報をつなぎ合わせれば、広大な広がりを表現する場合でも、その中の現在位置に近い部分の情報のみ再現する事ができる。計算機の主メモリには制限があるので、必要な部分のみ再現出来るのは都合が良い。仮想の三次元空間を移動する事により、必要な空間を次々に再現してゆく。
また、現在位置から遠い所の情報を主メモリから解放すれば、どんなに移動しても、主メモリが無制限に消費される事を防止する事が出来る。「新ファイル読み込みゾーン」3114の外側に「オブジェクト保持ゾーン」3115を設定し、これから外れたオブジェクトにファイル指定情報504が設定してあれば、対応する情報を（情報修正フラグ508がオンならば）出力して、対応するオブジェクトを廃棄する。例えば、図３１の例では、オブジェクト「Ｏ１１/Ｆ１１」3116が「オブジェクト保持ゾーン」3115から外れているので、ファイルＦ１１の論理模型空間3119を解放する。その結果、オブジェクト「Ｏ１２」3117とオブジェクト「Ｏ１３」3118が、主メモリから解放される。なお厳密に言えば、オブジェクトツリー上で、オブジェクト「Ｏ１１/Ｆ１１」3116以降のオブジェクトが全て「オブジェクト保持ゾーン」3115から外れている事を確認して解放する必要がある。さもなくば、「Ｏ１１/Ｆ１１」3116以降のオブジェクトツリーを解放する事は出来ない。
《セクション７.３  ３次元のショッピングモール》
３次元空間表示プログラムの適用例として、インターネット上の３次元のショッピングモールの例を以下に示す。
従来の技術では、通路から見たお店の外観の情報を３次元データとして、通路（ショッピングモール）の情報ファイルに組み込む必要が有る。お店のドアをクリックした時に移行する先の３次元の情報ファイルが、お店専用の情報である。この場合、お店の情報を変更しても、通路から見た情報は変わらない。お店の内側からポスターを掲示する様な事は出来ない。店先に特売品をならべることもできない。お店のドアをクリックして、異なる空間に入らなければ、お店のなかの状況は判らない。
本発明を用いて３次元の空間情報を、通路の情報、窓の情報、入り口の情報、内部の棚の情報などと、ファイルを分けておく。通路の情報については変更なくても、その情報から参照している、お店の情報の内容（窓の情報、入り口の情報、内部の棚の情報など）が変更されれば、その変化は、通路を歩く人から見ることが出来る。お店に近づくと、お店の様子まで見える。通路の情報ファイルをショッピングモール運営者の計算機で管理していて、何ら変更を加えなくても、お店が管理する情報ファイルの内容を書き換える事により、通路の様子は活発に変化する事になる。
図３２の例では、「通路（ショッピングモール）」3211の情報は、「ショッピングモールの管理者の計算機」3209に保持される「ファイルＣ」3210に有る。ファイルＣを読み込む事により「通路（ショッピングモール）」3211が再現される。
通路からテナントＡに近づき、「新ファイル読み込みゾーン」3114の中に、ファイルＡが指定された（管理）オブジェクトが入ると、テナントＡの計算機3201の「ファイルＡ」3203読み込まれ、通路3211と接続された「テナントＡの空間」3205が再現される。この時、通路3211から「テナントＡの空間」3205を覗けば「店頭のバーゲン品」3207を見ることが出来る。
同様に通路からテナントＢに近づき、「新ファイル読み込みゾーン」3114の中に、ファイルＢが指定された（管理）オブジェクトが入ると、テナントＢの計算機3202の「ファイルＢ］3204読み込まれ、通路3211と接続された「テナントＢの空間」3206が再現される。この時、通路3211から「テナントＡの空間」3205をのぞき込み、クリスマスデコレーション3208を見ることができる。
《セクション７.４  通信網設計図取り扱いプログラム》
通信網の図面を利用する場合、その利用目的により必要な情報が大きく異なる。たとえば、ある企業の通信網として東京、ニューヨーク、ロンドンを接続した通信網を設計する場合を想定する。東京、ニューヨーク間の接続状況は東京ノード、ニューヨークノード、これらを結ぶ回線で表示される。通常はこの表示で十分である。
しかし、実際に回線を接続するためには、東京のビル内の配線や、東京のビルに置かれる通信装置に関する情報が必要である。また、通信品質を正確に集計するためには、東京ビルに置かれた通信装置、東京のビル内の配線、日本国内の回線、国際回線、アメリカ国内の回線、ニューヨークのビル内の配線、ニューヨークのビルに置かれた通信装置の情報が必要である。
本発明の技術を用いて、必要に応じて通信網の詳細な情報を計算機に取り込み、論理模型を作成すれば良い。詳細情報を計算機の図面に表示する事もできるし、論理模型を用いて、通信品質の積み上げプログラムを起動する事もできる。ある通信装置や回線に障害が発生した時の状況を、この論理模型でシュミレーションすることもできる。
《セクション７.５  旅行計画取り扱いプログラム》
旅行計画を取り扱う場合、その利用目的により必要な情報が大きく異なる。例えば、最初の旅行計画では全体の大まかなスケジュールと、観光の目玉となる場所の情報があればよい。しかし、実際にその旅行に参加するとなると、成田空港の集合場所や、成田空港へのアクセスなどの細かい情報が必要になる。
本発明により、その時の処理に必要なオブジェクトの空間を再現する事ができる。例えば、始めの旅行計画では単に成田と表示していても、そこをクリックする事により、成田空港に関する情報を保持したオブジェクトが再現される。そのオブジェクトから成田空港の平面図やお店の情報を取り出す。オブジェクトに保持する情報は、インターネットのホームページのアドレスでも良い。そのアドレスにアクセスすると成田空港の情報が得られる。
また拠点間の移動をクリックすると、その移動の情報を保持するオブジェクトが再現される。その情報から、例えば飛行機の座席の配置や、食事の案内が得られる。
論理模型を必要に応じて拡大していく本発明により、必要な情報がいもずる式に取り出せるわけである。なお、旅行計画の技術は物流計画にも適用可能である。
《セクション７.６  オブジェクトベースの処理プログラム》
《セクション７.６.１  使用する機能のみロードする仕組み》
オブジェクトベースの処理プログラムは、それぞれ単純な処理を担当するオブジェクトを組み合わせて複雑な処理を実現する。しかし、すべてのオブジェクトを最初にすべて再現する必要は無い。よく使う機能を担当するオブジェクトのみ最初に再現し、利用する機会が少ない機能を担当するオブジェクトは必要に応じて再現すれば良い。本発明を利用すれば、機能毎のオブジェクトへのポインタ構造体を用意しておけば良い。その機能を起動する時に、ポインタ翻訳情報をポインタに変換すれば、オブジェクトが再現される。
この様にして、様々な機能を提供するプログラムであっても、主メモリには良く使う機能のオブジェクトのみが再現されるので、主メモリの使用量は少ない。ワープロソフトには様々な機能が提供されているが、実際に利用するのは少ないのが実状である。ポインタ構造体があれば必要な時に必要な機能を呼び出すことができる。
なお、追加で提供する機能を提供するオブジェクトのファイルを修正する事により、提供機能を変えることも可能である。
《セクション７.６.２  CORBAとの連携》
CORBAを用いれば、複数の計算機に存在するオブジェクトの間で処理の起動やその結果を伝える事が出来る。
しかし、計算機の主メモリに余裕があれば、関係するオブジェクトをすべて同じ計算機に再現すれば、処理は早くなる。これはセクション７.６.１で説明した「使用する機能のみロードする仕組み」で実現する事ができる。さて主計算機の主メモリが少ない等の事情で、一部機能を別の計算機のオブジェクトに依頼する方法を以下で説明する。
まず図３３に示す様に、ポインタ構造体に「他計算機フラグ」3307を追加する。なお「ポインタ」3301と「ポインタ翻訳情報」3302は図４と同じである。さらに、別計算機のオブジェクトにアクセスするための情報を図３４に示す。まず「ポインタ翻訳情報と他計算機オブジェクトアクセス情報の対応表」3401を定義する。これには「ポインタ翻訳情報」3402と「他計算機オブジェクトアクセス情報」3403の対応が記録されている。
また、「他計算機アクセスオブジェクト」3404を導入する。これには「送信情報」3405、「受信情報」3406がある。Ｃ、Ｃ＋＋、Javaならば、これらはメンバー変数（の集合）である。さらに「他計算機オブジェクトアクセス情報」3409がある。これは「ポインタ翻訳情報と他計算機オブジェクトアクセス情報の対応表」3401の「他計算機オブジェクトアクセス情報」3403をコピーしたものか、または「計算機オブジェクトアクセス情報」3403へのポインタである。また、「送受信工程」3404も有り、これは「他計算機アクセスオブジェクト」3404のメンバー関数である。さらに、グローバル変数として「オブジェクト展開禁止フラグ」3405を導入する。以上の情報の使い方を図３５と図３６を用いて説明する。
図３５と図３６は、図３３のポインタ構造体と図３４の情報を用いてオブジェクトにアクセスする工程である。まず「ポインタ構造体3306の指定を受け付ける」3501。その「ポインタ」3301の値が零の場合は「ポインタ翻訳情報からポインタを求める工程を起動」3502を行う。
この詳細が図２７に示されているが、「ファイル指定情報の設定あり？」2704の結果が「Yes（あり）」の判定の後に「オブジェクト展開禁止フラグ3409がオフか？」の判定をいれる。オフならば「オブジェクトツリー読み込み工程本体を起動」2705を行うが、オンならば処理を終了する。
従って、「オブジェクト展開禁止フラグ」3409がオンならば、「ポインタ翻訳情報からポインタを求める工程を起動」3502の結果は「ＮＧ（不成功）」となる。もし「ＯＫ（成功）」ならば「求めたメモリアドレスをポインタ構造体のポインタに設定」3505に進むが、「ＮＧ（不成功）」の場合は、「ポインタ翻訳情報と他計算機オブジェクトアクセス情報の対応表3401を検索」3506を行う。この対応表のポインタ翻訳情報の中に、指定されたポインタ構造体と同じポインタ翻訳情報が無ければ、処理を中止する。あれば「他計算機アクセスオブジェクト3404を作成し、対応する他計算機オブジェクトアクセス情報3403をコピー」3508する。「他計算機アクセスオブジェクト」3404内部の「他計算機オブジェクトアクセス情報」3407はこの情報である。
次に、この作成した「他計算機アクセスオブジェクト3404のアドレスをポインタ構造体3306のポインタ3301に設定」3509し、「ポインタ構造体3306の他計算機フラグをオン」3510にし図３６の処理工程に移る。なお「ポインタ構造体」3306の「ポインタ」3301の値が零の場合、「ポインタ翻訳情報からポインタを求める工程を起動」3503が成功した場合も含め、図３６の処理工程は共通である。
「ポインタ構造体」3306の「他計算機フラグ」3307がオフならば、「ポインタ3301が指し示すオブジェクトにアクセス」3603して、その「結果を受け取り」3604処理は終了する。
「ポインタ構造体」3306の「他計算機フラグ」3307がオンならば「ポインタ構造体3306のポインタ3301から、他計算機アクセスオブジェクトを特定」3605する。そして、「他計算機アクセスオブジェクト」3404の「送信情報3405設定」3606を行い、「送受信工程3408起動」3607を行う。「送受信工程」3408は、「他計算機アクセスオブジェクト」3404の「他計算機オブジェクトアクセス情報」3407を利用して、他計算機のオブジェクトに「送信情報3405」で指定された信号を送る。
他計算機のオブジェクトからの結果情報は「他計算機オブジェクトアクセス情報」3407の「受信情報」3406に指定されるので、「受信情報3406取り出し」3608で取り出して一連の処理は終了する。
《セクション７.６.３  従来のオブジェクト指向プログラミングとの違い》
従来のオブジェクト指向プログラミングでは、各計算機に作成されるオブジェクトは起動するプログラムのロジックにより直接作成されるが、本発明では、個々の計算機の内部に作成するオブジェクトの集合をファイルから作成するケースも想定している。従来はこの様なアプローチは無かった。
本発明では、ある計算機で作成したオブジェクトの集合の情報をファイルに記録し、そのファイルを読み込んで別の計算機でオブジェクトを再現する事が出来る。この方法ならば、オブジェクトの集合を作成する複雑なプログラムは選ばれた計算機で行えば良い。配布されるオブジェクトと一緒に配られる（メンバー）関数は単純な物に限定することができる。これにより、処理を行う計算機の処理負荷、メモリ負荷が少なくなり、また情報の転送時間も短くなる。オブジェクトの集合を作成するための、ノウハウが集中した特殊なプログラムを配布する必要がなくなるので、技術の漏洩防止の効果もある。
最初に作成するオブジェクトの集合は膨大になっても、その情報ファイルを分割しておけば、オブジェクトを再現して処理を実行する際に、必要なオブジェクトのみ再現することができる。
《セクション７.７  Javaの機能強化》
Ｊａｖａ言語はインターネットでプログラムを配布するのに便利であるので注目を集めているが、Javaのプログラムを書くときにはポインタが使えない。これは、インターネットから取り込んだJavaプログラムが不正なアクセスをしない様にするためである。しかし、ポインタが使えないとプログラムの表現力が制限される。
本発明では通常のポインタ構造体406または改良したポインタ構造体3306を定義した。Javaの場合はこれをクラスで定義し、「ポインタもどき」として使う事が出来る。これを以下に示す。
（１）オブジェクトツリーに収容するオブジェクトをclass BaseObj{};の派生クラスとする。
（２）オブジェクト識別情報の連続であるポインタ翻訳情報402に相当するクラス（構造体）をclass PtrConvertd{};とする。
（３）「ポインタもどき」のクラスを、class Prt{ public: BaseObj bp; PtrConverted pc;};と定義する。
Javaではポインタが使えないので、ポインタ構造体406のポインタ401をBaseObj型の変数bpに変えている。
Prt prt1;で「ポインタもどき」のオブジェクトを作成し、prt1.pcにポインタ識別情報を設定する。ポインタ翻訳情報をポインタに変換する工程（セクション５.７）で特定した（オブジェクトツリーに収容されている）オブジェクトを、bpに設定する。つまり特定されたオブジェクトをxxxObjとした時、bp=xxxObj;と設定する。この時、ptr1.bpで目的のオブジェクトにアクセスする事ができる。ポインタ翻訳情報をポインタに翻訳する工程（セクション５.７）または、図３５と図３６によるオブジェクトにアクセスする工程（セクション７.６.２）を（Prt::bpへの値の設定まで含めて）class Prtのメンバー関数として実現すれば、その使い勝手はさらに良くなる。なお、セクション５およびセクション７.６.２で説明した各工程はJavaで記述しても良いし、ＣまたはＣ＋＋で記述して、Javaから呼び出しても良い。
以上により、Javaの安全性を損なうことなく、「ポインタもどき」を利用する事が出来る。またこの「ポインタもどき」は、保存、再生、転送する事が出来る。
《セクション８  請求項との対応》
オブジェクト管理方法は計算機のプログラムで実現するのが一般的である。これらのプログラムは、ＦＤ（フロッピーディスク）、ＣＤ（コンパクトディスク）、光ディスク、ハードディスクなどの、計算機で読み取り可能な媒体（computer-readable medium）に記録されて配布される。また通信網を介してプログラムが配布されるケースがあり、多くの場合には最終的にはハードディスクなどの二次記録媒体に記録されてインストールが完了する。また、プログラムを計算機のハードディスクなどの二次記録媒体にインストールして、ソフト込みの計算機として販売する形態もある。
通信網から取り込んだプログラムを直接主メモリに展開して実行するケースもある。Java言語で書かれたプログラムがこれに相当する。主メモリも計算機で読み取り可能な媒体（Computer-Readable Media）であることに注目すれば、このケースもハードディスクにインストールされたプログラムと同じであるといえる。
請求項１から請求項６０がオブジェクト管理方法、方法を記録した計算機で読み取り可能な媒体、情報を記録した計算機で読み取り可能な媒体の請求項である。
請求項１から請求項８は、クラス識別情報を用いてオブジェクトを再生する方法に関連した請求項である。請求項９から請求項５３はオブジェクトツリーの基本に関する請求項である。このうち、請求項９から請求項１３はオブジェクトツリーのデータ構造に関する請求項である。請求項１４はポインタ翻訳情報のデータ構造の請求項である。請求項１５から請求項１８はオブジェクトツリー作成に関する請求項である。請求項１９から請求項２２はポインタ翻訳情報をポインタに変換する方法に関する請求項である。請求項２３から請求項２５はポインタ翻訳情報を求める方法に関する請求項である。請求項２６から請求項３０は出力対象オブジェクトリストを作成する方法に関する請求項である。請求項３１から請求項３９はオブジェクトツリーの情報出力に関する請求項である。請求項４０から請求項４２はオブジェクトツリーの情報の記録に関する請求項である。請求項４３から請求項４５オブジェクトツリーの読み込み方法に関する請求項である。請求項４６から請求項４９はオブジェクトツリーの追加修正削除と解放に関する請求項である。請求項５０から請求項５３はポインタ翻訳情報からポインタを求める方法に関する請求項である。請求項５４から請求項６０は本発明のアプリケーションに関する請求項である。
請求項６１と請求項６２は装置の請求項である。
産業上の利用可能性
以上のように、本発明はオブジェクトベース技術における、オブジェクトとポインタの保存と再現および転送に広く用いる事ができる。本発明の技術は、オブジェクト指向データベースの技術に比べ単純である。また、「複数の計算機に分散収容されたデータをつなぎ合わせて、互いに関係するオブジェクトの集合を作成または再現する」と言う、従来のオブジェクト指向データベースでは実現不可能なことも可能になった。
「アクセスする必要が生じたオブジェクト集合のみ主メモリ上に再現する」ことも本発明の特長である。多数のオブジェクトが相互に関係している場合に、その全てを主メモリ上に再現するのは不可能な場合がある。また可能であっても読み込み時間がかかること、主メモリを多量に使用することなどの問題がある。本発明により、これらの問題が解決される。
本発明は、オブジェクトおよびオブジェクト相互の関係を指定した論理模型の取り扱いに適している。論理模型の例として通信網の設計図および図面、旅行計画や物流計画、三次元空間の表現、があげられる。これらの論理模型の情報がインターネットなどの通信網に接続された計算機に分散して保持されていても、これらの情報をつなぎあわせて、必要な部分の論理模型のみを再現する事が出来る。これにより、三次元空間を自然に接続する事が出来る。インターネットのショッピングモールの通路から、各テナントの中を覗く事も可能になる
オブジェクトベースの処理プログラムは、それぞれ単純な処理を担当するオブジェクトを組み合わせて複雑な処理を実現する。本発明により、処理に必要なオブジェクトのみ再現する事が可能になった。主メモリに余裕があればすべてのオブジェクトを再現しても良い。主メモリの余裕がないときには、他の計算機のオブジェクトに処理を依頼する様に切り替える事が出来る。
Javaではポインタを使用することは出来ないが、本発明に基づき「ポインタもどき」を実現して、Ｃ言語のポインタの様に使う事が出来る。この「ポインタもどき」はJavaの安全性を損なうことは無い。またこの「ポインタもどき」は、保存、再生、転送する事が出来る。
【図１】
0003906380.tif 000002
【図２】
0003906380.tif 000003
【図３】
0003906380.tif 000004
【図４】
0003906380.tif 000005
【図５】
0003906380.tif 000006
【図６】
0003906380.tif 000007
【図７】
0003906380.tif 000008
【図８】
0003906380.tif 000009
【図９】
0003906380.tif 000010
【図１０】
0003906380.tif 000011
【図１１】
0003906380.tif 000012
【図１２】
0003906380.tif 000013
【図１３】
0003906380.tif 000014
【図１４】
0003906380.tif 000015
【図１５】
0003906380.tif 000016
【図１６】
0003906380.tif 000017
【図１７】
0003906380.tif 000018
【図１８】
0003906380.tif 000019
【図１９】
0003906380.tif 000020
【図２０】
0003906380.tif 000021
【図２１】
0003906380.tif 000022
【図２２】
0003906380.tif 000023
【図２３】
0003906380.tif 000024
【図２４】
0003906380.tif 000025
【図２５】
0003906380.tif 000026
【図２６】
0003906380.tif 000027
【図２７】
0003906380.tif 000028
【図２８】
0003906380.tif 000029
【図２９】
0003906380.tif 000030
【図３０】
0003906380.tif 000031
【図３１】
0003906380.tif 000032
【図３２】
0003906380.tif 000033
【図３３】
0003906380.tif 000034
【図３４】
0003906380.tif 000035
【図３５】
0003906380.tif 000036
【図３６】
0003906380.tif 000037