(57)【要約】【課題】入力デバイスから出力デバイスへのデータの流れを効率良く制御すること。【解決手段】各入力デバイスに対応し、入力デバイスが出力する所定形式のデータを所定の大きさの単位入力データとして複数個保持可能な入力バッファ手順と、各出力デバイスに対応し、出力デバイスへ入力する所定形式のデータを所定の大きさの単位出力データとして複数個保持可能な出力バッファ手順と、入力バッファ手順が保持する単位入力データを取得し、単位入力データを単位出力データに変換して出力バッファ手順に格納するキャリア手順とをコンピュータに実行させる。また、これらの処理をオブジェクトの協調関係により実現する。【選択図】        図１０
2006085492.tif 000002
【特許請求の範囲】
【請求項１】
入力デバイスおよび出力デバイスを有し、前記入力デバイスから入力したデータを加工して前記出力デバイスに出力するデータ加工装置に搭載され、利用者により選択された入力デバイスおよび出力デバイス間のデータの流れを制御するストリーム制御プログラムであって、
各入力デバイスに対応し、入力デバイスが出力する所定形式のデータを所定の大きさの単位入力データとして複数個保持可能な入力バッファ手段と、
各出力デバイスに対応し、出力デバイスへ入力する所定形式のデータを所定の大きさの単位出力データとして複数個保持可能な出力バッファ手段と、
前記入力バッファ手段が保持する単位入力データを取得し、該単位入力データを前記単位出力データに変換して前記出力バッファ手段に格納するキャリア手段と
してコンピュータを機能させることを特徴とするストリーム制御プログラム。
【請求項２】
前記キャリア手段は、前記入力バッファ手段が保持する前記単位入力データの個数が所定数に達したならば、該単位入力データの取得を開始し、取得した該単位入力データの個数が所定数に達したならば、該単位入力データを前記単位出力データに変換して前記出力バッファ手段に格納することを特徴とする請求項１に記載のストリーム制御プログラム。
【請求項３】
前記データの流れごとに生成されるストリーム手段をさらに備え、
前記ストリーム手段は、１または複数の前記キャリア手段を生成して管理し、
前記キャリア手段は、前記入力ステーション手段が保持する前記単位入力データを前記単位出力データに変換して前記出力ステーション手段に格納することを特徴とする請求項１または２に記載のストリーム制御プログラム。
【請求項４】
前記単位入力データに対応する荷物手段をさらに備え、
前記キャリア手段は、前記荷物手段を前記入力ステーション手段から取得し、
前記荷物手段は、前記キャリア手段の指示により、前記単位入力データを前記単位出力データに変換し、
前記キャリア手段は、変換後の荷物手段を前記出力ステーション手段に格納する
ことを特徴とする請求項３に記載のストリーム制御プログラム。
【請求項５】
前記荷物手段は、前記単位入力データから前記単位出力データへの変換情報を保持し、該変換情報に基づいてデータ変換の必要性を判定したうえで、データ変換が必要であると判定した場合には、データ変換をおこなうことを特徴とする請求項４に記載のストリーム制御プログラム。
【請求項６】
前記ストリーム手段は、前記キャリア手段が前記出力ステーション手段へのデータ格納を完了した後に次のキャリア手段を生成する同期動作と、前記データ格納の完了を待ち合わせることなく次のキャリア手段を生成する並行動作とを切替える動作情報を保持し、該動作情報に基づいて前記キャリア手段の生成をおこなうことを特徴とする請求項３、４または５に記載のストリーム制御プログラム。
【請求項７】
前記入力ステーション手段と前記出力ステーション手段との組合せからなる区間の使用可否状態を保持し、該使用可否状態を前記キャリア手段に通知または応答する区間手段をさらに備えたことを特徴とする請求項１〜６のいずれか一つに記載のストリーム制御プログラム。
【請求項８】
利用者により選択された入力デバイスおよび出力デバイス間のデータの流れを制御する画像形成装置であって、
各入力デバイスに対応し、入力デバイスが出力する所定形式のデータを所定の大きさの単位入力データとして複数個保持可能な入力バッファ手段と、
各出力デバイスに対応し、出力デバイスへ入力する所定形式のデータを所定の大きさの単位出力データとして複数個保持可能な出力バッファ手段と、
前記入力バッファ手段が保持する単位入力データを取得し、該単位入力データを前記単位出力データに変換して前記出力バッファ手段に格納するキャリア手段と
を備えたことを特徴とする画像形成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力デバイスおよび出力デバイスを有し、入力デバイスから入力したデータを加工して出力デバイスに出力するデータ加工装置に搭載され、利用者により選択された入力デバイスおよび出力デバイス間のデータの流れを制御するストリーム制御プログラムおよび画像形成装置に関するものである。
【背景技術】
【０００２】
従来、プリンタ、コピーおよびスキャナなどの複数の機能を一つの筐体内に収納した複合機が知られている。かかる複合機では、ＵＮＩＸ（登録商標）などの汎用ＯＳ上に、プリンタアプリ、コピーアプリおよびスキャナアプリと呼ばれる複数のアプリケーションを搭載し、これらのアプリケーションの実行処理を切替えながら複数の機能を実現していた。
【０００３】
ところが、上記プリンタアプリ、コピーアプリおよびスキャナアプリは、それぞれエンジン制御、メモリ制御およびシステム制御などを別個におこなっているので、重複処理という無駄が生じていた。
【０００４】
このため、特許文献１では、複合機に搭載される複数のアプリケーションがそれぞれ担っていたエンジン制御、メモリ制御およびシステム制御などの処理を共通処理部分（プラットホーム）として各アプリケーションから括り出すことにより、アプリケーションの開発効率の向上を図っている。
【０００５】
また、特許文献２では、印刷装置に搭載される印刷制御ソフトウェアを、オブジェクト指向設計による複数のソフトウェア部品から構成し、かかる部品群の協調動作により印刷処理をおこなうこととしている。
【０００６】
【特許文献１】特開２００２−０８４３８３号公報
【特許文献２】特開平１１−３２７８８３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、この特許文献１で開示されている発明は、ハードウェアを制御する処理部分を共通化するものであり、各アプリケーションの内部処理全般を共通化するものではない。このため、複合機上のアプリケーションには、開発効率の向上を図るうえで改善の余地が残されている。
【０００８】
たとえば、スキャナデバイスなどの入力デバイスをとおして入力される画像データを、プリンタデバイスなどの出力デバイスに出力する場合において、利用者の指示に応じて入力デバイスおよび出力デバイスの選択をおこない、選択したデバイス間のデータの流れを制御するストリーム制御処理は、複写機上の各アプリケーションに共通して存在する処理であるが、ハードウェアを直接制御する処理ではないため各アプリケーションで別個に実現されており、共通化することが可能である。
【０００９】
また、特許文献２で開示されている発明は、印刷制御ソフトウェアをオブジェクト指向設計による複数のソフトウェア部品から構成したものであり、入力デバイスおよび出力デバイス間のデータの流れを制御するソフトウェア部品を開示したものではない。したがって、多機能化により多くの入出力デバイスを搭載する複合機において、特許文献２で開示されている発明を応用して、各入出力デバイスに対応するソフトウェア部品を作成したとしても、各入出力デバイスの処理速度の差異や、処理対象となるデータ単位やデータ形式の差異のため、各デバイス間のデータの流れを効率よく制御することは容易でない。
【００１０】
これらのことから、複合機に搭載されるアプリケーションのストリーム制御処理をいかにして効率よく実現するかが大きな課題となっている。なお、かかる課題は複合機についてのみ生じるものではなく、たとえば、複数の入出力デバイスを有し、各入力デバイスから各出力デバイスへのデータの流れを制御するストリーム制御装置を形成するような場合にも同様に生ずる課題である。
【００１１】
本発明は、上述した従来技術による問題点を解消するためになされたものであり、ストリーム制御処理を効率よく実現することができるストリーム制御プログラムおよび画像形成装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するために、請求項１の発明にかかるストリーム制御プログラムは、入力デバイスおよび出力デバイスを有し、前記入力デバイスから入力したデータを加工して前記出力デバイスに出力するデータ加工装置に搭載され、利用者により選択された入力デバイスおよび出力デバイス間のデータの流れを制御するストリーム制御プログラムであって、各入力デバイスに対応し、入力デバイスが出力する所定形式のデータを所定の大きさの単位入力データとして複数個保持可能な入力バッファ手段と、各出力デバイスに対応し、出力デバイスへ入力する所定形式のデータを所定の大きさの単位出力データとして複数個保持可能な出力バッファ手段と、前記入力バッファ手段が保持する単位入力データを取得し、該単位入力データを前記単位出力データに変換して前記出力バッファ手段に格納するキャリア手段としてコンピュータを機能させることを特徴とする。
【００１３】
また、請求項２の発明にかかるストリーム制御プログラムは、請求項１の発明において、前記キャリア手段は、前記入力バッファ手段が保持する前記単位入力データの個数が所定数に達したならば、該単位入力データの取得を開始し、取得した該単位入力データの個数が所定数に達したならば、該単位入力データを前記単位出力データに変換して前記出力バッファ手段に格納することを特徴とする。
【００１４】
また、請求項３の発明にかかるストリーム制御プログラムは、請求項１または２の発明において、前記データの流れごとに生成されるストリーム手段をさらに備え、前記ストリーム手段は、１または複数の前記キャリア手段を生成して管理し、前記キャリア手段は、前記入力ステーション手段が保持する前記単位入力データを前記単位出力データに変換して前記出力ステーション手段に格納することを特徴とする。
【００１５】
また、請求項４の発明にかかるストリーム制御プログラムは、請求項３の発明において、前記単位入力データに対応する荷物手段をさらに備え、前記キャリア手段は、前記荷物手段を前記入力ステーション手段から取得し、前記荷物手段は、前記キャリア手段の指示により、前記単位入力データを前記単位出力データに変換し、前記キャリア手段は、変換後の荷物手段を前記出力ステーション手段に格納することを特徴とする。
【００１６】
また、請求項５の発明にかかるストリーム制御プログラムは、請求項４の発明において、前記荷物手段は、前記単位入力データから前記単位出力データへの変換情報を保持し、該変換情報に基づいてデータ変換の必要性を判定したうえで、データ変換が必要であると判定した場合には、データ変換をおこなうことを特徴とする。
【００１７】
また、請求項６の発明にかかるストリーム制御プログラムは、請求項３、４または５の発明において、前記ストリーム手段は、前記キャリア手段が前記出力ステーション手段へのデータ格納を完了した後に次のキャリア手段を生成する同期動作と、前記データ格納の完了を待ち合わせることなく次のキャリア手段を生成する並行動作とを切替える動作情報を保持し、該動作情報に基づいて前記キャリア手段の生成をおこなうことを特徴とする。
【００１８】
また、請求項７の発明にかかるストリーム制御プログラムは、請求項１〜６の発明において、前記入力ステーション手段と前記出力ステーション手段との組合せからなる区間の使用可否状態を保持し、該使用可否状態を前記キャリア手段に通知または応答する区間手段をさらに備えたことを特徴とする。
【００１９】
また、請求項８の発明にかかる画像形成装置は、利用者により選択された入力デバイスおよび出力デバイス間のデータの流れを制御する画像形成装置であって、各入力デバイスに対応し、入力デバイスが出力する所定形式のデータを所定の大きさの単位入力データとして複数個保持可能な入力バッファ手段と、各出力デバイスに対応し、出力デバイスへ入力する所定形式のデータを所定の大きさの単位出力データとして複数個保持可能な出力バッファ手段と、前記入力バッファ手段が保持する単位入力データを取得し、該単位入力データを前記単位出力データに変換して前記出力バッファ手段に格納するキャリア手段とを備えたことを特徴とする。
【発明の効果】
【００２０】
請求項１にかかるストリーム制御プログラムによれば、各入力デバイスに対応し、入力デバイスが出力する所定形式のデータを所定の大きさの単位入力データとして複数個保持可能な入力バッファ手段と、各出力デバイスに対応し、出力デバイスへ入力する所定形式のデータを所定の大きさの単位出力データとして複数個保持可能な出力バッファ手段と、入力バッファ手段が保持する単位入力データを取得し、単位入力データを単位出力データに変換して出力バッファ手段に格納するキャリア手段としてコンピュータを機能させるよう構成したので、入力デバイスおよび出力デバイスの処理速度の差異、取り扱うデータ形式の差異および取り扱うデータ単位の差異を吸収でき各入出力デバイスを均一に取り扱うことにより、効率的かつ信頼性の高いストリーム制御処理を提供することができるという効果を奏する。
【００２１】
また、請求項２にかかるストリーム制御プログラムによれば、キャリア手段は、入力バッファ手段が保持する単位入力データの個数が所定数に達したならば、単位入力データの取得を開始し、取得した単位入力データの個数が所定数に達したならば、単位入力データを単位出力データに変換して出力バッファ手段に格納するよう構成したので、取り扱うデータ形式の差異および取り扱うデータ単位の差異を吸収できるという効果を奏する。
【００２２】
また、請求項３にかかるストリーム制御プログラムによれば、データの流れごとに生成されるストリーム手段をさらに備え、ストリーム手段は、１または複数のキャリア手段を生成して管理し、キャリア手段は、入力ステーション手段が保持する単位入力データを単位出力データに変換して出力ステーション手段に格納するよう構成したので、ソフトウェア開発者やソフトウェア保守要員が、ストリーム部の構成と役割を容易に把握することがでるとともに、各入出力デバイスを均一に取り扱うことにより効率的かつ信頼性の高いストリーム制御処理をおこなうことができるという効果を奏する。
【００２３】
また、請求項４にかかるストリーム制御プログラムによれば、単位入力データに対応する荷物手段をさらに備え、キャリア手段は、荷物手段を入力ステーション手段から取得し、荷物手段は、キャリア手段の指示により、単位入力データを単位出力データに変換し、キャリア手段は、変換後の荷物手段を出力ステーション手段に格納するよう構成したので、ソフトウェア開発者やソフトウェア保守要員が、ストリーム部の構成と役割を容易に把握することがでるとともに、取り扱うデータ形式の差異および取り扱うデータ単位の差異を吸収できるという効果を奏する。
【００２４】
また、請求項５にかかるストリーム制御プログラムによれば、荷物手段は、単位入力データから単位出力データへの変換情報を保持し、変換情報に基づいてデータ変換の必要性を判定したうえで、データ変換が必要であると判定した場合には、データ変換をおこなうよう構成したので、ソフトウェア開発者やソフトウェア保守要員が、ストリーム部の構成と役割を容易に把握することがでるとともに、効率的なストリーム制御処理をおこなうことができるという効果を奏する。
【００２５】
また、請求項６にかかるストリーム制御プログラムによれば、ストリーム手段は、キャリア手段が出力ステーション手段へのデータ格納を完了した後に次のキャリア手段を生成する同期動作と、データ格納の完了を待ち合わせることなく次のキャリア手段を生成する並行動作とを切替える動作情報を保持し、動作情報に基づいてキャリア手段の生成をおこなうよう構成したので、ソフトウェア開発者やソフトウェア保守要員が、ストリーム部の構成と役割を容易に把握することがでるとともに、入力デバイスおよび出力デバイスの処理速度の差異を吸収して効率的かつ信頼性の高いストリーム制御処理をおこなうことができるという効果を奏する。
【００２６】
また、請求項７にかかるストリーム制御プログラムによれば、入力ステーション手段と出力ステーション手段との組合せからなる区間の使用可否状態を保持し、使用可否状態をキャリア手段に通知または応答する区間手段をさらに備えるよう構成したので、ソフトウェア開発者やソフトウェア保守要員が、ストリーム部の構成と役割を容易に把握することがでるとともに、入力デバイスおよび出力デバイスの状態に応じてストリーム制御処理をおこなうことができるという効果を奏する。
【００２７】
また、請求項８にかかる画像形成装置によれば、各入力デバイスに対応し、入力デバイスが出力する所定形式のデータを所定の大きさの単位入力データとして複数個保持可能な入力バッファ手段と、各出力デバイスに対応し、出力デバイスへ入力する所定形式のデータを所定の大きさの単位出力データとして複数個保持可能な出力バッファ手段と、入力バッファ手段が保持する単位入力データを取得し、単位入力データを単位出力データに変換して出力バッファ手段に格納するキャリア手段とを備えるよう構成したので、入力デバイスおよび出力デバイスの処理速度の差異、取り扱うデータ形式の差異および取り扱うデータ単位の差異を吸収でき各入出力デバイスを均一に取り扱うことにより、効率的かつ信頼性の高いストリーム制御処理を提供することができるという効果を奏する。
【発明を実施するための最良の形態】
【００２８】
以下に添付図面を参照して、この発明にかかるストリーム制御プログラム、およびこのプログラムを実行させるためのコンピュータを含んだ画像形成装置の最良な実施の形態を詳細に説明する。なお、本実施の形態では、この発明を画像形成装置に適用した場合について説明するが、本発明はこれに限らず、ストリーム制御処理をおこなう各種装置に適用することができる。
【００２９】
まず、本実施の形態に係る画像形成装置（以下「複合機」と言う）１の概要について図１、図２、図３、図１２および図１３を用いて説明する。図１は、本実施の形態に係る複合機１を取り巻くネットワーク環境を説明するためのネットワーク図であり、図２は、図１に示した複合機１のハードウェア構成を示すブロック図であり、図３は、図１に示した複合機１のソフトウェアとハードウェアの関係を説明するための説明図であり、図１２は、複合機１に搭載されるソフトウェア構成の変遷を説明するための説明図であり、図１３は、従来の複合機のソフトウェアとハードウェアの関係を説明するための説明図である。
【００３０】
図１に示すように、近年のネットワーク化の進展により、オフィスなどに設けられたパーソナルコンピュータ（ＰＣ）などの機器は、ＬＡＮ（Local Area Network）などのネットワークに接続され、相互に通信することが通常となった。たとえば、同図に示したように、かかるネットワークには、クライアントＰＣ、ＳＭＴＰ（Simple Mail Transfer Protocol）サーバ、ＦＴＰ（File Transfer Protocol）サーバ、サーバＰＣなどが接続され、電子メールの送受信やファイル転送をすることができ、モデム接続された配信サーバは、オフィス外のファックス装置と通信することができる。
【００３１】
このようなネットワーク化の進展に伴い、複合機１もかかるネットワークに接続され、ＰＣ等の機器と相互に通信することが可能となり、ハードディスク等の記憶装置を内蔵することで、いわゆるネットワーク複合機へと進化し、ユーザの様々なニーズに応えることができるようになった。
【００３２】
たとえば、複合機１は、通常のコピー機能に加えて、クライアントＰＣからの印刷要求により文書データ等を印刷するプリンタ機能、クライアントＰＣからのファックス要求により文書データ等をサーバＰＣに接続されたモデムを経由して他のオフィスのファックス機器に送信するファックス機能、受信したファックス文書やコピー文書を内蔵したハードディスクに蓄積する蓄積機能などを有するようになった。
【００３３】
こうして複合化とネットワーク化の進展により必要となった多くの機能を実現するため、複合機１に搭載されるソフトウェアは、規模が大きく、複雑なものとなっている。そして、それにともなって、それらのソフトウェアの開発と維持管理のための工数も大幅に増大している。
【００３４】
図２は、かかる複合機１のハードウェア構成を示すブロック図である。同図に示すように、この複合機１は、コントローラ１０とエンジン部（Engine）６０とをＰＣＩ（Peripheral Component Interconnect）バスで接続した構成となる。コントローラ１０は、複合機１全体の制御と描画、通信、図示しない操作部からの入力を制御するコントローラである。エンジン部６０は、ＰＣＩバスに接続可能なプリンタエンジンなどであり、たとえば白黒プロッタ、１ドラムカラープロッタ、４ドラムカラープロッタ、スキャナまたはファックスユニットなどである。なお、このエンジン部６０には、プロッタなどのいわゆるエンジン部分に加えて、誤差拡散やガンマ変換などの画像処理部分が含まれる。
【００３５】
コントローラ１０は、ＣＰＵ１１と、ノースブリッジ（ＮＢ）１３と、システムメモリ（ＭＥＭ−Ｐ）１２と、サウスブリッジ（ＳＢ）１４と、ローカルメモリ（ＭＥＭ−Ｃ）１７と、ＡＳＩＣ（Application Specific Integrated Circuit）１６と、ハードディスクドライブ（ＨＤＤ）１８とを有し、ノースブリッジ（ＮＢ）１３とＡＳＩＣ１６との間をＡＧＰ（Accelerated Graphics Port）バス１５で接続した構成となる。また、ＭＥＭ−Ｐ１２は、ＲＯＭ（Read Only Memory）１２ａと、ＲＡＭ(Random Access Memory)１２ｂとをさらに有する。
【００３６】
ＣＰＵ１１は、複合機１の全体制御をおこなうものであり、ＮＢ１３、ＭＥＭ−Ｐ１２およびＳＢ１４からなるチップセットを有し、このチップセットを介して他の機器と接続される。
【００３７】
ＮＢ１３は、ＣＰＵ１１とＭＥＭ−Ｐ１２、ＳＢ１４、ＡＧＰ１５とを接続するためのブリッジであり、ＭＥＭ−Ｐ１２に対する読み書きなどを制御するメモリコントローラと、ＰＣＩマスタおよびＡＧＰターゲットとを有する。
【００３８】
ＭＥＭ−Ｐ１２は、プログラムやデータの格納用メモリ、プログラムやデータの展開用メモリ、プリンタの描画用メモリなどとして用いるシステムメモリであり、ＲＯＭ１２ａとＲＡＭ１２ｂとからなる。ＲＯＭ１２ａは、プログラムやデータの格納用メモリとして用いる読み出し専用のメモリであり、ＲＡＭ１２ｂは、プログラムやデータの展開用メモリ、プリンタの描画用メモリなどとして用いる書き込みおよび読み出し可能なメモリである。
【００３９】
ＳＢ１４は、ＮＢ１３とＰＣＩデバイス、周辺デバイスとを接続するためのブリッジである。このＳＢ１４は、ＰＣＩバスを介してＮＢ１３と接続されており、このＰＣＩバスには、ネットワークインターフェース（Ｉ／Ｆ）部なども接続される。
【００４０】
ＡＳＩＣ１６は、画像処理用のハードウェア要素を有する画像処理用途向けのＩＣ（Integrated Circuit）であり、ＡＧＰ１５、ＰＣＩバス、ＨＤＤ１８およびＭＥＭ−Ｃ１７をそれぞれ接続するブリッジの役割を有する。このＡＳＩＣ１６は、ＰＣＩターゲットおよびＡＧＰマスタと、ＡＳＩＣ１６の中核をなすアービタ（ＡＲＢ）と、ＭＥＭ−Ｃ１７を制御するメモリコントローラと、ハードウェアロジックなどにより画像データの回転などをおこなう複数のＤＭＡＣ（Direct Memory Access Controller）と、エンジン部６０との間でＰＣＩバスを介したデータ転送をおこなうＰＣＩユニットとからなる。このＡＳＩＣ１６には、ＰＣＩバスを介してＦＣＵ（Fax Control Unit）３０、ＵＳＢ（Universal Serial Bus）４０、ＩＥＥＥ１３９４（the Institute of Electrical and Electronics Engineers 1394）インターフェース５０が接続される。
【００４１】
ＭＥＭ−Ｃ１７は、コピー用画像バッファ、符号バッファとして用いるローカルメモリであり、ＨＤＤ（Hard Disk Drive）１８は、画像データの蓄積、プログラムの蓄積、フォントデータの蓄積、フォームの蓄積を行うためのストレージである。
【００４２】
ＡＧＰ１５は、グラフィック処理を高速化するために提案されたグラフィックスアクセラレーターカード用のバスインターフェースであり、ＭＥＭ−Ｐ１２に高スループットで直接アクセスすることにより、グラフィックスアクセラレーターカードを高速にするものである。
【００４３】
図３は、かかる複合機１のハードウェアおよびソフトウェアの構成を示した概念図であり、具体的には、後述する本実施の形態の特徴部分であるストリーム部１１３ａを含む統合アプリケーション１１０と、ソフトウェア１００およびハードウェア２００の階層関係を示している。同図に示すように、ハードウェア２００は、ハードウェアリソース２０１を有し、このハードウェアリソース２０１は、スキャナ２０１ａ、プロッタ２０１ｂ、ＨＤＤ（Hard Disk Drive）２０１ｃ、ネットワーク２０１ｄおよびその他のリソース２０１ｅを有する。なお、その他のリソース２０１ｅは、２０１ａ〜２０１ｄ以外のハードウェアリソース２０１のことであり、たとえば、操作パネルなどの入出力デバイスを示す。
【００４４】
また、かかるハードウェア２００に搭載されるソフトウェア１００は階層化されており、オペレーティングシステム１０３の上層にはサービス層１０２が構築され、このサービス層１０２の上層にはアプリケーション層１０３が構築されている。そして、サービス層１０２は、各ハードウェアリソース（２０１ａ〜２０１ｅ）を制御するドライバーに相当する、スキャナ制御１０２部ａ、プロッタ制御部１０２ｂ、蓄積制御部１０２ｃ、配信／メール送受信制御部１０２ｄ、ＦＡＸ送受信制御部１０２ｅ、ネットワーク通信制御部１０２ｆおよびその他の制御部１０２ｇを有する。
【００４５】
ここで、図３に示したソフトウェア１００が、かかる階層構造をとるに至った経緯について、図１２および図１３を用いて説明する。図１２は、複合機１に搭載されるソフトウェア構成の変遷を示す説明図である。図１２のサービス層分離前アプリケーション５０１に示すように、多機能化した複合機１に搭載されるソフトウェアは、コピーアプリケーション、ＦＡＸアプリケーション、スキャナアプリケーションなどの機能別に独立したアプリケーションとして作成され、図３に示したオペレーティングシステム１０３上で動作していた。
【００４６】
しかしながら、これらのアプリケーションは、ハードウェアリソースを制御するドライバー（サービス層１０２）を含んでいたため、各アプリケーションには重複した処理が存在していた。その結果、各アプリケーションの規模は大きなものとなっていた。
【００４７】
そこで、図１２のサービス層分離後アプリケーション５０２に示すように、サービス層分離前アプリケーション５０１のサービス層１０２相当部分を括りだしサービス層１０２とするとともに、各アプリケーションは、このサービス層１０２の上層であるアプリケーション層１０１に構築する構成とした。かかる階層化構成をとることにより、各アプリケーションはスリム化され開発労力も軽減された。
【００４８】
しかしながら、複合機１のネットワーク化、多機能化がさらに進展するに従って、各アプリケーションに共通処理部分が存在することが問題となってきた。具体的には、アプリケーション層１０１の各アプリケーション、たとえば、コピーアプリケーションやスキャナアプリケーションなどは、それぞれ、スキャナ制御部１０２ａや蓄積制御部１０２ｃといったドライバーと通信をおこなう処理や、各種機能が取り扱うデータの流れを制御するストリーム制御などの同様な処理を内部に有していた。このように、同様な処理を各アプリケーションが有していると、各アプリケーションの開発規模が大きくなるとともに、サービス層の仕様変更に対する各アプリケーションの改修規模が大きくなることが問題となってきた。
【００４９】
この問題を解決するため、図１２の共通ルーチン分離アプリケーション５０３に示すように、かかる同様な処理（共通処理部分）を共通ルーチンとして括りだすことも考えられた。しかしながら、かかる共通ルーチンは、各アプリケーションにおいて微妙に異なる処理を共通化しようとするものであるため、共通ルーチン内部の処理は複雑なものとなってしまう。また、たとえば、プリンタアプリケーションなどの新規アプリケーションを追加する場合においては、かかる新規アプリケーションに適応するために、共通ルーチンの改修が必要となる。
【００５０】
しかし、共通ルーチンの内部処理は複雑であるため、改修要員が処理を把握することが困難となり、改修規模の増大や、改修ミスによる他のアプリケーションへの影響が懸念された。
【００５１】
そこで、図１２のオブジェクト指向アプリケーション５０４に示すように、オブジェクト指向による設計手法（オブジェクトモデリング）により、かかる複数のアプリケーションを、統合アプリケーション１１０に統合することとした。具体的には、各アプリケーションの共通処理部分をオブジェクトモデルとして抽出し、このオブジェクトモデルの集合体から、統合アプリケーション１１０を構成する。そして、従来のコピー機能やスキャナ機能といった機能は、かかるオブジェクトモデルの協調関係によって実現する。
【００５２】
このような構成をとることにより、たとえばプリンタ機能のような新規機能の追加は、かかるオブジェクトモデルに属するクラスのサブクラス化などにより対処できる。このため、改修部分が明確となり、改修による他の機能への影響を小さくすることができる。また、オブジェクトモデリングによるプログラムは、従来の手続き型プログラムに比べて、処理の把握が容易であるため、改修要員が処理を把握することも容易となり、改修規模の削減や、改修ミスによる他のアプリケーションへの影響を小さくすることができる。
【００５３】
図１３は、図１２に示したサービス層分離後アプリケーション５０２の段階における従来のアプリケーションの構成と、かかるアプリケーションとサービス層１０２の各ドライバーの関係を示した説明図である。同図に示すように、アプリケーション層１０１は、コピーアプリケーション１２０、スキャナアプリケーション１３０、ファックスアプリケーション１４０およびプリンタアプリケーション１５０を有する。
【００５４】
たとえば、コピーアプリケーション１２０は、コピー機能を実現するために、スキャナ制御部１０２ａ、プロッタ制御部１０２ｂ、蓄積制御部１０２ｃおよびその他の制御部１０２ｇとデータの送受信をおこなう。また、ファックスアプリケーション１４０は、ファックス機能を実現するために、プロッタ制御部１０２ｂ、蓄積制御部１０２ｃ、ＦＡＸ送受信制御部１０２ｅ、ネットワーク通信制御部１０２ｆおよびその他の制御部１０２ｇとデータの送受信をおこなう。このように、アプリケーション層１０１の各アプリケーションとサービス層１０２の各ドライバー間の通信は、複雑なものとなっていた。
【００５５】
図３の説明に戻ると、上述したオブジェクトモデリングにより、アプリケーション層１０１に存在した複数のアプリケーションは、統合アプリケーション１１０に統合されている。そして、各アプリケーションが重複しておこなっていた各ドライバーとの通信処理は、統合アプリケーション１１０を構成する所定のオブジェクトモデルにおこなわせるように構成したことにより、アプリケーション層１０１のアプリケーションと、サービス層１０２の各ドライバー間の通信は、図１３と比較して単純になっている。
【００５６】
次に、統合アプリケーション１１０の内部構成について説明する。図４は、統合アプリケーション１１０の内部構成を示すブロック図である。同図に示すように、統合アプリケーション１１０は、操作系サブシステム１１１と、管理系サブシステム１１２と、実行系サブシステム１１３とを有する。
【００５７】
操作系サブシステム１１１は、マンマシンインタフェースを担当するソフトウェア群である。具体的には、この操作系サブシステム１１１は、ユーザの要求を受け付ける処理と、この要求の実行を指示する処理と、この要求の実行状況と実行結果についての情報をユーザに提供する処理をおこなう。
【００５８】
管理系サブシステム１１２は、画像形成装置１の資源を管理するソフトウェア群である。具体的には、この管理系サブシステム１１２は、ハードウェアリソース２０１およびこのハードウェアリソース２０１が保持するデータ状態を管理するサービスをおこなう。
【００５９】
実行系サブシステム１１３は、ユーザからの要求の実行を担当するソフトウェア群である。具体的には、この実行系サブシステム１１３は、コピー要求がなされた場合には、原稿の読み取りから成果物の出力までの処理をおこなう。
【００６０】
操作系サブシステム１１１、管理系サブシステム１１２および実行系サブシステム１１３は、必要に応じて相互に処理を依頼してその結果を送り合う。このようにそれぞれのサブシステムが協調し合って、統合アプリケーション１１０全体として複合機１に必要とされるサービスの提供をおこなう。
【００６１】
そして、実行系サブシステム１１３は、本実施の形態の特徴部分であるストリーム部１１３ａと実行制御部１１３ｂとを有する。このストリーム部１１３ａは、実行制御部１１３ｂからデータの流れの制御に関する要求を受付け、入出力デバイス間の処理速度の差異や、取り扱うデータ形式の差異といった各入出力デバイス固有の性質に基づく差異を吸収し、入力デバイスから出力デバイスへのデータの流れを制御する処理（ストリーム制御処理）をおこなう。
【００６２】
図５は、図４に示した各サブシステムを、ＵＭＬ（Unified Modeling Language）のクラス図（ＵＭＬクラス図）に置き換えた図である。ここで、ＵＭＬとは、ＯＭＧ（Object Management Group）が仕様を策定しているシステムモデリング言語であり、モデリングの成果を記述する記法を定義したものである。このＵＭＬは、オブジェクト指向によるソフトウェアの設計において広く用いられている。
【００６３】
図５に示すように、統合アプリケーション１１０は複数のパッケージを有し、また、この統合アプリケーション１１０自体もひとつのパッケージとなっている。ここで、パッケージとはＵＭＬモデルの各構成要素（シンボル）をグループ化したものであり、左上にタブのついたフォルダの形をしたシンボルで表現される。また、各パッケージを相互に結ぶ直線は、各パッケージ間に処理依頼などの関連があることを示している。
【００６４】
図５に示したように、統合アプリケーション１１０は、操作系サブシステム１１１、管理系サブシステム１１２および実行系サブシステム１１３の３つのパッケージを内部に有するパッケージである。さらに、実行系サブシステム１１３は、本実施の形態の特徴部分であるストリーム部１１３ａと実行制御部１１３ｂとを内部に有するパッケージである。そして、操作系サブシステム１１１、管理系サブシステム１１２および実行系サブシステム１１３を相互に結ぶ直線は、各パッケージ間に処理依頼（たとえば、メッセージ送受信）などの関連があることを示している。なお、操作系サブシステム１１１、管理系サブシステム１１２および実行系サブシステム１１３のタブの右端に記された記号は、かかるパッケージがサブシステムであることを示すＵＭＬのシンボルである。
【００６５】
次に、本実施の形態の特徴部分であるストリーム部１１３ａについて詳細に説明する。なお、このストリーム部１１３ａは、オブジェクト指向に基づいて設計するにあたって、既存の処理を単純にオブジェクト化せず、機能追加や改修をより一層容易におこなうことができるようにオブジェクトモデルを構成した。かかるオブジェクトモデルの構成について図６〜図９を用いて説明しておく。
【００６６】
図６は、複合機１の操作パネル４００の一例を示した図である。同図に示すように、かかる操作パネル４００は、初期設定キー４０１、コピーキー４０２、コピーサーバーキー４０３、プリンタキー４０４、送信キー４０５、テンキー４０６、クリア／ストップキー４０７、スタートキー４０８、予熱キー４０９、リセットキー４１０および液晶タッチパネル４２０を有する。
【００６７】
たとえば、利用者が、複合機１に紙原稿をセットしてコピーキー４０２を押下してコピー処理を選択し、スタートキー４０８を押下したならば、スキャナ２０１ａデバイスからプロッタ２０１ｂデバイスへのデータの流れが発生する。この場合、入力デバイスであるスキャナ２０１ａデバイスと、出力デバイスであるプロッタ２０１ｂデバイスとは、処理速度、取り扱うデータ単位およびデータ形式が異なる。また、ネットワーク化の進展により、ネットワークを経由した複数の利用者が、複合機１にプリンタ処理やＦＡＸ送信などの指示を同時に与える場合には、複合機１内には、複数のデータの流れが存在することになる。これらのことから、かかるデータの流れ（ストリーム）の制御を効率良く、かつ、高い信頼性をもっておこなう必要がある。
【００６８】
図７は、本実施の形態の特徴部分であるストリーム部１１３ａの処理概要を説明するための説明図である。入力デバイスから出力デバイスへのデータの流れを制御する場合においては、入出力デバイス間の処理速度の差異や、取り扱うデータ単位あるいはデータ形式の差異といった各入出力デバイス固有の性質に基づく差異をいかにして吸収するかが問題となる。
【００６９】
特に、多機能化に伴い多くの入出力デバイスを搭載するに至った複合機１においては、かかる問題は顕著である。すなわち、各入出力デバイスが取り扱うデータ形式やデータ単位はそれぞれ異なり、データ処理速度もそれぞれ異なるため、数多くの入出力デバイスについて、データ形式、データ単位およびデータ処理速度の差異をすべて吸収するようストリーム部１１３ａを設計する必要がある。なお、図７に示す、「○」は、入力デバイスが生成する所定の大きさのデータをあらわし、「◇」は、出力デバイスに渡される（出力デバイスが消費する）所定の大きさのデータをあらわすこととする。
【００７０】
そこで、本実施の形態の特徴部分であるストリーム部１１３ａは、各入力デバイスにそれぞれ対応する入力バッファと、各出力デバイスにそれぞれ対応する出力バッファを有する構成とするとともに、入力バッファから出力バッファへデータを運搬するキャリアを有する構成とした。入力バッファおよび出力バッファを有する構成とすることにより、入力デバイスと出力デバイスの処理速度が異なる場合であっても、各デバイスが取り扱うデータを一時的に保持することができるので、かかる処理速度の差異を吸収することができる。
【００７１】
同図では、入力デバイスの処理速度が、出力デバイスの処理速度よりも大きい場合を示しており、入力デバイスが生成したデータは、いったん入力バッファに保持され、適宜、キャリアに載せられて出力バッファに運搬される。すなわち、各入出力デバイスに対応するバッファを設けるとともに、入出力バッファ間を移動するキャリアの移動頻度および積載データ量を制御することとしたので、本実施の形態の特徴部分であるストリーム部１１３ａは、さまざまな処理速度を有する入出力デバイスを均一に取り扱うことができる。
【００７２】
また、入力バッファから出力バッファへデータを運搬するキャリアは、キャリアに積載するデータのデータ形式の変換をおこなうこととしたので、入出力バッファ間のデータ形式の差異を吸収することができる。さらに、キャリアが一度に運搬するデータの個数を制御することとしたので、入出力バッファ間のデータ単位の差異を吸収することができる。このように、データ形式の差異およびデータ単位の差異をキャリアが吸収することとしたので、本実施の形態の特徴部分であるストリーム部１１３ａは、さまざまなデータ単位およびデータ形式を処理対象とする入出力デバイスを均一に取り扱うことができる。
【００７３】
本実施の形態の特徴部分であるストリーム部１１３ａは、上述したように、入力バッファ、出力バッファおよびキャリアを有する構成としたうえで、かかるストリーム部１１３ａのオブジェクトモデリングをおこなった。オブジェクトモデリングをおこなうにあたっては、鉄道のモデルの隠喩（メタファ）により、ストリーム部１１３ａをモデリングすることとした。かかるオブジェクトモデリングにより、並行したデータの流れの制御を高い信頼性をもっておこなうことができ、機能追加にも柔軟に対処できるストリーム処理の仕組みの提供が可能となることが予想される。
【００７４】
図８は、ストリーム部１１３ａのオブジェクトモデリングの概要を説明するための説明図である。同図に示すように、鉄道のモデルにおいては、運搬対象となる「人」は、運搬手段である「電車」により、人が乗り物を待つ場所である「駅」から他の駅に運ばれる。そして、駅と駅を結ぶ線路にあたる「区間」には、区間の通行可否を示す「信号」が設けられ、運搬手段である「電車」の運行を制限する。そして、電車の動きを制御する「管制室」により、運搬手段である「電車」の運行がコントロールされ、複数の「電車」を用いて、駅から駅への人の運搬がおこなわれる。
【００７５】
かかる鉄道のモデルを、ストリーム部１１３ａのモデルにあてはめると以下のようになる。すなわち、運搬対象となる「荷物」は、運搬手段である「キャリア」により、荷物がキャリアを待つ場所である「ステーション」から他のステーションに運ばれる。そして、ステーションとステーションを結ぶ線路にあたる「区間」には、区間の通行可否を示す「区間の状態」が設けられ、運搬手段である「キャリア」の運行を制限する。そして、キャリアの動きを制御する「ストリーム」により、運搬手段である「キャリア」の運行がコントロールされ、複数の「キャリア」を用いて、ステーションからステーションへの荷物の運搬がおこなわれる。
【００７６】
上述した、オブジェクトモデリングにより、本実施の形態の特徴部分であるストリーム部１１３ａは、「荷物クラス」、「キャリアクラス」、「ステーションクラス」、「区間クラス」および「ストリームクラス」を有する構成とした。なお、入力デバイスおよび出力デバイスに対応させるため、「ステーションクラス」のサブクラスとして、「入力ステーションクラス」および「出力ステーションクラス」を設けた。
【００７７】
次に、ストリーム部１１３ａを構成するクラスを実体化したオブジェクトと、入出力デバイスとの対応関係について説明する。図９は、ストリーム部１１３ａのオブジェクト構成の概要を説明するための説明図である。同図に示すように、入力デバイスＡ〜Ｃおよび出力デバイスＡ〜Ｃがある場合には、入力デバイスと出力デバイスの組合せは、９通り存在することになる。
【００７８】
この組合せの中から入力デバイスＡおよび出力デバイスＣの組合せが選択されると、入力デバイスＡに対応する入力ステーションＡオブジェクトと、出力デバイスＣに対応する出力ステーションＣオブジェクトが生成される。そして、入力ステーションＡオブジェクトから出力ステーションＣオブジェクトへのデータの運搬は、キャリアオブジェクトによりおこなわれる。なお、入力ステーションＡと出力ステーションＣとの組合せからなる区間ＡＣオブジェクトは、入力ステーションＡおよび出力ステーションＣの組合せからなる区間の状態を保持することになる。
【００７９】
図１０は、上述したオブジェクトモデリングにより設計した、ストリーム部１１３ａのクラス構成を示すＵＭＬクラス図である。同図に示すように、ストリーム部１１３ａは、入出力デバイス間のストリーム制御要求を受け付けるとともにデータの流れの状態を管理するストリームクラス３１０、入出力デバイス間のデータ運搬を担当するキャリアクラス３２０、各入出力デバイスが取り扱うデータを保持して速度調整をおこなうステーションクラス３３０、ステーションクラス３３０のサブクラスであり入力デバイスから受け付けたデータを一時的に保持する入力ステーションクラス３４０、ステーションクラス３３０のサブクラスであり出力デバイスに送り出すデータを一時的に保持する出力ステーションクラス３５０、入出力デバイス間のデータに相当する荷物クラス３６０および入出力デバイス間の区間状態を管理する区間クラス３７０を有する。
【００８０】
次に、クラスとＵＭＬクラス図におけるクラスの記述方法について説明しておく。クラスとは、オブジェクト指向システムを構成するオブジェクトの設計図に相当する概念であり、オブジェクト内部に有する属性と処理を定義するとともに、継承関係や集約関係といった、他のクラスとの関係を定義するものである。
【００８１】
ＵＭＬクラス図におけるクラスは、３段の区画を有する矩形として記述される。それぞれの区画は、上から、クラス名を示す名前区画、クラスが有するデータ（属性）を示す属性区画およびクラスが有する処理（操作）を示す操作区画と呼ばれる。たとえば、ストリームクラス３１０を示す矩形の名前区画は、かかるクラスのクラス名が「ストリーム」であることを示し、属性区画は、かかるクラスが有する属性が、「状態」および「同期・並行」であることを示し、操作区画は、かかるクラスが有する操作が、「実行する（）」であることを示している。
【００８２】
このように、各クラスは、データ（属性）を所持するための属性区画と、かかる属性の書き込みおよび読み出しをおこなう処理（操作）を所持するための操作区画とを有している。これらのクラスは、プログラム（統合アプリケーション１１０）の一部として含まれるので、あらかじめＲＯＭ１２ａに格納されたこのプログラムが実行されると、各クラスはＲＡＭ１２ｂの所定領域に実体化され、属性区画に含まれる各データ（属性）がＲＡＭ１２ｂ上に展開される。したがって、クラスを実体化したオブジェクトは、ＲＡＭ１２ｂ上の各データ（属性）の書き込みおよび読み出しをすることが可能となる。
【００８３】
なお、属性や操作といったクラスの要素の左側に「−」記号を付した場合は、かかる要素は外部のクラスには非公開であることを示し、「＋」記号を付した場合は、かかる要素は外部のクラスに公開されていることを示す。また、操作については「記入する（）」のように「（）」記号を付することが通例であり、「（引数１，引数２）」のように、かかる操作に引き渡す引数を記述する場合もある。
【００８４】
次に、本実施の形態の特徴部分であるストリーム部１１３ａのクラスの概要について説明する。上述したように、ストリーム部１１３ａは、ストリームクラス３１０、キャリアクラス３２０、ステーションクラス３３０、入力ステーションクラス３４０、出力ステーションクラス３５０、荷物クラス３６０および区間クラス３７０を有する。以下では、まず、これらのクラスの概要について説明する。
【００８５】
ストリームクラス３１０は、入出力デバイス間のストリーム制御要求を受け付けるとともにデータの流れの状態を管理クラスであり、受け付けたストリーム制御要求に基づいてキャリアクラス３２０のオブジェクトを生成し、かかるオブジェクトを制御する処理をおこなう。具体的には、このストリームクラス３１０は、属性として、状態３１０ａおよび同期・並行３１０ｂを有し、操作として実行する（）３１０ｃを有する。なお、かかるストリームクラス３１０を実体化したストリームオブジェクト３１０Ａが生成されると、状態３１０ａおよび同期・並行３１０ｂはＲＡＭ１２ｂ上に展開されるので、これらのデータ（属性）の書き込みおよび読み出しをおこなうことが可能となる。
【００８６】
状態３１０ａは、入力デバイスから出力デバイスへのデータの流れ（ストリーム）の状態を保持する。たとえば、ストリームの状態が実行中状態である場合において、利用者が操作パネル４００を操作することにより、いったん指示したコピー処理を一時中断したり、出力先を記録紙からＨＤＤ２０１ｃに変更したりした場合には、ストリームの状態が休止中状態や変更中状態に遷移する。このように、状態３１０ａは、利用者の指示に起因して変化するストリーム状態をあらわす。
【００８７】
同期・並行３１０ｂは、ストリームオブジェクト３１０Ａが複数のキャリアオブジェクト３２０Ａを用いて一つのデータの流れを形成する場合において、各キャリアオブジェクト３２０Ａを同期させて動作させるのか、あるいは並行して動作させるのかの識別情報を保持する。ここで、複数のキャリアオブジェクト３２０Ａを「同期動作」させるとは、一つのキャリアオブジェクト３２０Ａの処理完了を待って、次のキャリアオブジェクト３２０Ａの処理を開始するよう指示することをあらわす。また、「並行動作」させるとは、一つのキャリアオブジェクト３２０Ａの処理完了を待たずして、次のキャリアオブジェクト３２０Ａに処理開始の指示を与えることをあらわす。
【００８８】
たとえば、スキャナ２０１ａから１０枚の紙原稿を読み取り、メール送信する場合には、１０枚すべての読み取り完了を待ってメール送信する必要があるので、各キャリアオブジェクト３２０Ａを「同期動作」させることになる。一方、１０枚の紙原稿を記録紙にコピーする場合には、１０枚すべての読み取り完了を待つ必要はなく、随時、記録紙への印刷処理をおこなえばよいので、各キャリアオブジェクト３２０Ａを「並行動作」させることになる。
【００８９】
実行する（）３１０ｃは、実行系サブシステム１１３からストリーム開始要求を受け付け、キャリアオブジェクト３２０Ａを生成するとともに、生成したキャリアオブジェクト３２０Ａにデータ運搬を指示する処理をおこなう。
【００９０】
キャリアクラス３２０は、入出力デバイス間のデータ運搬を担当するクラスである。このキャリアクラス３２０は、所定の大きさのデータを格納する荷物オブジェクト３６０Ａを、入力ステーションオブジェクト３４０Ａから受け取り、出力ステーションオブジェクト３５０Ａに渡す処理をおこなう。具体的には、このキャリアクラス３２０は、属性として、状態３２０ａおよび定数３２０ｂを有し、操作として、運搬する（）３２０ｃを有する。なお、かかるキャリアクラス３２０を実体化したキャリアオブジェクト３２０Ａが生成されると、状態３２０ａおよび定数３２０ｂはＲＡＭ１２ｂ上に展開されるので、これらのデータ（属性）の書き込みおよび読み出しをおこなうことが可能となる。
【００９１】
状態３２０ａは、現在のキャリアクラス３２０の処理状態を保持する。この状態には、たとえば、荷積中、運搬中および荷降中がある。荷積中状態とは、入力ステーションオブジェクト３４０Ａから荷物オブジェクト３６０Ａを受け取る処理中の状態をあらわし、運搬中状態とは、入力ステーションオブジェクト３４０Ａから荷物オブジェクト３６０Ａの受け取りを完了し、出力ステーションオブジェクト３５０Ａへかかる荷物オブジェクト３６０Ａを渡す前の状態をあらわし、荷降中状態とは、出力ステーションオブジェクト３５０Ａへかかる荷物オブジェクト３６０Ａを渡す処理中の状態をあらわす。このような状態を状態３２０ａが保持することにより、キャリアクラス３２０は、データの運搬状態を一元的に管理することができる。
【００９２】
定数３２０ｂは、キャリアオブジェクト３２０Ａが、入力ステーションオブジェクト３４０Ａから出力ステーションオブジェクト３５０Ａへのデータ運搬を開始する閾値である「受取荷物の上限数」を保持する。たとえば、４枚の紙原稿を読み込んで、１枚の記録紙に印刷する集約コピーが指示された場合において、１枚の紙原稿の読み取りデータが、１個の荷物オブジェクト３６０Ａに格納されるのであれば、定数３２０ｂは、「４」という数値データを保持する。
【００９３】
キャリアオブジェクト３２０Ａは、運搬する（）３２０ｃが他のオブジェクトから呼び出され、その後、入力ステーションオブジェクト３４０Ａの指示により生成された荷物オブジェクト３６０Ａを受け取り、受け取った荷物オブジェクト３６０Ａの個数が、この定数３２０ｂに保持される値に達した場合に、出力ステーションオブジェクト３５０Ａへのデータ運搬を開始する。すなわち、「運搬する（）３２０ｃが呼び出されたこと」および「受取った荷物オブジェクト３６０Ａの個数が定数３２０ｂの値に達したこと」の２つの条件がそろった場合に、キャリアオブジェクト３２０Ａは、データ運搬を開始する。
【００９４】
運搬する（）３２０ｃは、ストリームオブジェクト３１０Ａから呼び出され、入力ステーションオブジェクト３４０Ａおよび出力ステーションオブジェクト３５０Ａに、データ生成の開始およびデータ受取りの準備を指示する。そして、入力ステーションオブジェクト３４０Ａの指示により生成された荷物オブジェクト３６０Ａの個数が、上述した定数３２０ｂに保持される値に達するまでデータの運搬を待ち合わせる。
【００９５】
そして、荷物オブジェクト３６０Ａの個数が、かかる値に達したならば、各荷物オブジェクト３６０Ａを出力ステーションオブジェクト３５０Ａに運搬する処理をおこなう。具体的には、各荷物オブジェクト３６０Ａにデータ加工を指示し、データ加工が完了した荷物オブジェクト３６０Ａを出力ステーションオブジェクト３５０Ａに渡す処理をおこなう。
【００９６】
ステーションクラス３３０は、各入出力デバイスが取り扱うデータを一時的に保持して速度調整をおこなうクラスである。このステーションクラス３３０は、入力ステーションクラス３４０および出力ステーションクラス３５０の上位クラス（スーパークラス）であり、ステーションクラス３３０自体が実体化されることはないが、ステーションクラス３３０の属性および操作は、下位クラス（サブクラス）である入力ステーションクラス３４０および出力ステーションクラス３５０に継承される。
【００９７】
最大格納数３３０ａは、ステーションクラス３３０が保持可能な荷物オブジェクト３６０Ａの最大数を保持する。荷物オブジェクト３６０ａの個数が、この最大格納数３３０ａが保持する値を上回ると、ステーションクラス３３０は、実行制御部１１３ｂに対してエラー通知をおこなう。なお、上述したように、この属性（最大格納数３３０ａ）は、サブクラスである入力ステーションクラス３４０および出力ステーションクラス３５０に継承される。
【００９８】
スタート（）３３０ｂは、ステーションクラス３３０が何らかの処理を開始するためのトリガーを与えるための処理をおこなう。このスタート（）３３０ｂは、サブクラスである入力ステーションクラス３４０および出力ステーションクラス３５０に継承され、各サブクラスにおける具体的な処理によりオーバーライド（override）される。なお、かかる具体的な処理の説明については、後述する入力ステーションクラス３４０および出力ステーションクラス３５０のクラス説明においておこなう。
【００９９】
入力ステーションクラス３４０は、ステーションクラス３３０のサブクラスであり入力デバイスから受け付けたデータを一時的に保持する処理をおこなうクラスである。この入力ステーションクラス３４０は、キャリアクラス３２０からの指示に基づき、荷物オブジェクト３６０Ａの生成を開始するとともに、かかる荷物オブジェクト３６０Ａを一時的に保持することにより、異なる処理速度を有する入力デバイスを一律に取り扱うための入力バッファとしての役割を担うクラスである。
【０１００】
具体的には、この入力ステーションクラス３４０は、属性として、状態３４０ａを有し、操作として、取出す（）３４０ｂを有するとともに、ステーションクラス３３０から、属性として、最大格納数３３０ａを継承し、操作として、スタート（）３３０ｂを継承する。なお、かかる入力ステーションクラス３４０を実体化した入力ステーションオブジェクト３４０Ａが生成されると、状態３４０ａおよび最大格納数３３０ａはＲＡＭ１２ｂ上に展開されるので、これらのデータ（属性）の書き込みおよび読み出しをおこなうことが可能となる。
【０１０１】
状態３４０ａは、入力ステーションクラス３４０に対応する入力デバイスの現在の状態を保持する。たとえば、かかる状態には、データ生成中の状態、何もしていない状態、要求を受け付けることができない状態などの状態がある。また、ステーションクラス３３０から継承した最大格納数３３０ａは、入力ステーションクラス３４０が保持可能な荷物オブジェクト３６０Ａの最大数を保持する。
【０１０２】
取出す（）３４０ｂは、キャリアクラス３２０から呼び出され、入力ステーションクラス３４０の指示により生成された荷物オブジェクト３６０Ａを、かかるキャリアクラス３２０に返す処理をおこなう。また、ステーションクラス３３０から継承したスタート（）３３０ｂは、入力ステーションクラス３４０に、荷物オブジェクト３６０Ａの生成の開始指示をおこなう。
【０１０３】
出力ステーションクラス３５０は、ステーションクラス３３０のサブクラスであり、出力デバイスに送り出すデータを一時的に保持する処理をおこなうクラスである。この出力ステーションクラス３５０は、キャリアクラス３２０からの指示に基づき、荷物オブジェクト３６０Ａを受け付ける準備をおこなうとともに、かかる荷物オブジェクト３６０Ａを一時的に保持することにより、異なる処理速度を有する出力デバイスを一律に取り扱うための出力バッファとしての役割を担うクラスである。
【０１０４】
具体的には、この出力ステーションクラス３５０は、属性として、状態３５０ａを有し、操作として、格納する（）３５０ｂを有するとともに、ステーションクラス３３０から、属性として、最大格納数３３０ａを継承し、操作として、スタート（）３３０ｂを継承する。なお、かかる出力ステーションクラス３５０を実体化した出力ステーションオブジェクト３５０Ａが生成されると、状態３５０ａおよび最大格納数３３０ａはＲＡＭ１２ｂ上に展開されるので、これらのデータ（属性）の書き込みおよび読み出しをおこなうことが可能となる。
【０１０５】
状態３５０ａは、出力ステーションクラス３５０に対応する出力デバイスの現在の状態を保持する。たとえば、かかる状態には、データ消費中の状態、何もしていない状態、あるいは、要求を受け付けることができない状態などの状態がある。また、ステーションクラス３３０から継承した最大格納数３３０ａは、出力ステーションクラス３５０が保持することが可能な荷物オブジェクト３６０Ａの最大数を保持する。ここで、「消費中」とは、出力ステーションクラス３５０が、出力デバイスに対し荷物オブジェクト３６０Ａを渡す処理中であることをあらわす。
【０１０６】
格納する（）３５０ｂは、キャリアクラス３２０から呼び出され、出力ステーションクラス３５０が、荷物オブジェクト３６０Ａを消費する処理をおこなう。また、ステーションクラス３３０から継承したスタート（）３３０ｂは、出力ステーションクラス３５０に、荷物オブジェクト３６０Ａの受け入れ準備を開始する指示をおこなう。
【０１０７】
荷物クラス３６０は、入力デバイスから出力デバイスへ流れるデータに対応するクラスである。具体的には、この荷物クラス３６０は、属性として、コンバート３６０ａを有し、操作として、加工する（）３６０ｂを有する。なお、かかる荷物クラス３６０を実体化した荷物オブジェクト３６０Ａが生成されると、コンバート３６０ａはＲＡＭ１２ｂ上に展開されるので、このデータ（属性）の書き込みおよび読み出しをおこなうことが可能となる。また、この荷物オブジェクト３６０Ａは、各入力デバイスに対応する入力ステーションオブジェクト３４０Ａの指示により生成され、キャリアオブジェクト３２０Ａにより運搬されて、各出力デバイスに対応する出力ステーションオブジェクト３５０Ａにより消費されることになる。
【０１０８】
コンバート３６０ａは、入出力デバイス間のデータ単位の差異あるいはデータ形式の差異のために、データ単位あるいはデータ形式の変換処理が必要であるか否かをあらわす情報を保持する。また、加工する（）３６０ｂは、キャリアオブジェクト３２０Ａから呼び出され、データ単位あるいはデータ形式の変換処理をおこなう。ここで、データ単位の変換処理とは、たとえば、入力原稿１枚に相当する画像データを基本単位とするデータ単位から、かかる画像データを１０ブロックに分割した各ブロックを基本単位とするデータ単位への変換処理をさす。また、データ形式の変換処理とは、たとえば、ＴＩＦＦ(Tagged Image File Format)形式の画像フォーマットをＰＤＦ（Portable Document Format）形式に変換する処理をさす。
【０１０９】
なお、キャリアクラス３２０Ａから、加工する（）３６０ｂが呼び出された場合であっても、コンバート３６０ａが保持する情報が、データ単位およびデータ形式の変換が不要であることを示していれば、かかる変換はおこなわれない。また、コンバート３６０ａが保持する情報にしたがって、データ単位のみの変換またはデータ形式のみの変換がおこなわれる場合もある。
【０１１０】
区間クラス３７０は、入出力デバイス間の区間状態を管理するクラスである。ここで、区間状態とは、各入力デバイスに対応する入力ステーションオブジェクト３４０Ａを始点とし、各出力デバイスに対応する出力ステーションオブジェクト３５０Ａを終点とした場合に、始点および終点の組合せからなる各区間の使用可否をあらわす情報である。すなわち、始点および終点のいずれもが使用可能であれば、かかる区間は使用可能であり、始点あるいは終点のいずれかが使用不可能であれば、かかる区間は使用不可能となる。
【０１１１】
この区間クラス３７０は、具体的には、属性として、区間状態３７０ａを有し、操作として、使用する（）３７０ｂを有する。なお、かかる区間クラス３７０を実体化した区間オブジェクト３７０Ａが生成されると、区間状態３７０ａはＲＡＭ１２ｂ上に展開されるので、このデータ（属性）の書き込みおよび読み出しをおこなうことが可能となる。また、区間オブジェクト３７０ｂは、上述した始点および終点の組合せの数と同数生成される。
【０１１２】
区間状態３７０ａは、上述した各区間が使用可能であるか否かの情報を保持する。また、使用する（）３７０ｂは、キャリアオブジェクト３２０Ａから呼び出され、区間状態３７０ａが保持する区間使用可否の情報を、かかるキャリアオブジェクト３２０Ａに報告する処理をおこなう。たとえば、キャリアオブジェクト３２０Ａから呼び出された際に、区間状態３７０ａが保持する情報が「使用可能」であったならば、使用する（）３７０ｂは、かかる区間が使用可能である旨を報告する。そして、区間状態３７０ａが保持する状態が「使用不可能」に遷移したならば、かかる区間が使用不可能である旨を報告する。
【０１１３】
次に、図１０に示した各クラス間の関係について説明する。同図に示したように、ＵＭＬクラス図においては、クラス間に何らかの関係がある場合には、それらのクラスを表す矩形の間が直線で結ばれる。この直線の両端付近の文字はクラスのロールを表し、数字はクラスの多重度を表す。ここで、ロールとは、直線で結ばれた他方のクラスに対する当該クラスの役割のことであり、多重度とは、直線で結ばれた他方のクラスのオブジェクトと関連付けられて生成されるオブジェクトの数のことである。
【０１１４】
たとえば、ストリームクラス３１０からみたキャリアクラス３２０の役割は「実行者」であり、キャリアクラス３２０からみたストリームクラス３１０の役割は「報告先」である。また、ストリームクラス３１０の多重度は「１」であり、キャリアクラス３２０の多重度は「０．．ｎ」である。ここで、「０．．ｎ」は、かかるキャリアクラス３２０の多重度が、０からｎの範囲であることを示している。なお、かかる多重度の上限数はｎ個としているものの、当然に、ハードウェア仕様などによる制限を受ける。
【０１１５】
まず、ストリームクラス３１０とキャリアクラス３２０とのクラス関係について説明する。ストリームクラス３１０は、複数のキャリアクラス３２０を管理して、一つのデータの流れを形成する。また、各キャリアクラス３２０は、データの運搬を実行するとともに運搬状態をストリームクラス３１０に報告する。したがって、ストリームクラス３１０とキャリアクラス３２０とは、「報告先」と「実行者」という関係をなしている。
【０１１６】
ここで、ストリームクラス３１０側に記された白抜きのひし形は集約関係をあらわしている。集約関係とは、あるクラスが別のクラスの一部として含まれる関係のことである。具体的には、１つのデータの流れ（ストリーム）は、複数のキャリアクラス３２０から形成され、ストリームクラス３１０は、１つのストリームを管理するので、１つのストリームを形成するキャリアクラス３２０は、ストリームクラス３１０に集約される関係を有する。
【０１１７】
また、ストリームオブジェクト３１０Ａは、実行系サブシステム１１３からのストリーム開始要求ごとに生成され、１個のストリームオブジェクト３１０Ａは、０個以上複数のキャリアオブジェクト３２０Ａを管理するので、かかるキャリアオブジェクト３２０Ａは、１個のストリームオブジェクト３１０Ａに対して０個以上ｎ個以下の範囲で存在する。
【０１１８】
次に、キャリアクラス３２０とステーションクラス３３０とのクラス関係について説明する。キャリアクラス３２０は、１個の入力ステーションクラス３３０から１個の出力ステーション３４０へ荷物を運搬するコンテナの役割を有するため、入力ステーション３３０とキャリアクラス３２０とは、「入力元」と「コンテナ」の関係をなしており、キャリアクラス３２０と出力ステーション３５０とは、「コンテナ」と「出力先」の関係をなしている。
【０１１９】
また、１個のキャリアオブジェクト３２０Ａは、１個の入力ステーションオブジェクト３４０Ａおよび１個の出力ステーションオブジェクト３５０Ａと関連づけられるので、入力ステーションオブジェクト３４０Ａとキャリアオブジェクト３２０Ａとは、１対１の関係を有するとともに、キャリアオブジェクト３２０Ａと出力ステーションオブジェクト３５０Ａとの関係も１対１となる。
【０１２０】
次に、キャリアクラス３２０と荷物クラス３６０とのクラス関係について説明する。キャリアクラス３２０は、入力ステーションクラス３４０に格納された荷物クラス３６０を受け取って一時的に格納し、格納した荷物クラス３６０を出力ステーションクラス３５０へ運搬する。したがって、キャリアクラス３２０と荷物クラス３６０とは、「一時的格納先」と「運搬対象」の関係をなしている。また、荷物クラス３６０は、キャリアクラス３２０に集約される関係を有する。
【０１２１】
１個のキャリアオブジェクト３２０Ａは、複数の荷物オブジェクト３６０Ａを格納して運搬する場合があり、また、荷物オブジェクト３６０Ａが未だ生成されていない場合には、格納対象となる荷物オブジェクト３６０Ａは存在しない。したがって、荷物オブジェクト３６０Ａは、キャリアオブジェクト３２０Ａに対して０個以上ｎ個以下の範囲で存在する。また、各荷物オブジェクト３６０Ａには、格納先となるキャリアオブジェクト３２０Ａが必ず１個存在する。
【０１２２】
次に、ステーションクラス３３０と荷物クラス３６０とのクラス関係について説明する。ステーションクラス３３０は、運搬対象となる荷物クラス３６０を格納し、格納した荷物クラス３６０はキャリアクラス３２０により運搬される。したがって、ステーションクラス３３０と荷物クラス３６０とは、「格納先」と「運搬対象」の関係をなしている。なお、両クラスの多重度関係および集約関係は、上述したキャリアクラス３２０と荷物クラス３６０の関係と同様である。
【０１２３】
次に、ステーションクラス３３０と入力ステーションクラス３４０および出力ステーションクラス３５０とのクラス関係について説明する。ステーションクラス３３０は、入力ステーションクラス３４０および出力ステーションクラス３５０の上位クラス（スーパークラス）であり、入力ステーションクラス３４０および出力ステーションクラス３５０は、ステーションクラス３３０の属性および操作を継承する。
【０１２４】
最後に、キャリアクラス３２０と区間クラス３７０とのクラス関係について説明する。データの運搬を担当するキャリアクラス３２０は、区間クラス３７０が管理する各経路（区間）上を移動するので、キャリアクラス３２０と区間クラス３７０とは、「移動体」と「経路」の関係をなす。
【０１２５】
また、キャリアを同期動作させる場合は、同時に複数のキャリアオブジェクト３２０Ａが存在することはなく、動作中のキャリアオブジェクト３２０Ａが最大で１個のみ存在する。一方、キャリアを並行動作させる場合は、同時に複数のキャリアオブジェクト３２０Ａが存在する。そして、キャリアオブジェクト３２０Ａが未だ生成されていない場合には、かかる経路にはキャリアオブジェクト３２０Ａが存在しない。したがって、キャリアオブジェクト３２０Ａは、区間オブジェクト３７０Ａに対して０個以上ｎ個以下の範囲で存在する。一方、区間オブジェクト３７０Ａは、各キャリアオブジェクト３２０Ａに対し必ず１個存在する。
【０１２６】
このように、ストリームクラス３１０、キャリアクラス３２０、ステーションクラス３３０、入力ステーションクラス３４０、出力ステーションクラス３５０、荷物クラス３６０および区間クラス３７０の各オブジェクトは、相互に関連し合い、協調して、ストリーム部１１３ａに必要な機能を実現している。
【０１２７】
次に、図１０に示した各クラスの操作の実行手順について例をあげて説明する。図１１は、ストリーム部１１３ａが実行指示を受け付けた際の操作の実行手順を示すＵＭＬシーケンス図である。
【０１２８】
ここで、ＵＭＬシーケンス図について説明しておく。図１１の上部に並んだ矩形は、それぞれがクラスのオブジェクトを示している。各オブジェクトから下方に伸びた線は、各オブジェクトが生存していることを示す線（ライフライン）であり、上方から下方に向かって時間が流れているものとみなされる。この線上に存在する細長い矩形は、当該のオブジェクトが実際に活動している期間（活性期間）を示す。
【０１２９】
各ライフラインの間を結ぶ横向きの矢印は、オブジェクトに含まれるの操作の実行を示す。具体的には、この矢印は、矢印の元のオブジェクトが、矢印の先のオブジェクトに含まれる操作を呼び出すことを示す。また、矢印が自分自身のオブジェクトを指している場合は、オブジェクトが自分に含まれる操作を自身で呼び出すことを意味する。
【０１３０】
利用者が複合機１の操作パネル４００を操作してコピー機能などの実行を指示すると、図１１に示すように、サービス提供者（実行系サブシステム１１３の実行制御部１１３ｂ）は、ストリーム開始要求をおこなうために、ストリーム部１１３ａのストリームオブジェクト３１０Ａの実行する（）３１０ａを呼び出す（ステップＳ１０１）。実行する（）３１０ａを呼び出されたストリームオブジェクト３１０Ａは、該当する区間オブジェクト３７０Ａに区間状態を問い合わせるなどして、データを流すことが可能か否かを判定する。
【０１３１】
そして、ストリームオブジェクト３１０Ａは、データを流すことが可能であると判定したならば、キャリアオブジェクト３２０Ａを生成するとともに、このキャリアオブジェクト３２０Ａの運搬する（）３２０ｃを呼び出して、データの運搬を指示する（ステップＳ１０２）。なお、データを流すことが不可能であると判定した場合には、エラー通知をおこなうなどして処理を終了する。
【０１３２】
運搬する（）３２０ｃを呼び出されたキャリアオブジェクト３２０Ａは、入力ステーションオブジェクト３４０Ａのスタート（）３３０ｂを呼び出すことにより、データ生成の開始指示をおこなうとともに（ステップＳ１０３）、出力ステーションオブジェクト３５０Ａのスタート（）３３０ｂを呼び出して、データ受け入れの準備を開始するよう指示する（ステップＳ１０４）。
【０１３３】
データ生成の開始指示を受け付けた入力ステーションオブジェクト３４０Ａは、対応する入力デバイス固有のデータ生成手順によりデータ生成を開始させる。たとえば、対応する入力デバイスがスキャナ２０１ａであれば、原稿を読み込んでデータを生成する。また、対応する入力デバイスがＨＤＤ２０１ｃであれば、ファイルをオープンしてファイル中のデータをコピーすることによりデータを生成する。なお、かかるデータの生成は、実際には荷物オブジェクト３６０Ａを生成することによりおこなわれる。
【０１３４】
生成された各荷物オブジェクト３６０Ａは、所定の条件を満たすとキャリアオブジェクト３２０Ａに対し、荷物オブジェクト３６０Ａが生成された旨の報告をおこなう。かかる所定の条件は、入力ステーションオブジェクト３４０Ａに対応する入力デバイスにより異なるものとすることができる。たとえば、ある入力デバイスでは、かかる条件を「１０個の荷物オブジェクト３６０Ａが生成されたこと」とし、かかる入力デバイスの１／１０の処理速度の入力デバイスでは、かかる条件を「１個の荷物オブジェクト３６０Ａが生成されたこと」とすれば、キャリアオブジェクト３２０Ａは、入力デバイスの処理速度の影響を受けることなく、荷物生成の報告を受信することができる。このようなバッファリング機能により、ストリーム部１１３ａは、入出力デバイス間の処理速度の差異を吸収する。
【０１３５】
このようにして、キャリアオブジェクト３２０Ａが、荷物生成の報告を受信したならば（ステップＳ１０５）、キャリアオブジェクト３２０Ａは、入力ステーションオブジェクト３４０Ａの取出す（）３４０ｂを呼び出す（ステップＳ１０６）。そして、かかる操作の戻りとして、生成された荷物オブジェクト３６０Ａを受け取る。なお、上述したように、荷物生成の報告のタイミングは入力デバイスの種類に応じて異なるので、キャリアオブジェクト３２０Ａが受け取る荷物オブジェクト３６０Ａの個数も異なることになる。たとえば、５個の荷物オブジェクト３６０Ａが生成された際に、かかる報告を受けた場合には、キャリアオブジェクト３２０Ａは、５個の荷物オブジェクト３６０Ａを受け取ることになる。
【０１３６】
そして、キャリアオブジェクト３２０Ａが受け取った荷物数が、定数３２０ｂに保持される値を上回ったならば（ステップＳ１０７）、キャリアオブジェクト３２０Ａは、保持しているすべての荷物オブジェクト３６０Ａの加工する（）３６０Ａを呼び出すことにより、データ単位あるいはデータ形式の変換処理を指示する（ステップＳ１０８）。なお、上述したように、この加工する（）３６０Ａは、変換処理が必要でない場合には、変換処理をおこなわない。このように、キャリアオブジェクト３２０Ａは、荷物オブジェクト３６０Ａにデータ単位あるいはデータ形式の変換処理を指示し、指示された各荷物オブジェクト３６０Ａが変換処理を実行することとしたので、ストリーム部１１３ａは、入出力デバイス間で処理対象となるデータの単位や形式が異なる場合であっても、データ単位あるいはデータ形式の差異を吸収することができる。
【０１３７】
つづいて、各荷物オブジェクト３６０Ａのデータ変換処理が完了したならば、キャリアオブジェクト３２０Ａは、出力ステーションオブジェクト３５０Ａの格納する（）３５０ｂを呼び出して、データ変換処理が完了した荷物オブジェクト３６０Ａを出力ステーションオブジェクト３５０Ａに引き渡す（ステップＳ１０９）。そして、出力ステーションオブジェクト３５０Ａは、引き渡された荷物オブジェクト３６０Ａの消費を開始する。
【０１３８】
上述してきたように、本実施の形態では、入力デバイスから出力デバイスへのデータの流れを制御するストリーム部を構築するにあたり、各入力デバイスに対応する入力バッファと、各出力デバイスに対応する出力バッファと、入力バッファから出力バッファへのデータ運搬をおこなうキャリアとを有する構成としたので、入力デバイスおよび出力デバイスの処理速度の差異、取り扱うデータ形式の差異および取り扱うデータ単位の差異を吸収でき各入出力デバイスを均一に取り扱うストリーム制御処理を提供することができる。さらに、オブジェクト指向設計により、かかるストリーム部の仕組みを構築し、鉄道モデルの隠喩（メタファ）によりオブジェクトモデリングをおこない、ストリームクラス、キャリアクラス、ステーションクラス、入力ステーションクラス、出力ステーションクラス、荷物クラスおよび区間クラスを用いることにより、かかるストリーム部を実現したので、ソフトウェア開発者やソフトウェア保守要員が、ストリーム部の構成と役割を容易に把握することができるとともに、効率的かつ信頼性の高いストリーム制御処理をおこなうことができる。
【０１３９】
なお、本実施の形態の画像形成装置で実行されるストリーム制御プログラムは、インストール可能な形式または実行可能な形式のファイルでＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ（CD Recordable）、ＤＶＤ（Digital Versatile Disk）などのコンピュータで読み取り可能な記録媒体に記録して提供するよう構成してもよい。この場合、ＣＰＵ１１が上記記憶媒体から、ストリーム制御プログラムを読み出してＭＥＭ−Ｐ１２上にロードすることで、画像形成装置に、上述した各ステップ、各手段または各部を実現させる。
【０１４０】
また、ストリーム制御プログラムを、インターネットなどのネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するよう構成してもよい。さらに、かかるストリーム制御プログラムをインターネットなどのネットワーク経由で提供または配布するようにしてもよい。
【産業上の利用可能性】
【０１４１】
以上のように、本発明にかかるストリーム制御プログラムおよび画像形成装置は、入力デバイスから出力デバイスに流れるデータのストリーム制御処理をおこなう各種装置のストリーム制御に有用であり、特に、画像形成装置のストリーム制御に適している。
【図面の簡単な説明】
【０１４２】
【図１】複合機をとりまくネットワーク環境を示すネットワーク図である。
【図２】複合機のハードウェアを説明するための説明図である。
【図３】複合機におけるハードウェアおよびソフトウェアの階層構造を説明するための説明図である。
【図４】統合アプリケーションの構成を説明するための説明図である。
【図５】統合アプリケーションの構成を表したＵＭＬクラス図である。
【図６】複合機の操作パネルを説明するための説明図である。
【図７】ストリーム部の処理概要を説明するための説明図である。
【図８】ストリーム部のオブジェクトモデリングの概要を説明するための説明図である。
【図９】ストリーム部のオブジェクト構成の概要を説明するための説明図である。
【図１０】ストリーム部のクラス構成を示すＵＭＬクラス図である。
【図１１】ストリーム部が実行指示を受け付けた際の操作の実行手順を示すＵＭＬシーケンス図である。
【図１２】複合機に搭載されるソフトウェア構成の変遷を示す説明図である。
【図１３】従来の複合機におけるハードウェアおよびソフトウェアの階層構造を説明するための説明図である。
【符号の説明】
【０１４３】
１  画像形成装置（複合機）
１０  コントローラ
１１  ＣＰＵ
１２  ＭＥＭ−Ｐ
１２ａ  ＲＯＭ
１２ｂ  ＲＡＭ
１３  ＮＢ
１４  ＳＢ
１５  ＡＧＰ
１６  ＡＳＩＣ
１７  ＭＥＭ−Ｃ
１８  ＨＤＤ
２０  キーボード（オペレーションパネル）
３０  ＦＣＵ
４０  ＵＳＢ
５０  ＩＥＥＥ１３９４
６０  エンジン部（Engine）
１００  ソフトウェア
１０１  アプリケーション層
１０２  サービス層
１０２ａ  スキャナ制御部
１０２ｂ  プロッタ制御部
１０２ｃ  蓄積制御部
１０２ｄ  配信／メール送受信制御部
１０２ｅ  ＦＡＸ送受信制御部
１０２ｆ  ネットワーク通信制御部
１０２ｇ  その他の制御部
１０３  オペレーティングシステム
１１０  統合アプリケーション
１１１  操作系サブシステム
１１２  管理系サブシステム
１１３  実行系サブシステム
１１３ａ  ストリーム部
１１３ｂ  実行制御部
１２０  コピーアプリケーション
１３０  スキャナアプリケーション
１４０  ファックスアプリケーション
１５０  プリンタアプリケーション
２００  ハードウェア
２０１  ハードウェアリソース
２０１ａ  スキャナ
２０１ｂ  プロッタ
２０１ｃ  ＨＤＤ
２０１ｄ  ネットワーク
２０１ｅ  その他のリソース
３１０  ストリームクラス
３１０Ａ  ストリームオブジェクト
３１０ａ  状態
３１０ｂ  同期・並行
３１０ｃ  実行する（）
３２０  キャリアクラス（キャリア手段の一例）
３２０Ａ  キャリアオブジェクト（キャリア手段の一例）
３２０ａ  状態
３２０ｂ  定数
３２０ｃ  運搬する（）
３３０  ステーションクラス（ステーション手段の一例）
３３０Ａ  ステーションオブジェクト（ステーション手段の一例）
３３０ａ  最大格納数
３３０ｂ  スタート（）
３４０  入力ステーションクラス（入力ステーション手段の一例）
３４０Ａ  入力ステーションオブジェクト（入力ステーション手段の一例）
３４０ａ  状態
３４０ｂ  取出す（）
３５０  出力ステーションクラス（出力ステーション手段の一例）
３５０Ａ  出力ステーションオブジェクト（出力ステーション手段の一例）
３５０ａ  状態
３５０ｂ  格納する（）
３６０  荷物クラス（荷物手段の一例）
３６０Ａ  荷物オブジェクト（荷物手段の一例）
３６０ａ  コンバート
３６０ｂ  加工する（）
３７０  区間クラス（区間手段の一例）
３７０Ａ  区間オブジェクト（区間手段の一例）
３７０ａ  区間状態
３７０ｂ  使用する（）
４００  操作パネル
４０１  初期設定キー
４０２  コピーキー
４０３  コピーサーバーキー
４０４  プリンタキー
４０５  送信キー
４０６  テンキー
４０７  クリア／ストップキー
４０８  スタートキー
４０９  予熱キー
４１０  リセットキー
４２０  液晶タッチパネル
５０１  サービス層分離前アプリケーション
５０２  サービス層分離後アプリケーション
５０３  共通ルーチン分離アプリケーション
５０４  オブジェクト指向アプリケーション
【図１】
2006085492.tif 000003
【図２】
2006085492.tif 000004
【図３】
2006085492.tif 000005
【図４】
2006085492.tif 000006
【図５】
2006085492.tif 000007
【図６】
2006085492.tif 000008
【図７】
2006085492.tif 000009
【図８】
2006085492.tif 000010
【図９】
2006085492.tif 000011
【図１０】
2006085492.tif 000012
【図１１】
2006085492.tif 000013
【図１２】
2006085492.tif 000014
【図１３】
2006085492.tif 000015