JP2006277758A - 通信方法 - Google Patents
通信方法 Download PDFInfo
- Publication number
- JP2006277758A JP2006277758A JP2006119878A JP2006119878A JP2006277758A JP 2006277758 A JP2006277758 A JP 2006277758A JP 2006119878 A JP2006119878 A JP 2006119878A JP 2006119878 A JP2006119878 A JP 2006119878A JP 2006277758 A JP2006277758 A JP 2006277758A
- Authority
- JP
- Japan
- Prior art keywords
- remote
- application
- class
- machine
- service
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/465—Distributed object oriented systems
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Computer And Data Communications (AREA)
- Information Transfer Between Computers (AREA)
Abstract
【課題】リモート・サービス・アプリケーションにオブジェクト指向を導入することにより、開発サイクル期間の低減を図り、システムの修正等の柔軟性を高めることがでる通信方法を提供する。
【解決手段】メモリ50を有するコンピュータ・システム1を使用し、複数のマシーン・タイプの複数のリモート・マシーン90と通信する方法において、メモリ50内に、複数のリモート・マシーン90の1つにサービスを記述する第1の複数のソフトウェア・オブジェクトを構成するステップと、コンピュータシステム1がオブジェクトに記述された実行される機能に応じて1つのリモート・マシーン90と交信するステップと,コンピュータシステム1が第1の複数のオブジェクトに記述された実行される機能に応じて交信したリモート・マシーン90のオペレーションを呼び出すステップと,を含んでいる。
【選択図】 図1
【解決手段】メモリ50を有するコンピュータ・システム1を使用し、複数のマシーン・タイプの複数のリモート・マシーン90と通信する方法において、メモリ50内に、複数のリモート・マシーン90の1つにサービスを記述する第1の複数のソフトウェア・オブジェクトを構成するステップと、コンピュータシステム1がオブジェクトに記述された実行される機能に応じて1つのリモート・マシーン90と交信するステップと,コンピュータシステム1が第1の複数のオブジェクトに記述された実行される機能に応じて交信したリモート・マシーン90のオペレーションを呼び出すステップと,を含んでいる。
【選択図】 図1
Description
本発明は、通信方法に関するものであり、特に、通信を介して情報処理を行う際の通信方法に関する。
近年,プログラムの開発・分析や,システムの設計において,オブジェクト指向の考え方が広く用いられるようになっており,様々なオブジェクト指向分析およびオブジェクト指向設計の手法が提案されている。
従来技術または背景技術として,オブジェクト指向プログラミングおよびオブジェクト指向アプリケーション・フレームワークを理解することは,本発明を完全に理解する上で役立つであろう。当業者ならすぐ分かるように,『オブジェクト』とは,現実世界に存在するものの抽象であり,データ構造(そのフィールドは『属性』あるいは『データ・メンバー』と呼ばれる)と,その上で実行できる一連の操作(『メソッド』または『メンバー機能』と呼ばれる)の組み合わせとして実現(インプリメント)されているものである。
『クラス』とは,それぞれ同じデータ構造および同じ操作を有する一連のオブジェクトに関するデータ・タイプである。クラスの1つの『インスタンス』は,実行中のアプリケーション・プログラムのメモリ内で実際に具体化されるような,そのデータ・タイプがそのクラスであるような1つのオブジェクトである。
複数のクラスは,『形質』(inheritance)に基づく1つまたは複数の(コンパイル時間)階層にグループ化され,それによって『サブクラス』のインタフェース(つまり,属性およびメソッドのタイプと名称)を1つまたは複数の『スーパークラス』との違いで指定することが可能になる。インスタンスは,『コンテインメント』(containment)によって1つまたは複数の(ラン時間)階層にグループ化することができ,複数の他のオブジェクトを含んでいる1つのオブジェクトは『コンテナー』または『集合』(collection) と呼ばれる。
なお,オブジェクト指向プログラミングの概念に関するさらに詳しい情報は,MargaretA.EllisおよびBjarne StroustrupによるThe Annotated C++ Reference Manual,Addison Wesley社,1990に紹介されている。
『オブジェクト指向アプリケーション・フレームワーク』は,アプリケーション・プログラマによって拡張,細分化が可能なように設計され,さらにこれらのクラスを用い,アプリケーション・プログラマによって修正が可能なように設計されたいくつかの実例的な(illustrative) サンプル・アプリケーションと共にパッケージ化された複数のクラスのライブラリで構成されている。
このサンプル・アプリケーションは,全体として,それ自体が有益な1つのシステムを構成している。一般的に,フレームワークの基本的な概念は当業者にはよく知られている。いくつかのサンプル・フレームワークは,X Toolkit,Motif Toolkit,Smalltalk Model−View−Controller GUIおよびMacAppを含んでいる。
また,『アプリケーション』とは,コンピュータ・ユーザーがあるタスクまたは一連のタスクを達成することができるようにするプログラム,または一連の共働プログラムを意味する。
さらに,リモート・サービス・アプリケーションとは,コンピュータ・ユーザーが,そのユーザーのコンピュータ・システムとは別個の,多くの場合は離れた場所,つまり,オフサイトのマシーン(リモート・マシーン)と交信し,その上でサービス(オペレーション)を実行できるようにするアプリケーションのことである。リモート・マシーンのいくつかの例としては,コピー機,ファクシミリ装置,それに電話機等のオフィス機器,それにファイル・サーバーやデータベース・サーバー等一定のリモート・コンピュータ・システムのメモリにおけるソフトウェア・エンティティを含んでいる。
リモート・サービス・アプリケーションで行われる典型的な操作としては,リモート・マシーンの問題点のリモート診断,リモート・マシーンの使用のモニタリング,リモート・マシーンの特徴を実行可能にしたり不可にしたりすること,データ検索,パラメータの変更等がある。
なお,以下で『リモート・マシーン』という用語を用いる際,それはユーザー・マシーン内に保存されているが,リモート・サービス・アプリケーションによってコントロールされるメモリおよびプロセスに対しては外部的なものであるプロセスおよびファイル等も含むという理解に基づいている。
リモート・マシーンにアクセスするためには,そのリモート・サービス・アプリケーションは,モデム等の特定のインタフェース装置と関連した『装置ドライバー』と,そのリモート・マシーンとの間で送受信されるデータをフォーマットする『プロトコル・ドライバー』とを用いる。これらのドライバーはオペレーティング・システムの一部であっても良く,またはアプリケーション・プログラム内のモジュールであっても良い。
過去において,リモート・サービス・アプリケーションは,各タイプのリモート・マシーンに対してそれぞれ個別的にカスタマイズされていた。例えば,第1のリモート・サービス・アプリケーションは特定のプロトコルを有するマシーンとだけ交信したが,第2のリモート・サービス・アプリケーションは異なったプロトコルを有するマシーンとだけ交信するという具合であった。こうしたカスタマイズされた方式の1つの利点は,リモート・サービス・アプリケーションが対応するリモート・マシーンのアーキテクチャおよびパラメータにしっかりと結びつけられているので,それらが効率的である点である。
しかしながら,上記従来の技術である,個別的にカスタマイズされたリモート・サービス・アプリケーションによれば,以下の不具合およびそれらの不具合から発生する問題点があった。
第1に,各ソフトウェア・システムが往々にして,顧客データベース等の各システムのために一般的に使われ,あるいは複製された機能やデータを含んでいるという不具合があった。第2に,新しいタイプのリモート・マシーンが製造される度に,新しいソフトウェア・システムがその新しいタイプの独特の能力と取り組むために新しいソフトウェア・システムが作られる必要があるという不具合があった。
これらの不具合が存在することから,従来の技術では,ソフトウェア・システムがいろいろな断片からつくられることが多く,したがって,開発サイクル期間が非常に長くなるという問題点があった。また,それぞれ個別的にカスタマイズされた方式は,往々にして柔軟性が乏しいという問題点があった。一般的に,ソフトウェア・システムが一度オンライン化されると,そのソフトウェア・システムの他の部分に対して無数の繋がりがあるので,そのソフトウェア・システムに対する修正が非常に困難である。
本発明は上記に鑑みてなされたものであって,リモート・サービス・アプリケーションにオブジェクト指向を導入することにより,開発サイクル期間の低減を図り,システムの修正等の柔軟性を高めることができる通信方法を提供することを目的とする。
上述した課題を解決し、目的を達成するために、請求項1にかかる発明は、複数の周辺装置と,周辺装置の属性情報を記憶した記憶手段を有する情報処理装置とが通信する通信方法において,前記情報処理装置の前記記憶手段内部に,属性情報に基づいて前記複数の周辺装置の1つで実行される機能を記述するオブジェクトを構成するステップと,前記情報処理装置が前記オブジェクトに記述された実行される機能に応じて前記1つの周辺装置と交信するステップと,前記情報処理装置が前記第1の複数のオブジェクトに記述された実行される機能に応じて前記交信した周辺装置のオペレーションを呼び出すステップと,を含んでいることを特徴とする。
また,請求項2にかかる発明は、請求項1に記載の通信方法において、属性情報には、前記オブジェクトに対するポインタと前記1つの周辺装置内部でのデータ・アイテムの値に対応したカレント値を含んでいることを特徴とする。
また,請求項3にかかる発明は、請求項1または2に記載の通信方法において、属性情報には,読み出しリクエスト・フラッグと前記1つの周辺装置に送られるべき値に関するペンディング・リクエストを記述するための新しい値とを含んでいることを特徴とする。
以上説明したように,本発明の通信方法(請求項1〜請求項3)は,複数の周辺装置と,周辺装置の属性情報を記憶した記憶手段を有する情報処理装置とが通信する通信方法において,前記情報処理装置の前記記憶手段内部に,属性情報に基づいて前記複数の周辺装置の1つで実行される機能を記述するオブジェクトを構成するステップと,前記情報処理装置が前記オブジェクトに記述された実行される機能に応じて前記1つの周辺装置と交信するステップと,前記情報処理装置が前記第1の複数のオブジェクトに記述された実行される機能に応じて前記交信した周辺装置のオペレーションを呼び出すステップと,を含んでいるため,リモート・サービス・アプリケーションにオブジェクト指向を導入することにより,開発サイクル期間の低減を図り,システムの修正等の柔軟性を高めることができる通信方法を提供することができる。
以下,本発明のオブジェクト指向通信システムの使用方法について,〔本発明の概要〕,〔本発明で使用する用語の定義〕,〔命名上の規定〕,〔実施の形態〕,〔著作権に関する告知〕の順で,図面を参照して詳細に説明する。
〔本発明の概要〕
本発明の好ましい実施の形態は,本発明の譲受人(assignee) である株式会社リコーによって現在開発中のREST(Rich Electronic Service Tool) オブジェクト指向アプリケーション・フレームワークの一部を示している。オブジェクト指向アプリケーション・フレームワーク(以下,『フレームワーク』と記載する)は,複数のクラスのオブジェクトのデクラレーション(宣言)およびインプリメンテーション(具体的記述)を含むクラス・ライブラリと,これらのクラスを用いてかかれたサンプル・アプリケーション・プログラムとから構成されている。
本発明の好ましい実施の形態は,本発明の譲受人(assignee) である株式会社リコーによって現在開発中のREST(Rich Electronic Service Tool) オブジェクト指向アプリケーション・フレームワークの一部を示している。オブジェクト指向アプリケーション・フレームワーク(以下,『フレームワーク』と記載する)は,複数のクラスのオブジェクトのデクラレーション(宣言)およびインプリメンテーション(具体的記述)を含むクラス・ライブラリと,これらのクラスを用いてかかれたサンプル・アプリケーション・プログラムとから構成されている。
フレームワークは,アプリケーション・プログラマがいくつかのアプリケーション領域,例えば(本発明の場合には)リモート・サービス・アプリケーションにおいて新しいアプリケーション・プログラムを迅速,簡単に書けるようにするシステムである。特に,アプリケーション・プログラマは通常,新しいアプリケーション・プログラムをつくるために特定のリモート・マシーンのためにすでに書かれているサンプル・アプリケーション・プログラムの編集を行う。
本発明の好ましい実施の形態の一部であるフレームワークにおけるオブジェクト・クラスは,コンピュータ・システムのメモリ内部のソフトウェア・オブジェクトとして具体化された場合,それらを用いて実現されたどのアプリケーション・プログラムも,複数の異なったタイプの複数のリモート・マシーンと交信できるようにする1つのメカニズムとそれに関連した方法を構成している。
また,サンプル・アプリケーションは,それら自体が一定の組み合わせのタスク,例えば(本発明の場合には)リモート・サービス・タスクを実行するためのシステムを構成している。
また,本発明は,ファイル等のソフトウェア・エンティティと交信したり,その上でオペレーションを実行したりするアプリケーション,および同じコンピュータ・システム内にアプリケーション・プログラムとして入れられているプロセスをサポートするものである。
〔本発明で使用する用語の定義〕
以下,本発明で使用する用語の定義について説明する。
『コンポーネント』とは,あるリモート・マシーンのサービスおよび状態を示すソフトウェア・オブジェクトである。1つのコンポーネントは複数のサブ−コンポーネントを持っていても良く,例えば,コピー機はそれに取りつけられたソーターおよびフィーダーを持っていても良い。
以下,本発明で使用する用語の定義について説明する。
『コンポーネント』とは,あるリモート・マシーンのサービスおよび状態を示すソフトウェア・オブジェクトである。1つのコンポーネントは複数のサブ−コンポーネントを持っていても良く,例えば,コピー機はそれに取りつけられたソーターおよびフィーダーを持っていても良い。
『装置』(device) とは,その一部でリモート・サービス・アプリケーションが動作しているコンピュータ・システムが1つまたは複数のリモート・マシーンとの間で交信できるようにするためのコンピュータ・システムの周辺機器(peripheral) である。
『装置ドライバー』とは,リモート・サービス・アプリケーションが1つの装置と交信するためのインタフェースを提供するソフトウェアである。
『マシーン』とは,その内部でリモート・サービス・アプリケーションが動作しているコンピュータ・システムに対しては外部的なハードウェアまたはソフトウェア・エンティティである。例えば,リモート・オフィス・マシーン,ファイル・サーバーまたはデータベース・サーバーが挙げられる。
『マシーン・モデル』とは,『モデル・アイテム』オブジェクトを内容とする,あるコンポーネントによって提供されるサービスを記述するための集合(collection) オブジェクトである。
『モデル・アイテム』とは,あるリモート・マシーンによって提供される個別サービス・アイテムを記述するオブジェクトである。
『サービス』とは,そのコンポーネントに含まれるデータの検索,更新を含む,1つのコンポーネント上で,あるいはそれによって実行される全てのオペレーションである。
『サービス・アイテム』は,1つのサービスまたは一組のサービスあるいは1つのサービスに現在含まれているデータを記述する抽象的なクラスである。
『マシーン・ステート』とは,『アプリケーション・アイテム』オブジェクトをその内容とする集合(collection) オジェクトである。
『アプリケーション・オブジェクト』とは,そのマシーンにおけるサービスのカレント・ステート(データ)および,そのプログラムのエンド・ユーザーが要求し,まだ実行されていない変更あるいはオペレーションを含む,リモート・マシーンによって提供されるあるサービスに関してそのリモート・サービス・アプリケーションが有する情報を含むオブジェクトである。
〔命名上の規定〕
以下は,本明細書中および添付ソフトウェア付属資料で用いられている命名上の規定の要約である。クラスの名称は大文字で表記し,内側の大文字はワードの開始を示している。大域的機能,変数およびクラスの名称は,1つから3つの接頭辞を有しており,それらが属する全体的なファミリーを示している。
以下は,本明細書中および添付ソフトウェア付属資料で用いられている命名上の規定の要約である。クラスの名称は大文字で表記し,内側の大文字はワードの開始を示している。大域的機能,変数およびクラスの名称は,1つから3つの接頭辞を有しており,それらが属する全体的なファミリーを示している。
例えば,1つのサービス・アイテムを示すデータ構造と,その全てのサブクラスは“SI_”という接頭辞を有している。
“R_Base”から下のクラスは下線によって名称の他の部分から切り離された接頭辞を有しており,“R_Base”は集合(collection) に入れられ,外部ファイルに書き込まれ,そしてそれらのファイルから読み出されるオブジェクトに関する基本クラスである。
その名称に下線が含まれていないクラスおよびデータ・タイプは,通常,変数,機能アーギュメントまたはクラス・データ・メンバーとしてのものであり,値によってパスされる。また,その名称が下線を含んでいる名称を含んだクラスは,ほとんど常に1つの塊として示され,基準あるいはポインタとしてパスされる。この規定によって,以下の説明で,オブジェクト指向プログラミングの当業者がクラスをインスタンスから簡単に区別し,また,インスタンスを基準やインスタンスに対するポインタから容易に区別することが可能になる。
また,大域機能,定数,および変数の名称は小文字の接頭辞を有している。
1つのクラスの公的インタフェースの一部であるメンバー機能およびデータ・メンバーは小文字から始まる。保護データ・メンバーは下線で終わる名称を有しており,通常は,そのデータにアクセスする公的メンバー機能が存在し,その名称は同じであるが,下線を有していない。すなわち,データ・メンバーは『属性』(attribute)と呼ばれ,その名称が“R_ATTR”で始まるマクロを用いて宣言される。
1つのクラスの公的インタフェースの一部であるメンバー機能およびデータ・メンバーは小文字から始まる。保護データ・メンバーは下線で終わる名称を有しており,通常は,そのデータにアクセスする公的メンバー機能が存在し,その名称は同じであるが,下線を有していない。すなわち,データ・メンバーは『属性』(attribute)と呼ばれ,その名称が“R_ATTR”で始まるマクロを用いて宣言される。
1つの値を更新するメンバー機能がある場合,その名称は“Set”でおわり,その更新機能はその属性を宣言する同じマクロで宣言される。
〔実施の形態〕
次に,本発明の好ましい実施の形態について,
1.システム概要
1.1.システム構成
1.2.フレームワークの説明
1.3.サンプル・アプリケーション・プログラムとファイルに関する説明
2.マシーン・モデル・モジュール
2.1.概要
2.2.コンポーネントおよび関連オブジェクト
2.2.1.合成データ
2.2.2.リモート・マシーン・ヒストリー
2.2.3.新しいモデル・アイテムの定義
2.2.4.初期化
2.3.典型的なクラス・デスクリプタ
2.3.1.Serviceクラス
2.3.2.SI_ServiceItemクラス
2.3.3.SI_ModelItemクラス
2.3.4.SI_RemoteItemクラス
2.3.5.SI_MemoryItemクラス
2.3.6.SI_BitfieldItemクラス
3.通信モジュール
3.1.概要
3.2.詳細な説明
3.3.新しいセッション・タイプの定義
4.通信装置インタフェース
4.1.概要
4.2.詳細な説明
4.3.新しい装置の追加
5.追記
の順で,図面を参照して詳細に説明する。
次に,本発明の好ましい実施の形態について,
1.システム概要
1.1.システム構成
1.2.フレームワークの説明
1.3.サンプル・アプリケーション・プログラムとファイルに関する説明
2.マシーン・モデル・モジュール
2.1.概要
2.2.コンポーネントおよび関連オブジェクト
2.2.1.合成データ
2.2.2.リモート・マシーン・ヒストリー
2.2.3.新しいモデル・アイテムの定義
2.2.4.初期化
2.3.典型的なクラス・デスクリプタ
2.3.1.Serviceクラス
2.3.2.SI_ServiceItemクラス
2.3.3.SI_ModelItemクラス
2.3.4.SI_RemoteItemクラス
2.3.5.SI_MemoryItemクラス
2.3.6.SI_BitfieldItemクラス
3.通信モジュール
3.1.概要
3.2.詳細な説明
3.3.新しいセッション・タイプの定義
4.通信装置インタフェース
4.1.概要
4.2.詳細な説明
4.3.新しい装置の追加
5.追記
の順で,図面を参照して詳細に説明する。
1.システム概要
1.1.システム構成
図1は,本発明の好ましい実施の形態によるコンピュータ・システム1の構成図である。コンピュータ・システム1は,表示モニター10,キーボード20,マウス30,およびコンピュータ2を含んでいる。
1.1.システム構成
図1は,本発明の好ましい実施の形態によるコンピュータ・システム1の構成図である。コンピュータ・システム1は,表示モニター10,キーボード20,マウス30,およびコンピュータ2を含んでいる。
コンピュータ2は,プロセッサ40,メモリ(例えば,半導体RAM)50,大容量記憶装置(例えば,ディスク・ドライブ)60,通信装置(例えばモデム)70,そして上記の構成部材を相互に接続するシステム・バス80を含んでいる。なお,マウス30はグラフィック的入力または出力装置の一例に過ぎない。リモート・マシーン90は,通常,モデム等の通信装置70経由でシステム1に結合されている。
好ましい実施の形態においては,システム1としては,LinuxまたはMicrosoft社からのWindows3.1で動作するマシーンに基づく80486マイクロプロセッサ・クラスで,RESTアプリケーション・フレームワーク・プログラムを用いて開発されるリモート・サービス・アプリケーション・プログラムが現在リコー社で開発中である。RESTフレームワークにおけるオブジェクトのクラスの好ましい実施の形態は,以下に示されるようにC++で書かれている。
なお,図1は,本発明を具体化するための1つのタイプのシステムを示している。多くのシステム・タイプおよび構成を本発明と結びつけて用いることができるのは,当業者には容易に分かる。
1.2.フレームワークの説明
図2は,本発明の好ましい実施の形態で用いられるオブジェクト指向アプリケーション・フレームワークの構成図である。アプリケーション層140は,エンド・ユーザーによって実行されるリモート・セット(Remote Setting)100およびカスタマー・データベース・アクセス(Customer Database Access)130を含むアプリケーション・プログラムと,コール・アウト(Call−out)110およびコール・イン(Call−in)120等を含むオペレーティング・システムによって自動的に実行されるアプリケーション・プログラムによって構成されたシステムの一部である。
図2は,本発明の好ましい実施の形態で用いられるオブジェクト指向アプリケーション・フレームワークの構成図である。アプリケーション層140は,エンド・ユーザーによって実行されるリモート・セット(Remote Setting)100およびカスタマー・データベース・アクセス(Customer Database Access)130を含むアプリケーション・プログラムと,コール・アウト(Call−out)110およびコール・イン(Call−in)120等を含むオペレーティング・システムによって自動的に実行されるアプリケーション・プログラムによって構成されたシステムの一部である。
コア層190は,そのフレームワークのアプリケーション層140内にある全てのリモート・サービス・アプリケーションによって共有される機能を提供するクラス・デクラレーションおよびインプリメンテーションのライブラリで構成されており,グラフィック・ユーザー・インタフェース機能(GUIインタフェース機能)150,ジェネラル・プログラミング・システム機能160,マシーン・モデル・モジュール170,およびリモート・マシーンとの通信モジュール(通信機能)180とを含んでいる。
インタフェース層260は,モデム等の特定のローカル通信装置に対するインタフェースを提供するクラス(『装置ドライバー』),特定のファミリーのリモート・マシーン(例えば,コピー機200およびファクシミリ装置210)と交信し,その上で作動するために必要な通信プロトコルに対するインタフェース,および,リモートまたはローカル・データベース・サーバー220,そして特定のタイプのリモート・マシーンによって提供されるサービスの記述を含んでいるファイル230,240,250(『マシーン記述ファイルおよびデータベース記述ファイル』)に対するインタフェースを提供するクラスを含んでいる。
このインタフェース層260におけるクラスのアプリケーション・プログラミング・インタフェース(API)は,コア層190における抽象クラスによって定義されており,したがって,アプリケーション・プログラマは特殊なインタフェース装置およびリモート・マシーンの詳細を知らなくてもよいようになっている。
フレームワークを用いるアプリケーション・プログラマは,通常は,アプリケーション層140の1つまたは複数の既存サンプル・プログラムをコピーしたり修正したりするためのテキスト・エディタを用いることによってリモート・サービス・アプリケーション・プログラムを実行する。こうした方法で構成されたアプリケーションは,共通の十分に実証されたアーキテクチャおよびデザインと,大量の再使用可能コードを共有しており,ソフトウェア・ライフサイクルからデザインおよびデバッギング・フェーズのほとんどを取り除くことは,オブジェクト指向アプリケーション・フレームワークがリモート・サービス・アプリケーションの開発・実施(インプリメンテーション)をスピード・アップする1つの方法である。
リモート・マシーンと交信するために本発明を利用するプログラムはほとんどどんなリモート・マシーンとでも交信することができる。
1.3.サンプル・アプリケーション・プログラムとファイルに関する説明
図3は,上記フレームワーク(図2)のアプリケーション層140におけるサンプル・アプリケーション・プログラムの一部と,それらが情報を交信するために用いるファイルを示している。全てのアプリケーション・プログラムおよびファイルは,好ましくはコンピュータ・システム1の大容量記憶装置60内に存在する。
図3は,上記フレームワーク(図2)のアプリケーション層140におけるサンプル・アプリケーション・プログラムの一部と,それらが情報を交信するために用いるファイルを示している。全てのアプリケーション・プログラムおよびファイルは,好ましくはコンピュータ・システム1の大容量記憶装置60内に存在する。
ユーザーは,カスタマー・データベース・アクセス・アプリケーション300,ジョブ・スケジューラ・アプリケーション370およびリモート・セッティング・アプリケーション400と直接交信する(他の多くのインタラクティブ・プログラムが可能であることは当業者には明らかである。これらは単に説明のための例にすぎない)。
カスタマー・データベース・アクセス・アプリケーション300を用いることによって,ユーザーは交信すべきマシーンを選択するためにカスタマー・データベース310を照会することができる。それはユーザーがマシーンのグループ(それぞれマシーン・グループ・ファイル350内に記述されている)およびサービス・アイテムのグループ(それぞれサービス・アイテム・グループ・ファイル340)を選択して,その上でオペレーションを行うことができる。
カスタマー・データベース・アクセス・アプリケーション300は,それぞれ交信に関与する他のファイルのファイル名を含んだジョブ・アイテム・ファイル320およびケース・ファイル330を出力する。
次に,ユーザーは,1つまたは複数のリモート・マシーン90と交信するために,ジョブ・アイテム・ファイル320を読み出して,コール・アウト・アプリケーション380およびリモート・セッティング・アプリケーション400のインスタンスを自動的に実行させるジョブ・スケジューラ・アプリケーション370を実行させる。コール・イン・アプリケーション390はリモート・マシーン90からの入力交信に応えていつでも実行することができる。
コール・イン・アプリケーション390とコール・アウト・アプリケーション380は,リモート・マシーン90によってコール・イン・アプリケーションに送られるか,あるいはコール・アウト・アプリケーション380によってリモート・マシーン90から検索されたコピーを含んでいるデータ・ダンプ・ファイル410を書き込む。データ・ダンプ・ファイル410はコール・トランスレータ・アプリケーション440によって,ケース・ファイル420かコンマ・デリミテッド・ファイル450のいずれかに翻訳されて,アナリシス・データベース460またはスプレッドシート等の他のアプリケーション・プログラムにインポートされる。コール・トランスレータ・アプリケーション440は,複数のマシーン・モデル・ファイル430の1つに含まれているリモート・マシーン90の記述を用いてそのコンバージョン動作を行う。
リモート・セッティング・アプリケーション400はユーザーとあるリモート・マシーン90との間の直接のインタラクション(交信またはデータのやり取り)のために用いられ,そのリモート・マシーン90で実行できるオペレーションは複数のマシーン・モデル・ファイル350aの1つに記述され,リモート・マシーン90とその上で実行されるオペレーションの一部のアクセス情報(例えば電話番号)をケース・ファイル330内で指定したり,ユーザーが直接入力したりすることができる。
2.マシーン・モデル・モジュール
2.1 概要
図2のマシーン・モデル・モジュール170は,コア層190内の主要モジュールである。マシーン・モデル・モジュールの目的は,マシーン・モデルと呼ばれるオブジェクトの構成の形態でリモート・サービス・アプリケーションがリモート・マシーン上で使えるサービスを記述すること,そして,アプリケーション・プログラムがそのリモート・マシーンおよび全てのオペレーション,そしてユーザーによって要求されたデータ伝送の現在の状態を追跡的に監視するために必要な情報を含み,組織することである。
2.1 概要
図2のマシーン・モデル・モジュール170は,コア層190内の主要モジュールである。マシーン・モデル・モジュールの目的は,マシーン・モデルと呼ばれるオブジェクトの構成の形態でリモート・サービス・アプリケーションがリモート・マシーン上で使えるサービスを記述すること,そして,アプリケーション・プログラムがそのリモート・マシーンおよび全てのオペレーション,そしてユーザーによって要求されたデータ伝送の現在の状態を追跡的に監視するために必要な情報を含み,組織することである。
本発明の好ましい実施の形態においては,このマシーンおよびサービス・クラス階層は以下に示すものから成る。ここで,インデントは,上のものに対する従属を示す。
Component リモート・マシーンを記述
Service
SerivceCollection サービス・アイテムの集合
SC_SericeModel コンポーネントのモデル
AC_AppServices コンポーネントのアプリケーション・アイテム
SC_Queue SC_QueueItemの集合
(および他の種々の特殊な目的の集合)
SI_ServiceItem リモート・サービスを記述
SI_ModelItem マシーン・モデル−−−記述のみ
SI_GuiItem 1つのアイテムを示すGUI要素
SI_AppItem 1つのアイテムに関するアプリケーション・ステート
SI_QueueItem 1つのアイテムに関するキューされた読み出しおよび書き込み
Component リモート・マシーンを記述
Service
SerivceCollection サービス・アイテムの集合
SC_SericeModel コンポーネントのモデル
AC_AppServices コンポーネントのアプリケーション・アイテム
SC_Queue SC_QueueItemの集合
(および他の種々の特殊な目的の集合)
SI_ServiceItem リモート・サービスを記述
SI_ModelItem マシーン・モデル−−−記述のみ
SI_GuiItem 1つのアイテムを示すGUI要素
SI_AppItem 1つのアイテムに関するアプリケーション・ステート
SI_QueueItem 1つのアイテムに関するキューされた読み出しおよび書き込み
2.2.コンポーネントおよび関連オブジェクト
図4は,典型的なComponent700(コンピュータ・システム1のメモリ50内のリモート・マシーン90を示すオブジェクト・インスタンス),およびそれが参照するオブジェクトを示している。これらのオブジェクトには,図示の如く,その『状態』属性600であるSC_AppServicesオブジェクト,その『モデル』属性630であるSC_ServiceModelオブジェクト,そのWriteQueueおよびreadQueue属性670である各SC_Queueオブジェクト,およびその『セッション』属性710であるクラスSI_CommunicationSessionのサブクラスのインスタンスに対するリファレンスがある。
図4は,典型的なComponent700(コンピュータ・システム1のメモリ50内のリモート・マシーン90を示すオブジェクト・インスタンス),およびそれが参照するオブジェクトを示している。これらのオブジェクトには,図示の如く,その『状態』属性600であるSC_AppServicesオブジェクト,その『モデル』属性630であるSC_ServiceModelオブジェクト,そのWriteQueueおよびreadQueue属性670である各SC_Queueオブジェクト,およびその『セッション』属性710であるクラスSI_CommunicationSessionのサブクラスのインスタンスに対するリファレンスがある。
SC_ServiceModel630は,『モデル・アイテム』640,650の集合(collection) であり,各モデル・アイテムはSI_ModelItemのサブクラスのインスタンスである。その集合であるSC_ServiceModel630は,Component700によって示されるリモート・マシーン90によって提供されるサービスの記述である。
SC_AppServic es600は,『アプリケーション・アイテム』610,620の集合(collection) であり,各アプリケーション・アイテムはSI_AppItemクラスの1つのインスタンスであり,SI_ModelItem640,650およびSI_CallbackList520,530に対するリファレンスを持っている。各アプリケーション・アイテム610,620はそのリモート・マシーンにおける対応するサービスの現在値(分かれば),および全ての要求されたオペレーションまたはそのサービスに関連するデータ伝送に関する情報を含んでいる。
SC_AppServicesオブジェクト600は,クラスComponent700上での“initServices”オペレーションによってイニシャライズされ,そのパラメータの1つは,1つのアプリケーションがマシーン・モデル630からそのアプリケーションによって実際に使われるサービスだけを選択できるようにするブール(Boolean:論理演算)に対するpointer−to−SI_ModelItemからの機能に対するオプショナル・ポインタである。
SI_CallbackList520,530は,SI_GuiItemオブジェクト540,550,570,580,590の集合(collection) であり,そのそれぞれが情報を表現するグラフィック・ユーザー・インタフェース500における『コントロール』を示し,ユーザーが交信する単一のオブジェクト(GUI500のGUIオブジェクト510)を参照したり,それに参照されたりする。SI_GuiItemの目的はグラフィカル・ユーザー・インタフェースを用いているユーザーによって行われた変更がアプリケーション・ステート600の適切なSI_AppItem610,620内で同等の変化を確実に行わせるようにすること,さらに,そのプログラムのオペレーションから,特にそのリモート・マシーンとの交信から生じるアプリケーション・ステート600内のSI_AppItem610,620内の変化がグラフィカル・ユーザー・インタフェースによってユーザーに示される情報内に同等の変化を起こさせるようにすることである。
クラスSI_AppItemのオペレーション“newValueSet”は,そのサービス内の状態の変化(書き込み動作)を要求するために用いられる。クラスSI_AppItemのオペレーション“readRequest”は読み込み動作を要求するために用いられる。読み込みまたは書き込み動作が要求される場合,SI_AppItem610,620を参照し,要求された動作,読み込み・書き込み,および書き込みの場合はその書き込まれるべきデータを含んだクラスSI_QueueItemのオブジェクト680,690が構成される。SI_QueueItemは読み出しキュー670,またはComponent700に付加されている書き込みキューのいずれかに配置される。これらのキュー・アイテムは,以下にさらに通信モジュールとの関連で説明されるように,リモート・マシーンとのバッチ通信セッションをユーザーまたはアプリケーションが要求するまで蓄積される。
バッチ通信セッションが行われる場合,各SI_AppItemのCurrentValue属性は,そのリモート・マシーン内に保存されたり,あるいはそこから検索される値を反映するように更新される。また,SI_AppItem610,620と関連した各SI_GuiItem500は,“currentValueSet”オペレーションの副次的作用としてその更新が自動的に通知される。
コンポーネント・オブジェクトは,それ自体,リモート・マシーンに接続された個別的に制御されるマシーンに対応した『サブ−コンポーネント』(図示せず)のためのコンテナーである。例えば,トップ−レベル・コンポーネント・オブジェクト(Component700)は,それに複数のコピー機が取りつけられる,トップ−レベル・コンポーネント(Component700)の内容によって示されるライン−アダプタ・マルチプレクサであって良い。
図5は,マシーン・モデル860(図4の630),アプリケーション・ステート810(図4で600),そして,リモート・マシーン90との間の関係を示している。これを説明するために,その内部でリモートからアクセスできるサービスが電子的に消去可能な読み取り専用メモリ910内に含まれたデータによって示され,それから,データを検索したり,あるいはその内部でファクシミリ装置90にスターティング・アドレスおよびサイズを含んだ適切にフォーマット化されたリクエスを提示することによって修正することができるリコー・モデルFAX−60と類似したファクシミリ装置を用いる。なお,転送されるデータを確認するための異なった方法およびデータをコード化する異なった方法を伴う他のプロトコルを用いることが可能であることは,当業者には明らかである。
リモート・ファクシミリ装置はメモリにサービス・アイテムを保存するので,マシン・モデル860はSI_ServiceItemのサブクラスであるSI_RemoteItemのサブクラスであるクラスSI_MemoryItemのインスタンスであるオブジェクト870,880を含んでいる。例えば,SI_MemoryItem870は長さ3のストリングを指定するその“itemSize”属性内にサイズ3を有している。SI_MemoryItem870内のデータ・タイプ“Chars”は,クラスR_ValueDscrのサブクラスのインスタンスに対するポインタによって“ValueDscr”属性内に示される。
リモートでアクセスできるデータの一部はそのメモリのバイト内に保存されているビットフィールドで構成されており,図5はリモート・ファクシミリ装置90のメモリ910のバイト920内に含まれた2つのそうしたビットフィールド921,922を示しており,それぞれ,いずれもバイト920を示すSI_MemoryItemオブジェクト880内に含まれるクラスSI_BitfieldItemのインスタンス890,900によって示されている。
リモート・サービス・アプリケーション・プログラムによって操作できる各サービス・アイテムは,クラスSI_AppItemのインスタンス820,830によって示されるアプリケーション・ステート810内にカレント・ステートを有している。
本発明の好ましい実施の形態においては,マシーン・モデルは,SI_ModelItemのサブクラスのインスタンスで構成されており,以下の階層を有している。ここで,インデントは,上のものへ対する従属を示している。
SI_ModelItem マシーン・モデル−−−記述のみ
SI_InternalItem アプリケーションに対して内部的
SI_ExternalItem 外部記憶またはサーバー
SI_DIrectoryItem ディレクトリ
SI_FileItem ファイル
SI_TableItem データベース・テーブル
SI_QueryItem データベース照会
SI_TupleItem データベース・タップル
SI_FieldItem データベース・フィールド
SI_RemoteItem リモート・マシーン
SI_MemoryItem リモート・メモリに保存
SI_BitfieldItem ワード内のビットフィールド
SI_ProgramItem リモート・プログラムによりアクセス
SI_ModelItem マシーン・モデル−−−記述のみ
SI_InternalItem アプリケーションに対して内部的
SI_ExternalItem 外部記憶またはサーバー
SI_DIrectoryItem ディレクトリ
SI_FileItem ファイル
SI_TableItem データベース・テーブル
SI_QueryItem データベース照会
SI_TupleItem データベース・タップル
SI_FieldItem データベース・フィールド
SI_RemoteItem リモート・マシーン
SI_MemoryItem リモート・メモリに保存
SI_BitfieldItem ワード内のビットフィールド
SI_ProgramItem リモート・プログラムによりアクセス
抽象クラスSI_ModelItemは,リモート・マシーン内に配置されているサービス・アイテムに対するアクセスおよび交信動作を実行するための抽象的なプログラニング・インタフェースを提供し,SI_ModelItemの種々のサブクラスは,特定のマシーンに対する通信プロトコルを用いた特殊なタイプのリモート・データを処理するためのこれらのオペレーションのインプリメンテーションを可能にするものである。
サブクラス化することで,SI_MemoryItemオブジェクト870,880は,1つのリモート・マシーンのメモリに保存されているリモート・サービス・アイテムに対してそれぞれ個別的に振る舞うことができるようになり,SI_BitfieldItemオブジェクト890,900は,リモート・マシーン・メモリ内に記憶されているワードに含まれているビットフィールドに対して個別的に振る舞うことができるようになる。例えば,“packedSize”属性は,SI_BitfieldItem内では単に“itemSize”属性の値をリターンし,SI_MemoryItemでは,バイト内のビットの数である8を掛けた“itemSize”属性の値をリターンする機能で計算される。
SI_InternalItemおよびSI_ExternalItemは,SI_ModelItemの二つの主要なサブクラスである。SI_InternalItemオブジェクトは,そのリモート・マシーンに関連し,上記リモート・マシーン・アプリケーション(例えば,リモートではアクセスできないが,カスタマー・データベースから獲得することができるそのマシーンのシリアル番号)に対しては内部的なデータを記述する。データがそのリモート・マシーン・アプリケーションに対して外部的な場合は,SI_ExternalItemサブクラスのサブクラスが用いられる。例えば,SI_TableItemはリモート・データベース・テーブルにおけるテーブルを記述し,SI_MemoryItemはリモート・ファクシミリ装置のメモリにおけるデータ・アイテムを記述する。
データ自体,つまり,データ・タイプ(整数,基数,フロート,ストリング等),サイズ,数値の範囲およびその他の属性が,『バリュー・デスクリプタ』(クラスValueDscr)と呼ばれるデータ・ストラクチャ内に記述される。これらの数値デスクリプタはSmalltalk等の言語で用いられるものと同様のランタイム・クラス・デスクリプタである。数値デスクリプタに対するポインタとそのデータの初期値はSI_ModelItemオブジェクトの“defaultValue”属性であるクラスRvalueのオブジェクト内で結合されている。数値デスクリプタの一部の属性はSI_ModelItemの対応する属性によってオーバーライドされる場合もある。1つの値があるオブジェクトのインスタンスに対する基準である場合,そのクラス名および公的にアクセス可能な属性は上記オブジェクトのインスタンスの仮想機能“dscr”によってリターンされるクラスR_ClassDscrのインスタンスによって記述される。
アプリケーション・ステート810内の各SI_AppItemオブジェクト820,830,840,850は,リモート・マシーンのカレント・ステート,ユーザー・インタフェースの状態,そしてそれらの間の関係に関してリモート・サービス・アプリケーションが持っている情報を記憶する。
クラスSI_AppItem820,830,840,850の各インスタンスは,そのアイテムの許可可能状態,およびその位置またはそのリモート・マシーンに対するアクセス情報について記述するクラスSI_ModelItem870,889,890,900の1つのインスタンスに対するレファレンス(参照情報)を含んだ属性『モデル』を有している。
また,各SI_AppItemは,そのリモート・マシーンにおけるそのサービス・アイテムのカレント・ステートに関する情報を含んだ属性“currentValue”と,そのリモートの要求された更新状態を示す属性“newValue”も有している。
2.2.1.合成データ
リモート・マシーン内の1つのサービス・アイテムが配列や構成等合成データ・ストラクチャでできている場合,それはその『子:チルドレン』としても知られている1つまたは複数の従属SI_ModelItemオブジェクトの集合(collection) を有するSI_ModelItemによって記述される。1つの配列を示すSI_ModelItemオブジェクトは,アレイ・アイテム・オブジェクトを記述する1つの子(チャイルド)を有しており,1つのストラクチャを示すSI_ModelItemは,各フィールドを記述する別の子(チャイルド)を有している。
リモート・マシーン内の1つのサービス・アイテムが配列や構成等合成データ・ストラクチャでできている場合,それはその『子:チルドレン』としても知られている1つまたは複数の従属SI_ModelItemオブジェクトの集合(collection) を有するSI_ModelItemによって記述される。1つの配列を示すSI_ModelItemオブジェクトは,アレイ・アイテム・オブジェクトを記述する1つの子(チャイルド)を有しており,1つのストラクチャを示すSI_ModelItemは,各フィールドを記述する別の子(チャイルド)を有している。
対応するSI_AppItemは,各サブ−アイテム(ストラクチャ・フィールドの配列要素)のためのチャイルドSI_AppItemか,あるいはサブ−アイテム値の配列に対する単一合成値のいずれかを有している場合もある。1つの配列要素を示す各SI_ApplItemはその『位置』(“location”)属性に,その配列の冒頭からの指数(“index”)である値を持っている。
アプリケーション・プログラマは,与えられたいずれかのアプリケーションに対してこれら二つの表現のうちのどれが最も適切かについて判断する。例えば,図5で,SI_AppItemオブジェクト830とSI_MemoryItemによって記述されるリモート・データ・アイテムは,SI_AppItemオブジェクト840,850とSI_Bitfieldオブジェクト890および900によって記述されるビットフィールドを含んでいる。
2.2.2.リモート・マシーン・ヒストリー
オプションとして,1つのリモート・マシーンの経時データ(ヒストリー)は,経時データベース(図示せず)に格納するようにしても良い。経時データのタイプは,例えば,毎月コピー機で作成されるコピーの枚数,顧客が購入するオプション等を含んでいる。経時データを追跡確認するために,SI_AppItemは異なったコンポーネントの別のSI_AppItemを指示する属性“history”を有している。この異なったコンポーネントとは,通常,データベースやファイルを記述するものである。
オプションとして,1つのリモート・マシーンの経時データ(ヒストリー)は,経時データベース(図示せず)に格納するようにしても良い。経時データのタイプは,例えば,毎月コピー機で作成されるコピーの枚数,顧客が購入するオプション等を含んでいる。経時データを追跡確認するために,SI_AppItemは異なったコンポーネントの別のSI_AppItemを指示する属性“history”を有している。この異なったコンポーネントとは,通常,データベースやファイルを記述するものである。
経時データ・アイテムの“currentValue”は,アプリケーションが開始された場合(例えば,請求アプリケーションにおける前月のコピー・カウント等),そのアイテムについて知られていることを反映している。システムがそのアイテムに関して知っていることに変化が生じた場合,“currentValueSet”が呼び出されてその変化を反映させ,そしてその経時データ・アイテムの“newValueSet”オペレーションが同じ値で呼び出される。いくつかのアプリケーション(例えば,リモート・セットアップ)では,1つのサービス・アイテムの値を,そのアプリケーションのユーザーによって行われた可能性のある全ての変更を無効にするように,プログラムが開始された場合に有していた値に戻すことができると非常に有益であることがある。
2.2.3.新しいモデル・アイテムの定義
上の説明で分かるように,アプリケーション・プログラマは,いずれのかの新しいリモート・マシーン,データベース,または他の外部リソースによって提供される新しい種類のサービス・アイテムを記述するために,クラスSI_ModelItemに対する新しいサブクラスを簡単に定義することができる。
上の説明で分かるように,アプリケーション・プログラマは,いずれのかの新しいリモート・マシーン,データベース,または他の外部リソースによって提供される新しい種類のサービス・アイテムを記述するために,クラスSI_ModelItemに対する新しいサブクラスを簡単に定義することができる。
こうしたサブクラスのためのコードを含んだライブラリにリンクされた全てのアプリケーションは,作動中,その新しいサービス・アイテムを用いることができ,そうしたアプリケーションをリコンパイルする必要はなく,再リンクすれば良いだけである。ダイナミック・リンク・ライブラリ(DLL)に新しいクラスを入れることによって,適切に構成されたアプリケーションは,リンクされてユーザーに配分された後でも新しいサービス・アイテムを利用することができる。
2.2.4.初期化
アプリケーション・プログラムがあるリモート・マシーンと通信するためには,そのメモリ内にコンポーネントとその関連マシーン・モデルおよびアプリケーション・ステートとを有していなければならないことは,当業者にはすぐ分かる。
アプリケーション・プログラムがあるリモート・マシーンと通信するためには,そのメモリ内にコンポーネントとその関連マシーン・モデルおよびアプリケーション・ステートとを有していなければならないことは,当業者にはすぐ分かる。
本発明の好ましい実施の形態においては,これはそれらのクラスの名称,その属性の名称と値,そして各集合オブジェクトに含まれるオブジェクトのテキストによる表現または二進値による表現を含む,構成されるオブジェクト・インスタンスのテキストまたは二進値による表現を含んだ1つまたは複数のファイルを文法的に解析することによって行うことができる。
そのファイル内に示される種々のクラスに関するコンストラクタを用いて,パース・ツリーがつくられ,そのルートは必要なコンポーネント・オブジェクト・インスタンス700,800であり,その“model”属性はマシーン・モデル630,860を含んでおり,その“state”属性はアプリケーション・ステート600,810を含んでいる。アプリケーション・ステートは個別ケース・ファイル330,420を文法的に解析することによって構成しても良く,マシーン・モデル・ファイル350,430からの初期値を用いて構成し,初期化してもよい。
1つの例として,アプリケーション・プログラムがファクシミリ装置と交信する必要が生じた場合,そのアプリケーション・プログラムは最初にそのファクシミリ装置を記述したマシーン・モデル・ファイルを検索する。そうしたファイルは,例えば,以下に示すように記述される(一部)。ただし,明細書における文字標記の制限から,制限のある文字を代用文字(以下に$で記載する文字)に代えて記述する。
SC_ServiceModel: ($
name=k50
$
SI_MemoryItem: ($
name=R17D4
defaultValue=BCD1:51
description=‘drmk50.dat#R17D4'
itemValueList=〔〕
features=S_FeatureSet: (SYSTEM RemoteSetting)
readOnly=-
msbFirst=+
isremote=+
bitOffset=0
offset=6100
label=‘NCU 13'
$)
SI_MemoryItem: ($
name=R17D5
defaultValue=BCD1:256
description = ‘drmk50.dat#R17D5'
itemValueList=〔〕
features= S_FeatureSet: (SYSTEM
RemoteSetting)
readOnly=-
msbFirst=+
isremote=+
bitOffset=0
offset=6101
label=‘NCU 14'
$)
SI_MemoryItem: ($
name=R17D6
defaultValue=BCD1:256
description=‘drmk50.dat#R17D6'
itemValueList=〔〕
features=S_FeatureSet:
SYSTEM
RemoteSetting)
readOnly=-
msbFirst=+
isremote=+
bitOffset=0
offset=6102
label=‘NCU 15'
・・・
name=k50
$
SI_MemoryItem: ($
name=R17D4
defaultValue=BCD1:51
description=‘drmk50.dat#R17D4'
itemValueList=〔〕
features=S_FeatureSet: (SYSTEM RemoteSetting)
readOnly=-
msbFirst=+
isremote=+
bitOffset=0
offset=6100
label=‘NCU 13'
$)
SI_MemoryItem: ($
name=R17D5
defaultValue=BCD1:256
description = ‘drmk50.dat#R17D5'
itemValueList=〔〕
features= S_FeatureSet: (SYSTEM
RemoteSetting)
readOnly=-
msbFirst=+
isremote=+
bitOffset=0
offset=6101
label=‘NCU 14'
$)
SI_MemoryItem: ($
name=R17D6
defaultValue=BCD1:256
description=‘drmk50.dat#R17D6'
itemValueList=〔〕
features=S_FeatureSet:
SYSTEM
RemoteSetting)
readOnly=-
msbFirst=+
isremote=+
bitOffset=0
offset=6102
label=‘NCU 15'
・・・
上に示したように,記述ファイルは“K50”ファクシミリ装置に関するSC_ServiceModel(モデル)のテキストによる表現を含んでいる。SI_MemoryItemのインスタンスはR17D4,R17D6およびR17D6を含んで記述されている。適切なインスタンスの内部の仮想機能は特定の通信プロトコルによって処理するために実行される。
別の例として,アプリケーション・プログラムはコピー機と交信することが必要な場合,アプリケーション・プログラムは先ずそのコピー機を記述するファイルを検索する。この場合,例えば,表2に示すように記述される(一部)。
SC_ServiceModel: ($
name=FT8780
$
SI_CopierItem: ($
name=LampThermistor
writeDCode= ‘1302'
features=S_FeatureSet: (
ReadOnly
RemoteSetting)
msbFirst=-
writeInfcode= ‘16040070101'
isremote=+
offset=0
label=LampThermistor
separator=‘;'
IDCode= 〔〕
defaultValue=Nchars2:"00"
size_for _specify _data_length=2
description=〔〕
readOnly=-
bitOffset=0
readInfCode=‘16040070101'
size=2
readDcode=‘1302;'
$)
SI_CopierItem: ($
name= SC_ChargerLeak
writeDCode= ‘1302;'
features=S_FeatureSet: (
RemoteSetting
ScCall
msbFirst=-
writeInCode=‘32000930201'
isremote=+
offset=0
label=SC_ChargerLeak
separator=‘;'
IDCode= 〔〕
defaultValue=Nchars1_1:"0"
size_for _specify _data_length=2
description=〔〕
readOnly=-
bitOffset=0
readInfCode=‘32000930201'
size=1
readDCode=‘1302;'
$)
SI_CopierItem: ($
name=FusingTempADJ
writeDCode= ‘1304'
features=S_FeatureSet: (
ReadWrite
RemoteSetting)
msbFirst=-
writeInfCode= ‘51011050101'
isremote=+
offset=0
label=FusingTempADJ
separator=‘;'
IDCode= 〔〕
defaultValue=Nchars3s _16:"+00"
size_for _specify _data_length=2
description=〔〕
readOnly=-
bitOffset=0
readInfCode=‘51011050101'
size=1
readDCode=‘1302;'
$)
・・・
name=FT8780
$
SI_CopierItem: ($
name=LampThermistor
writeDCode= ‘1302'
features=S_FeatureSet: (
ReadOnly
RemoteSetting)
msbFirst=-
writeInfcode= ‘16040070101'
isremote=+
offset=0
label=LampThermistor
separator=‘;'
IDCode= 〔〕
defaultValue=Nchars2:"00"
size_for _specify _data_length=2
description=〔〕
readOnly=-
bitOffset=0
readInfCode=‘16040070101'
size=2
readDcode=‘1302;'
$)
SI_CopierItem: ($
name= SC_ChargerLeak
writeDCode= ‘1302;'
features=S_FeatureSet: (
RemoteSetting
ScCall
msbFirst=-
writeInCode=‘32000930201'
isremote=+
offset=0
label=SC_ChargerLeak
separator=‘;'
IDCode= 〔〕
defaultValue=Nchars1_1:"0"
size_for _specify _data_length=2
description=〔〕
readOnly=-
bitOffset=0
readInfCode=‘32000930201'
size=1
readDCode=‘1302;'
$)
SI_CopierItem: ($
name=FusingTempADJ
writeDCode= ‘1304'
features=S_FeatureSet: (
ReadWrite
RemoteSetting)
msbFirst=-
writeInfCode= ‘51011050101'
isremote=+
offset=0
label=FusingTempADJ
separator=‘;'
IDCode= 〔〕
defaultValue=Nchars3s _16:"+00"
size_for _specify _data_length=2
description=〔〕
readOnly=-
bitOffset=0
readInfCode=‘51011050101'
size=1
readDCode=‘1302;'
$)
・・・
上に示した通り,記述ファイルは“FT8780”コピー機に関するSC_ServiceModel(モデル)のテキストによる表現を含んでいる。SI_CopierItemのインスタンスは,LampThermitor,SC_ChargerLeakおよびFusingTempADJを含んで記述されている。
1つのアプリケーションは複数のコンポーネント・オブジェクト700,800および関連するモデル630,860,およびアプリケーション・ステート600,810を段階的,あるいは同時並行的にそのメモリ内につくることによって複数のリモート・マシーンと交信することができる。
2.3.典型的なクラス・デスクリプタ
以下のC++コードは,マシーン・モデル・クラスの好ましい実施の形態の説明的なサブセットに関するクラス・デクラレーションによって構成されている。
以下のC++コードは,マシーン・モデル・クラスの好ましい実施の形態の説明的なサブセットに関するクラス・デクラレーションによって構成されている。
2.3.1.Serviceクラス
サービス・クラスは,サービス・アイテムおよびサービス集合(collection) に関する一般的で抽象的なベース・クラスである。
サービス・クラスは,サービス・アイテムおよびサービス集合(collection) に関する一般的で抽象的なベース・クラスである。
class Service: public R_Nameable{
Description :
R_ABSTRACT(Service, R Nameable);
public:
Pseudo-Attributes:
R_FUNC_RX(Service *, parent);
R_CONTAINER _IS(parent);
ツリーにおけるこのサービスのペアレント。このサービスがサービス・ツリーのルートにある場合(つまり,そのペアレントはコンポーネント)。"parent"はそのサービスがつくられた場合にセットされるか,あるいはチャイルドがそれに付加された場合に,ペアレント自身によってセットされる。
R_FUNC_RO_RC(R_Collection, children);
R_CONTENTS_IS(children);
このサービスのチルドレンを保有するための集合。1つの場所で初期化,消去できるようにするために,ここに置かれる。この下側はスペシャライズするためにサブクラス内で行われるダウンキャスティングが行われねばならないことを示している。
virtual void setValueAt(Rcad i,Rvalue const &nv);
virtual void setValueOf(RKey const&Key, Rvalue const&nv);
virtual void append(Rvalue const&nv);
parentSet を呼び出すことができるように,チルドレンを付加するオペレーションをオーバーライドする。
virtual Service *getChildByName(R_Symbol *nm)
サービス名が与えられたら,それに一致するチャイルドを見つける。ファスト・ルックアップを行うことができるサブクラス内にオーバーライドしなければならない。 virtual Component *component ( ) const;
コンポーネントがあった場合,このサービスが付加される。この内容のデクラレーションはそれが大文字でタイプされるまで(strongly typed) 遅らされる。これは,"S_TYPED _CHILDREN(child_type, collection_type )"によって行われる。
#define S_TYPED _CHILDREN(childType, collectionType) \
R_CONTENTS_INIT_NEW(collectionType, children);\
R_CHILDREN_ARE _TYPED(childType,collectionType, parentSet)
Description :
R_ABSTRACT(Service, R Nameable);
public:
Pseudo-Attributes:
R_FUNC_RX(Service *, parent);
R_CONTAINER _IS(parent);
ツリーにおけるこのサービスのペアレント。このサービスがサービス・ツリーのルートにある場合(つまり,そのペアレントはコンポーネント)。"parent"はそのサービスがつくられた場合にセットされるか,あるいはチャイルドがそれに付加された場合に,ペアレント自身によってセットされる。
R_FUNC_RO_RC(R_Collection, children);
R_CONTENTS_IS(children);
このサービスのチルドレンを保有するための集合。1つの場所で初期化,消去できるようにするために,ここに置かれる。この下側はスペシャライズするためにサブクラス内で行われるダウンキャスティングが行われねばならないことを示している。
virtual void setValueAt(Rcad i,Rvalue const &nv);
virtual void setValueOf(RKey const&Key, Rvalue const&nv);
virtual void append(Rvalue const&nv);
parentSet を呼び出すことができるように,チルドレンを付加するオペレーションをオーバーライドする。
virtual Service *getChildByName(R_Symbol *nm)
サービス名が与えられたら,それに一致するチャイルドを見つける。ファスト・ルックアップを行うことができるサブクラス内にオーバーライドしなければならない。 virtual Component *component ( ) const;
コンポーネントがあった場合,このサービスが付加される。この内容のデクラレーションはそれが大文字でタイプされるまで(strongly typed) 遅らされる。これは,"S_TYPED _CHILDREN(child_type, collection_type )"によって行われる。
#define S_TYPED _CHILDREN(childType, collectionType) \
R_CONTENTS_INIT_NEW(collectionType, children);\
R_CHILDREN_ARE _TYPED(childType,collectionType, parentSet)
constructors:
Service (R_Symbol &nm, Service *prnt = 0);
規則上,全てのServiceItem コンストラクタはその最初のアーギュメントとしての名称に関するレファレンスとその最後のアーギュメントしてのペアレントに対するポインタを含んでいる。
Service (R_Symbol &nm, Service *prnt = 0);
規則上,全てのServiceItem コンストラクタはその最初のアーギュメントとしての名称に関するレファレンスとその最後のアーギュメントしてのペアレントに対するポインタを含んでいる。
usage:
"parent ・ append (new Service(name, &parent))"
Service (R_Base const &o);
そのコピー・インストラクタを用いてサービスを構成する場合,通常ボトム・アップでツリーを構成するので,ペアレントは分からない。parentSet で行うアペンドにアサインされねばならない。
"parent ・ append (new Service(name, &parent))"
Service (R_Base const &o);
そのコピー・インストラクタを用いてサービスを構成する場合,通常ボトム・アップでツリーを構成するので,ペアレントは分からない。parentSet で行うアペンドにアサインされねばならない。
Descructor:
〜Service( );
代表された集合オペレーション:一つのサービスをペアレント・サービスに対して付加するオペレーションは,必要な場合,そのチャイルドの"parent"フィールドをセットしなければならない。
〜Service( );
代表された集合オペレーション:一つのサービスをペアレント・サービスに対して付加するオペレーションは,必要な場合,そのチャイルドの"parent"フィールドをセットしなければならない。
2.3.2.SI_ServiceItemクラス
SI_ServiceItemクラスは,全てのサービス・アイテムに対して同じインタフェースを提供する。
SI_ServiceItemクラスは,全てのサービス・アイテムに対して同じインタフェースを提供する。
class SI_ServiceItem: public Service {
public:
S_TYPED _CHILDREN (SI_ServiceItem,
RT_Table <SI_ServiceItem >);
このサービス・アイテムに関する情報をリターンする。この情報はそのアプリケーション(特徴)およびユーザー(ラベル,記述)に対するこのサービス・アイテムを記述するために用いられる。
R_ATTR_XX_RC(R_String, label);
ユーザーに対する表現のために表示し,
このServiceItem をラベルするために用いられるストリング。これはデフォールト名で,アプリケーションに特有の名称変更や言語上の翻訳から,その名称と違っている場合もある。
R_FUNC_GET (R_String *, description) ;
このサービスが何をするのかについての簡単な説明をするストリング。一般的に,この説明は,それが必要とされる前にそのアプリケーションのワーキング・メモリに保存されるのではなく,データベースまたはファイルでルック・アップされる。
R_FUNC_GET (S_featureSet *, features);
このサービスに関する一定のシンボリックな特徴をリターンする。
R_FUNC_GET(Rcard,offset);
そのペアレントに対する本アイテムのアドレスを(バイトで)リターンする。
R_FUNC_GET(Rcard,bitoffset);
それを含んでいるアイテムがある場合,その低オーダー・ビットに対する本アイテムのビットによるオフセットをリターンする。
R_FUNC_GET(Rcard, index);
ペアレントが同じアイテムの列である場合,そのペアレ ントにおけるこのアイテムのインデックス。さもなけれ ばゼロ。
R_FUNC_GET(Rcard, address);
通常それを含んでいるメモリ,ファイル等のスタートに関連したアイテムの絶対アドレス(バイト)。オフセット,インデックス,およびサイズから計算される。
public:
S_TYPED _CHILDREN (SI_ServiceItem,
RT_Table <SI_ServiceItem >);
このサービス・アイテムに関する情報をリターンする。この情報はそのアプリケーション(特徴)およびユーザー(ラベル,記述)に対するこのサービス・アイテムを記述するために用いられる。
R_ATTR_XX_RC(R_String, label);
ユーザーに対する表現のために表示し,
このServiceItem をラベルするために用いられるストリング。これはデフォールト名で,アプリケーションに特有の名称変更や言語上の翻訳から,その名称と違っている場合もある。
R_FUNC_GET (R_String *, description) ;
このサービスが何をするのかについての簡単な説明をするストリング。一般的に,この説明は,それが必要とされる前にそのアプリケーションのワーキング・メモリに保存されるのではなく,データベースまたはファイルでルック・アップされる。
R_FUNC_GET (S_featureSet *, features);
このサービスに関する一定のシンボリックな特徴をリターンする。
R_FUNC_GET(Rcard,offset);
そのペアレントに対する本アイテムのアドレスを(バイトで)リターンする。
R_FUNC_GET(Rcard,bitoffset);
それを含んでいるアイテムがある場合,その低オーダー・ビットに対する本アイテムのビットによるオフセットをリターンする。
R_FUNC_GET(Rcard, index);
ペアレントが同じアイテムの列である場合,そのペアレ ントにおけるこのアイテムのインデックス。さもなけれ ばゼロ。
R_FUNC_GET(Rcard, address);
通常それを含んでいるメモリ,ファイル等のスタートに関連したアイテムの絶対アドレス(バイト)。オフセット,インデックス,およびサイズから計算される。
Value Description Information :
以下の機能は,通常,デスクリプタ,特に,default-
Value の値デスクリプタによって代表される。サイズや valueList 等の少数の機能が,SI_ModelItem の属性に よってオーバーライドされることができる。
R_FUNC_GET(Rvalue, defaultValue);
そのアイテムのデフォールト値。このデフォールト値の R_ValueDscr はこのアイテムの全てのインスタンスに対して用いられるデスクリプタである。
R_FUNC_GET (R_ValueDscr & ,defaultDscr);
デフォールト値デスクリプタ。"defaultValue ( )・dscr( )," と同じでなければならないが,効率のため(つまり,ユーザーがいくつかのレベルの間接的な方法で値全体をワインド・アップ・パシングしないようにするために),遅らされる。
R_FUNC_GET (Rcard, minSize);
R_FUNC_GET (Rcard, maxSize);
1つのアイテムの値をホールドするのに必要な,即ち,そのアイテムをリモート・マシーンのメモリに保存し,それをマシーンに送り,あるいはデータベース内に保存するために必要な最低および最大バイト数。
Rinvalidindex のmaxSize はそのサイズに関して上限のない可変長オブジェクトを示している。
R_FUNC_GET (Rcard,packedSize);
その値のホールドするのに必要なビット数。
R_FUNC_GET (Rcard, minWidth);
R_FUNC_GET (Rcard, maxWidth);
R_FUNC_GET (Rcard, minHeight);
R_FUNC_GET (Rcard, maxHeight);
プリントまたはディスプレイのために1つの値をストリングとして表現するのに必要な最小,および最大文字およびライン数。
R_FUNC_GET (Rvalue, minValue);
R_FUNC_GET (Rvalue, maxValue);
そのアイテムの最小および最大値。ストリング値化されたアイテムのRnullValueをリターン。
R_FUNC_GET (Rvalue, unit);
R_FUNC_GET (Rvalue, scaleFactor);
アイテム値の後に表示されるべき単位およびスケール・ファクタ。例えば,電圧の単位とそのスケール・ファクタはキロボルトで表された値の場合,Vと1000である。
R_FUNC_GET (R_Base *, valueList)
少数の名称のついた値をもったアイテムに対して用い得る値。数値でインデックスされ,符号名でキー入力された集合(collection) でなければならない。
R_FUNC_GET (Rbool, msbFirst);
バイト・オーダーリング
R_FUNC_GET (Rbool, readOnly);
そのリモート・マシーン上でアイテムが修正できない場合だけ有効。
以下の機能は,通常,デスクリプタ,特に,default-
Value の値デスクリプタによって代表される。サイズや valueList 等の少数の機能が,SI_ModelItem の属性に よってオーバーライドされることができる。
R_FUNC_GET(Rvalue, defaultValue);
そのアイテムのデフォールト値。このデフォールト値の R_ValueDscr はこのアイテムの全てのインスタンスに対して用いられるデスクリプタである。
R_FUNC_GET (R_ValueDscr & ,defaultDscr);
デフォールト値デスクリプタ。"defaultValue ( )・dscr( )," と同じでなければならないが,効率のため(つまり,ユーザーがいくつかのレベルの間接的な方法で値全体をワインド・アップ・パシングしないようにするために),遅らされる。
R_FUNC_GET (Rcard, minSize);
R_FUNC_GET (Rcard, maxSize);
1つのアイテムの値をホールドするのに必要な,即ち,そのアイテムをリモート・マシーンのメモリに保存し,それをマシーンに送り,あるいはデータベース内に保存するために必要な最低および最大バイト数。
Rinvalidindex のmaxSize はそのサイズに関して上限のない可変長オブジェクトを示している。
R_FUNC_GET (Rcard,packedSize);
その値のホールドするのに必要なビット数。
R_FUNC_GET (Rcard, minWidth);
R_FUNC_GET (Rcard, maxWidth);
R_FUNC_GET (Rcard, minHeight);
R_FUNC_GET (Rcard, maxHeight);
プリントまたはディスプレイのために1つの値をストリングとして表現するのに必要な最小,および最大文字およびライン数。
R_FUNC_GET (Rvalue, minValue);
R_FUNC_GET (Rvalue, maxValue);
そのアイテムの最小および最大値。ストリング値化されたアイテムのRnullValueをリターン。
R_FUNC_GET (Rvalue, unit);
R_FUNC_GET (Rvalue, scaleFactor);
アイテム値の後に表示されるべき単位およびスケール・ファクタ。例えば,電圧の単位とそのスケール・ファクタはキロボルトで表された値の場合,Vと1000である。
R_FUNC_GET (R_Base *, valueList)
少数の名称のついた値をもったアイテムに対して用い得る値。数値でインデックスされ,符号名でキー入力された集合(collection) でなければならない。
R_FUNC_GET (Rbool, msbFirst);
バイト・オーダーリング
R_FUNC_GET (Rbool, readOnly);
そのリモート・マシーン上でアイテムが修正できない場合だけ有効。
2.3.3.SI_ModelItemクラス
ModelItemは,マシーンの記述の一部,つまり,そのプログラム上でのマシーンのモデルである。これはそのマシーンのカレント・ステートに関する情報は含んでおらず,どのようにしてステートを得られるか,そしでどんな値が使えるかについての情報を含んでいるだけである。基本的に,ModelItemはリモート・マシーンを呼び出したり,データベースを調べたりせずに,予め1つのアイテムについて知り得る全ての情報を含んでいる。
ModelItemは,マシーンの記述の一部,つまり,そのプログラム上でのマシーンのモデルである。これはそのマシーンのカレント・ステートに関する情報は含んでおらず,どのようにしてステートを得られるか,そしでどんな値が使えるかについての情報を含んでいるだけである。基本的に,ModelItemはリモート・マシーンを呼び出したり,データベースを調べたりせずに,予め1つのアイテムについて知り得る全ての情報を含んでいる。
Class SI_ModelItem: public SI_ServiceItem {
R_ABSTRACT (SI_ModelItem ,SI_ServiceItem);
public:
R_String *descriptionInit( );
記述をイニシャライズする。
R_ATTR_RW_RC(S_FeatureSet, features);
このアイテムの特徴
R_ATTR_R0 (Rcard,offset);
通常それを含んでいるマシーン・メモリ,ファイル,またはプロトコル・バッファのスタートに対するこのアイテムのアドレス
R_ATTR_R0 (Rcard, bitOffset);
それを含んでいるアイテムがあった場合,その低オーダー・ビットに対するこのアイテムのビット数でのオフセット
R_ABSTRACT (SI_ModelItem ,SI_ServiceItem);
public:
R_String *descriptionInit( );
記述をイニシャライズする。
R_ATTR_RW_RC(S_FeatureSet, features);
このアイテムの特徴
R_ATTR_R0 (Rcard,offset);
通常それを含んでいるマシーン・メモリ,ファイル,またはプロトコル・バッファのスタートに対するこのアイテムのアドレス
R_ATTR_R0 (Rcard, bitOffset);
それを含んでいるアイテムがあった場合,その低オーダー・ビットに対するこのアイテムのビット数でのオフセット
Value Description Information :
ほとんどのデクスクリプタ属性は,1つまたはそれ以上のレベルでValueDescriptor により代表される。必要な場合,一部はここでオーバーライドされる場合もあ
る。
R_ATTR_R0 (Rvalue,defaultValue);
そのアイテムのデフォールト値。デフォールト値デスクリプタはこのアイテムの全てのインスタンスに対して用いられるデスクリプタである。
R_FUNC_GET (R_ValueDscr & ,defaultDscr);
デフォールト値のデスクリプタ。
R_ATTR_RW (RBool, msbFirst);
バイト・オーダリング
R_ATTR_RW_RC(R_Base,itemValueList);
R_FUNC_GET (R_Base *,ValueList);
デスクリプタの中のローカル値をオーバーライドできるローカル値リスト
R_ATTR_RW (RCard, itemSize);
サイズに関するオーバーライド,アイテムがビットフィールドかストリングかによって,ビットまたはバイト
R_FUNC_GET (RCard, minSize);
R_FUNC_GET (RCard, maxSize);
R_FUNC_GET (RCard, packedSize);
ほとんどのデクスクリプタ属性は,1つまたはそれ以上のレベルでValueDescriptor により代表される。必要な場合,一部はここでオーバーライドされる場合もあ
る。
R_ATTR_R0 (Rvalue,defaultValue);
そのアイテムのデフォールト値。デフォールト値デスクリプタはこのアイテムの全てのインスタンスに対して用いられるデスクリプタである。
R_FUNC_GET (R_ValueDscr & ,defaultDscr);
デフォールト値のデスクリプタ。
R_ATTR_RW (RBool, msbFirst);
バイト・オーダリング
R_ATTR_RW_RC(R_Base,itemValueList);
R_FUNC_GET (R_Base *,ValueList);
デスクリプタの中のローカル値をオーバーライドできるローカル値リスト
R_ATTR_RW (RCard, itemSize);
サイズに関するオーバーライド,アイテムがビットフィールドかストリングかによって,ビットまたはバイト
R_FUNC_GET (RCard, minSize);
R_FUNC_GET (RCard, maxSize);
R_FUNC_GET (RCard, packedSize);
Read and Writing:
SI_ RemoteItem はリモート・マシーン上のアイテムを読み出したり,アイテムを書き込んだりするためのオペレーションを含んでいるが,しかしながら,これらはプロトコル固有サブクラスにオーバーライドされる。これらのオペレーションはSI_ ModelItemに組み込まれるが,それはこれがSI_AppItem が参照するクラスだからである。SI_AppItem がアイテムとデータベース・アイテムをそれぞれ別に取り扱わねばならないかについて特別な理由はなく,例えば,あるマシーンはそれ自身のシリアル番号についてレポートし,他のマシーンがネームプレート上およびカスタマー・データベース内にだけシリアル番号を保存するようにしても差し支えない。
なお,リモート・アクセス・オペレーションはSI_AppItem アーギュメントの形式をとり,これはそのためにその作業が行われているアプリケーション・アイテムである。SI_AppItem が"busy"とマークされれば,全てのオペレーションはすぐリターンされ,その作業が実際に行われる場合は,コールバック法が起動される。
SI_ RemoteItem はリモート・マシーン上のアイテムを読み出したり,アイテムを書き込んだりするためのオペレーションを含んでいるが,しかしながら,これらはプロトコル固有サブクラスにオーバーライドされる。これらのオペレーションはSI_ ModelItemに組み込まれるが,それはこれがSI_AppItem が参照するクラスだからである。SI_AppItem がアイテムとデータベース・アイテムをそれぞれ別に取り扱わねばならないかについて特別な理由はなく,例えば,あるマシーンはそれ自身のシリアル番号についてレポートし,他のマシーンがネームプレート上およびカスタマー・データベース内にだけシリアル番号を保存するようにしても差し支えない。
なお,リモート・アクセス・オペレーションはSI_AppItem アーギュメントの形式をとり,これはそのためにその作業が行われているアプリケーション・アイテムである。SI_AppItem が"busy"とマークされれば,全てのオペレーションはすぐリターンされ,その作業が実際に行われる場合は,コールバック法が起動される。
R_FUNC_GET _IS(RBool, readOnly, rFalse);
R_FUNC_GET _IS(RBool, isRemote, rFalse);
このサービスが実際にリモート・マシーンに含まれている場合は有効。これは,ユーザーに対して,読み出しや書き込みを行うためには一定の時間がかかることを示唆するために用いることができる。
Virtual RBool updateParentNewValue(SI_AppItem *, RValue const & );
必要な場合,AppleItem のペアレントのNewValueを更新する。
Virtual RBool updateChildrenNewValue(SI_AppItem *,
RValue const & );
必要であれば,AppItem のペアレントのChildrenValue を更新
Virtual RBool updateParentCurrentValue(SI_AppItem *,
RValue const & );
必要であれば,AppItem のペアレントのcurrentValueを更新
Virtual RBool updateChildrenCurrentValue(SI_AppItem *,
RValue const & );
必要であれば,applItemのチルドレンのcurrentValueを更新
R_FUNC_GET _IS(RBool, isRemote, rFalse);
このサービスが実際にリモート・マシーンに含まれている場合は有効。これは,ユーザーに対して,読み出しや書き込みを行うためには一定の時間がかかることを示唆するために用いることができる。
Virtual RBool updateParentNewValue(SI_AppItem *, RValue const & );
必要な場合,AppleItem のペアレントのNewValueを更新する。
Virtual RBool updateChildrenNewValue(SI_AppItem *,
RValue const & );
必要であれば,AppItem のペアレントのChildrenValue を更新
Virtual RBool updateParentCurrentValue(SI_AppItem *,
RValue const & );
必要であれば,AppItem のペアレントのcurrentValueを更新
Virtual RBool updateChildrenCurrentValue(SI_AppItem *,
RValue const & );
必要であれば,applItemのチルドレンのcurrentValueを更新
Virtual void readOrEnqueue(SI_ AppItem *app, RBool mayQueue);
Virtual void writeOrEnqueue (SI_AppItem *app, RValue const &v, RBool mayQueue);
AppItem のカレント値を読み出したり,書き込んだりする。isRemote( ) およびmayQueueが両方とも有効であれば,オペレーションは実際にキューされる。
virtual void readNotify(SI_AppItem *app, RValue const &V,
R_Symbol *status) ;
Virtual void writeNotify (SI_AppItem *app, RValue const &V, R_Symbol *status) ;
値が適切なステータスで読み出されたり,書き込まれたりしたことをアプリケーション・アイテムに伝える(ゼロは全てがうまく行ったことを示す)。
これは,AppItem に値を保存することである。
Virtual void readEnqueue (SI_AppItem *app);
Virtual void writeEnqueue(SI_AppItem *app, RValue const &v); キュー入力を行う。
Virtual void readValue (SI_AppItem *app)
Virtual void writeValue(SI_AppItem *app, RValue const &v);
実際に読み出し,書き込みを行い,その結果をAppItem 伝える。キュー入力から呼び出される場合もある。デフォールトではreadValue がModelItem のdefaultValueをリターンし,writevalueがApplItemにその値が書き込まれたことを伝える。
virtual RCard readValueFromBuffer(SI_AppItem *app,R_Buffer const &buf, RCard buf_addr=0,RCard hdr_size=0);
virtual RCard writeValueIntoBuffer (SI_AppItem *app, RValue const &vR Buffer &buf, RCard buf_addr=0,
RCard hdr size=0);
バッファー上で読み出しまたは書き込みを行い,AppItemに通知する。
buf_ addr パラメータはそのマシーンのメモリ位置ゼロに対する{\em buffer }のスタート・アドレス。
hdr_sizeはバッファー内のいずれかのプロトコル・ヘッダー情報以下の buf_addrに対応する位置である。
Virtual void writeOrEnqueue (SI_AppItem *app, RValue const &v, RBool mayQueue);
AppItem のカレント値を読み出したり,書き込んだりする。isRemote( ) およびmayQueueが両方とも有効であれば,オペレーションは実際にキューされる。
virtual void readNotify(SI_AppItem *app, RValue const &V,
R_Symbol *status) ;
Virtual void writeNotify (SI_AppItem *app, RValue const &V, R_Symbol *status) ;
値が適切なステータスで読み出されたり,書き込まれたりしたことをアプリケーション・アイテムに伝える(ゼロは全てがうまく行ったことを示す)。
これは,AppItem に値を保存することである。
Virtual void readEnqueue (SI_AppItem *app);
Virtual void writeEnqueue(SI_AppItem *app, RValue const &v); キュー入力を行う。
Virtual void readValue (SI_AppItem *app)
Virtual void writeValue(SI_AppItem *app, RValue const &v);
実際に読み出し,書き込みを行い,その結果をAppItem 伝える。キュー入力から呼び出される場合もある。デフォールトではreadValue がModelItem のdefaultValueをリターンし,writevalueがApplItemにその値が書き込まれたことを伝える。
virtual RCard readValueFromBuffer(SI_AppItem *app,R_Buffer const &buf, RCard buf_addr=0,RCard hdr_size=0);
virtual RCard writeValueIntoBuffer (SI_AppItem *app, RValue const &vR Buffer &buf, RCard buf_addr=0,
RCard hdr size=0);
バッファー上で読み出しまたは書き込みを行い,AppItemに通知する。
buf_ addr パラメータはそのマシーンのメモリ位置ゼロに対する{\em buffer }のスタート・アドレス。
hdr_sizeはバッファー内のいずれかのプロトコル・ヘッダー情報以下の buf_addrに対応する位置である。
Initalization:
virtual void initAppItem (class SI_AppItem *, RValue&) {}
AppItem のカレント値が初期化される必要がある場合,Si_AppItem がつくられると呼び出される。このルーチンはカレント値に対する任意の直接アクセスである。
virtual void initAppItem (class SI_AppItem *, RValue&) {}
AppItem のカレント値が初期化される必要がある場合,Si_AppItem がつくられると呼び出される。このルーチンはカレント値に対する任意の直接アクセスである。
2.3.4.SI_RemoteItemクラス
SI_RemoteItemクラスは,リモート・マシーンによって実際に実行され,あるいは,リモート・マシーンに保存されたり,そこから検索されるサービス・アイテムに対するペアレント・クラスである。このクラスはメモリに基づくサービス・アイテムに関する実際のメモリ位置を示すと同時に,必要であれば,個々のビットに関する情報も含んでいる。リモート・マシーンが内容を保有している場合,このクラスはコンポーネントに対して,個々の名称および記述をデータ・ストラクチャの形式で提供する。同じアイテムの列は唯1つのアイテムを有しているだけである。
SI_RemoteItemクラスは,リモート・マシーンによって実際に実行され,あるいは,リモート・マシーンに保存されたり,そこから検索されるサービス・アイテムに対するペアレント・クラスである。このクラスはメモリに基づくサービス・アイテムに関する実際のメモリ位置を示すと同時に,必要であれば,個々のビットに関する情報も含んでいる。リモート・マシーンが内容を保有している場合,このクラスはコンポーネントに対して,個々の名称および記述をデータ・ストラクチャの形式で提供する。同じアイテムの列は唯1つのアイテムを有しているだけである。
class SI_RemoteItem: public SI_ModelItem {
R_ABSTRACT (SI_RemoteItem, SI_ModelItem);
public:
R_ATTR_GET _IS(RBool, isRemote, rTrue);
R_ATTR_RW(RBool, readOnly);
Constructors:
SI_RemoteItem(R_Base const &o);
SI_RemoteItem(R_Symbol &nm, RValue const &dflt,
Service *prnt0)
R_ABSTRACT (SI_RemoteItem, SI_ModelItem);
public:
R_ATTR_GET _IS(RBool, isRemote, rTrue);
R_ATTR_RW(RBool, readOnly);
Constructors:
SI_RemoteItem(R_Base const &o);
SI_RemoteItem(R_Symbol &nm, RValue const &dflt,
Service *prnt0)
2.3.5.SI_MemoryItemクラス
SI_MemoryItemクラスは,リモート・マシーン上のメモリ内での位置を示すものである。背景の箇所でも述べたように,一部のリモート・マシーンはリモート・マシーン・メモリに対して直接のアクセスを可能にしている場合がある。
SI_MemoryItemクラスは,リモート・マシーン上のメモリ内での位置を示すものである。背景の箇所でも述べたように,一部のリモート・マシーンはリモート・マシーン・メモリに対して直接のアクセスを可能にしている場合がある。
class IS_MemoryItem: public SI_RemoteItem{
R_CONCRETE (SI_MemoryItem, SI_RemoteItem);
public:
Attributes:
R_FUNC_GET _IS(RCard, start, address() );
スタート・アドレス
Reading and writing :
virtual RBool updateChildrenNewValue(SI_AppItem *, RValue
const &);
virtual RBool updateChildrenCurrentValue(SI_AppItem *,
RValue const &);
Constructors:
R_COPY_ONSTRUCTOR SI_MemoryItem(R_Base const &o);
SI_MemoryItem(R_Symbol &nm,RValue const &dflt,RCard addr=0 Service *prnt=0);
SI_MemoryItem(R_Symbol &nm, RValue const &dflt, RCard
byteAdd , RCard bitAddr, Service *prnt=0) ;
R_CONCRETE (SI_MemoryItem, SI_RemoteItem);
public:
Attributes:
R_FUNC_GET _IS(RCard, start, address() );
スタート・アドレス
Reading and writing :
virtual RBool updateChildrenNewValue(SI_AppItem *, RValue
const &);
virtual RBool updateChildrenCurrentValue(SI_AppItem *,
RValue const &);
Constructors:
R_COPY_ONSTRUCTOR SI_MemoryItem(R_Base const &o);
SI_MemoryItem(R_Symbol &nm,RValue const &dflt,RCard addr=0 Service *prnt=0);
SI_MemoryItem(R_Symbol &nm, RValue const &dflt, RCard
byteAdd , RCard bitAddr, Service *prnt=0) ;
2.3.6.SI_BitfieldItemクラス
SI_BitfieldItemクラスは,それを含むSI_MemoryItem内のビットフィールドを示している。このビット数は含んでいるメモリ・アイテムの低オーダー・ビットに関するものであり,最大32ビット長である。このビットフィールドのサイズ(packedSize) を指定するのは,デフォールト値のデスクリプタにまかせられる。
SI_BitfieldItemクラスは,それを含むSI_MemoryItem内のビットフィールドを示している。このビット数は含んでいるメモリ・アイテムの低オーダー・ビットに関するものであり,最大32ビット長である。このビットフィールドのサイズ(packedSize) を指定するのは,デフォールト値のデスクリプタにまかせられる。
Class SI_BitfieldItem: public SI_ MemoryItem {
R_CONCRETE (SI_ BitfieldItem, SI_RemoteItem);
public:
R_FUNC_GET(RCard, minSize);
R_FUNC_GET(RCard, maxSize);
R_FUNC_GET(RCard, packedSize);
itemSizeがゼロでない場合,サイズを正しく計算するために,これらをオーバーライドしなければならない。
virtual void readOrEnqueue (SI_AppItem *app, RBool
mayQueue);
virtual void writeOrEnqueue
(SI_AppItem *app, RValue const &v,
RBool mayQueue);
virtual void readEnqueue (SI_AppItem *app);
virtual void writeEnqueue(SI_AppItem *app, RValue const &v); virtual RBool updateParentNewValue (SI_AppItem *,RValue
const &);
virtual RBool updateParentCurrentValue (SI_AppItem *,RValue const &);
R_CONCRETE (SI_ BitfieldItem, SI_RemoteItem);
public:
R_FUNC_GET(RCard, minSize);
R_FUNC_GET(RCard, maxSize);
R_FUNC_GET(RCard, packedSize);
itemSizeがゼロでない場合,サイズを正しく計算するために,これらをオーバーライドしなければならない。
virtual void readOrEnqueue (SI_AppItem *app, RBool
mayQueue);
virtual void writeOrEnqueue
(SI_AppItem *app, RValue const &v,
RBool mayQueue);
virtual void readEnqueue (SI_AppItem *app);
virtual void writeEnqueue(SI_AppItem *app, RValue const &v); virtual RBool updateParentNewValue (SI_AppItem *,RValue
const &);
virtual RBool updateParentCurrentValue (SI_AppItem *,RValue const &);
3.通信モジュール
3.1.概要
通信モジュール180は,マシーン・モデル・モジュール170を共同して,クラスSI_AppItemのインスタンスで“readRequest”および“newValueSet”オペレーションを実行することで行われるリクエストに従って,リモート・マシーン90上でオペレーションを実行したりデータにアクセスしたりする。
3.1.概要
通信モジュール180は,マシーン・モデル・モジュール170を共同して,クラスSI_AppItemのインスタンスで“readRequest”および“newValueSet”オペレーションを実行することで行われるリクエストに従って,リモート・マシーン90上でオペレーションを実行したりデータにアクセスしたりする。
図2でコア層190に配置されている通信モジュール170の目的は,リモート・サービス・アプリケーション・プログラム(図2のアプリケーション層140における100,110,120,130等)が動作しているコンピュータ・システム1とあるリモート・マシーン10との間で,『通信セッション』と呼ばれるインタラクションを実行するためのプログラムミング・インタフェースを提供することである。このプログラミング・インタフェースのインプリメンテーションは基本通信クラスのサブクラスに含まれており,これらのサブクラスは図2のインタフェース層260に配置されている。
本発明の好ましい実施の形態は,全てのタイプのリモート・マシーンのために,通信モジュール170内で定義される単一のプログラミング・インタフェースを用いる。インタフェース層260内のサブクラスは特定のタイプのリモート・マシーンとのインタフェースを行うのに適したそのプログラミング・インタフェースのインプリメンテーションを行う。
また,本発明の好ましい実施の形態において,セッション・クラス階層は以下のもので構成されている(インデントの部分はインヘリタンスを示す)。
SI_DeviceCallBack
SI_CommunicationSession
SI_BufferedSession バッファーされたセッション
SI_MemorySession メモリに基づくセッション
SI_256BytesSession コール・セッションあたり 256バイト SI_CopierSession プログラムに基づいたセッション
SI_UnbufferedSession バッファーされないセッション
SI_DBSession データ・ベース・セッション
SI_CustAccessionSession カスタマー・データ・
ベース・アクセス
SI_HistorySession 経時データベース
TI TaskItem
TI_CommunicationItem 通信タスク・アイテム
TI_MemoryItem メモリに基づくタスク・アイテム
TI_ProgramItem プログラムに基づくタスク・アイテム TI_HistoryItem データ・ベース・タスク・アイテム
SI_CommunicationSession
SI_BufferedSession バッファーされたセッション
SI_MemorySession メモリに基づくセッション
SI_256BytesSession コール・セッションあたり 256バイト SI_CopierSession プログラムに基づいたセッション
SI_UnbufferedSession バッファーされないセッション
SI_DBSession データ・ベース・セッション
SI_CustAccessionSession カスタマー・データ・
ベース・アクセス
SI_HistorySession 経時データベース
TI TaskItem
TI_CommunicationItem 通信タスク・アイテム
TI_MemoryItem メモリに基づくタスク・アイテム
TI_ProgramItem プログラムに基づくタスク・アイテム TI_HistoryItem データ・ベース・タスク・アイテム
3.2.詳細な説明
SI_DeviceCallBackクラスは,リモート・サービス・アプリケーションと外部プロセス,通信装置,またはリモート・マシーンとの間の非同期通信のための一組の抽象的プログラミング・インタフェースを含んでいる。こうした非同期入力または出力オペレーションはそれを実行するのに一定の時間がかかるので,このアプリケーションは単にリクエストを発行して,ユーザー・インタフェース・イベントを処理し続ける。このオペレーションの実行が完了すると,装置ドライバーは“connectDone”オペレーションを用いてそのアプリケーションを『コール・バック』する。
SI_DeviceCallBackクラスは,リモート・サービス・アプリケーションと外部プロセス,通信装置,またはリモート・マシーンとの間の非同期通信のための一組の抽象的プログラミング・インタフェースを含んでいる。こうした非同期入力または出力オペレーションはそれを実行するのに一定の時間がかかるので,このアプリケーションは単にリクエストを発行して,ユーザー・インタフェース・イベントを処理し続ける。このオペレーションの実行が完了すると,装置ドライバーは“connectDone”オペレーションを用いてそのアプリケーションを『コール・バック』する。
“SI_CommunicationSession”は,全てのセッションのための抽象的基本クラス,つまり,リモート・マシーンとのインタフェースである。バッファーされたものと,バッファーされていないものの二つのSI_CommunicationSessionの二つのサブクラスが存在する。
バッファーされたセッション(SI_BufferedSectionおよびそのサブクラス)は,多くの場合,プロトコル情報を含んでいるヘッダーを含むブロックで送受信されることを求めるプロトコルを用いて通信に対処する。このデータおよびヘッダーは,次に,送られる前または受信された後でバッファに保存される。SI_BufferedSessionは,バッファー内のデータのフォーマットおよびその位置を指定するためにマシーン・モデル630,860内の情報を用いて,バッファとそのリモート・サービス・アプリケーションの内部データ・ストラクチャ(アプリケーション・ステート600,810に含まれている)でデータを移動させるために必要なコードを含んでいる。
SI_MemorySession,SI_256ByteSession,およびSI_CopierSessionは,異なったリモート・マシーンのための通信固有情報を与えるSI_CommunicationSessionのサブクラスを示している。
バッファーされていないセッション(SI_UnbufferedSessionおよびそのサブクラス)は,そのために,リモート・マシーンとアプリケーション・ステート600,810内のデータ間のリモート手順呼び出しによる直接のデータ伝送をサポートする一定のオペレーティング・システムまたはライブラリによってアプリケーション・プログラミング・インタフェースが提供されるところのデータベース・サーバーまたはファイル・サーバー等のエンティティに対するインタフェースとして用いられる。
SI_DBSession,SI_CustAccessSession,およびSI_HistorySessionは,種々のリモート・データベース等に通信固有情報を提供するSI_UnbufferedSessionのサブクラスを示している。
TI_TaskItemsは,1つの通信セッションをいくつか複数のステップに分割するために用いられる。図6は,コンピュータ・システム1とリモート・マシーン90(ここでは,1110で示す)間の典型的なセッションを示している。セッション(Session)1000はローカル読み出しキュー1040およびローカル書き込みキュー1070,サービス・アイテムに関して要求されたオペレーションを実行するための仮想バッチング・オペーレション,およびリモート・マシーン1110で用いられる外部フォーマットとコンピュータ・システム1との間でデータを翻訳するための仮想マッピング・オペーレションを含んでいる。キュー1040および1070はSC_Queueのインスタンスであり,SI_QueueItemのインスタンス1050,1060,1080,1090を含んでいる。
各SI_QueueItem1050,1080等は,読み出しリクエスト1050に対しては有効(true)で書き込みリクエスト1080に対しては無効(false)なブール(Boolean:論理演算)属性“read”と,読み出しリクエスト1050に対しては未定義で,書き込みリクエスト1080に対しては書き込まれるべき値を含んでいるRValue属性“value”,および,その上でオペレートされるべきリモート・サービスを示すSI_AppItem1051,1081に対するリフェレンスを含む属性“appItem”を含んでいる。SI_AppItem1051,1081は,データタイプや,サービスの一を記述したSI_ModeItemのサブクラスのインスタンス1052,1082を順番に参照する。
また,セッション1000は,Ti_TaskItemのサブクラスであるインスタンス1020,1030のリストを参照する属性“callSchedule”を保有している。用いられるサブクラスは交信されるリモート・マシーン1110のタイプに固有である。コール・スケジュール・リストは一回の呼び出しで行われるべきオペレーションの順番を判定し,また,例えば,1回のコールあたり最大256の連続バイトを伝送するファクシミリ装置において,それらにアクセスするために必要な個別コールの数を最小限におさえるためにリモート・ファクシミリ装置のメモリ910内のアイテム920,930に対するレファレンスの順番を入れ替えることによって最適化をはかるために用いられる場合もある。
セッション1000が開始されると,それは,それによってアプリケーション・プログラムがリモート・マシーン90,1110と交信することができる通信装置70に対するインタフェースを提供するCM_CommunicationDeviceのサブクラスのインスタンス1100に対する装置マネジャーを要求する。セッション1000によって行われる要求は,リモート・マシーン90,1110との通信で用いられるプロトコルの指定を含んでおり,装置マネジャーは要求されたプロトコルを用いることができ,まだ使われていない装置70のインスタンス1110をリターンする。
リモート・サービス・アプリケーションが通常ユーザーに応えて,キュー・アップされた通信リクエストの実行を要求すると,セッション1000は,callSchedule1010を構成するためにその読み出しキュー1040および書き込みキュー1070を繰り返す。必要であれば,そのデータをSI_QueueItem内での内部フォーマットからその外部表現に変換してそれをバッファ内に保存するために,各対応するSI_ModelItem1082の仮想機能“putValueIntoBuffer”を用いてバッファー内に書き込まれるべきデータを蓄積する。
これによって,セッション1000は,呼び出しスケジュールを繰り返し,各タスク・アイテム1020,1030に対してそのオペレーションを実行するように命令する。各タスク・アイテム1020,1030は,それを受けてセッション1000に対して,リモート・マシーン1110上でどのオペレーションを実行すべきかを順番に知らせる。そしてセッション1000は装置コントローラ1100(上述)を用いてリモート・マシーン1110との間で低レベル読み出しまたは書き込みオペレーションを実行する。必要であれば,各対応するSI_ModelItem1052の仮想機能“getValueFromBuffer”を用いて,バッファーからデータを抽出し,それを内部表現から外部表現に翻訳し,そしてそれをSI_AppItem1051の“currentValueSet”オペレーションを用いてSI_AppItem1051内に保存する。
3.3.新しいセッション・タイプの定義
上の説明でわかるように,アプリケーション・プログラマは,どのリモート・マシーン,データベース,または他の外部資源との通信の新しい方法を記述するために,クラスSI_CommunicationSessionに対してサブクラスを簡単に定義することができる。そうしたサブクラスのためのコードを含んでいるライブラリとリンクされたどのアプリケーションも動作時にその新しいセッション・タイプを用いることができ,こうしたアプリケーションはリコンパイルする必要がなく,再リンクすれば良いだけである。新しいクラスをダイナミック・リンク・ライブラリ(DLL)内に入れることにより,適切に構成されたアプリケーションは,リンクされユーザーに提供された後でも新しいセッション・タイプを用いることができる。
上の説明でわかるように,アプリケーション・プログラマは,どのリモート・マシーン,データベース,または他の外部資源との通信の新しい方法を記述するために,クラスSI_CommunicationSessionに対してサブクラスを簡単に定義することができる。そうしたサブクラスのためのコードを含んでいるライブラリとリンクされたどのアプリケーションも動作時にその新しいセッション・タイプを用いることができ,こうしたアプリケーションはリコンパイルする必要がなく,再リンクすれば良いだけである。新しいクラスをダイナミック・リンク・ライブラリ(DLL)内に入れることにより,適切に構成されたアプリケーションは,リンクされユーザーに提供された後でも新しいセッション・タイプを用いることができる。
4.通信装置インタフェース
4.1.概要
通信装置70は,それを通じてリモート・サービス・アプリケーションがリモート・マシーンと交信するための,モデム等コンピュータ・システムの周辺装置である。本発明の好ましい実施の形態においては,通信装置70はクラスCM_CommunicationDevicのサブクラスのインスタンス1100として,アプリケーション・プログラム内に表現される。
4.1.概要
通信装置70は,それを通じてリモート・サービス・アプリケーションがリモート・マシーンと交信するための,モデム等コンピュータ・システムの周辺装置である。本発明の好ましい実施の形態においては,通信装置70はクラスCM_CommunicationDevicのサブクラスのインスタンス1100として,アプリケーション・プログラム内に表現される。
本発明の好ましい実施の形態においては,装置クラス階層は以下の構成を有している(インデントはインヘリタンスを示す)。
CM_CommunicationDevice
CM_Modem モデム
CM_CCA FAXのための通信アダプタ
CM_USACCA ... 256バイト・プロトコル用のアダプタ
CM_LADP ライン・アダプタ/マルチプレクサ
CM_DBACESS データベース用の装置
CM_DeviceManager
CM_Modem モデム
CM_CCA FAXのための通信アダプタ
CM_USACCA ... 256バイト・プロトコル用のアダプタ
CM_LADP ライン・アダプタ/マルチプレクサ
CM_DBACESS データベース用の装置
CM_DeviceManager
4.2.詳細な説明
クラスCM_CommunicationDeviceは,モデム等の物理的な通信装置ばかりでなく,データベースおよびデータベース・サーバー等に対するアプリケーション・プログラミング・インタフェースにも関連した全ての属性およびオペレーションの全てを内蔵している。CM_CommunicationDeviceのインスタンスはリモート・マシーンの通信アドレス,そのリモート・マシーンに固有のプロトコル上の制約に関するリスト,そして,全ての装置に対してプログラミング・インタフェースを提供する仮想機能“initDevice”,“connect”,“read”,“write”および“disconnect”を含む属性を保有している。
クラスCM_CommunicationDeviceは,モデム等の物理的な通信装置ばかりでなく,データベースおよびデータベース・サーバー等に対するアプリケーション・プログラミング・インタフェースにも関連した全ての属性およびオペレーションの全てを内蔵している。CM_CommunicationDeviceのインスタンスはリモート・マシーンの通信アドレス,そのリモート・マシーンに固有のプロトコル上の制約に関するリスト,そして,全ての装置に対してプログラミング・インタフェースを提供する仮想機能“initDevice”,“connect”,“read”,“write”および“disconnect”を含む属性を保有している。
クラスCm_CCAは,リモート・ファクシミリ装置と交信するために用いられる通信制御装置アダプタに適用できる全ての属性およびオペレーションを定義するクラスの好ましい実施の形態である。CCA(通信制御装置アダプタ)はそのリモート・マシーンの内部メモリをアクセスできる特殊な目的のファックス・モデムの1つの実施の形態である。CM_USACCAクラスは256タイプ・プロトコルを用いるファクシミリ装置のアクセス・修正をどのように行うかを示す好ましい実施の形態を示している。
クラスCM_LADPは,コピー機の通信のために用いられるクラスの好ましい実施の形態である。このクラスは通信チャンネルとしてCM_Modemのインスタンスを用いる。LADP(ライン・アダプター)は電話回線と最大5台のコピー機との間をつなぐモデムとマルチプレクサとの組み合わせの1つの実施の形態である。
クラスCM_DBACESSは,リモート・サービス・アプリケーションがデータベースを1つのリモート装置のように見ることができるようにするクラスの好ましい実施の形態である。このクラスはデータベースを操作する機能を有し,そのデータベース内のデータ・アイテムにアクセスし,それを更新するためのデータベース・インタフェース・ライブラリによって定義されるオペレーションを用いる。
クラスCM_DeviceManagerは,コンピュータ・システム1に取りつけられた全ての通信装置70,そのステータス(アイドル,またはビジー),そしてそれらがサポートするプロトコルをトラッキングするための機能である大域オブジェクトのクラスの好ましい実施の形態である。通信セッション・オブジェクト1000は装置マネジャーから装置オブジェクト1100を要求し,その装置マネジャーは現在は空いているがリモート・マシーン90,1110によって要求される通信プロトコルを取り扱うことができる装置に対するレファレンスをリターンする。
4.3.新しい装置の追加
上の説明で分かるとおり,アプリケーション・プログラマは,どの新しいリモート装置,データベース,あるいはその他の外部資源に対してそのプロトコルを定義するために,クラスCM_CommunicationDeviceに対するサブクラスを簡単に定義することができる。そうしたサブクラスのためのコードを含んだライブラリにリンクされたどのアプリケーションも動作時に新しいプロトコルを用いることができ,そうしたアプリケーションはリコンパイルする必要はなく,再リンクするだけでよい。新しいクラスをダイナミック・リンク・ライブラリ(DLL)に入れることによって,適切に構成されたアプリケーションは,リンクされ,ユーザーに渡された後でも新しいプロトコルを利用することができる。
上の説明で分かるとおり,アプリケーション・プログラマは,どの新しいリモート装置,データベース,あるいはその他の外部資源に対してそのプロトコルを定義するために,クラスCM_CommunicationDeviceに対するサブクラスを簡単に定義することができる。そうしたサブクラスのためのコードを含んだライブラリにリンクされたどのアプリケーションも動作時に新しいプロトコルを用いることができ,そうしたアプリケーションはリコンパイルする必要はなく,再リンクするだけでよい。新しいクラスをダイナミック・リンク・ライブラリ(DLL)に入れることによって,適切に構成されたアプリケーションは,リンクされ,ユーザーに渡された後でも新しいプロトコルを利用することができる。
5.追記
前述したように本実施の形態では,その1つの具体的な実施の形態を参照して本発明についての説明を行った。リモート装置のモデリングを簡単に行うフレームワークに対して多くの変更,修正,および機能的拡張は簡単に想起でき,それらは本発明の他の実施の形態に含まれる。したがって,明細書および図面は,本発明を限定するものではなく,説明のためのものであるとみなされるべきである。しかしながら,特許請求の範囲に定義されるような本発明の精神と範囲を逸脱することなく,種々の修正,変更を行うことができるのは明らかなことである。
前述したように本実施の形態では,その1つの具体的な実施の形態を参照して本発明についての説明を行った。リモート装置のモデリングを簡単に行うフレームワークに対して多くの変更,修正,および機能的拡張は簡単に想起でき,それらは本発明の他の実施の形態に含まれる。したがって,明細書および図面は,本発明を限定するものではなく,説明のためのものであるとみなされるべきである。しかしながら,特許請求の範囲に定義されるような本発明の精神と範囲を逸脱することなく,種々の修正,変更を行うことができるのは明らかなことである。
〔著作権に関する告知〕
また,本特許開示の一部は,著作権保護の対象となる素材を含んでいる。著作権保有者は,この特許資料または特許開示の一部を特許商標特許ファイルあるいは記録に記載された通りにファクシミリ装置で複製することについては反対はしないが,それ以外に関しては著作権が適用される。
また,本特許開示の一部は,著作権保護の対象となる素材を含んでいる。著作権保有者は,この特許資料または特許開示の一部を特許商標特許ファイルあるいは記録に記載された通りにファクシミリ装置で複製することについては反対はしないが,それ以外に関しては著作権が適用される。
以上説明したように,本発明の通信方法(請求項1〜請求項3)は,複数の周辺装置と,周辺装置の属性情報を記憶した記憶手段を有する情報処理装置とが通信する通信方法において,前記情報処理装置の前記記憶手段内部に,属性情報に基づいて前記複数の周辺装置の1つで実行される機能を記述するオブジェクトを構成するステップと,前記情報処理装置が前記オブジェクトに記述された実行される機能に応じて前記1つの周辺装置と交信するステップと,前記情報処理装置が前記第1の複数のオブジェクトに記述された実行される機能に応じて前記交信した周辺装置のオペレーションを呼び出すステップと,を含んでいるため,リモート・サービス・アプリケーションにオブジェクト指向を導入することにより,開発サイクル期間の低減を図り,システムの修正等の柔軟性を高めることができる通信方法を提供することができる。
以上のように、本発明にかかる通信方法は、通信技術に有用であり、特に、通信を介して情報処理を行う差異の通信技術に適している。
1 コンピュータ・システム
2 コンピュータ
10 表示モニター
20 キーボード
30 マウス
40 プロセッサ
50 メモリ
60 大容量記憶装置
70 通信装置
80 システム・バス
90 リモート・マシーン
140 アプリケーション層
170 マシーン・モデル・モジュール
180 通信モジュール(通信機能)
190 コア層
230,240 マシーン記述ファイル
260 インタフェース層
2 コンピュータ
10 表示モニター
20 キーボード
30 マウス
40 プロセッサ
50 メモリ
60 大容量記憶装置
70 通信装置
80 システム・バス
90 リモート・マシーン
140 アプリケーション層
170 マシーン・モデル・モジュール
180 通信モジュール(通信機能)
190 コア層
230,240 マシーン記述ファイル
260 インタフェース層
Claims (3)
- 複数の周辺装置と,周辺装置の属性情報を記憶した記憶手段を有する情報処理装置とが通信する通信方法において,
前記情報処理装置の前記記憶手段内部に,属性情報に基づいて前記複数の周辺装置の1つで実行される機能を記述するオブジェクトを構成するステップと,
前記情報処理装置が前記オブジェクトに記述された実行される機能に応じて前記1つの周辺装置と交信するステップと,
前記情報処理装置が前記第1の複数のオブジェクトに記述された実行される機能に応じて前記交信した周辺装置のオペレーションを呼び出すステップと,を含んでいることを特徴とする通信方法。 - 属性情報には、前記オブジェクトに対するポインタと前記1つの周辺装置内部でのデータ・アイテムの値に対応したカレント値を含んでいることを特徴とする請求項1に記載の通信方法。
- 属性情報には,読み出しリクエスト・フラッグと前記1つの周辺装置に送られるべき値に関するペンディング・リクエストを記述するための新しい値とを含んでいることを特徴とする請求項1または2に記載の通信方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/504,120 US5732261A (en) | 1995-07-19 | 1995-07-19 | Method of using an object-oriented communication system with support for multiple remote machine types |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP8178816A Division JPH09114753A (ja) | 1995-07-19 | 1996-07-09 | オブジェクト指向通信システムの使用方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2006277758A true JP2006277758A (ja) | 2006-10-12 |
Family
ID=24004927
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP8178816A Pending JPH09114753A (ja) | 1995-07-19 | 1996-07-09 | オブジェクト指向通信システムの使用方法 |
JP2006119878A Pending JP2006277758A (ja) | 1995-07-19 | 2006-04-24 | 通信方法 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP8178816A Pending JPH09114753A (ja) | 1995-07-19 | 1996-07-09 | オブジェクト指向通信システムの使用方法 |
Country Status (4)
Country | Link |
---|---|
US (2) | US5732261A (ja) |
EP (1) | EP0755007B1 (ja) |
JP (2) | JPH09114753A (ja) |
DE (1) | DE69637852D1 (ja) |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6691299B1 (en) * | 1995-07-19 | 2004-02-10 | Ricoh Company, Ltd. | Object-oriented communications framework system with support for multiple remote machine types |
US6393497B1 (en) * | 1998-03-20 | 2002-05-21 | Sun Microsystems, Inc. | Downloadable smart proxies for performing processing associated with a remote procedure call in a distributed system |
US5974469A (en) * | 1996-07-12 | 1999-10-26 | Sofmap Future Design, Inc. | System for managing communication between program modules |
US5893106A (en) * | 1997-07-11 | 1999-04-06 | International Business Machines Corporation | Object oriented server process framework with interdependent-object creation |
US6138122A (en) * | 1998-03-02 | 2000-10-24 | Agilent Technologies | Modeling of internet services |
US6330597B2 (en) | 1998-03-04 | 2001-12-11 | Conexant Systems, Inc. | Method and apparatus for monitoring, controlling, and configuring remote communication devices |
US6427178B2 (en) * | 1998-03-04 | 2002-07-30 | Conexant Systems, Inc. | Software modem having a multi-task plug-in architecture |
US6314475B1 (en) | 1998-03-04 | 2001-11-06 | Conexant Systems, Inc. | Method and apparatus for monitoring, controlling and configuring local communication devices |
US6598093B1 (en) * | 1998-05-14 | 2003-07-22 | Sun Microsystems, Inc. | Method and apparatus for a core application programming interface |
EP1024665A1 (en) * | 1999-01-28 | 2000-08-02 | Sony Service Center (Europe) N.V. | Class-creation from disk |
US6370436B1 (en) * | 1999-03-26 | 2002-04-09 | Emware, Inc. | Distributed objects for a computer system |
US6466972B1 (en) * | 1999-03-31 | 2002-10-15 | International Business Machines Corporation | Server based configuration of network computers via machine classes |
US7139693B1 (en) * | 1999-12-22 | 2006-11-21 | Intel Corporation | Using software objects to communicate with hardware devices |
US6971015B1 (en) * | 2000-03-29 | 2005-11-29 | Microsoft Corporation | Methods and arrangements for limiting access to computer controlled functions and devices |
US8020176B2 (en) | 2000-04-06 | 2011-09-13 | Infineon Technologies Ag | Virtual machine interface for hardware reconfigurable and software programmable processors |
US7703107B2 (en) * | 2000-04-06 | 2010-04-20 | Infineon Technologies Ag | Virtual machine interface for hardware reconfigurable and software programmable processors |
DE10038402A1 (de) * | 2000-08-07 | 2002-02-28 | Software For People Ag | Verfahren und Vorrichtung zum Steuern einer technischen Anordnung, Anordnung, Computerlesbares Speichermedium, Computerprogramm-Element |
FR2813471B1 (fr) * | 2000-08-31 | 2002-12-20 | Schneider Automation | Systeme de communication d'un equipement d'automatisme base sur le protocole soap |
US6996537B2 (en) * | 2001-08-13 | 2006-02-07 | Qualcomm Incorporated | System and method for providing subscribed applications on wireless devices over a wireless network |
CA2381744A1 (en) * | 2002-04-15 | 2003-10-15 | Ibm Canada Limited-Ibm Canada Limitee | A parsing technique to respect textual language syntax and dialects dynamically |
US7761921B2 (en) * | 2003-10-31 | 2010-07-20 | Caterpillar Inc | Method and system of enabling a software option on a remote machine |
JP2005182419A (ja) * | 2003-12-18 | 2005-07-07 | Toshiba Solutions Corp | コンポーネント処理システム及びコンポーネント処理方法 |
US8699320B2 (en) * | 2004-11-01 | 2014-04-15 | Alcatel Lucent | Multi-interface port management |
US7478299B2 (en) | 2006-08-14 | 2009-01-13 | International Business Machines Corporation | Processor fault isolation |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4407016A (en) | 1981-02-18 | 1983-09-27 | Intel Corporation | Microprocessor providing an interface between a peripheral subsystem and an object-oriented data processor |
US5371895A (en) | 1985-10-08 | 1994-12-06 | The Foxboro Company | Local equipment controller for computerized process control applications utilizing language structure templates in a hierarchical organization and method of operating the same |
ATE121208T1 (de) * | 1990-01-30 | 1995-04-15 | Johnson Service Co | Vernetztes betriebsmittelverwaltungssystem. |
US5168441A (en) | 1990-05-30 | 1992-12-01 | Allen-Bradley Company, Inc. | Methods for set up and programming of machine and process controllers |
US5297279A (en) * | 1990-05-30 | 1994-03-22 | Texas Instruments Incorporated | System and method for database management supporting object-oriented programming |
DE69126857T2 (de) * | 1991-01-18 | 1998-01-08 | Ibm | Objektorientierte Programmierungsplattform |
CA2079351A1 (en) * | 1992-02-19 | 1993-08-20 | Bruce A. Tate | Scaled depiction of information from a database |
US5307490A (en) * | 1992-08-28 | 1994-04-26 | Tandem Computers, Inc. | Method and system for implementing remote procedure calls in a distributed computer system |
US5379432A (en) | 1993-07-19 | 1995-01-03 | Taligent, Inc. | Object-oriented interface for a procedural operating system |
US5404529A (en) | 1993-07-19 | 1995-04-04 | Taligent, Inc. | Object-oriented interprocess communication system interface for a procedural operating system |
EP0746816B1 (en) | 1993-08-03 | 2001-10-24 | Sun Microsystems, Inc. | Flexible multi-platform partitioning for computer applications |
US5453933A (en) | 1993-09-08 | 1995-09-26 | Hurco Companies, Inc. | CNC control system |
US5568639A (en) | 1993-11-24 | 1996-10-22 | Menai Corporation | Method and apparatus for providing an object-oriented file structuring system on a computer |
US5548723A (en) * | 1993-12-17 | 1996-08-20 | Taligent, Inc. | Object-oriented network protocol configuration system utilizing a dynamically configurable protocol stack |
US5548779A (en) * | 1993-12-21 | 1996-08-20 | Taligent | System for providing system services for a device to a client using stack definition and stack description of a stack having top, intermediate, and bottom service objects |
US5421009A (en) * | 1993-12-22 | 1995-05-30 | Hewlett-Packard Company | Method of remotely installing software directly from a central computer |
US5583983A (en) | 1994-11-17 | 1996-12-10 | Objectware, Inc. | Multi-platform object-oriented software development and deployment system |
-
1995
- 1995-07-19 US US08/504,120 patent/US5732261A/en not_active Expired - Lifetime
-
1996
- 1996-07-09 JP JP8178816A patent/JPH09114753A/ja active Pending
- 1996-07-17 EP EP96111544A patent/EP0755007B1/en not_active Expired - Lifetime
- 1996-07-17 DE DE69637852T patent/DE69637852D1/de not_active Expired - Lifetime
-
1997
- 1997-11-12 US US08/967,967 patent/US6260076B1/en not_active Expired - Lifetime
-
2006
- 2006-04-24 JP JP2006119878A patent/JP2006277758A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
US5732261A (en) | 1998-03-24 |
EP0755007A2 (en) | 1997-01-22 |
EP0755007A3 (en) | 1997-12-03 |
JPH09114753A (ja) | 1997-05-02 |
EP0755007B1 (en) | 2009-03-04 |
US6260076B1 (en) | 2001-07-10 |
DE69637852D1 (de) | 2009-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4393596B2 (ja) | 情報処理装置 | |
JP2006294046A (ja) | 情報処理装置 | |
JP2006277758A (ja) | 通信方法 | |
AU691031B2 (en) | System and method for providing interoperability among heterogeneous object systems | |
US6957439B1 (en) | Method, system, and program for mapping objects in different language formats | |
US6675230B1 (en) | Method, system, and program for embedding a user interface object in another user interface object | |
CA2046723C (en) | Distributed computing system | |
US6854123B1 (en) | Method, system, and program for mapping standard application program interfaces (APIs) to user interface APIs | |
US6493719B1 (en) | Method and system for scripting for system management information | |
US20050229189A1 (en) | Inter-process communication using different programming languages | |
US6941520B1 (en) | Method, system, and program for using a user interface program to generate a user interface for an application program | |
JPH08339355A (ja) | 分散形システムでの処理タスク実行呼び出し方法及び装置 | |
JPH06231022A (ja) | コンピュータシステムに用いる名前スペースの一部分を別の名前スペースの一部分として利用可能にするための装置及びその方法 | |
US7681207B2 (en) | Methods of factoring operating system functions, methods of converting operating systems, and related apparatus | |
US7334235B2 (en) | Operating system application programming interfaces and methods of using operating systems | |
US6691299B1 (en) | Object-oriented communications framework system with support for multiple remote machine types | |
US7669178B2 (en) | System and method for interacting with computer programming languages at semantic level | |
EP1121637A1 (en) | Component-based source code generator | |
Dutoit et al. | The Basic Object System: Supporting a spectrum from prototypes to hardened code | |
JP2000311129A (ja) | 周辺装置管理システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20071218 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080218 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20080520 |