以下に添付図面を参照して、この発明にかかるストリーム制御プログラム、およびこのプログラムを実行させるためのコンピュータを含んだ画像形成装置の最良な実施の形態を詳細に説明する。なお、本実施の形態では、この発明を画像形成装置に適用した場合について説明するが、本発明はこれに限らず、ストリーム制御処理をおこなう各種装置に適用することができる。
まず、本実施の形態に係る画像形成装置(以下「複合機」と言う)1の概要について図1、図2、図3、図12および図13を用いて説明する。図1は、本実施の形態に係る複合機1を取り巻くネットワーク環境を説明するためのネットワーク図であり、図2は、図1に示した複合機1のハードウェア構成を示すブロック図であり、図3は、図1に示した複合機1のソフトウェアとハードウェアの関係を説明するための説明図であり、図12は、複合機1に搭載されるソフトウェア構成の変遷を説明するための説明図であり、図13は、従来の複合機のソフトウェアとハードウェアの関係を説明するための説明図である。
図1に示すように、近年のネットワーク化の進展により、オフィスなどに設けられたパーソナルコンピュータ(PC)などの機器は、LAN(Local Area Network)などのネットワークに接続され、相互に通信することが通常となった。たとえば、同図に示したように、かかるネットワークには、クライアントPC、SMTP(Simple Mail Transfer Protocol)サーバ、FTP(File Transfer Protocol)サーバ、サーバPCなどが接続され、電子メールの送受信やファイル転送をすることができ、モデム接続された配信サーバは、オフィス外のファックス装置と通信することができる。
このようなネットワーク化の進展に伴い、複合機1もかかるネットワークに接続され、PC等の機器と相互に通信することが可能となり、ハードディスク等の記憶装置を内蔵することで、いわゆるネットワーク複合機へと進化し、ユーザの様々なニーズに応えることができるようになった。
たとえば、複合機1は、通常のコピー機能に加えて、クライアントPCからの印刷要求により文書データ等を印刷するプリンタ機能、クライアントPCからのファックス要求により文書データ等をサーバPCに接続されたモデムを経由して他のオフィスのファックス機器に送信するファックス機能、受信したファックス文書やコピー文書を内蔵したハードディスクに蓄積する蓄積機能などを有するようになった。
こうして複合化とネットワーク化の進展により必要となった多くの機能を実現するため、複合機1に搭載されるソフトウェアは、規模が大きく、複雑なものとなっている。そして、それにともなって、それらのソフトウェアの開発と維持管理のための工数も大幅に増大している。
図2は、かかる複合機1のハードウェア構成を示すブロック図である。同図に示すように、この複合機1は、コントローラ10とエンジン部(Engine)60とをPCI(Peripheral Component Interconnect)バスで接続した構成となる。コントローラ10は、複合機1全体の制御と描画、通信、図示しない操作部からの入力を制御するコントローラである。エンジン部60は、PCIバスに接続可能なプリンタエンジンなどであり、たとえば白黒プロッタ、1ドラムカラープロッタ、4ドラムカラープロッタ、スキャナまたはファックスユニットなどである。なお、このエンジン部60には、プロッタなどのいわゆるエンジン部分に加えて、誤差拡散やガンマ変換などの画像処理部分が含まれる。
コントローラ10は、CPU11と、ノースブリッジ(NB)13と、システムメモリ(MEM−P)12と、サウスブリッジ(SB)14と、ローカルメモリ(MEM−C)17と、ASIC(Application Specific Integrated Circuit)16と、ハードディスクドライブ(HDD)18とを有し、ノースブリッジ(NB)13とASIC16との間をAGP(Accelerated Graphics Port)バス15で接続した構成となる。また、MEM−P12は、ROM(Read Only Memory)12aと、RAM(Random Access Memory)12bとをさらに有する。
CPU11は、複合機1の全体制御をおこなうものであり、NB13、MEM−P12およびSB14からなるチップセットを有し、このチップセットを介して他の機器と接続される。
NB13は、CPU11とMEM−P12、SB14、AGP15とを接続するためのブリッジであり、MEM−P12に対する読み書きなどを制御するメモリコントローラと、PCIマスタおよびAGPターゲットとを有する。
MEM−P12は、プログラムやデータの格納用メモリ、プログラムやデータの展開用メモリ、プリンタの描画用メモリなどとして用いるシステムメモリであり、ROM12aとRAM12bとからなる。ROM12aは、プログラムやデータの格納用メモリとして用いる読み出し専用のメモリであり、RAM12bは、プログラムやデータの展開用メモリ、プリンタの描画用メモリなどとして用いる書き込みおよび読み出し可能なメモリである。
SB14は、NB13とPCIデバイス、周辺デバイスとを接続するためのブリッジである。このSB14は、PCIバスを介してNB13と接続されており、このPCIバスには、ネットワークインターフェース(I/F)部なども接続される。
ASIC16は、画像処理用のハードウェア要素を有する画像処理用途向けのIC(Integrated Circuit)であり、AGP15、PCIバス、HDD18およびMEM−C17をそれぞれ接続するブリッジの役割を有する。このASIC16は、PCIターゲットおよびAGPマスタと、ASIC16の中核をなすアービタ(ARB)と、MEM−C17を制御するメモリコントローラと、ハードウェアロジックなどにより画像データの回転などをおこなう複数のDMAC(Direct Memory Access Controller)と、エンジン部60との間でPCIバスを介したデータ転送をおこなうPCIユニットとからなる。このASIC16には、PCIバスを介してFCU(Fax Control Unit)30、USB(Universal Serial Bus)40、IEEE1394(the Institute of Electrical and Electronics Engineers 1394)インターフェース50が接続される。
MEM−C17は、コピー用画像バッファ、符号バッファとして用いるローカルメモリであり、HDD(Hard Disk Drive)18は、画像データの蓄積、プログラムの蓄積、フォントデータの蓄積、フォームの蓄積を行うためのストレージである。
AGP15は、グラフィック処理を高速化するために提案されたグラフィックスアクセラレーターカード用のバスインターフェースであり、MEM−P12に高スループットで直接アクセスすることにより、グラフィックスアクセラレーターカードを高速にするものである。
図3は、かかる複合機1のハードウェアおよびソフトウェアの構成を示した概念図であり、具体的には、後述する本実施の形態の特徴部分であるストリーム部113aを含む統合アプリケーション110と、ソフトウェア100およびハードウェア200の階層関係を示している。同図に示すように、ハードウェア200は、ハードウェアリソース201を有し、このハードウェアリソース201は、スキャナ201a、プロッタ201b、HDD(Hard Disk Drive)201c、ネットワーク201dおよびその他のリソース201eを有する。なお、その他のリソース201eは、201a〜201d以外のハードウェアリソース201のことであり、たとえば、操作パネルなどの入出力デバイスを示す。
また、かかるハードウェア200に搭載されるソフトウェア100は階層化されており、オペレーティングシステム103の上層にはサービス層102が構築され、このサービス層102の上層にはアプリケーション層103が構築されている。そして、サービス層102は、各ハードウェアリソース(201a〜201e)を制御するドライバーに相当する、スキャナ制御102部a、プロッタ制御部102b、蓄積制御部102c、配信/メール送受信制御部102d、FAX送受信制御部102e、ネットワーク通信制御部102fおよびその他の制御部102gを有する。
ここで、図3に示したソフトウェア100が、かかる階層構造をとるに至った経緯について、図12および図13を用いて説明する。図12は、複合機1に搭載されるソフトウェア構成の変遷を示す説明図である。図12のサービス層分離前アプリケーション501に示すように、多機能化した複合機1に搭載されるソフトウェアは、コピーアプリケーション、FAXアプリケーション、スキャナアプリケーションなどの機能別に独立したアプリケーションとして作成され、図3に示したオペレーティングシステム103上で動作していた。
しかしながら、これらのアプリケーションは、ハードウェアリソースを制御するドライバー(サービス層102)を含んでいたため、各アプリケーションには重複した処理が存在していた。その結果、各アプリケーションの規模は大きなものとなっていた。
そこで、図12のサービス層分離後アプリケーション502に示すように、サービス層分離前アプリケーション501のサービス層102相当部分を括りだしサービス層102とするとともに、各アプリケーションは、このサービス層102の上層であるアプリケーション層101に構築する構成とした。かかる階層化構成をとることにより、各アプリケーションはスリム化され開発労力も軽減された。
しかしながら、複合機1のネットワーク化、多機能化がさらに進展するに従って、各アプリケーションに共通処理部分が存在することが問題となってきた。具体的には、アプリケーション層101の各アプリケーション、たとえば、コピーアプリケーションやスキャナアプリケーションなどは、それぞれ、スキャナ制御部102aや蓄積制御部102cといったドライバーと通信をおこなう処理や、各種機能が取り扱うデータの流れを制御するストリーム制御などの同様な処理を内部に有していた。このように、同様な処理を各アプリケーションが有していると、各アプリケーションの開発規模が大きくなるとともに、サービス層の仕様変更に対する各アプリケーションの改修規模が大きくなることが問題となってきた。
この問題を解決するため、図12の共通ルーチン分離アプリケーション503に示すように、かかる同様な処理(共通処理部分)を共通ルーチンとして括りだすことも考えられた。しかしながら、かかる共通ルーチンは、各アプリケーションにおいて微妙に異なる処理を共通化しようとするものであるため、共通ルーチン内部の処理は複雑なものとなってしまう。また、たとえば、プリンタアプリケーションなどの新規アプリケーションを追加する場合においては、かかる新規アプリケーションに適応するために、共通ルーチンの改修が必要となる。
しかし、共通ルーチンの内部処理は複雑であるため、改修要員が処理を把握することが困難となり、改修規模の増大や、改修ミスによる他のアプリケーションへの影響が懸念された。
そこで、図12のオブジェクト指向アプリケーション504に示すように、オブジェクト指向による設計手法(オブジェクトモデリング)により、かかる複数のアプリケーションを、統合アプリケーション110に統合することとした。具体的には、各アプリケーションの共通処理部分をオブジェクトモデルとして抽出し、このオブジェクトモデルの集合体から、統合アプリケーション110を構成する。そして、従来のコピー機能やスキャナ機能といった機能は、かかるオブジェクトモデルの協調関係によって実現する。
このような構成をとることにより、たとえばプリンタ機能のような新規機能の追加は、かかるオブジェクトモデルに属するクラスのサブクラス化などにより対処できる。このため、改修部分が明確となり、改修による他の機能への影響を小さくすることができる。また、オブジェクトモデリングによるプログラムは、従来の手続き型プログラムに比べて、処理の把握が容易であるため、改修要員が処理を把握することも容易となり、改修規模の削減や、改修ミスによる他のアプリケーションへの影響を小さくすることができる。
図13は、図12に示したサービス層分離後アプリケーション502の段階における従来のアプリケーションの構成と、かかるアプリケーションとサービス層102の各ドライバーの関係を示した説明図である。同図に示すように、アプリケーション層101は、コピーアプリケーション120、スキャナアプリケーション130、ファックスアプリケーション140およびプリンタアプリケーション150を有する。
たとえば、コピーアプリケーション120は、コピー機能を実現するために、スキャナ制御部102a、プロッタ制御部102b、蓄積制御部102cおよびその他の制御部102gとデータの送受信をおこなう。また、ファックスアプリケーション140は、ファックス機能を実現するために、プロッタ制御部102b、蓄積制御部102c、FAX送受信制御部102e、ネットワーク通信制御部102fおよびその他の制御部102gとデータの送受信をおこなう。このように、アプリケーション層101の各アプリケーションとサービス層102の各ドライバー間の通信は、複雑なものとなっていた。
図3の説明に戻ると、上述したオブジェクトモデリングにより、アプリケーション層101に存在した複数のアプリケーションは、統合アプリケーション110に統合されている。そして、各アプリケーションが重複しておこなっていた各ドライバーとの通信処理は、統合アプリケーション110を構成する所定のオブジェクトモデルにおこなわせるように構成したことにより、アプリケーション層101のアプリケーションと、サービス層102の各ドライバー間の通信は、図13と比較して単純になっている。
次に、統合アプリケーション110の内部構成について説明する。図4は、統合アプリケーション110の内部構成を示すブロック図である。同図に示すように、統合アプリケーション110は、操作系サブシステム111と、管理系サブシステム112と、実行系サブシステム113とを有する。
操作系サブシステム111は、マンマシンインタフェースを担当するソフトウェア群である。具体的には、この操作系サブシステム111は、ユーザの要求を受け付ける処理と、この要求の実行を指示する処理と、この要求の実行状況と実行結果についての情報をユーザに提供する処理をおこなう。
管理系サブシステム112は、画像形成装置1の資源を管理するソフトウェア群である。具体的には、この管理系サブシステム112は、ハードウェアリソース201およびこのハードウェアリソース201が保持するデータ状態を管理するサービスをおこなう。
実行系サブシステム113は、ユーザからの要求の実行を担当するソフトウェア群である。具体的には、この実行系サブシステム113は、コピー要求がなされた場合には、原稿の読み取りから成果物の出力までの処理をおこなう。
操作系サブシステム111、管理系サブシステム112および実行系サブシステム113は、必要に応じて相互に処理を依頼してその結果を送り合う。このようにそれぞれのサブシステムが協調し合って、統合アプリケーション110全体として複合機1に必要とされるサービスの提供をおこなう。
そして、実行系サブシステム113は、本実施の形態の特徴部分であるストリーム部113aと実行制御部113bとを有する。このストリーム部113aは、実行制御部113bからデータの流れの制御に関する要求を受付け、入出力デバイス間の処理速度の差異や、取り扱うデータ形式の差異といった各入出力デバイス固有の性質に基づく差異を吸収し、入力デバイスから出力デバイスへのデータの流れを制御する処理(ストリーム制御処理)をおこなう。
図5は、図4に示した各サブシステムを、UML(Unified Modeling Language)のクラス図(UMLクラス図)に置き換えた図である。ここで、UMLとは、OMG(Object Management Group)が仕様を策定しているシステムモデリング言語であり、モデリングの成果を記述する記法を定義したものである。このUMLは、オブジェクト指向によるソフトウェアの設計において広く用いられている。
図5に示すように、統合アプリケーション110は複数のパッケージを有し、また、この統合アプリケーション110自体もひとつのパッケージとなっている。ここで、パッケージとはUMLモデルの各構成要素(シンボル)をグループ化したものであり、左上にタブのついたフォルダの形をしたシンボルで表現される。また、各パッケージを相互に結ぶ直線は、各パッケージ間に処理依頼などの関連があることを示している。
図5に示したように、統合アプリケーション110は、操作系サブシステム111、管理系サブシステム112および実行系サブシステム113の3つのパッケージを内部に有するパッケージである。さらに、実行系サブシステム113は、本実施の形態の特徴部分であるストリーム部113aと実行制御部113bとを内部に有するパッケージである。そして、操作系サブシステム111、管理系サブシステム112および実行系サブシステム113を相互に結ぶ直線は、各パッケージ間に処理依頼(たとえば、メッセージ送受信)などの関連があることを示している。なお、操作系サブシステム111、管理系サブシステム112および実行系サブシステム113のタブの右端に記された記号は、かかるパッケージがサブシステムであることを示すUMLのシンボルである。
次に、本実施の形態の特徴部分であるストリーム部113aについて詳細に説明する。なお、このストリーム部113aは、オブジェクト指向に基づいて設計するにあたって、既存の処理を単純にオブジェクト化せず、機能追加や改修をより一層容易におこなうことができるようにオブジェクトモデルを構成した。かかるオブジェクトモデルの構成について図6〜図9を用いて説明しておく。
図6は、複合機1の操作パネル400の一例を示した図である。同図に示すように、かかる操作パネル400は、初期設定キー401、コピーキー402、コピーサーバーキー403、プリンタキー404、送信キー405、テンキー406、クリア/ストップキー407、スタートキー408、予熱キー409、リセットキー410および液晶タッチパネル420を有する。
たとえば、利用者が、複合機1に紙原稿をセットしてコピーキー402を押下してコピー処理を選択し、スタートキー408を押下したならば、スキャナ201aデバイスからプロッタ201bデバイスへのデータの流れが発生する。この場合、入力デバイスであるスキャナ201aデバイスと、出力デバイスであるプロッタ201bデバイスとは、処理速度、取り扱うデータ単位およびデータ形式が異なる。また、ネットワーク化の進展により、ネットワークを経由した複数の利用者が、複合機1にプリンタ処理やFAX送信などの指示を同時に与える場合には、複合機1内には、複数のデータの流れが存在することになる。これらのことから、かかるデータの流れ(ストリーム)の制御を効率良く、かつ、高い信頼性をもっておこなう必要がある。
図7は、本実施の形態の特徴部分であるストリーム部113aの処理概要を説明するための説明図である。入力デバイスから出力デバイスへのデータの流れを制御する場合においては、入出力デバイス間の処理速度の差異や、取り扱うデータ単位あるいはデータ形式の差異といった各入出力デバイス固有の性質に基づく差異をいかにして吸収するかが問題となる。
特に、多機能化に伴い多くの入出力デバイスを搭載するに至った複合機1においては、かかる問題は顕著である。すなわち、各入出力デバイスが取り扱うデータ形式やデータ単位はそれぞれ異なり、データ処理速度もそれぞれ異なるため、数多くの入出力デバイスについて、データ形式、データ単位およびデータ処理速度の差異をすべて吸収するようストリーム部113aを設計する必要がある。なお、図7に示す、「○」は、入力デバイスが生成する所定の大きさのデータをあらわし、「◇」は、出力デバイスに渡される(出力デバイスが消費する)所定の大きさのデータをあらわすこととする。
そこで、本実施の形態の特徴部分であるストリーム部113aは、各入力デバイスにそれぞれ対応する入力バッファと、各出力デバイスにそれぞれ対応する出力バッファを有する構成とするとともに、入力バッファから出力バッファへデータを運搬するキャリアを有する構成とした。入力バッファおよび出力バッファを有する構成とすることにより、入力デバイスと出力デバイスの処理速度が異なる場合であっても、各デバイスが取り扱うデータを一時的に保持することができるので、かかる処理速度の差異を吸収することができる。
同図では、入力デバイスの処理速度が、出力デバイスの処理速度よりも大きい場合を示しており、入力デバイスが生成したデータは、いったん入力バッファに保持され、適宜、キャリアに載せられて出力バッファに運搬される。すなわち、各入出力デバイスに対応するバッファを設けるとともに、入出力バッファ間を移動するキャリアの移動頻度および積載データ量を制御することとしたので、本実施の形態の特徴部分であるストリーム部113aは、さまざまな処理速度を有する入出力デバイスを均一に取り扱うことができる。
また、入力バッファから出力バッファへデータを運搬するキャリアは、キャリアに積載するデータのデータ形式の変換をおこなうこととしたので、入出力バッファ間のデータ形式の差異を吸収することができる。さらに、キャリアが一度に運搬するデータの個数を制御することとしたので、入出力バッファ間のデータ単位の差異を吸収することができる。このように、データ形式の差異およびデータ単位の差異をキャリアが吸収することとしたので、本実施の形態の特徴部分であるストリーム部113aは、さまざまなデータ単位およびデータ形式を処理対象とする入出力デバイスを均一に取り扱うことができる。
本実施の形態の特徴部分であるストリーム部113aは、上述したように、入力バッファ、出力バッファおよびキャリアを有する構成としたうえで、かかるストリーム部113aのオブジェクトモデリングをおこなった。オブジェクトモデリングをおこなうにあたっては、鉄道のモデルの隠喩(メタファ)により、ストリーム部113aをモデリングすることとした。かかるオブジェクトモデリングにより、並行したデータの流れの制御を高い信頼性をもっておこなうことができ、機能追加にも柔軟に対処できるストリーム処理の仕組みの提供が可能となることが予想される。
図8は、ストリーム部113aのオブジェクトモデリングの概要を説明するための説明図である。同図に示すように、鉄道のモデルにおいては、運搬対象となる「人」は、運搬手段である「電車」により、人が乗り物を待つ場所である「駅」から他の駅に運ばれる。そして、駅と駅を結ぶ線路にあたる「区間」には、区間の通行可否を示す「信号」が設けられ、運搬手段である「電車」の運行を制限する。そして、電車の動きを制御する「管制室」により、運搬手段である「電車」の運行がコントロールされ、複数の「電車」を用いて、駅から駅への人の運搬がおこなわれる。
かかる鉄道のモデルを、ストリーム部113aのモデルにあてはめると以下のようになる。すなわち、運搬対象となる「荷物」は、運搬手段である「キャリア」により、荷物がキャリアを待つ場所である「ステーション」から他のステーションに運ばれる。そして、ステーションとステーションを結ぶ線路にあたる「区間」には、区間の通行可否を示す「区間の状態」が設けられ、運搬手段である「キャリア」の運行を制限する。そして、キャリアの動きを制御する「ストリーム」により、運搬手段である「キャリア」の運行がコントロールされ、複数の「キャリア」を用いて、ステーションからステーションへの荷物の運搬がおこなわれる。
上述した、オブジェクトモデリングにより、本実施の形態の特徴部分であるストリーム部113aは、「荷物クラス」、「キャリアクラス」、「ステーションクラス」、「区間クラス」および「ストリームクラス」を有する構成とした。なお、入力デバイスおよび出力デバイスに対応させるため、「ステーションクラス」のサブクラスとして、「入力ステーションクラス」および「出力ステーションクラス」を設けた。
次に、ストリーム部113aを構成するクラスを実体化したオブジェクトと、入出力デバイスとの対応関係について説明する。図9は、ストリーム部113aのオブジェクト構成の概要を説明するための説明図である。同図に示すように、入力デバイスA〜Cおよび出力デバイスA〜Cがある場合には、入力デバイスと出力デバイスの組合せは、9通り存在することになる。
この組合せの中から入力デバイスAおよび出力デバイスCの組合せが選択されると、入力デバイスAに対応する入力ステーションAオブジェクトと、出力デバイスCに対応する出力ステーションCオブジェクトが生成される。そして、入力ステーションAオブジェクトから出力ステーションCオブジェクトへのデータの運搬は、キャリアオブジェクトによりおこなわれる。なお、入力ステーションAと出力ステーションCとの組合せからなる区間ACオブジェクトは、入力ステーションAおよび出力ステーションCの組合せからなる区間の状態を保持することになる。
図10は、上述したオブジェクトモデリングにより設計した、ストリーム部113aのクラス構成を示すUMLクラス図である。同図に示すように、ストリーム部113aは、入出力デバイス間のストリーム制御要求を受け付けるとともにデータの流れの状態を管理するストリームクラス310、入出力デバイス間のデータ運搬を担当するキャリアクラス320、各入出力デバイスが取り扱うデータを保持して速度調整をおこなうステーションクラス330、ステーションクラス330のサブクラスであり入力デバイスから受け付けたデータを一時的に保持する入力ステーションクラス340、ステーションクラス330のサブクラスであり出力デバイスに送り出すデータを一時的に保持する出力ステーションクラス350、入出力デバイス間のデータに相当する荷物クラス360および入出力デバイス間の区間状態を管理する区間クラス370を有する。
次に、クラスとUMLクラス図におけるクラスの記述方法について説明しておく。クラスとは、オブジェクト指向システムを構成するオブジェクトの設計図に相当する概念であり、オブジェクト内部に有する属性と処理を定義するとともに、継承関係や集約関係といった、他のクラスとの関係を定義するものである。
UMLクラス図におけるクラスは、3段の区画を有する矩形として記述される。それぞれの区画は、上から、クラス名を示す名前区画、クラスが有するデータ(属性)を示す属性区画およびクラスが有する処理(操作)を示す操作区画と呼ばれる。たとえば、ストリームクラス310を示す矩形の名前区画は、かかるクラスのクラス名が「ストリーム」であることを示し、属性区画は、かかるクラスが有する属性が、「状態」および「同期・並行」であることを示し、操作区画は、かかるクラスが有する操作が、「実行する()」であることを示している。
このように、各クラスは、データ(属性)を所持するための属性区画と、かかる属性の書き込みおよび読み出しをおこなう処理(操作)を所持するための操作区画とを有している。これらのクラスは、プログラム(統合アプリケーション110)の一部として含まれるので、あらかじめROM12aに格納されたこのプログラムが実行されると、各クラスはRAM12bの所定領域に実体化され、属性区画に含まれる各データ(属性)がRAM12b上に展開される。したがって、クラスを実体化したオブジェクトは、RAM12b上の各データ(属性)の書き込みおよび読み出しをすることが可能となる。
なお、属性や操作といったクラスの要素の左側に「−」記号を付した場合は、かかる要素は外部のクラスには非公開であることを示し、「+」記号を付した場合は、かかる要素は外部のクラスに公開されていることを示す。また、操作については「記入する()」のように「()」記号を付することが通例であり、「(引数1,引数2)」のように、かかる操作に引き渡す引数を記述する場合もある。
次に、本実施の形態の特徴部分であるストリーム部113aのクラスの概要について説明する。上述したように、ストリーム部113aは、ストリームクラス310、キャリアクラス320、ステーションクラス330、入力ステーションクラス340、出力ステーションクラス350、荷物クラス360および区間クラス370を有する。以下では、まず、これらのクラスの概要について説明する。
ストリームクラス310は、入出力デバイス間のストリーム制御要求を受け付けるとともにデータの流れの状態を管理クラスであり、受け付けたストリーム制御要求に基づいてキャリアクラス320のオブジェクトを生成し、かかるオブジェクトを制御する処理をおこなう。具体的には、このストリームクラス310は、属性として、状態310aおよび同期・並行310bを有し、操作として実行する()310cを有する。なお、かかるストリームクラス310を実体化したストリームオブジェクト310Aが生成されると、状態310aおよび同期・並行310bはRAM12b上に展開されるので、これらのデータ(属性)の書き込みおよび読み出しをおこなうことが可能となる。
状態310aは、入力デバイスから出力デバイスへのデータの流れ(ストリーム)の状態を保持する。たとえば、ストリームの状態が実行中状態である場合において、利用者が操作パネル400を操作することにより、いったん指示したコピー処理を一時中断したり、出力先を記録紙からHDD201cに変更したりした場合には、ストリームの状態が休止中状態や変更中状態に遷移する。このように、状態310aは、利用者の指示に起因して変化するストリーム状態をあらわす。
同期・並行310bは、ストリームオブジェクト310Aが複数のキャリアオブジェクト320Aを用いて一つのデータの流れを形成する場合において、各キャリアオブジェクト320Aを同期させて動作させるのか、あるいは並行して動作させるのかの識別情報を保持する。ここで、複数のキャリアオブジェクト320Aを「同期動作」させるとは、一つのキャリアオブジェクト320Aの処理完了を待って、次のキャリアオブジェクト320Aの処理を開始するよう指示することをあらわす。また、「並行動作」させるとは、一つのキャリアオブジェクト320Aの処理完了を待たずして、次のキャリアオブジェクト320Aに処理開始の指示を与えることをあらわす。
たとえば、スキャナ201aから10枚の紙原稿を読み取り、メール送信する場合には、10枚すべての読み取り完了を待ってメール送信する必要があるので、各キャリアオブジェクト320Aを「同期動作」させることになる。一方、10枚の紙原稿を記録紙にコピーする場合には、10枚すべての読み取り完了を待つ必要はなく、随時、記録紙への印刷処理をおこなえばよいので、各キャリアオブジェクト320Aを「並行動作」させることになる。
実行する()310cは、実行系サブシステム113からストリーム開始要求を受け付け、キャリアオブジェクト320Aを生成するとともに、生成したキャリアオブジェクト320Aにデータ運搬を指示する処理をおこなう。
キャリアクラス320は、入出力デバイス間のデータ運搬を担当するクラスである。このキャリアクラス320は、所定の大きさのデータを格納する荷物オブジェクト360Aを、入力ステーションオブジェクト340Aから受け取り、出力ステーションオブジェクト350Aに渡す処理をおこなう。具体的には、このキャリアクラス320は、属性として、状態320aおよび定数320bを有し、操作として、運搬する()320cを有する。なお、かかるキャリアクラス320を実体化したキャリアオブジェクト320Aが生成されると、状態320aおよび定数320bはRAM12b上に展開されるので、これらのデータ(属性)の書き込みおよび読み出しをおこなうことが可能となる。
状態320aは、現在のキャリアクラス320の処理状態を保持する。この状態には、たとえば、荷積中、運搬中および荷降中がある。荷積中状態とは、入力ステーションオブジェクト340Aから荷物オブジェクト360Aを受け取る処理中の状態をあらわし、運搬中状態とは、入力ステーションオブジェクト340Aから荷物オブジェクト360Aの受け取りを完了し、出力ステーションオブジェクト350Aへかかる荷物オブジェクト360Aを渡す前の状態をあらわし、荷降中状態とは、出力ステーションオブジェクト350Aへかかる荷物オブジェクト360Aを渡す処理中の状態をあらわす。このような状態を状態320aが保持することにより、キャリアクラス320は、データの運搬状態を一元的に管理することができる。
定数320bは、キャリアオブジェクト320Aが、入力ステーションオブジェクト340Aから出力ステーションオブジェクト350Aへのデータ運搬を開始する閾値である「受取荷物の上限数」を保持する。たとえば、4枚の紙原稿を読み込んで、1枚の記録紙に印刷する集約コピーが指示された場合において、1枚の紙原稿の読み取りデータが、1個の荷物オブジェクト360Aに格納されるのであれば、定数320bは、「4」という数値データを保持する。
キャリアオブジェクト320Aは、運搬する()320cが他のオブジェクトから呼び出され、その後、入力ステーションオブジェクト340Aの指示により生成された荷物オブジェクト360Aを受け取り、受け取った荷物オブジェクト360Aの個数が、この定数320bに保持される値に達した場合に、出力ステーションオブジェクト350Aへのデータ運搬を開始する。すなわち、「運搬する()320cが呼び出されたこと」および「受取った荷物オブジェクト360Aの個数が定数320bの値に達したこと」の2つの条件がそろった場合に、キャリアオブジェクト320Aは、データ運搬を開始する。
運搬する()320cは、ストリームオブジェクト310Aから呼び出され、入力ステーションオブジェクト340Aおよび出力ステーションオブジェクト350Aに、データ生成の開始およびデータ受取りの準備を指示する。そして、入力ステーションオブジェクト340Aの指示により生成された荷物オブジェクト360Aの個数が、上述した定数320bに保持される値に達するまでデータの運搬を待ち合わせる。
そして、荷物オブジェクト360Aの個数が、かかる値に達したならば、各荷物オブジェクト360Aを出力ステーションオブジェクト350Aに運搬する処理をおこなう。具体的には、各荷物オブジェクト360Aにデータ加工を指示し、データ加工が完了した荷物オブジェクト360Aを出力ステーションオブジェクト350Aに渡す処理をおこなう。
ステーションクラス330は、各入出力デバイスが取り扱うデータを一時的に保持して速度調整をおこなうクラスである。このステーションクラス330は、入力ステーションクラス340および出力ステーションクラス350の上位クラス(スーパークラス)であり、ステーションクラス330自体が実体化されることはないが、ステーションクラス330の属性および操作は、下位クラス(サブクラス)である入力ステーションクラス340および出力ステーションクラス350に継承される。
最大格納数330aは、ステーションクラス330が保持可能な荷物オブジェクト360Aの最大数を保持する。荷物オブジェクト360aの個数が、この最大格納数330aが保持する値を上回ると、ステーションクラス330は、実行制御部113bに対してエラー通知をおこなう。なお、上述したように、この属性(最大格納数330a)は、サブクラスである入力ステーションクラス340および出力ステーションクラス350に継承される。
スタート()330bは、ステーションクラス330が何らかの処理を開始するためのトリガーを与えるための処理をおこなう。このスタート()330bは、サブクラスである入力ステーションクラス340および出力ステーションクラス350に継承され、各サブクラスにおける具体的な処理によりオーバーライド(override)される。なお、かかる具体的な処理の説明については、後述する入力ステーションクラス340および出力ステーションクラス350のクラス説明においておこなう。
入力ステーションクラス340は、ステーションクラス330のサブクラスであり入力デバイスから受け付けたデータを一時的に保持する処理をおこなうクラスである。この入力ステーションクラス340は、キャリアクラス320からの指示に基づき、荷物オブジェクト360Aの生成を開始するとともに、かかる荷物オブジェクト360Aを一時的に保持することにより、異なる処理速度を有する入力デバイスを一律に取り扱うための入力バッファとしての役割を担うクラスである。
具体的には、この入力ステーションクラス340は、属性として、状態340aを有し、操作として、取出す()340bを有するとともに、ステーションクラス330から、属性として、最大格納数330aを継承し、操作として、スタート()330bを継承する。なお、かかる入力ステーションクラス340を実体化した入力ステーションオブジェクト340Aが生成されると、状態340aおよび最大格納数330aはRAM12b上に展開されるので、これらのデータ(属性)の書き込みおよび読み出しをおこなうことが可能となる。
状態340aは、入力ステーションクラス340に対応する入力デバイスの現在の状態を保持する。たとえば、かかる状態には、データ生成中の状態、何もしていない状態、要求を受け付けることができない状態などの状態がある。また、ステーションクラス330から継承した最大格納数330aは、入力ステーションクラス340が保持可能な荷物オブジェクト360Aの最大数を保持する。
取出す()340bは、キャリアクラス320から呼び出され、入力ステーションクラス340の指示により生成された荷物オブジェクト360Aを、かかるキャリアクラス320に返す処理をおこなう。また、ステーションクラス330から継承したスタート()330bは、入力ステーションクラス340に、荷物オブジェクト360Aの生成の開始指示をおこなう。
出力ステーションクラス350は、ステーションクラス330のサブクラスであり、出力デバイスに送り出すデータを一時的に保持する処理をおこなうクラスである。この出力ステーションクラス350は、キャリアクラス320からの指示に基づき、荷物オブジェクト360Aを受け付ける準備をおこなうとともに、かかる荷物オブジェクト360Aを一時的に保持することにより、異なる処理速度を有する出力デバイスを一律に取り扱うための出力バッファとしての役割を担うクラスである。
具体的には、この出力ステーションクラス350は、属性として、状態350aを有し、操作として、格納する()350bを有するとともに、ステーションクラス330から、属性として、最大格納数330aを継承し、操作として、スタート()330bを継承する。なお、かかる出力ステーションクラス350を実体化した出力ステーションオブジェクト350Aが生成されると、状態350aおよび最大格納数330aはRAM12b上に展開されるので、これらのデータ(属性)の書き込みおよび読み出しをおこなうことが可能となる。
状態350aは、出力ステーションクラス350に対応する出力デバイスの現在の状態を保持する。たとえば、かかる状態には、データ消費中の状態、何もしていない状態、あるいは、要求を受け付けることができない状態などの状態がある。また、ステーションクラス330から継承した最大格納数330aは、出力ステーションクラス350が保持することが可能な荷物オブジェクト360Aの最大数を保持する。ここで、「消費中」とは、出力ステーションクラス350が、出力デバイスに対し荷物オブジェクト360Aを渡す処理中であることをあらわす。
格納する()350bは、キャリアクラス320から呼び出され、出力ステーションクラス350が、荷物オブジェクト360Aを消費する処理をおこなう。また、ステーションクラス330から継承したスタート()330bは、出力ステーションクラス350に、荷物オブジェクト360Aの受け入れ準備を開始する指示をおこなう。
荷物クラス360は、入力デバイスから出力デバイスへ流れるデータに対応するクラスである。具体的には、この荷物クラス360は、属性として、コンバート360aを有し、操作として、加工する()360bを有する。なお、かかる荷物クラス360を実体化した荷物オブジェクト360Aが生成されると、コンバート360aはRAM12b上に展開されるので、このデータ(属性)の書き込みおよび読み出しをおこなうことが可能となる。また、この荷物オブジェクト360Aは、各入力デバイスに対応する入力ステーションオブジェクト340Aの指示により生成され、キャリアオブジェクト320Aにより運搬されて、各出力デバイスに対応する出力ステーションオブジェクト350Aにより消費されることになる。
コンバート360aは、入出力デバイス間のデータ単位の差異あるいはデータ形式の差異のために、データ単位あるいはデータ形式の変換処理が必要であるか否かをあらわす情報を保持する。また、加工する()360bは、キャリアオブジェクト320Aから呼び出され、データ単位あるいはデータ形式の変換処理をおこなう。ここで、データ単位の変換処理とは、たとえば、入力原稿1枚に相当する画像データを基本単位とするデータ単位から、かかる画像データを10ブロックに分割した各ブロックを基本単位とするデータ単位への変換処理をさす。また、データ形式の変換処理とは、たとえば、TIFF(Tagged Image File Format)形式の画像フォーマットをPDF(Portable Document Format)形式に変換する処理をさす。
なお、キャリアクラス320Aから、加工する()360bが呼び出された場合であっても、コンバート360aが保持する情報が、データ単位およびデータ形式の変換が不要であることを示していれば、かかる変換はおこなわれない。また、コンバート360aが保持する情報にしたがって、データ単位のみの変換またはデータ形式のみの変換がおこなわれる場合もある。
区間クラス370は、入出力デバイス間の区間状態を管理するクラスである。ここで、区間状態とは、各入力デバイスに対応する入力ステーションオブジェクト340Aを始点とし、各出力デバイスに対応する出力ステーションオブジェクト350Aを終点とした場合に、始点および終点の組合せからなる各区間の使用可否をあらわす情報である。すなわち、始点および終点のいずれもが使用可能であれば、かかる区間は使用可能であり、始点あるいは終点のいずれかが使用不可能であれば、かかる区間は使用不可能となる。
この区間クラス370は、具体的には、属性として、区間状態370aを有し、操作として、使用する()370bを有する。なお、かかる区間クラス370を実体化した区間オブジェクト370Aが生成されると、区間状態370aはRAM12b上に展開されるので、このデータ(属性)の書き込みおよび読み出しをおこなうことが可能となる。また、区間オブジェクト370bは、上述した始点および終点の組合せの数と同数生成される。
区間状態370aは、上述した各区間が使用可能であるか否かの情報を保持する。また、使用する()370bは、キャリアオブジェクト320Aから呼び出され、区間状態370aが保持する区間使用可否の情報を、かかるキャリアオブジェクト320Aに報告する処理をおこなう。たとえば、キャリアオブジェクト320Aから呼び出された際に、区間状態370aが保持する情報が「使用可能」であったならば、使用する()370bは、かかる区間が使用可能である旨を報告する。そして、区間状態370aが保持する状態が「使用不可能」に遷移したならば、かかる区間が使用不可能である旨を報告する。
次に、図10に示した各クラス間の関係について説明する。同図に示したように、UMLクラス図においては、クラス間に何らかの関係がある場合には、それらのクラスを表す矩形の間が直線で結ばれる。この直線の両端付近の文字はクラスのロールを表し、数字はクラスの多重度を表す。ここで、ロールとは、直線で結ばれた他方のクラスに対する当該クラスの役割のことであり、多重度とは、直線で結ばれた他方のクラスのオブジェクトと関連付けられて生成されるオブジェクトの数のことである。
たとえば、ストリームクラス310からみたキャリアクラス320の役割は「実行者」であり、キャリアクラス320からみたストリームクラス310の役割は「報告先」である。また、ストリームクラス310の多重度は「1」であり、キャリアクラス320の多重度は「0..n」である。ここで、「0..n」は、かかるキャリアクラス320の多重度が、0からnの範囲であることを示している。なお、かかる多重度の上限数はn個としているものの、当然に、ハードウェア仕様などによる制限を受ける。
まず、ストリームクラス310とキャリアクラス320とのクラス関係について説明する。ストリームクラス310は、複数のキャリアクラス320を管理して、一つのデータの流れを形成する。また、各キャリアクラス320は、データの運搬を実行するとともに運搬状態をストリームクラス310に報告する。したがって、ストリームクラス310とキャリアクラス320とは、「報告先」と「実行者」という関係をなしている。
ここで、ストリームクラス310側に記された白抜きのひし形は集約関係をあらわしている。集約関係とは、あるクラスが別のクラスの一部として含まれる関係のことである。具体的には、1つのデータの流れ(ストリーム)は、複数のキャリアクラス320から形成され、ストリームクラス310は、1つのストリームを管理するので、1つのストリームを形成するキャリアクラス320は、ストリームクラス310に集約される関係を有する。
また、ストリームオブジェクト310Aは、実行系サブシステム113からのストリーム開始要求ごとに生成され、1個のストリームオブジェクト310Aは、0個以上複数のキャリアオブジェクト320Aを管理するので、かかるキャリアオブジェクト320Aは、1個のストリームオブジェクト310Aに対して0個以上n個以下の範囲で存在する。
次に、キャリアクラス320とステーションクラス330とのクラス関係について説明する。キャリアクラス320は、1個の入力ステーションクラス330から1個の出力ステーション340へ荷物を運搬するコンテナの役割を有するため、入力ステーション330とキャリアクラス320とは、「入力元」と「コンテナ」の関係をなしており、キャリアクラス320と出力ステーション350とは、「コンテナ」と「出力先」の関係をなしている。
また、1個のキャリアオブジェクト320Aは、1個の入力ステーションオブジェクト340Aおよび1個の出力ステーションオブジェクト350Aと関連づけられるので、入力ステーションオブジェクト340Aとキャリアオブジェクト320Aとは、1対1の関係を有するとともに、キャリアオブジェクト320Aと出力ステーションオブジェクト350Aとの関係も1対1となる。
次に、キャリアクラス320と荷物クラス360とのクラス関係について説明する。キャリアクラス320は、入力ステーションクラス340に格納された荷物クラス360を受け取って一時的に格納し、格納した荷物クラス360を出力ステーションクラス350へ運搬する。したがって、キャリアクラス320と荷物クラス360とは、「一時的格納先」と「運搬対象」の関係をなしている。また、荷物クラス360は、キャリアクラス320に集約される関係を有する。
1個のキャリアオブジェクト320Aは、複数の荷物オブジェクト360Aを格納して運搬する場合があり、また、荷物オブジェクト360Aが未だ生成されていない場合には、格納対象となる荷物オブジェクト360Aは存在しない。したがって、荷物オブジェクト360Aは、キャリアオブジェクト320Aに対して0個以上n個以下の範囲で存在する。また、各荷物オブジェクト360Aには、格納先となるキャリアオブジェクト320Aが必ず1個存在する。
次に、ステーションクラス330と荷物クラス360とのクラス関係について説明する。ステーションクラス330は、運搬対象となる荷物クラス360を格納し、格納した荷物クラス360はキャリアクラス320により運搬される。したがって、ステーションクラス330と荷物クラス360とは、「格納先」と「運搬対象」の関係をなしている。なお、両クラスの多重度関係および集約関係は、上述したキャリアクラス320と荷物クラス360の関係と同様である。
次に、ステーションクラス330と入力ステーションクラス340および出力ステーションクラス350とのクラス関係について説明する。ステーションクラス330は、入力ステーションクラス340および出力ステーションクラス350の上位クラス(スーパークラス)であり、入力ステーションクラス340および出力ステーションクラス350は、ステーションクラス330の属性および操作を継承する。
最後に、キャリアクラス320と区間クラス370とのクラス関係について説明する。データの運搬を担当するキャリアクラス320は、区間クラス370が管理する各経路(区間)上を移動するので、キャリアクラス320と区間クラス370とは、「移動体」と「経路」の関係をなす。
また、キャリアを同期動作させる場合は、同時に複数のキャリアオブジェクト320Aが存在することはなく、動作中のキャリアオブジェクト320Aが最大で1個のみ存在する。一方、キャリアを並行動作させる場合は、同時に複数のキャリアオブジェクト320Aが存在する。そして、キャリアオブジェクト320Aが未だ生成されていない場合には、かかる経路にはキャリアオブジェクト320Aが存在しない。したがって、キャリアオブジェクト320Aは、区間オブジェクト370Aに対して0個以上n個以下の範囲で存在する。一方、区間オブジェクト370Aは、各キャリアオブジェクト320Aに対し必ず1個存在する。
このように、ストリームクラス310、キャリアクラス320、ステーションクラス330、入力ステーションクラス340、出力ステーションクラス350、荷物クラス360および区間クラス370の各オブジェクトは、相互に関連し合い、協調して、ストリーム部113aに必要な機能を実現している。
次に、図10に示した各クラスの操作の実行手順について例をあげて説明する。図11は、ストリーム部113aが実行指示を受け付けた際の操作の実行手順を示すUMLシーケンス図である。
ここで、UMLシーケンス図について説明しておく。図11の上部に並んだ矩形は、それぞれがクラスのオブジェクトを示している。各オブジェクトから下方に伸びた線は、各オブジェクトが生存していることを示す線(ライフライン)であり、上方から下方に向かって時間が流れているものとみなされる。この線上に存在する細長い矩形は、当該のオブジェクトが実際に活動している期間(活性期間)を示す。
各ライフラインの間を結ぶ横向きの矢印は、オブジェクトに含まれるの操作の実行を示す。具体的には、この矢印は、矢印の元のオブジェクトが、矢印の先のオブジェクトに含まれる操作を呼び出すことを示す。また、矢印が自分自身のオブジェクトを指している場合は、オブジェクトが自分に含まれる操作を自身で呼び出すことを意味する。
利用者が複合機1の操作パネル400を操作してコピー機能などの実行を指示すると、図11に示すように、サービス提供者(実行系サブシステム113の実行制御部113b)は、ストリーム開始要求をおこなうために、ストリーム部113aのストリームオブジェクト310Aの実行する()310aを呼び出す(ステップS101)。実行する()310aを呼び出されたストリームオブジェクト310Aは、該当する区間オブジェクト370Aに区間状態を問い合わせるなどして、データを流すことが可能か否かを判定する。
そして、ストリームオブジェクト310Aは、データを流すことが可能であると判定したならば、キャリアオブジェクト320Aを生成するとともに、このキャリアオブジェクト320Aの運搬する()320cを呼び出して、データの運搬を指示する(ステップS102)。なお、データを流すことが不可能であると判定した場合には、エラー通知をおこなうなどして処理を終了する。
運搬する()320cを呼び出されたキャリアオブジェクト320Aは、入力ステーションオブジェクト340Aのスタート()330bを呼び出すことにより、データ生成の開始指示をおこなうとともに(ステップS103)、出力ステーションオブジェクト350Aのスタート()330bを呼び出して、データ受け入れの準備を開始するよう指示する(ステップS104)。
データ生成の開始指示を受け付けた入力ステーションオブジェクト340Aは、対応する入力デバイス固有のデータ生成手順によりデータ生成を開始させる。たとえば、対応する入力デバイスがスキャナ201aであれば、原稿を読み込んでデータを生成する。また、対応する入力デバイスがHDD201cであれば、ファイルをオープンしてファイル中のデータをコピーすることによりデータを生成する。なお、かかるデータの生成は、実際には荷物オブジェクト360Aを生成することによりおこなわれる。
生成された各荷物オブジェクト360Aは、所定の条件を満たすとキャリアオブジェクト320Aに対し、荷物オブジェクト360Aが生成された旨の報告をおこなう。かかる所定の条件は、入力ステーションオブジェクト340Aに対応する入力デバイスにより異なるものとすることができる。たとえば、ある入力デバイスでは、かかる条件を「10個の荷物オブジェクト360Aが生成されたこと」とし、かかる入力デバイスの1/10の処理速度の入力デバイスでは、かかる条件を「1個の荷物オブジェクト360Aが生成されたこと」とすれば、キャリアオブジェクト320Aは、入力デバイスの処理速度の影響を受けることなく、荷物生成の報告を受信することができる。このようなバッファリング機能により、ストリーム部113aは、入出力デバイス間の処理速度の差異を吸収する。
このようにして、キャリアオブジェクト320Aが、荷物生成の報告を受信したならば(ステップS105)、キャリアオブジェクト320Aは、入力ステーションオブジェクト340Aの取出す()340bを呼び出す(ステップS106)。そして、かかる操作の戻りとして、生成された荷物オブジェクト360Aを受け取る。なお、上述したように、荷物生成の報告のタイミングは入力デバイスの種類に応じて異なるので、キャリアオブジェクト320Aが受け取る荷物オブジェクト360Aの個数も異なることになる。たとえば、5個の荷物オブジェクト360Aが生成された際に、かかる報告を受けた場合には、キャリアオブジェクト320Aは、5個の荷物オブジェクト360Aを受け取ることになる。
そして、キャリアオブジェクト320Aが受け取った荷物数が、定数320bに保持される値を上回ったならば(ステップS107)、キャリアオブジェクト320Aは、保持しているすべての荷物オブジェクト360Aの加工する()360Aを呼び出すことにより、データ単位あるいはデータ形式の変換処理を指示する(ステップS108)。なお、上述したように、この加工する()360Aは、変換処理が必要でない場合には、変換処理をおこなわない。このように、キャリアオブジェクト320Aは、荷物オブジェクト360Aにデータ単位あるいはデータ形式の変換処理を指示し、指示された各荷物オブジェクト360Aが変換処理を実行することとしたので、ストリーム部113aは、入出力デバイス間で処理対象となるデータの単位や形式が異なる場合であっても、データ単位あるいはデータ形式の差異を吸収することができる。
つづいて、各荷物オブジェクト360Aのデータ変換処理が完了したならば、キャリアオブジェクト320Aは、出力ステーションオブジェクト350Aの格納する()350bを呼び出して、データ変換処理が完了した荷物オブジェクト360Aを出力ステーションオブジェクト350Aに引き渡す(ステップS109)。そして、出力ステーションオブジェクト350Aは、引き渡された荷物オブジェクト360Aの消費を開始する。
上述してきたように、本実施の形態では、入力デバイスから出力デバイスへのデータの流れを制御するストリーム部を構築するにあたり、各入力デバイスに対応する入力バッファと、各出力デバイスに対応する出力バッファと、入力バッファから出力バッファへのデータ運搬をおこなうキャリアとを有する構成としたので、入力デバイスおよび出力デバイスの処理速度の差異、取り扱うデータ形式の差異および取り扱うデータ単位の差異を吸収でき各入出力デバイスを均一に取り扱うストリーム制御処理を提供することができる。さらに、オブジェクト指向設計により、かかるストリーム部の仕組みを構築し、鉄道モデルの隠喩(メタファ)によりオブジェクトモデリングをおこない、ストリームクラス、キャリアクラス、ステーションクラス、入力ステーションクラス、出力ステーションクラス、荷物クラスおよび区間クラスを用いることにより、かかるストリーム部を実現したので、ソフトウェア開発者やソフトウェア保守要員が、ストリーム部の構成と役割を容易に把握することができるとともに、効率的かつ信頼性の高いストリーム制御処理をおこなうことができる。
なお、本実施の形態の画像形成装置で実行されるストリーム制御プログラムは、インストール可能な形式または実行可能な形式のファイルでCD−ROM(Compact Disc Read Only Memory)、フレキシブルディスク(FD)、CD−R(CD Recordable)、DVD(Digital Versatile Disk)などのコンピュータで読み取り可能な記録媒体に記録して提供するよう構成してもよい。この場合、CPU11が上記記憶媒体から、ストリーム制御プログラムを読み出してMEM−P12上にロードすることで、画像形成装置に、上述した各ステップ、各手段または各部を実現させる。
また、ストリーム制御プログラムを、インターネットなどのネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するよう構成してもよい。さらに、かかるストリーム制御プログラムをインターネットなどのネットワーク経由で提供または配布するようにしてもよい。