(57)【特許請求の範囲】
【請求項１】
ユーザインタフェースを設計するユーザインタフェース設計装置によって生成されたコードに基づいて、ユーザの操作内容を実行するユーザインタフェース実行装置であって、
前記コードと前記ユーザの操作内容とに基づいて、前記ユーザインタフェース実行装置の状態遷移を行う状態遷移部と、
前記ユーザインタフェース設計装置において、前記ユーザインタフェース実行装置の状態と静的に関連付けて定義された前記コードに含まれる全てのデータ取得インタフェースに基づいて生成されたデータの先読み要求を、データ提供部に要求するデータ要求部と、
前記データ要求部の前記要求に対する応答として前記データ提供部から取得した前記データを記憶するデータ記憶部と、
を備え、
前記コードは、前記ユーザインタフェース設計装置によって設計された、前記ユーザインタフェース実行装置と前記データ提供部との間のインタフェースを定義したインタフェース定義と、前記状態遷移を定義した状態遷移定義とから生成され、
前記状態遷移部は、前記状態遷移の実行前に、遷移前の状態で使用する前記データ取得インタフェースと、遷移後の状態で使用する前記データ取得インタフェースとの差異に基づいて、先読みするデータを選択することを特徴とする、ユーザインタフェース実行装置。
【請求項２】
前記データ要求部は、前記データ提供部に要求した前記先読み要求が不要になる状態に遷移する時に、遷移前の状態で使用する前記データ取得インタフェースと、遷移後の状態で使用する前記データ取得インタフェースとの差異に基づいて、データの先読み破棄要求を前記データ提供部に要求することを特徴とする、請求項１に記載のユーザインタフェース実行装置。
【請求項３】
前記データ要求部を複数備え、
前記データ記憶部は、前記先読み要求時にデータの要求の呼出し元を識別する識別子を各前記データ要求部に対応付けて記憶し、
一の前記データ要求部は、前記データ記憶部に他の呼出し元が存在しない場合において、前記先読み破棄要求を前記データ提供部に要求することを特徴とする、請求項２に記載のユーザインタフェース実行装置。
【請求項４】
前記データ記憶部は、電源断後で不変なデータであるか否かを示す種別を記憶することを特徴とする、請求項１から３のいずれか１項に記載のユーザインタフェース実行装置。
【請求項５】
ユーザインタフェースを設計するユーザインタフェース設計装置であって、
前記ユーザインタフェースの状態遷移を定義した状態遷移定義を定義する状態遷移定義部と、
前記ユーザインタフェースを実行するユーザインタフェース実行装置と、当該ユーザインタフェース実行装置にデータを提供するデータ提供部との間のインタフェースを定義したインタフェース定義を定義するインタフェース定義部と、
前記状態遷移定義部にて定義された各状態において利用する可能性があるインタフェースの対応を定義した対応定義を含む前記状態遷移定義と、前記インタフェース定義部にて定義された前記インタフェース定義とに基づいて、前記データ提供部に対して前記データの先読み要求および先読み破棄要求の双方を実行するコードを機械的に生成する先読み生成部と、
を備える、ユーザインタフェース設計装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、組み込み機器のユーザインタフェース（user interface：UI）を設計するユーザインタフェース設計装置、および当該ユーザインタフェース設計装置によって生成されたコードに基づいてユーザインタフェースを実行するユーザインタフェース実行装置に関する。
【背景技術】
【０００２】
従来のユーザインタフェース実行装置は、読み込みに時間を要するコンテンツを、読み込みに時間を要しない記憶領域に予め記憶しておくことによって、ユーザ操作時におけるコンテンツの読み込みの応答性を高くし、読み込みに時間を要することに起因するユーザのストレスを軽減している。以下では、コンテンツ等の情報を、読み込みに時間を要しない記憶領域に予め記憶しておくことを、先読みという。コンテンツの全てのデータを先読みするためには十分に大きな記憶領域を確保する必要があるが、一般的に記憶領域は有限であるため、コンテンツの全てのデータを記憶する記憶領域を確保することは現実的ではない。従って、先読みするデータの選択、および先読み開始のタイミングの判断に基づいて、記憶領域にデータを先読みする必要がある。【０００３】
従来では、フォアグラウンドのジョブが実行されていない状態であると判断すると、表示用データの先読みを実行する技術が開示されている（例えば、特許文献１参照）。また、ユーザによる操作入力の種類とデータの読み出し条件との関連を示す規則情報を予め定義しておき、ユーザによる操作入力時に規則情報を参照して先読みするデータを決定する技術が開示されている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−１４１８６７号公報
【特許文献２】特開２０１０−２８２４３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来のユーザインタフェース実行装置では、ユーザインタフェースの実行時に先読みするデータを動的に判断し、先読みしたデータを破棄するタイミングを規定していない。従って、先読みしたデータを保持する記憶領域の最大サイズを設計時に予測することが困難であるという問題があった。また、先読みしたデータが先読み後に変更される場合について考慮されていないため、先読み後にデータが変更された場合であっても、先読みした変更前の古いデータをユーザに提示してしまう可能性があるという問題があった。【０００６】
本発明は、このような問題を解決するためになされたものであり、先読みするデータを記憶する記憶領域の最大サイズをユーザインタフェースの設計時に予測可能であり、かつ先読みしたデータが先読み後に更新された場合であっても更新後のデータをユーザに提示することが可能なユーザインタフェース実行装置およびユーザインタフェース設計装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記の課題を解決するために、本発明によるユーザインタフェース実行装置は、ユーザインタフェースを設計するユーザインタフェース設計装置によって生成されたコードに基づいて、ユーザの操作内容を実行するユーザインタフェース実行装置であって、コードとユーザの操作内容とに基づいて、ユーザインタフェース実行装置の状態遷移を行う状態遷移部と、ユーザインタフェース設計装置において、ユーザインタフェース実行装置の状態と静的に関連付けて定義されたコードに含まれる全てのデータ取得インタフェースに基づいて生成されたデータの先読み要求を、データ提供部に要求するデータ要求部と、データ要求部の要求に対する応答としてデータ提供部から取得したデータを記憶するデータ記憶部とを備え、コードは、ユーザインタフェース設計装置によって設計された、ユーザインタフェース実行装置とデータ提供部との間のインタフェースを定義したインタフェース定義と、状態遷移を定義した状態遷移定義とから生成され、状態遷移部は、状態遷移の実行前に、遷移前の状態で使用するデータ取得インタフェースと、遷移後の状態で使用するデータ取得インタフェースとの差異に基づいて、先読みするデータを選択することを特徴とする。
【０００８】
また、本発明によるユーザインタフェース設計装置は、ユーザインタフェースを設計するユーザインタフェース設計装置であって、ユーザインタフェースの状態遷移を定義した状態遷移定義を定義する状態遷移定義部と、ユーザインタフェースを実行するユーザインタフェース実行装置と、当該ユーザインタフェース実行装置にデータを提供するデータ提供部との間のインタフェースを定義したインタフェース定義を定義するインタフェース定義部と、状態遷移定義部にて定義された各状態において利用する可能性があるインタフェースの対応を定義した対応定義を含む状態遷移定義と、インタフェース定義部にて定義されたインタフェース定義とに基づいて、データ提供部に対してデータの先読み要求および先読み破棄要求の双方を実行するコードを機械的に生成する先読み生成部とを備える。
【発明の効果】
【０００９】
本発明によると、ユーザインタフェース実行装置は、ユーザインタフェースを設計するユーザインタフェース設計装置によって生成されたコードに基づいて、ユーザの操作内容を実行するユーザインタフェース実行装置であって、コードとユーザの操作内容とに基づいて、ユーザインタフェース実行装置の状態遷移を行う状態遷移部と、ユーザインタフェース設計装置において、ユーザインタフェース実行装置の状態と静的に関連付けて定義されたコードに含まれる全てのデータ取得インタフェースに基づいて生成されたデータの先読み要求を、データ提供部に要求するデータ要求部と、データ要求部の要求に対する応答としてデータ提供部から取得したデータを記憶するデータ記憶部とを備え、コードは、ユーザインタフェース設計装置によって設計された、ユーザインタフェース実行装置とデータ提供部との間のインタフェースを定義したインタフェース定義と、状態遷移を定義した状態遷移定義とから生成され、状態遷移部は、状態遷移の実行前に、遷移前の状態で使用するデータ取得インタフェースと、遷移後の状態で使用するデータ取得インタフェースとの差異に基づいて、先読みするデータを選択するため、先読みするデータを記憶する記憶領域の最大サイズをユーザインタフェースの設計時に予測可能であり、かつ先読みしたデータが先読み後に更新された場合であっても更新後のデータをユーザに提示することが可能となる。
【００１０】
また、ユーザインタフェース設計装置は、ユーザインタフェースを設計するユーザインタフェース設計装置であって、ユーザインタフェースの状態遷移を定義した状態遷移定義を定義する状態遷移定義部と、ユーザインタフェースを実行するユーザインタフェース実行装置と、当該ユーザインタフェース実行装置にデータを提供するデータ提供部との間のインタフェースを定義したインタフェース定義を定義するインタフェース定義部と、状態遷移定義部にて定義された各状態において利用する可能性があるインタフェースの対応を定義した対応定義を含む状態遷移定義と、インタフェース定義部にて定義されたインタフェース定義とに基づいて、データ提供部に対してデータの先読み要求および先読み破棄要求の双方を実行するコードを機械的に生成する先読み生成部とを備えるため、先読みするデータを記憶する記憶領域の最大サイズをユーザインタフェースの設計時に予測可能であり、かつ先読みしたデータが先読み後に更新された場合であっても更新後のデータをユーザに提示することが可能となる。
【００１１】
本発明の目的、特徴、態様、および利点は、以下の詳細な説明と添付図面とによって、より明白となる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施の形態１によるユーザインタフェース設計装置、ユーザインタフェース実行装置、およびデータ提供部の構成の一例を示すブロック図である。
【図２】本発明の実施の形態１によるユーザインタフェース設計装置、ユーザインタフェース実行装置、およびデータ提供部におけるソフトウェア機能に対応するハードウェア構成の一例を示す図である。
【図３】本発明の実施の形態１によるユーザインタフェース設計装置に対する入力とその生成コードの一例を示す図である。
【図４】本発明の実施の形態１によるユーザインタフェース実行装置の動作の一例を示すフローチャートである。
【図５】本発明の実施の形態１によるデータ提供部における先読み要求を受領したときの動作の一例を示すフローチャートである。
【図６】本発明の実施の形態１によるデータ提供部における先読み破棄要求を受領したときの動作の一例を示すフローチャートである。
【図７】本発明の実施の形態１によるデータ提供部における値更新時の動作の一例を示すフローチャートである。
【図８】本発明の実施の形態１によるユーザインタフェース実行装置における変更後のデータを受領したときの動作の一例を示すフローチャートである。
【図９】本発明の実施の形態１によるデータ記憶部で管理されるデータの形式の一例を示す図である。
【図１０】本発明の実施の形態１による先読み管理部で管理される先読み管理データの一例を示す図である。
【図１１】本発明の実施の形態２によるユーザインタフェース実行装置の構成の一例を示すブロック図である。
【図１２】本発明の実施の形態３によるユーザインタフェース実行装置の構成の一例を示すブロック図である。
【図１３】本発明の実施の形態３によるデータ記憶部で管理されるclient管理テーブルの一例を示す図である。
【図１４】本発明の実施の形態４によるユーザインタフェース実行装置の構成の一例を示すブロック図である。
【図１５】本発明の実施の形態４による先読み管理部で管理される管理データの一例を示す図である。
【図１６】本発明の実施の形態５によるユーザインタフェース実行装置の構成の一例を示すブロック図である。
【図１７】本発明の実施の形態５によるインタフェース定義のデータ取得インタフェースに対するデータの種類を示すフラグの設定の一例を示す図である。
【図１８】本発明の実施の形態５によるデータ記憶部で管理されるデータの形式の一例を示す図である。
【発明を実施するための形態】
【００１３】
本発明の実施の形態について、図面を用いて以下に説明する。
【００１４】
＜実施の形態１＞
＜構成＞
図１は、本発明の実施の形態１によるユーザインタフェース設計装置１、ユーザインタフェース実行装置２、およびデータ提供部３の構成の一例を示すブロック図である。なお、図１において、実線矢印は、各構成要素間におけるデータの流れを示しており、破線矢印は、状態遷移生成部１０と、先読み生成部１１と、データ取得生成部１２と、および先読み管理生成部１３の各々で生成されたコードの流れを示している。
【００１５】
まず、ユーザインタフェース設計装置１の構成について説明する。
【００１６】
ユーザインタフェース設計装置１は、ユーザインタフェース設計者が使用する装置であり、遷移設計部６と、インタフェース定義部７と、状態遷移生成部１０と、先読み生成部１１と、データ取得生成部１２と、先読み管理生成部１３とを備えている。
【００１７】
遷移設計部６（状態遷移定義部）は、ユーザインタフェースの状態を設計する。具体的には、遷移設計部６では、ユーザインタフェース設計者の入力に基づいて、状態遷移定義８を作成する。すなわち、遷移設計部６は、ユーザインタフェースの状態遷移を定義した状態遷移定義８を定義する。
【００１８】
インタフェース定義部７は、ユーザインタフェース実行装置２のユーザインタフェース実行部１４と、当該ユーザインタフェース実行部１４にデータを提供するデータ提供部３との間のインタフェース定義９を定義する。状態遷移定義８では、インタフェース定義部７で定義されたインタフェース定義９のうち、特定の状態で使用する可能性があるインタフェース群を定義することができる。
【００１９】
状態遷移生成部１０は、状態遷移定義８に基づいて、ユーザインタフェース実行装置２のユーザインタフェース実行部１４の状態遷移を処理するソフトウェアのソースコードである状態遷移コード３０（図３参照）を生成する。生成された状態遷移コード３０は、ユーザインタフェース実行装置２の状態遷移部１８に伝えられる。
【００２０】
先読み生成部１１は、状態遷移定義８およびインタフェース定義９に基づいて、予め定められたインタフェースの状態において、ユーザインタフェース実行装置２のユーザインタフェース実行部１４による先読み要求および先読み破棄要求のうちの少なくとも一方を実行するソフトウェアのソースコードである先読み実行コード３１（図３参照）を生成する。ここで、先読み要求とは、予め定められたインタフェースの状態で必要となり得るデータの提供をデータ提供部に要求することをいう。また、先読み破棄要求とは、データ提供部に対する先読み要求を止める（破棄する）ことをいう。なお、予め定められたインタフェースの状態は、予め定められた回数を遷移した後のインタフェースの状態を含むものとする。生成された先読み実行コード３１は、ユーザインタフェース実行装置２のデータ要求部２０に伝えられる。なお、先読み要求および先読み破棄要求については後述する。
【００２１】
データ取得生成部１２は、インタフェース定義９に基づいて、データ提供部３から提供されるデータを蓄積するユーザインタフェース実行装置２のデータ記憶部１６へのインタフェースとなるソフトウェアのソースコードである蓄積データアクセスコード３２（図３参照）を生成する。生成された蓄積データアクセスコード３２は、ユーザインタフェース実行装置２のデータ取得部１５に伝えられる。
【００２２】
先読み管理生成部１３は、インタフェース定義９に基づいて、ユーザインタフェース実行装置２におけるデータの先読み状態を管理するソフトウェアのソースコードである先読み管理コード３３（図３参照）を生成する。生成された先読み管理コード３３は、データ提供部３の先読み管理部２３に伝えられる。
【００２３】
次に、ユーザインタフェース実行装置２の構成について説明する。
【００２４】
ユーザインタフェース実行装置２は、ユーザインタフェース実行部１４と、データ取得部１５と、データ記憶部１６とを備えており、ユーザの入力操作を直接受け付ける入力装置４からの入力、またはデータ提供部３からのデータの受領などをきっかけとして、ユーザインタフェースの処理の結果を提示する提示装置４を制御する。
【００２５】
ユーザインタフェース実行部１４は、イベント取得部１７と、状態遷移部１８と、データ処理部１９と、データ要求部２０と、提示制御部２１とを備えている。
【００２６】
イベント取得部１７は、入力装置４からの入力、またはデータ提供部３からのデータの受領等をイベントとして取得する。イベント取得部１７で処理されるイベントは、ユーザインタフェースの状態を遷移させる状態遷移イベントと、データ提供部３に対する操作イベントと、入力装置４からの入力信号をそのまま提示制御に利用するための入力データイベントとに分類される。状態遷移イベントは、状態遷移部１８に伝えられる。操作イベントは、データ要求部２０に伝えられた後、データ取得部１５を経由してデータ提供部３に伝えらえる。入力データイベントは、データ処理部１９に伝えられた後、入力データの変更として提示制御部２１に伝えられる。ここで、入力データイベントとしては、例えば、ユーザがタッチパネルに対するタッチダウン中の操作量（スライドの移動量）に応じて、画面の移動量を変更する処理等が挙げられる。
【００２７】
状態遷移部１８は、ユーザインタフェース設計装置１の状態遷移生成部１０で生成された状態遷移コード３０を受領し、受領した状態遷移コード３０に基づくインタフェースの状態遷移を実行する。また、状態遷移部１８は、状態遷移時に、ユーザインタフェース設計装置１の先読み生成部１１から先読み実行コード３１を受領したデータ要求部２０に対して、先読み要求を実行する。
【００２８】
データ要求部２０は、イベント取得部１７および状態遷移部１８の指示に基づいて、データ提供部３が提供するデータや機能に対してアクセスする。データ要求部２０は、イベント取得部１７から、状態遷移を伴わない操作イベントに従ったデータ提供部３への要求を受領する。例えば、データ要求部２０は、イベント取得部１７から「音楽の再生開始」等の要求を受領する。また、データ要求部２０は、状態遷移部１８から、先読み要求の指示を受領する。
【００２９】
データ処理部１９は、イベント取得部１７で処理されたデータ付きイベントと、データ取得部１５を経由してデータ提供部３から取得したデータを、ユーザインタフェースの提示に利用可能なように加工する。ここで、データ付きイベントとしては、入力装置４から入力された入力データイベントと、データ取得部１５を経由してデータ提供部３から取得したデータを受け取る取得データイベントとが挙げられる。
【００３０】
提示制御部２１は、ユーザインタフェース実行部１４の状態と、データ処理部１９で加工されたデータとに基づいて、提示装置５において実際にユーザに提示する情報を生成し、提示装置５において提示可能なように加工した制御信号を生成する。具体的には、提示制御部２１は、ユーザインタフェース実行部１４の状態を状態遷移部１８から取得し、ユーザに提示するデータをデータ処理部１９から取得する。提示制御部２１で生成された制御信号は、提示装置５に伝えられ、提示装置５においてユーザへの提示が実行される。なお、本実施の形態において、提示とは、画面における表示に限らず、音声再生による音の提示、および触覚デバイスを用いた力覚としての提示も含むものとする。
【００３１】
データ取得部１５は、データ要求部２０から先読み要求を受領すると、データ記憶部１６にデータ要求部２０から要求されたデータと同一のデータが存在するか否かの確認を行う。データ記憶部１６に同一のデータが存在しない場合において、データ取得部１５は、先読み要求の対象となるデータを送付するようにデータ提供部３に要求する。一方、データ記憶部１６に同一のデータが存在する場合において、データ取得部１５は、データ提供部３に要求することなく、データ要求部２０に対して成功（同一のデータが存在する）旨を応答する。
【００３２】
また、データ取得部１５は、データ処理部１９から実際のデータを取得したい旨の要求（データ取得要求）を受領すると、データ記憶部１６にデータ処理部１９から要求されたデータと同一のデータが存在するか否かの確認を行う。データ記憶部１６に同一のデータが存在する場合において、データ取得部１５は、データ提供部３にデータを要求することなく、データ記憶部１６に記憶されている同一のデータを応答として返す。一方、データ記憶部１６に同一のデータが存在しない場合において、データ取得部１５は、データ記憶部１６に同一のデータが存在しない旨のエラーを応答として返す。
【００３３】
また、データ取得部１５は、データ取得インタフェースではない他のインタフェースに基づく要求をデータ要求部２０から受領した場合において、データ記憶部１６を参照することなく、データ提供部にデータの要求を送付する。
【００３４】
入力装置４は、ユーザの入力操作を解釈し、ユーザインタフェース実行装置２にイベントとして送付する。ここで、入力装置４としては、例えば、タッチパネル、マウス、キーボード、Ｈ／Ｗ（hardware）キー、ロータリースイッチ、リモートコントローラ、音声認識エンジン等が挙げられる。
【００３５】
提示装置５は、提示制御部２１から受領した制御信号に基づいて、ユーザに情報の提示を行う。ここで、提示装置５としては、液晶ディスプレイまたはプロジェクタ等の視覚情報を提示するデバイス、スピーカまたはイヤフォン等の音声情報を提示するデバイス、振動子等の力覚を提示するデバイス等が挙げられる。
【００３６】
次に、データ提供部３の構成について説明する。
【００３７】
データ提供部３は、提示装置５において提示するデータをユーザインタフェース実行装置２に提供する装置であり、要求処理部２２と、先読み管理部２３と、応答返却部２４と、データ生成処理部２５とを備えている。
【００３８】
要求処理部２２は、データ取得部１５から先読み要求、先読み破棄要求、およびデータ提供部３に対して予め定められた処理を要求する指示要求のうちの少なくとも１つの要求を受領する。
【００３９】
先読み管理部２３は、先読み管理生成部１３で生成された先読み管理コード３３に基づいて、ユーザインタフェース実行装置２におけるデータの先読み状態を管理する。具体的には、先読み管理部２３における管理は、要求処理部２２が受領した先読み要求または先読み破棄要求に基づいて行われる。
【００４０】
応答返却部２４は、要求処理部２２が受領した先読み要求またはデータ取得要求に対して、データ取得部１５にデータを返す。また、応答返却部２４は、データ生成処理部２５の処理によってデータ提供部３において保持するデータが更新されたことをデータ生成処理部２５から通知されると、先読み管理部２３を参照して当該更新されたデータが先読み状態であるか否かの判断を行う。そして、更新されたデータが先読み状態である場合において、応答返却部２４は、データ取得部１５に対してデータ（より具体的には、データの値）が更新された旨を通知する。
【００４１】
データ生成処理部２５は、データ提供部３が保持するデータの更新処理またはデータの生成処理を行う。これらの処理は、データ提供部３の開発者がプログラムを記述することによって行われる。なお、データ提供部３が保持するデータは、データ提供部３が備える記憶部（図示せず）で保持されているものとする。
【００４２】
図２は、図１に示すユーザインタフェース設計装置１、ユーザインタフェース実行装置２、およびデータ提供部３におけるソフトウェア機能に対応するハードウェア構成の一例を示す図である。
【００４３】
ユーザインタフェース設計装置１において、遷移設計部６、インタフェース定義部７、状態遷移生成部１０、先読み生成部１１、データ取得生成部１２、および先読み管理生成部１３は、例えば図２のプロセッサ２６がメモリ２７等に記憶されたプログラムを実行することにより、当該プロセッサ２６の機能として実現される。ただし、これらは、例えば複数のプロセッサ２６が連携して実現されてもよい。
【００４４】
また、ユーザインタフェース実行装置２において、ユーザインタフェース実行部１４、データ取得部１５、イベント取得部１７、状態遷移部１８、データ処理部１９、データ要求部２０、および提示制御部２１は、例えば図２のプロセッサ２６がメモリ２７等に記憶されたプログラムを実行することにより、当該プロセッサ２６の機能として実現される。ただし、これらは、例えば複数のプロセッサ２６が連携して実現されてもよい。
【００４５】
また、データ提供部３において、要求処理部２２、先読み管理部２３、応答返却部２４、およびデータ生成処理部２５は、例えば図２のプロセッサ２６がメモリ２７等に記憶されたプログラムを実行することにより、当該プロセッサ２６の機能として実現される。ただし、これらは、例えば複数のプロセッサ２６が連携して実現されてもよい。
【００４６】
なお、プロセッサ２６およびメモリ２７は、ユーザインタフェース設計装置１、ユーザインタフェース実行装置２、およびデータ提供部３の各々に備えられているものとする。
【００４７】
図３は、ユーザインタフェース設計装置１に対する入力とその生成コードの一例を示す図である。
【００４８】
ユーザは、遷移設計部６およびインタフェース定義部７に対して、ユーザインタフェース実行装置２において実行されるユーザインタフェースの設計を入力する。
【００４９】
ユーザは、遷移設計部６に対して、状態遷移図２８と、各状態で利用するインタフェースの対応を定義した対応定義２９とを入力する。なお、遷移設計部６は、自らがＧＵＩ（Graphical User Interface）を有してユーザに入力させるようにしてもよく、ＵＭＬ（Unified Modeling Language）を編集するツールを用いて設計された状態遷移モデルをインポートするようにしてもよい。また、状態遷移定義８は、状態遷移図２８と対応定義２９とを含んでいる。
【００５０】
図３の例では、状態遷移図２８は、状態Ｓ１のときにイベントＥ１を受理すると状態Ｓ２に遷移することを示している。また、状態遷移図２８は、状態Ｓ２のときにイベントＥ２を受理すると状態Ｓ１に遷移し、状態Ｓ２のときにイベントＥ３を受理すると状態Ｓ３に遷移することを示している。また、状態遷移図２８は、状態Ｓ３のときにイベントＥ４を受理すると状態Ｓ１に遷移することを示している。
【００５１】
対応定義２９は、状態遷移図２８で定義された各状態において利用する可能性があるインタフェースの対応を定義したものである。なお、対応定義２９は、状態遷移図２８における各状態のプロパティとして定義されてもよく、別のファイルで定義されてもよい。図３の例では、対応定義２９は、状態Ｓ１においてgetDataA、getStateD、doSomethingの３つのインタフェースを利用し、状態Ｓ２においてgetDataA、getCurrentState、OnNotifyE2の３つのインタフェースを利用し、状態Ｓ３においてgetListC、getCurrentState、doSomethingの３つのインタフェースを利用することを示している。
【００５２】
インタフェース定義９は、ユーザインタフェース実行装置２のユーザインタフェース実行部１４とデータ提供部３との間におけるインタフェースの定義と、当該インタフェースに基づいてデータ提供部３から得られるデータの最大サイズの定義とを含んでいる。インタフェース定義９には、そのインタフェースがどのようなインタフェースであるのかを示している。図３の例では、"get"から始まるインタフェースは、データ提供部３からデータを取得するインタフェース（データ取得インタフェース）であることを示している。"do"から始まるインタフェースは、データ提供部３に指示を行うインタフェース（指示インタフェース）であることを示している。"OnNotify"から始まるインタフェースは、データ提供部３からユーザインタフェース実行部１４へのイベント通知のインタフェース（イベント通知インタフェース）であることを示している。
【００５３】
なお、本実施の形態１では、インタフェース定義９は、記載のルールによる暗黙的な定義を示しているが、例えば、インタフェース定義９の型指定の前に、データ取得インタフェースは"getter"、指示インタフェースは"method"、イベント通知インタフェースは"event"等と明示的に宣言してもよい。
【００５４】
図３の例では、インタフェース定義９は、serviceAというデータ提供部３に対するインタフェースについて、４種類のデータ取得インタフェースと、１種類の指示インタフェースと、１種類のイベント通知インタフェースを定義している。
【００５５】
また、インタフェース定義９では、データ取得インタフェースに基づいてデータ提供部３から取得するデータの最大サイズを定義することができる。図３の例では、インタフェース定義９のデータサイズについて、DataAを４バイト、StringBを４×２５６バイト、ListCの最大保持サイズを１６×２５６＋８バイト、StateDを１６バイトと各々定義している。
【００５６】
状態遷移生成部１０は、状態遷移定義８に基づいて状態遷移コード３０を生成する。図３の例では、状態遷移コード３０は、状態Ｓ１のときにイベントＥ１を受理すると状態Ｓ２に状態が遷移することを示している。また、状態遷移生成部１０は、対応定義２９の状態Ｓ１で定義されたデータ取得インタフェースであるgetDataAおよびgetStateDを読み込み、状態Ｓ１に遷移したときにはsubscribe_DataA()およびsubscribe_StateD()を実行し、状態Ｓ１から他の状態に遷移するときにはunsubscribe_DataA()およびunsubscribe_StateD()を実行する状態遷移コード３０を生成する。
【００５７】
先読み生成部１１は、状態遷移定義８とインタフェース定義９とに基づいて先読み実行コード３１を生成する。図３の例では、先読み生成部１１は、状態遷移コード３０から呼び出されるsubscribe_DataA()およびsubscribe_StateD()と、データ取得部１５からデータを取得するデータ取得インタフェースであるgetDataA()およびgetStateD()を含む先読み実行コード３１を生成する。sbscribe_DataAは、インタフェース定義９によりDataAがint型であることを判断し、intのサイズを引数に追加することによって先読み処理を行うsubscribeを呼び出す。また、データ取得インタフェースであるgetメソッドは、データ記憶部１６からintの形に変換して取り出すコードを生成する。なお、StateDについても同様である。
【００５８】
また、先読み生成部１１は、当該先読み生成部１１にて生成された先読み実行コード３１と、インタフェース定義９に含まれるデータの最大サイズの定義とに基づいて、状態遷移定義８で定義された各状態における、データ提供部３から提供されたデータを記憶するユーザインタフェース実行装置２のデータ記憶部１６の最大サイズを算出する。
【００５９】
データ取得生成部１２は、インタフェース定義９に基づいて蓄積データアクセスコード３２を生成する。図３の例では、データ取得生成部１２は、インタフェース定義９で定義されたインタフェースに基づいて、データ記憶部１６にエントリを生成するコードを生成するとともに、データ提供部３に先読み要求を送付して返ってきたデータをデータ記憶部１６に記憶する処理を行うコードを生成する。エントリは、例えば図９に示すような、key（キー）−value（値）の組み合わせで構成される（詳細は後述する）。
【００６０】
また、データ取得生成部１２は、データ提供部３から値の変更（更新）通知を受け取るコールバック関数も生成する。また、データ取得生成部１２は、インタフェース定義９で定義されたデータ取得インタフェースではない他のインタフェースであるdoSomething()、呼出コードであるOnNotifyE2()、およびコールバックインタフェースを定義する。
【００６１】
図３の例では、蓄積データアクセスコード３２の５行目の処理を実行することによって"key"で表されるデータの先読み要求をデータ提供部３に伝えており、その応答として現時点での最新の値（データの値）が返され、４，５行目の処理を実行することによってデータ記憶部１６に値を記録している。なお、図３の例では、データ提供部３から同期処理によって値が返されているが、当該値を返す処理をコールバックで受けて、非同期応答に対応してもよい。蓄積データアクセスコード３２の２０行目以降の処理は、データ提供部３からデータの更新通知を受け取るコールバック関数の一例を示しており、getDataAというインタフェースに対してOnNotifyDataAというコールバック関数を生成し、当該コールバック関数においてデータ記憶部１６の更新と、ユーザインタフェース実行部１４への通知を行う。
【００６２】
なお、蓄積データアクセスコード３２には、データ記憶部１６に予め定められたサイズのエントリを生成して先読み開始処理を呼び出すコードと、先読み破棄要求によってデータを削除して先読み破棄要求をデータ提供部３に送付するコードと、データ記憶部１６から予め定められてデータを取得するコードと、データ提供部３から受領したデータの更新通知に基づいてデータ記憶部１６のデータを更新するコードとのうちの少なくとも１つのコードが含まれている。
【００６３】
先読み管理生成部１３は、インタフェース定義９に基づいて先読み管理部２３で使用される先読み管理コード３３を生成する。図３の例では、先読み管理生成部１３は、インタフェース定義９に基づいて、データ提供部３が提供するserviceAの先読み要求（subscribe）と、先読み破棄要求（unsubscribe）との各々に対応するコードを生成する。すなわち、先読み管理生成部１３は、インタフェース定義９に基づいて、データ提供部３からユーザインタフェース実行装置２に提供されるデータが先読みの対象となっているか否かをデータ提供部３で管理するための先読み管理コード３３を生成する。
【００６４】
先読み要求に対応する先読み要求コードは、先読み要求を行うクライアント（client）と、先読み対象となるデータとを先読み管理部２３に登録するコードを実行し、データ提供部３の開発者が実際にプログラムを記述する対象であるonCall_getDataA()等の処理を呼び出す。先読み破棄要求に対応する先読み破棄要求コードは、先読み管理部２３に対して、先読み要求を行うクライアントと、先読み対象となるデータとの登録を破棄するコードを生成する。
【００６５】
また、先読み管理生成部１３は、先読み対象となるデータの値を変更する処理（setDataA）を生成する。データ提供部３の開発者が当該処理を呼び出すと、該当するデータ（開発者が変更等行ったデータ）が先読み状態であるか否かを判断し、先読み状態である場合はクライアントであるユーザインタフェース実行装置２のユーザインタフェース実行部１４に対してデータの変更通知を発行する。
【００６６】
＜動作＞
図４は、ユーザインタフェース実行装置２の動作の一例を示すフローチャートである。図４では、入力装置４またはデータ取得部１５からイベント取得部１７に入力されるイベントに従って状態遷移部１８で状態が遷移した場合における処理の流れを示している。なお、ステップＳ１０１〜ステップＳ１０５において、遷移先の状態が状態Ｓ１である場合を一例として説明している。また、ステップＳ１０６〜ステップＳ１１０において、遷移元の状態が状態Ｓ１である場合を一例として説明している。
【００６７】
ステップＳ１０１において、状態遷移部１８は、状態の遷移を実行すると、遷移先の状態で定義された全てのデータ取得インタフェースに対して処理が行われたか否かの判断を行う。なお、ステップＳ１０１の処理は、図４に示すようにループ構造で実行してもよく、設計時に対応定義２９からループを展開した状態で実行してもよい。図３の例では、状態Ｓ１で使用するデータ取得インタフェースがgetDataAおよびgetStateDであるため、状態遷移コード３０の４〜７行目のS1.onenterで実行される処理を生成する際において、ループを展開してDataAおよびStateDの取得の形に展開されている。全てのデータ取得インタフェースに対して処理が行われた場合は、ステップＳ１０６に移行する。一方、全てのデータ取得インタフェースに対して処理が行われていない場合は、ステップＳ１０２に移行する。
【００６８】
ステップＳ１０２において、データ取得部１５は、データ記憶部１６に同一キーのエントリが存在するか否かの判断を行う。図３の例では、蓄積データアクセスコード３２の２行目のisSubscribedで実行される処理に対応する。同一キーのエントリが存在する場合は、ステップＳ１０３に移行する。一方、同一キーのエントリが存在しない場合は、ステップＳ１０４に移行する。
【００６９】
ステップＳ１０３において、データ取得部１５は、蓄積データアクセスコード３２の７行目のaddで実行される処理によって、エントリの呼出元（先読み処理を呼び出したclient、ここではユーザインタフェース実行部１４）を、データ記憶部１６のclient管理テーブルに記憶（追加）する。なお、client管理テーブル（図１３参照）については、後の実施の形態３で詳述する。
【００７０】
ステップＳ１０４において、データ取得部１５は、データ名およびサービス名をキーとした新たなエントリをデータ記憶部１６に作成する。
【００７１】
ステップＳ１０５において、データ取得部１５は、サーバであるデータ提供部３に先読み要求を送付する。
【００７２】
ステップＳ１０６において、状態遷移部１８は、遷移元の状態で使用される全てのデータ取得インタフェースに対して処理が行われたか否かの判断を行う。図３の例では、状態遷移コード３０の８〜１１行目のonleaveで実行される処理である。状態遷移コード３０の８〜１１行目では、イベントＥ１によって状態Ｓ１から状態Ｓ２に状態が遷移するときの処理を示している。なお、ステップＳ１０６の処理は、ステップＳ１０１と同様、設計時に対応定義２９からループを展開した状態で実行してもよい。全てのデータ取得インタフェースに対して処理が行われた場合は、処理を終了する。一方、全てのデータ取得インタフェースに対して処理が行われていない場合は、ステップＳ１０７に移行する。
【００７３】
ステップＳ１０７において、データ取得部１５は、データ記憶部１６のclient管理テーブルにアクセスし、該当するキーのエントリが呼出元以外からも参照されているかの判断を行う。呼出元以外からも参照されている場合は、ステップＳ１０８に移行する。一方、呼出元のみから参照されている場合は、ステップＳ１０９に移行する。なお、本実施の形態１のように、ユーザインタフェース実行部１４が１つの場合は、ステップＳ１０９に移行する。
【００７４】
ステップＳ１０８において、データ取得部１５は、データ記憶部１６のclient管理テーブルから呼出元を削除する。
【００７５】
ステップＳ１０９において、データ取得部１５は、データ記憶部１６の該当キーのエントリを無効化または破棄（削除）する。なお、エントリを無効化にする場合は、予め各エントリ（図９参照）に無効化フラグを設定する必要がある。そして、エントリを無効化にするときは無効化フラグを「false」とし、エントリを有効化にするときは「true」とする。
【００７６】
ステップＳ１１０において、データ取得部１５は、データ要求部２０からの先読み破棄要求の指示に基づいて、データ提供部３に先読み破棄要求を送付する。図３の例では、蓄積データアクセスコード３２の９〜１２行目に示されるコードが先読み破棄要求の処理に対応する。
【００７７】
図５は、データ提供部３における先読み要求を受領したときの動作の一例を示すフローチャートである。図５では、図４のステップＳ１０５における処理によって、データ取得部１５から送付された先読み要求をデータ提供部３が受領したときの処理の流れを示している。
【００７８】
ステップＳ２０１において、要求処理部２２は、データ取得部１５から先読み要求を受領すると、先読み要求を送付したユーザインタフェース実行部１４（クライアント）を特定するＩＤであるデバイスＩＤと、先読みの対象となるデータを特定する先読み対象データキーとの組み合わせを、先読み管理部２３に登録する。図３の例では、先読み管理コード３３の２行目に示される処理に対応する。
【００７９】
ステップＳ２０２において、要求処理部２２は、データ提供部３の値を取得するためのグル―コードを呼び出す。当該グル―コードは、データ提供部３の開発者によって内部の処理（プログラム）を自由に記述することができる処理であり、クライアントであるユーザインタフェース実行部１４から値を取得するためのインタフェースが呼び出される際に処理するコードと同じである。図３の例では、先読み管理コード３３の５行目および７行目に示される処理に対応する。
【００８０】
ステップＳ２０３において、応答返却部２４は、ステップＳ２０２にて取得した値を、ＲＰＣ（Remote Procedure Call）の仕組みによってユーザインタフェース実行装置２に返す。
【００８１】
図６は、データ提供部３における先読み破棄要求を受領したときの動作の一例を示すフローチャートである。図６では、図４のステップ１１０における処理によって、データ取得部１５から送付された先読み破棄要求をデータ提供部３受領したときの処理の流れを示している。
【００８２】
ステップＳ３０１において、要求処理部２２は、データ取得部１５から先読み破棄要求を受領すると、先読み管理部２３に登録されているデバイスＩＤと先読み対象データキーとの組み合わせを削除する。当該処理を行うことによって、データ提供部３では、ユーザインタフェース実行部１４（クライアント）と、先読み対象となるデータとの対応が取れなくなり、先読み状態が解除される。
【００８３】
図７は、データ提供部３における値更新時の動作の一例を示すフローチャートである。
【００８４】
データ提供部３は、データ生成処理部２５においてユーザインタフェース実行装置２とは独立してデータを生成しており、当該データを生成する処理を行う際に、先読み状態であるデータの値が変更することがある。図７では、データの値が変更（更新）されたときの処理の流れを示している。なお、以下では、値が変更されたデータのことを、変更後のデータという。
【００８５】
ステップＳ４０１において、データ生成処理部２５は、変更後のデータを応答返却部２４に通知する。
【００８６】
ステップＳ４０２において、応答返却部２４は、先読み管理部２３に登録されているデバイスＩＤおよび先読み対象データキーとの組み合わせを参照し、変更後のデータを先読みしているユーザインタフェース実行部１４が存在するか否かの判断を行う。変更後のデータを先読みしているユーザインタフェース実行部１４が存在する場合は、ステップＳ４０３に移行する。一方、変更後のデータを先読みしているユーザインタフェース実行部１４が存在しない場合は、処理を終了する。
【００８７】
ステップＳ４０３において、応答返却部２４は、先読みしているユーザインタフェース実行部１４に対して、変更後のデータと、当該データに対応する先読み対象データキーとを送付する。
【００８８】
図８は、ユーザインタフェース実行装置２における変更後のデータを受領したときの動作の一例を示すフローチャートである。
【００８９】
ステップＳ５０１において、データ取得部１５は、データ提供部３の応答返却部２４から変更後のデータを受領する。
【００９０】
ステップＳ５０２において、データ取得部１５は、変更後のデータと、当該データに対応する先読み対象データキーとに基づいて、データ記憶部１６から該当するデータを検索し、該当するデータの値に対して変更後のデータの値を上書きする。
【００９１】
ステップＳ５０３において、データ取得部１５は、上記の該当するデータを使用しているユーザインタフェース実行部１４に対して、データの値が更新された旨を通知する。当該通知を受領したイベント取得部１７は、イベントに応じて、提示装置５に提示する値を更新する等の処理を行う。
【００９２】
図９は、データ記憶部１５で管理されるデータの形式の一例を示す図である。
【００９３】
データ記憶部１５では、データ提供部３から提供されたデータをkey（キー）−value（値）の組み合わせで記憶している。keyは、インタフェース定義９で定義されたデータ取得インタフェース（"get"から始まるインタフェース）のget以降の文字列である。例えば、インタフェース定義９でgetDataAのインタフェースが定義されている場合において、当該インタフェースに基づいて取得するデータのkeyは"DataA"となる。また、データ取得インタフェースに基づいて取得する型がList型等のCollection型である場合は、keyの後にlength、name、item等の定形語を追加して、List型の扱いに必要なパラメータも同時に格納する。
【００９４】
また、"get"のインタフェースに引数を指定することができる場合は、引数によって取得するデータを変更する意図があるため、keyの末尾にその引数を追加することによってデータの同一性を保証する。具体的には、"getListC(int id)"のインタフェースが存在する場合において、id=1で取得するListCの長さを格納するkeyは、"ListC_length_1"という形式とする。このようなkeyの決定方法によって、getListC(1)で取得するListCのデータと、getListC(2)で取得するListCのデータとを区別してデータ記憶部１６に記憶することができる。
【００９５】
valueは、データ提供部３から提供されたデータの値をそのままの形で記憶する。本実施の形態１では、全てのデータの値はＪＳＯＮ（JavaScript Object Notation）形式の文字列として記憶されている。データ取得部１５は、データ記憶部１６から取得したデータをインタフェースで定義した型に変換した後、ユーザインタフェース実行部１４にデータを送付する。
【００９６】
図１０は、先読み管理部２３で管理される先読み管理データの一例を示す図である。
【００９７】
先読み管理部２３では、先読み管理コード３３に含まれるインタフェース定義９から解釈されたデータの先読み状態を、key−subscribeの組み合わせで管理している。データが先読み状態であればtrue、先読み状態でなければfalseとする。
【００９８】
図１０の例では、インタフェース定義９から解釈されたデータのうち、keyがStringBのデータは先読み状態でなく、他のキーのデータは先読み状態であることを示している。例えば、データ生成処理部２５がStringBのデータを更新するメソッドを呼び出して更新した場合において、応答返却部２４は、先読み管理部２３の先読み管理データを参照してStringBのデータは先読み状態でないことが分かるため、ユーザインタフェース実行部１４に対して更新後のデータを通知しない。一方、データ生成処理部２５がDataAのデータを更新するメソッドを呼び出して更新した場合において、応答返却部２４は、先読み管理部２３の先読み管理データを参照し、先読み状態であるユーザインタフェース実行部１４に対して更新後のデータを通知する。
【００９９】
このような管理を行うことによって、先読み状態でないユーザインタフェース実行部１４には不必要なデータの通知を行わないため、ユーザインタフェース実行装置２とデータ提供部３との間における通信トラフィックを削減するとともに、ユーザインタフェース実行装置２における無駄なソフトウェア処理を削減することができる。
【０１００】
＜実施例＞
上記で説明したユーザインタフェース実行装置２およびデータ提供部３をカーナビゲーションシステムに適用する場合について説明する。
【０１０１】
以下において、ユーザインタフェース実行装置２は、自動車のダッシュボードの中に組み込まれるカーナビゲーションシステムに対応している。入力装置４は、運転手のステアリングに装着されたステアリングリモコン、カーナビゲーションシステムに搭載されたＨ／Ｗキー、または赤外線リモコンである。提示装置５は、カーナビゲーションシステムの液晶パネルである。データ提供部３は、ネットワークを介したインタネット上のサーバで実行されるラジオ番組の番組情報配信サービスに対応する。また、インタフェース定義９として、データ取得インタフェースであるSongInfo getSongInfo(station_id)が定義されているものとする。
【０１０２】
ユーザインタフェース実行装置２において、状態遷移部１８は、ユーザインタフェース設計装置１の状態遷移生成部１０から状態遷移コード３０を受領しているものとする。また、データ要求部２０は、ユーザインタフェース設計装置１の先読み生成部１１から先読み実行コード３１を受領しているものとする。また、データ取得部１５は、ユーザインタフェース設計装置１のデータ取得生成部１２から蓄積データアクセスコード３２を受領しているものとする。
【０１０３】
データ提供部３において、先読み管理部２３は、ユーザインタフェース設計装置１の先読み管理生成部１３から先読み管理コード２２を受領しているものとする。
【０１０４】
ユーザが入力装置４を操作することによって、ユーザインタフェース実行部１４の状態が、当該状態から予め定められた回数の操作を行えばラジオ番組の情報表示画面に遷移する状態となった場合において、データ要求部２０は、先読み実行コード３１であるsubscribe_SongInfo(station1)を実行する。そして、データ取得部１５は、データ記憶部１６にSongInfo_station1の項目（エントリ）を追加し、データ提供部３に対して先読み要求を送付する。このとき、先読み要求として、当該先読み要求を行ったクライアントであるカーナビゲーションシステム（ユーザインタフェース実行装置２）のdeviceIDである"device1"と、keyである"SongInfo_station1"が送付される。
【０１０５】
データ提供部３において、要求処理部２２は、ユーザインタフェース実行装置２から先読み要求を受領すると、SongInfo_station1がdevice1で先読み状態であることを先読み管理部２３に登録する。そして、応答返却部２４は、現在のstation1のSongInfoをユーザインタフェース実行装置２に返す。
【０１０６】
データ提供部３からstation1のSongInfoを受領したデータ取得部１５は、データ記憶部１６のkeyである"SongInfo_station1"に対応するvalueに対してtation1のSongInfoを記録し、イベント取得部１７に先読みが完了した旨を伝える。
【０１０７】
その後、ユーザの操作によって、ラジオ番組表示画面に遷移した場合において、データ要求部２０がデータ取得部１５に対してgetSongInfo(station1)を実行すると、データ取得部１５からデータ記憶部１６に記録されているtation1のSongInfoがデータ処理部１９に送付される。
【０１０８】
このような動作を行うことによって、ユーザインタフェース実行部１４が、データを必要とするタイミングでデータ提供部３に対してデータ取得の要求を行う処理を削減することができる。
【０１０９】
また、時間が経過して、ラジオ番組で配信中の楽曲が変更になった場合において、データ提供部３の応答返却部２４は、先読み管理部２３の先読み管理データを参照し、SongInfoが先読み状態であることを把握する。そして、応答返却部２４は、ユーザインタフェース実行装置２のデータ取得部１５に対して、変更後の情報を通知する。データ取得部１５は、変更後の情報を受領すると、データ記憶部１６のvalueに対して変更後の情報を上書きして更新し、イベント取得部１７に変更後の情報を通知する。
【０１１０】
上記より、ユーザインタフェース実行部１４は、先読み状態であれば常にデータ提供部３から最新の情報を取得することができる。従って、ユーザインタフェース実行部１４は、遅延の大きなデータ提供部３に対してデータの要求を逐次行う必要がなくなるため、画面の遷移または画面の描画等を高速に行うことができ、ユーザに快適な操作感を提供することができる。
【０１１１】
また、ユーザの操作によって、例えばＣＤの再生を開始する等、ラジオ番組の情報提供画面までの操作回数が予め定められた回数以上になる場合において、データ要求部２０は、先読み実行コード３１における先読み破棄要求であるunsubscribe_SongInfo(station1)が実行され、データ取得部１５によってデータ記憶部１６のtation1のSongInfoが無効化または破棄される。このとき、データ取得部１５は、先読み破棄要求をデータ提供部３に送付する。データ提供部３の要求処理部２２は、受領した先読み破棄要求に従って、先読み管理部２３で管理している先読み管理データから、SongInfo_station1がdevice1で先読み状態である旨の情報が削除される。
【０１１２】
データ要求部２０が先読み破棄要求を実行することによって、ユーザインタフェース実行部１４のある状態において先読み状態となるデータを特定することが可能になるため、この処理（先読み破棄要求に係る処理）を決定するコード（蓄積データアクセスコード）の生成時に、ユーザインタフェース実行装置２が動作する上で必要なデータ記憶部１６に記憶されているデータを特定することができる。従って、データ記憶部１６における各データ項目（ユーザインタフェースの各状態で必要となるデータ）の最大サイズを予め規定しておくことによって、ユーザインタフェース実行装置２の動作時に必要なデータ記憶部１６の容量を設計時に見積もることができる。
【０１１３】
以上のことから、本実施の形態１によれば、先読みするデータを記憶する記憶領域の最大サイズをユーザインタフェースの設計時に予測可能であり、かつ先読みしたデータが先読み後に更新された場合であっても更新後のデータをユーザに提示することが可能となる。
【０１１４】
＜実施の形態２＞
実施の形態１では、ユーザインタフェース実行装置２とデータ提供部３とが別個に設けられる場合について説明したが、これに限るものではない。例えば、ユーザインタフェース実行装置２とデータ提供部３とを一体に設けるようにしてもよい。
【０１１５】
例えば、実施の形態１の実施例で説明したカーナビゲーションシステムにおいて、自車両が走行中の現在地を提供する機能を実行する場合がある。このとき、カーナビゲーションシステムはユーザインタフェース実行装置２に対応し、自車両の現在地を提供する機能はデータ提供部３に対応する。
【０１１６】
図１１は、本実施の形態２によるユーザインタフェース実行装置３４の構成の一例を示すブロック図である。
【０１１７】
図１１に示すように、ユーザインタフェース実行装置３４は、実施の形態１（図１参照）によるユーザインタフェース実行装置２とデータ提供部３とを一体にしたものである。また、ユーザインタフェース実行部３５は、実施の形態１によるユーザインタフェース実行部１４にデータ取得部１５およびデータ記憶部１６を組み込んだものである。その他の構成および動作は、実施の形態１と同様であるため、ここでは説明を省略する。
【０１１８】
ユーザインタフェース実行装置３４は、ユーザインタフェース実行部３５とデータ提供部３とを備えている。従って、ユーザインタフェース実行部３５がデータ提供部３からデータを取得するときの遅延が、実施の形態１よりも小さくなる。また、実施の形態１において、ユーザインタフェース実行装置２は、一般的にオペレーティング・システム（ＯＳ）を搭載しており、ユーザインタフェース実行部１４とデータ提供部３とではメモリ空間が異なる。従って、ユーザインタフェース実行部１４とデータ提供部３との間におけるデータの受け渡し時には遅延が発生し、受け渡しのデータサイズおよび回数が増えるほど遅延が大きくなるという問題がある。本実施の形態２では、ユーザインタフェース実行部３５内にデータ記憶部１６を設けているため、データ取得時において、異なるメモリ空間でのデータの受け渡しの回数を無くすことが可能となる。
【０１１９】
＜実施の形態３＞
実施の形態１，２では、ユーザインタフェース実行部１４，３５が単数である場合について説明したが、これに限るものではない。例えば、ユーザインタフェース実行部は複数存在してもよい。
【０１２０】
例えば、実施の形態１の実施例で説明したカーナビゲーションシステムにおいて、運転者に向けて表示するディスプレイ、助手席の同乗者に向けて表示するディスプレイ、および後部座席の同乗者に向けて表示するディスプレイの各々に対応するユーザインタフェース実行部が備えられる場合が考えられる。
【０１２１】
図１２は、本発明の実施の形態３によるユーザインタフェース実行装置３６の構成の一例を示すブロック図である。
【０１２２】
図１２に示すように、ユーザインタフェース実行装置３６は、ユーザインタフェース実行部４１，４２，４３を備えることを特徴としている。また、ユーザインタフェース実行部４１は提示装置３８に接続され、ユーザインタフェース実行部４２は提示装置３９に接続され、ユーザインタフェース実行部４３は提示装置４０に接続されている。なお、ユーザインタフェース実行部４１，４２，４３は、実施の形態１によるユーザインタフェース実行部１４と同一の機能を有している。その他の構成および動作は、実施の形態１と同様であるため、ここでは説明を省略する。
【０１２３】
例えば、上記のカーナビゲーションシステムにおいて、運転者に向けて表示するディスプレイを提示装置３８とし、助手席の同乗者に向けて表示するディスプレイを提示装置３９とし、後部座席の同乗者に向けて表示するディスプレイを提示装置４０とし、提示装置３８，３９，４０の各々に対して異なる情報を表示することができる。
【０１２４】
データ取得部４４およびデータ記憶部４５は、ユーザインタフェース実行部４１，４２，４３の各々で共通している。このような構成とすることによって、例えばユーザインタフェース実行部４１で必要となったデータを、ユーザインタフェース実行部４２が先読みしている場合において、ユーザインタフェース実行部４１は、データ提供部３に対して先読み要求することなく、データ記憶部４５から必要なデータを取得することができる。従って、ユーザインタフェース実行装置３６全体として高速な応答を実現することができる。
【０１２５】
上記の動作を実現するために、例えば、ユーザインタフェース実行部４１のデータ要求部４９は、先読み実行コード３１を実行する際において、図３に示す先読み実行コード３１の４行目に示されているように、自身のインスタンス（図３の例では"this"）をデータ取得部４４に伝える。データ取得部４４では、蓄積データアクセスコード３２に基づいて、データ記憶部４０に項目を追加する。このとき、データ取得部４４は、蓄積データアクセスコード３２の２行目に示されているように、既に先読み状態である場合は、データ提供部３に対して先読み要求を新たに伝えることなく処理を終了する。
【０１２６】
また、データ提供部３において、例えば先読み状態である"DataA"の値が変更された場合、変更後のデータを受領したデータ取得部４４は、蓄積データアクセスコード３２のOnNotifyDataAを実行する。このとき、変更後のデータの値をデータ記憶部４５に記録した後、DataAを先読みしている全てのインタフェース実行部に対してOnChangeDataAを実行する。
【０１２７】
図１３は、データ記憶部４５で管理されるclient管理テーブルの一例を示す図である。
【０１２８】
データ記憶部４５では、key−valueの組み合わせの管理に加えて、特定のkeyを読み出しているclientを管理するclient管理テーブルが記憶されている。
【０１２９】
図１３において、DataAは、clientA（例えば、ユーザインタフェース実行部４１）とclientB（例えば、ユーザインタフェース実行部４２）から先読み状態であり、StringBはclientAから先読み状態であることを示している。
【０１３０】
以上のことから、本実施の形態３によれば、ユーザインタフェース実行装置３６が複数のユーザインタフェース実行部４１，４２，４３を備えている場合であっても、ユーザインタフェース実行装置３６全体として高速な応答を実現することができる。
【０１３１】
＜実施の形態４＞
実施の形態３では、１つのユーザインタフェース実行装置３６内に複数のユーザインタフェース実行部４１，４２，４３が存在する場合について説明したが、これに限るものではない。例えば、ユーザインフェース実行装置は複数存在してもよい。
【０１３２】
例えば、実施の形態１の実施例で説明したカーナビゲーションシステムにおいて、自動車のダッシュボードに組み込まれたカーナビゲーションユニットと、ユーザが自動車内に持ち込んだタブレット端末とのように、ユーザインタフェース実行装置が複数存在する場合が考えられる。
【０１３３】
図１４は、本発明の実施の形態４によるユーザインタフェース実行装置２，６１の構成の一例を示すブロック図である。
【０１３４】
図１４に示すように、本実施の形態４では、複数のユーザインタフェース実行装置２，６１が備えられている。なお、ユーザインタフェース実行装置２，６１は、実施の形態１によるユーザインタフェース実行装置２と同一の機能を有している。その他の構成および動作は、実施の形態１と同様であるため、ここでは説明を省略する。
【０１３５】
例えば、上記のカーナビゲーションシステムにおいて、自動車のダッシュボードに組み込まれたカーナビゲーションユニットをユーザインタフェース実行装置２とし、ユーザが自動車内に持ち込んだタブレット端末をユーザインタフェース実行装置６１とすることができる。
【０１３６】
ユーザインタフェース実行装置２，６１は、別個の装置であり、各々データ取得部１５，６５およびデータ記憶部１６，６６を備えている。データ提供部３では、各ユーザインタフェース実行装置２，６１を識別するＩＤを管理している。具体的には、データ取得部１５，６５が実行する蓄積データアクセスコード３２に基づくデータ提供部３に対する先読みを実行する処理（図３の例では、蓄積データアクセスコード３２の５行目に示す処理であるclient.serviceIF.subscribe(key)）の中で、ユーザインタフェース実行装置２，６１を特定するdeviceIDを付与し、データ提供部３に対するsubscribeコードを呼び出す。データ提供部３の要求処理部２２は、先読み管理コード３３に基づいてdeviceIDと、先読み対象となるデータのkeyとを受領して先読み管理部２３に記録する。そして、データ生成処理部２５の処理によってデータの値が変更した場合において、応答返却部２４は、先読み管理部２３の先読み管理データを参照し、先読み状態である全てのユーザインタフェース実行装置に対して変更後のデータを通知する。
【０１３７】
図１５は、先読み管理部２３で管理される管理データの一例を示す図である。
【０１３８】
実施の形態１による先読み管理部２３の管理データ（図１０参照）とは異なり、本実施の形態４による先読み管理部２３の管理データは、図１５に示すように、keyと、当該keyのデータを先読み中であるdeviceIDとの組み合わせを記録している。図１５の例では、DataAがdevice1（例えば、ユーザインタフェース実行装置２）およびdevice2（例えば、ユーザインタフェース実行装置６１）から先読みされていることが分かる。応答返却部２４は、先読み管理部２３の先読み管理データを参照し、例えばDataAが更新された場合は、deviceAおよびdeviceBに更新後のデータを通知する必要があると判断する。
【０１３９】
以上のことから、本実施の形態４によれば、実施の形態１と同様の効果を得ることができる。
【０１４０】
＜実施の形態５＞
実施の形態１〜４では、ユーザインタフェース実行装置がデータ提供部からデータを取得するときの通信遅延を低減することと、ユーザインタフェースの設計時にデータ記憶部に必要な容量を見積もることを目的としている。本発明の実施の形態５では、データ記憶部をバックアップする仕組みを備えることによって、ユーザインタフェース実行装置の起動を高速化させることを目的とする。
【０１４１】
図１６は、本実施の形態５によるユーザインタフェース実行装置７２の構成の一例を示すブロック図である。
【０１４２】
図１６に示すように、ユーザインタフェース実行装置７２は、バックアップ部７４および不揮発記憶部７５を備えている。また、バックアップ部７４は、起動停止入力装置７３に接続されている。その他の構成および動作は、実施の形態１（図１）と同様であるため、ここでは説明を省略する。
【０１４３】
起動停止入力装置７３は、ユーザインタフェース実行装置２の起動または停止を実行する信号（起動信号、停止信号）をバックアップ部７４に入力する。
【０１４４】
バックアップ部７４は、起動停止入力装置７３から起動信号が入力されると、不揮発記憶部７５に記憶されているデータを用いて、データ記憶部１５の内容およびユーザインタフェース実行部１４の状態を復元する。また、バックアップ部７４は、起動停止入力装置７３から停止信号が入力されると、データ記憶部１５の内容およびユーザインタフェース実行部１４の状態を不揮発記憶部７５に記憶（バックアップ）させ、ユーザインタフェース実行装置２を停止する。
【０１４５】
不揮発記憶部７５は、ＳＤカード（登録商標）またはＨＤＤ等、電源供給がなくてもデータを保持することができる記憶デバイスである。
【０１４６】
また、ユーザインタフェース設計装置１のインタフェース定義部７は、インタフェース定義９のデータ取得インタフェースに対して、データの種類を示すフラグを設定する。これにより、データ取得インタフェースに基づいて取得するデータが、電源断時（ユーザインタフェース実行装置２の停止時）に変化するデータであるか否かを定義することが可能となる。
【０１４７】
図１７は、インタフェース定義９のデータ取得インタフェースに対するデータの種類を示すフラグの設定の一例を示す図である。
【０１４８】
図１７において、fixedを指定したデータは電源断後でも不変であることを示し、periodicを指定したデータは電源断後でも変化することを示している。このような定義をデータ記憶部１６に記憶させておくことによって、電源断後でも変化するデータはバックアップの対象としないといった処理を行うことができる。
【０１４９】
図１８は、データ記憶部１６で管理されるデータの形式の一例を示す図である。
【０１５０】
図１８に示すように、データ記憶部１６は、key−value−typeの組み合わせを管理している。バックアップ部７４は、データ記憶部１６で管理される図１８に示すデータを参照することによって、電源断時にどのデータを不揮発記憶部７５に記憶させるのか判断することができる。
【０１５１】
例えば、実施の形態１の実施例で説明したカーナビゲーションシステムにおいて、カーナビゲーションシステムの終了時における状態を保存し、終了時に動作していたアプリケーションまたは画面に表示していた情報を次回の起動時に復帰させる必要がある場合において、本実施の形態５によるユーザインタフェース実行装置７２を用いることによって、終了時のデータのうち次回の起動時に使用可能なデータのみを保存する。これにより、次回の起動時にデータ提供部にアクセスすることなく、前回終了時のデータを復元して起動することができるため、ユーザインタフェース実行装置７２の起動を高速化することができる。
【０１５２】
以上のことから、本実施の形態５によれば、ユーザインタフェース実行装置７２の起動を高速化させることが可能となる。
【０１５３】
なお、図１，１１，１２，１４，１６において、遷移設計部６、インタフェース定義部７、状態遷移生成部１０、先読み生成部１１、データ取得生成部１２、先読み管理生成部１３、ユーザインタフェース実行部１４，３５，４１，４２，４３，６４、データ取得部１５，４４，６５、イベント取得部１７，４６，５１，５６，６７、状態遷移部１８，４７，５２，５７，６８、データ処理部１９，４８，５３，５８，６９、データ要求部２０，４９，５４，５９，７０、提示制御部２１，４１，５５，６０，７１、要求処理部２２、先読み管理部２３、応答返却部２４、データ生成処理部２５、バックアップ部７４の各々は、図２のプロセッサ２６がメモリ２７に記憶されたソフトウェアプログラムに従って動作することにより実現された。しかし、これに代えて、遷移設計部６、インタフェース定義部７、状態遷移生成部１０、先読み生成部１１、データ取得生成部１２、先読み管理生成部１３、ユーザインタフェース実行部１４，３５，４１，４２，４３，６４、データ取得部１５，４４，６５、イベント取得部１７，４６，５１，５６，６７、状態遷移部１８，４７，５２，５７，６８、データ処理部１９，４８，５３，５８，６９、データ要求部２０，４９，５４，５９，７０、提示制御部２１，４１，５５，６０，７１、要求処理部２２、先読み管理部２３、応答返却部２４、データ生成処理部２５、バックアップ部７４の各々は、ハードウェア（例えば、電気信号に対して特定の演算あるいは処理を行うように構成された演算／処理回路等）として構成するようにしてもよい。また、上記の両者を混在させてもよい。
【０１５４】
また、ソフトウェアの遷移設計部６、インタフェース定義部７、状態遷移生成部１０、先読み生成部１１、データ取得生成部１２、先読み管理生成部１３、ユーザインタフェース実行部１４，３５，４１，４２，４３，６４、データ取得部１５，４４，６５、イベント取得部１７，４６，５１，５６，６７、状態遷移部１８，４７，５２，５７，６８、データ処理部１９，４８，５３，５８，６９、データ要求部２０，４９，５４，５９，７０、提示制御部２１，４１，５５，６０，７１、要求処理部２２、先読み管理部２３、応答返却部２４、データ生成処理部２５、バックアップ部７４の各々と、ハードウェアの遷移設計部６、インタフェース定義部７、状態遷移生成部１０、先読み生成部１１、データ取得生成部１２、先読み管理生成部１３、ユーザインタフェース実行部１４，３５，４１，４２，４３，６４、データ取得部１５，４４，６５、イベント取得部１７，４６，５１，５６，６７、状態遷移部１８，４７，５２，５７，６８、データ処理部１９，４８，５３，５８，６９、データ要求部２０，４９，５４，５９，７０、提示制御部２１，４１，５５，６０，７１、要求処理部２２、先読み管理部２３、応答返却部２４、データ生成処理部２５、バックアップ部７４の各々とを組み合わせた概念として、「部」という語に代えて「処理回路」という語を用いることもできる。
【０１５５】
なお、本発明は、その発明の範囲内において、各実施の形態を自由に組み合わせたり、各実施の形態を適宜、変形、省略することが可能である。
【０１５６】
本発明は詳細に説明されたが、上記した説明は、すべての態様において、例示であって、この発明がそれに限定されるものではない。例示されていない無数の変形例が、この発明の範囲から外れることなく想定され得るものと解される。
【符号の説明】
【０１５７】
１  ユーザインタフェース設計装置、２  ユーザインタフェース実行装置、３  データ提供部、４  入力装置、５  提示装置、６  遷移設計部、７  インタフェース定義部、８  状態遷移定義、９  インタフェース定義、１０  状態遷移生成部、１１  先読み生成部、１２  データ取得生成部、１３  先読み管理生成部、１４  ユーザインタフェース実行部、１５  データ取得部、１６  データ記憶部、１７  イベント取得部、１８  状態遷移部、１９  データ処理部、２０  データ要求部、２１  提示制御部、２２  要求処理部、２３  先読み管理部、２４  応答返却部、２５  データ生成処理部、２６  プロセッサ、２７  メモリ、２８  状態遷移図、２９  対応定義、３０  状態遷移コード、３１  先読み実行コード、３２  蓄積データアクセスコード、３３  先読み管理コード、３４  ユーザインタフェース実行装置、３５  ユーザインタフェース実行部、３６  ユーザインタフェース実行装置、３７  入力装置、３８，３９，４０  提示装置、４１，４２，４３  ユーザインタフェース実行部、４４  データ取得部、４５  データ記憶部、４６  イベント取得部、４７  状態遷移部、４８  データ処理部、４９  データ要求部、５０  提示制御部、５１  イベント取得部、５２  状態遷移部、５３  データ処理部、５４  データ要求部、５５  提示制御部、５６  イベント取得部、５７  状態遷移部、５８  データ処理部、５９  データ要求部、６０  提示制御部、６１  ユーザインタフェース実行装置、６２  入力装置、６３  提示装置、６４  ユーザインタフェース実行部、６５  データ取得部、６６  データ記憶部、６７  イベント取得部、６８  状態遷移部、６９  データ処理部、７０  データ要求部、７１  提示制御部、７２  ユーザインタフェース実行装置、７３  起動停止入力装置、７４  バックアップ部、７５  不揮発記憶部。
【要約】
本発明は、先読みするデータを記憶する記憶領域の最大サイズをユーザインタフェースの設計時に予測可能であり、かつ先読みしたデータが先読み後に更新された場合であっても更新後のデータをユーザに提示することが可能なユーザインタフェース実行装置およびユーザインタフェース設計装置を提供することを目的とする。本発明によるユーザインタフェース実行装置（２）は、コードとユーザの操作内容とに基づいてユーザインタフェースの状態遷移を行う状態遷移部（１８）と、ユーザインタフェースの状態と静的に関連付けて定義されたコードに含まれるデータ取得インタフェースに基づいて生成された、データの先読み要求およびデータの先読み破棄要求のうちの少なくとも一方を、データ提供部（３）に要求するデータ要求部（２０）と、データ要求部（２０）の要求に対する応答としてデータ提供部（３）から取得したデータを記憶するデータ記憶部（１６）とを備える。【図１】
0005963991.tif 000002
【図２】
0005963991.tif 000003
【図３】
0005963991.tif 000004
【図４】
0005963991.tif 000005
【図５】
0005963991.tif 000006
【図６】
0005963991.tif 000007
【図７】
0005963991.tif 000008
【図８】
0005963991.tif 000009
【図９】
0005963991.tif 000010
【図１０】
0005963991.tif 000011
【図１１】
0005963991.tif 000012
【図１２】
0005963991.tif 000013
【図１３】
0005963991.tif 000014
【図１４】
0005963991.tif 000015
【図１５】
0005963991.tif 000016
【図１６】
0005963991.tif 000017
【図１７】
0005963991.tif 000018
【図１８】
0005963991.tif 000019