IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社 日立産業制御ソリューションズの特許一覧

特開2024-135744機能拡張装置、および、機能拡張方法
<>
  • 特開-機能拡張装置、および、機能拡張方法 図1
  • 特開-機能拡張装置、および、機能拡張方法 図2
  • 特開-機能拡張装置、および、機能拡張方法 図3
  • 特開-機能拡張装置、および、機能拡張方法 図4
  • 特開-機能拡張装置、および、機能拡張方法 図5
  • 特開-機能拡張装置、および、機能拡張方法 図6
  • 特開-機能拡張装置、および、機能拡張方法 図7
  • 特開-機能拡張装置、および、機能拡張方法 図8
  • 特開-機能拡張装置、および、機能拡張方法 図9
  • 特開-機能拡張装置、および、機能拡張方法 図10
  • 特開-機能拡張装置、および、機能拡張方法 図11
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024135744
(43)【公開日】2024-10-04
(54)【発明の名称】機能拡張装置、および、機能拡張方法
(51)【国際特許分類】
   G06F 8/60 20180101AFI20240927BHJP
【FI】
G06F8/60
【審査請求】有
【請求項の数】4
【出願形態】OL
(21)【出願番号】P 2023046589
(22)【出願日】2023-03-23
(11)【特許番号】
(45)【特許公報発行日】2023-07-21
(71)【出願人】
【識別番号】000153443
【氏名又は名称】株式会社 日立産業制御ソリューションズ
(74)【代理人】
【識別番号】110001807
【氏名又は名称】弁理士法人磯野国際特許商標事務所
(72)【発明者】
【氏名】内山 淳
(72)【発明者】
【氏名】友常 浩二郎
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376AB01
5B376AB12
5B376AC03
5B376AC11
(57)【要約】
【課題】カスタマイズされる前の標準機能のソースコード改変を不要としつつ、担当者ごとに標準機能と拡張機能とを切り替え可能とする仕組みを提供すること。
【解決手段】機能拡張装置10のインスタンス管理部12は、標準クラスAが提供する標準機能、または、標準クラスAを拡張した拡張クラスBが提供する拡張機能のうちの呼び出し対象となる機能の名称を示す指定機能情報が、ユーザおよびそのユーザが起動する仮想環境上に存在するアプリケーションの画面ごとに指定されているユーザ情報テーブル11を参照することで、ユーザおよび仮想環境上に存在するアプリケーションの画面に対応する指定機能情報を取得する。機能呼出部14は、指定機能情報から取得したインスタンスの型に対応するインスタンスを呼び出す。
【選択図】 図1
【特許請求の範囲】
【請求項1】
標準クラスが提供する標準機能、または、前記標準クラスを拡張した拡張クラスが提供する拡張機能のうちの呼び出し対象となる機能の名称を示す指定機能情報が、ユーザおよびそのユーザが起動する仮想環境上にあるアプリケーションの画面ごとに指定されているユーザ情報記憶部を参照することで、ユーザおよび仮想環境上にあるアプリケーションの画面に対応する前記指定機能情報を取得し、
前記標準クラスの名称と、前記標準機能または前記拡張機能の機能名称と、前記標準クラスまたは前記拡張クラスを呼び出すためのインスタンスの型とが登録されている辞書を参照することで、前記標準クラスの名称および前記指定機能情報の組み合わせに合致する前記インスタンスの型を取得するインスタンス管理部と、
取得した前記インスタンスの型に対応するインスタンスを呼び出す機能呼出部とを有することを特徴とする
機能拡張装置。
【請求項2】
前記インスタンス管理部は、
クラスの名称ごとにそのクラスが提供する機能の名称が登録されている名前空間とクラスから、前記標準クラスの名称と、前記指定機能情報が示す機能の名称との組み合わせ情報を検索し、
前記組み合わせ情報を検索できた場合には、前記組み合わせ情報に対応する前記インスタンスの型を前記辞書に登録する第1登録処理を実行し、
前記組み合わせ情報を検索できない場合には、前記標準クラスの名称と、前記標準機能の機能名称と、前記標準クラスを呼び出すための前記インスタンスの型とを前記辞書に登録する第2登録処理を実行することを特徴とする
請求項1に記載の機能拡張装置。
【請求項3】
前記名前空間とクラスには、さらに、クラスの名称が属するクラスを示す属性情報も登録されており、
前記インスタンス管理部は、前記組み合わせ情報に加えて、自身の属するクラスの属性情報が前記名前空間とクラスから検索できた場合に、前記第1登録処理を行うことを特徴とする
請求項2に記載の機能拡張装置。
【請求項4】
機能拡張装置は、インスタンス管理部と、機能呼出部とを有しており、
前記インスタンス管理部は、
標準クラスが提供する標準機能、または、前記標準クラスを拡張した拡張クラスが提供する拡張機能のうちの呼び出し対象となる機能の名称を示す指定機能情報が、ユーザおよびそのユーザが起動する仮想環境上にあるアプリケーションの画面ごとに指定されているユーザ情報記憶部を参照することで、ユーザおよび仮想環境上にあるアプリケーションの画面に対応する前記指定機能情報を取得し、
前記標準クラスの名称と、前記標準機能または前記拡張機能の機能名称と、前記標準クラスまたは前記拡張クラスを呼び出すためのインスタンスの型とが登録されている辞書を参照することで、前記標準クラスの名称および前記指定機能情報の組み合わせに合致する前記インスタンスの型を取得し、
前記機能呼出部は、取得した前記インスタンスの型に対応するインスタンスを呼び出すことを特徴とする
機能拡張方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、機能拡張装置、および、機能拡張方法に関する。
【背景技術】
【0002】
ソフトウェアのパッケージビジネスでは、パッケージから標準で提供されているベースソフトウェアに対して、個別の顧客の要望に合わせて開発者がカスタマイズしてから提供することが多い。カスタマイズされたソースコードが顧客ごとに乱立してしまうと、保守性が低下してしまう上、ターゲットが絞られるなど売り方が難しくなる。
【0003】
そこで、特許文献1には、ベースソフトウェアのソースコードを一切修正しないで、組み込みソフトウェアをカスタマイズするための方法が記載されている。具体的には、特許文献1は、ベースソフトウェア部とカスタムソフトウェア部をリンクする組み込みソフトウェアのカスタマイズ方法が記載されている。このカスタマイズ方法は、実行時には、基底クラスのコンストラクタ内で派生クラスのインスタンスおよびクラス名称をインスタンステーブルに登録し、そのインスタンステーブルに登録された派生クラスのインスタンスをコンパイル済みのモジュール内から呼び出す仕組みである。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2007-279918号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
以下、ベースソフトウェアで提供される「標準クラス」とし、カスタムソフトウェアで提供される「拡張クラス」とし、それらの各クラスを呼び出す側を「呼出部」として、各クラスの管理について説明する。顧客のニーズに合わせて、カスタマイズしない標準クラスに対して、カスタマイズされた部分を示す拡張クラスをオプションとして付けることで、個別の顧客の要望に柔軟に対応できるシステムを検討する。
呼出部は、各クラス(標準クラスまたは拡張クラス)をインスタンス化した後、そのインスタンスに対して、各クラスが提供する処理を呼び出す。
【0006】
従来では、呼出部のソースコードのうちクラスをインスタンス化している箇所(コンストラクタ)を開発者が直接書き換えることで、クラスの切り替えに対応していた。しかし、呼出部もまたパッケージから標準で提供されているベースソフトウェアの一部なので、顧客ごとに呼出部のソースコードが書き換わるようにしてしまうと、保守性が低下してしまう。
また、特許文献1の段落0010には以下の(1)および(2)の記載があるため、呼出部が呼び出すクラス(インスタンス)は、アプリケーションの起動時に決定される。
(1)「C++で記述されたソフトウェアの実行時には、まず、グローバルなクラスインスタンスが生成され(ステップ341)、それらのコンストラクタが実行される。したがって、カスタムソフトウェア部12に存在する派生クラスのインスタンス121のコンストラクタ331が実行されることになるが、」の記載。
(2)「インスタンステーブルから派生クラスを検索するときのクラス名称文字列は、例えば、ベースソフトウェア部を作成する前に予め決めておき、カスタムソフトウェア部を作成する開発者に伝えておけば、実行制御コードのソースコードに既に記述されている。(ステップ346)。あるいは、同じ基底クラスから派生して作成した複数の異なるカスタムソフトウェア部をリンクして組み込みソフトウェア部を作成し、実行時にいずれの派生クラスを使用するかを決定することも可能である。実行時にどのクラスを実行するかは、SRAMやFLASH-ROMなど、ROM作成後にも変更可能な記憶領域を機器に持たせておいて、その記憶領域に名称文字列を記録し、」の記載。
【0007】
ここで、同じ会社内の各担当者が、同じアプリケーションを使用する場合を考える。この場合、担当者によって標準機能での動作を必要とすることも、拡張機能での動作を必要とすることもある。しかし、特許文献1の手法ではアプリケーションの起動時に標準機能、または拡張機能のどちらかでの起動が固定化されるため、アプリケーションを使用時の担当者によって呼び出す機能を切り替えるような柔軟な運用ができない。
【0008】
そこで、本発明は、カスタマイズされる前の標準機能のソースコード改変を不要としつつ、担当者ごとに標準機能と拡張機能とを切り替え可能とする仕組みを提供することを主な課題とする。
【課題を解決するための手段】
【0009】
前記課題を解決するために、本発明の機能拡張装置は、以下の特徴を有する。
本発明は、標準クラスが提供する標準機能、または、前記標準クラスを拡張した拡張クラスが提供する拡張機能のうちの呼び出し対象となる機能の名称を示す指定機能情報が、ユーザおよびそのユーザが起動する仮想環境上に存在するアプリケーションの画面ごとに指定されているユーザ情報記憶部を参照することで、ユーザおよび仮想環境上に存在するアプリケーションの画面に対応する前記指定機能情報を取得し、
前記標準クラスの名称と、前記標準機能または前記拡張機能の機能名称と、前記標準クラスまたは前記拡張クラスを呼び出すためのインスタンスの型とが登録されている辞書を参照することで、前記標準クラスの名称および前記指定機能情報の組み合わせに合致する前記インスタンスの型を取得するインスタンス管理部と、
取得した前記インスタンスの型に対応するインスタンスを呼び出す機能呼出部とを有することを特徴とする。
その他の手段は、後記する。
【発明の効果】
【0010】
本発明によれば、カスタマイズされる前の標準機能のソースコード改変を不要としつつ、担当者ごとに標準機能と拡張機能とを切り替え可能とする仕組みを提供することができる。
【図面の簡単な説明】
【0011】
図1】本実施形態に関する機能提供システムの構成図である。
図2】本実施形態に関する機能拡張装置のハードウェア構成図である。
図3】本実施形態に関するユーザ情報テーブルの一例を示すテーブルである。
図4】本実施形態に関する辞書および名前空間とクラスの格納内容を示す説明図である。
図5】比較例として、インスタンス化している箇所を開発者が直接書き換える方式での拡張クラスBの呼び出し処理を示すフローチャートである。
図6】本実施形態に関するインスタンス管理部が拡張クラスBを呼び出すようにする処理を示すフローチャートである。
図7】本実施形態に関する図6の処理の詳細を示すフローチャートである。
図8】本実施形態に関する標準機能実行部が実行する標準クラスAのソースコードを示すテーブルである。
図9】本実施形態に関する拡張機能実行部が実行する拡張クラスBのソースコードを示すテーブルである。
図10】比較例として、インスタンス化している箇所を開発者が直接書き換える方式での呼出部のソースコードを示すテーブルである。
図11】本実施形態に関する機能呼出部が実行するソースコードを示すテーブルである。
【発明を実施するための形態】
【0012】
図1は、機能提供システム100の構成図である。
機能提供システム100は、各ユーザから操作される1台以上のユーザ端末20と、機能拡張装置10とを有する。機能拡張装置10は、各ユーザ端末20からのアクセスを受けて、仮想環境上に存在するアプリケーションの画面を仮想デスクトップとして、各ユーザ端末20に提供する。仮想環境は、例えば、機能拡張装置10上に構築されている。
【0013】
機能拡張装置10は、インスタンス管理部12と、機能呼出部14と、標準機能実行部15と、拡張機能実行部16とを有する。機能拡張装置10は、ユーザ情報テーブル11と、辞書13と、名前空間とクラス17と、各クラス(標準クラスAと、拡張クラスB)の実行ファイルとを格納する記憶部を有する。
仮想環境上に存在するアプリケーションは、標準機能または拡張機能を提供する。標準機能実行部15は、標準機能が実装された標準クラスAのインスタンスを実行する。拡張機能実行部16は、拡張機能が実装された拡張クラスBを実行する。なお、標準機能は拡張機能へと拡張されている。
【0014】
機能呼出部14は、辞書13を参照して、標準機能実行部15または拡張機能実行部16のいずれかの実行を呼び出す。
インスタンス管理部12は、標準機能実行部15および拡張機能実行部16それぞれの実行ファイルから、処理を実行可能なデータ構造(インスタンス)を生成して、それらのインスタンスを管理する。また、インスタンス管理部12は、ユーザ情報テーブル11を参照して、辞書13を生成する。ユーザ情報テーブル11には、各ユーザが呼び出したい標準機能または拡張機能を識別する情報が記述されている(詳細は図3)。
【0015】
図2は、機能拡張装置10のハードウェア構成図である。
機能拡張装置10は、CPU901と、RAM902と、ROM903と、HDD904と、通信I/F905と、入出力I/F906と、メディアI/F907とを有するコンピュータ900として構成される。
通信I/F905は、外部の通信装置915と接続される。入出力I/F906は、入出力装置916と接続される。メディアI/F907は、記録媒体917からデータを読み書きする。さらに、CPU901は、RAM902に読み込んだプログラム(アプリケーションや、その略のアプリとも呼ばれる)を実行することにより、各処理部を改善制御する。そして、このプログラムは、通信回線を介して配布したり、CD-ROM等の記録媒体917に記録して配布したりすることも可能である。
【0016】
図3は、ユーザ情報テーブル11の一例を示すテーブルである。
ユーザ情報テーブル11は、機能拡張装置10にログインするユーザのユーザIDと、機能拡張装置10がユーザ端末20に提供する仮想環境上に存在するアプリケーションの画面の画面IDとの組み合わせごとに、呼び出したい拡張機能を識別する文字列である拡張機能名称52(詳細は図4)が記述されている。または、ユーザ情報テーブル11は、画面IDの列を省略し、ユーザIDと拡張機能名称52とを対応付けてもよい。
ここで、ユーザIDは、例えば、仮想デスクトップにログインするための画面を介してユーザ端末20から機能拡張装置10に入力される。
また、仮想環境上に存在するアプリケーションの画面とは、例えば、仮想デスクトップを介して機能拡張装置10からミラーリングされるアプリケーションの画面(設定画面、保守画面、監視用のモニタリング画面など)である。
【0017】
拡張機能名称52は、拡張機能の種別を示す名称として、例えば、「OptionB」、「OptionC」が設定される。
例えば、ユーザ情報テーブル11の第1行は、ユーザ「User1」が「A00」の画面を起動する時に、拡張機能として、「OptionB」を呼び出すように制御する旨を示す。
また、ユーザ情報テーブル11の第2行に示すように、第1行と同じユーザ「User1」であっても、起動する画面(「A01」の画面)が異なるときには、拡張機能として「OptionC」を呼び出すようにしてもよい。つまり、同じユーザであっても、起動する画面が異なるときには、呼び出す機能を変化させてもよい。
さらに、ユーザ情報テーブル11の第3行では、ユーザ「User2」が「A00」の画面を起動する時には、拡張機能名称52が空欄なので、標準機能を呼び出すように制御される。
【0018】
図4は、辞書13および名前空間とクラス17の格納内容を示す説明図である。
以下、標準機能実行部15の実行内容が記載された標準ソースコードを修正せずに機能拡張を行う手順を示す。
(手順A1)アプリケーションは標準ソースコード内に記載された標準機能のクラス名称51を、辞書13に設定しておく。また、アプリケーションはアセンブリを読み込んでおくことで、「標準機能名称55&標準クラス名称54」と、「拡張機能名称52&標準クラス名称54」とを含む組み合わせデータを、拡張クラスの型53に対応付けて名前空間とクラス17に登録する。
(手順A2)インスタンス管理部12は、エントリ数が0の辞書13を初期生成する。初期生成した辞書13には、以降、「拡張機能名称52&標準機能のクラス名称51」をキーとして、生成対象の拡張インスタンス56が用いる拡張クラスの型53を返すデータ構造が、エントリとして登録される。なお、「A&B」とはAとBとを組み合わせたデータである。
【0019】
(手順A3)インスタンス管理部12は、ユーザ情報テーブル11から拡張機能名称52を取得する。この拡張機能名称52は、担当者に提供したいクラスを指定するための情報である。
【0020】
(手順A4)インスタンス管理部12は、「拡張機能名称52&標準クラス名称54」をもとに名前空間とクラス17を探索することにより、「拡張機能名称52&標準クラス名称54」が名前空間とクラス17に存在することを確認する。名前空間とクラス17を探索する処理は、.NET Framework(登録商標)を例に挙げるとリフレクションを用いて名前空間とクラス17を含めたクラス名のListを探索する処理である。
この確認処理により、顧客に提供したいクラスが名前空間とクラス17に登録済(つまり、拡張機能実行部16として呼び出し可能な状態である旨)を確認できる。そして、インスタンス管理部12は、拡張機能名称52と標準クラス名称54とを連結した文字列をもとに拡張クラスの型53を生成する。さらに、インスタンス管理部12は、「拡張機能名称52&標準クラス名称54」の組み合わせから拡張クラスの型53を生成した旨を示すエントリを辞書13に追加しつつ、生成した拡張クラスの型53に対応する拡張インスタンス56を生成する。
【0021】
(手順A5)機能呼出部14は、(手順A4)で生成した拡張インスタンス56を使用して、拡張機能実行部16を呼び出す。
(手順A6)インスタンス管理部12は、標準機能実行部15のインスタンスである標準機能インスタンスの生成時に、「拡張機能名称52&標準クラス名称54」の文字列を生成する。この文字列は、「標準機能名称55&標準クラス名称54」の文字列をもとに、標準機能名称55を拡張機能名称52にすり替えた(変換した)ものである。
そして、インスタンス管理部12は、「拡張機能名称52&標準クラス名称54」または「拡張機能名称52&標準機能のクラス名称51」をキーとして辞書13を参照することで、拡張クラスの型53の返答を得る。さらに、機能呼出部14は、返答された拡張クラスの型53に対応する拡張インスタンス56を使用して、拡張機能実行部16を呼び出す。
【0022】
以上説明した(手順A1)~(手順A6)の仕組みによって標準パッケージのソースコードに手を加えることなく、外付けのプログラムにより動作を変更できる。なお、(手順A1)~(手順A6)は、要約すると、インスタンス管理部12が実行する以下の(手順B1)~(手順B4)となる。
(手順B1)標準クラスAをインスタンス化する前に生成対象の文字列「標準機能名称55&標準クラス名称54」を取得する。
(手順B2)ユーザ情報テーブル11で指定した拡張機能名称52をもとに、「標準クラスAを拡張クラスBにすり替える」という情報「拡張機能名称52&標準機能のクラス名称51」を辞書13から取得する。
(手順B3)(手順B2)で取得した情報をもとに標準クラスAの生成対象の文字列を拡張クラスBの文字列「拡張機能名称52&標準クラス名称54」にすりかえる。
(手順B4)(手順B3)ですりかえた情報をもとに拡張クラスBをインスタンス化した拡張インスタンス56を生成することで、拡張クラスBの処理を呼ぶことができる。
【0023】
このように、ユーザ情報テーブル11には、標準クラスAが提供する標準機能、または、標準クラスAを拡張した拡張クラスBが提供する拡張機能のうちの呼び出し対象となる機能の名称を示す指定機能情報が、ユーザおよびそのユーザが起動する仮想環境上にあるアプリケーションの画面ごとに指定されている。
辞書13には、標準クラスAの名称と、標準機能または拡張機能の機能名称と、標準クラスAまたは拡張クラスBを呼び出すためのインスタンスの型とが登録されている。
インスタンス管理部12は、ユーザ情報テーブル11からユーザおよび仮想環境上に存在するアプリケーションの画面に対応する指定機能情報を取得し、辞書13を参照することで、標準クラスAの名称および指定機能情報の組み合わせに合致するインスタンスの型を取得する。
機能呼出部14は、インスタンス管理部12が取得したインスタンスの型に対応するインスタンスを呼び出す。
【0024】
また、名前空間とクラス17には、クラスの名称ごとにそのクラスが提供する機能の名称が登録されている。
インスタンス管理部12は、標準クラスAの名称と、指定機能情報が示す機能の名称との組み合わせ情報を名前空間とクラス17から検索する。その検索結果に応じて、インスタンス管理部12は、以下のいずれかの登録処理を実行する。
・組み合わせ情報を検索できた場合には、組み合わせ情報に対応するインスタンスの型を辞書13に登録する第1登録処理を実行する。
・組み合わせ情報を検索できない場合には、標準クラスAの名称と、標準機能の機能名称と、標準クラスAを呼び出すためのインスタンスの型とを辞書13に登録する第2登録処理を実行する。
【0025】
図5は、比較例として、インスタンス化している箇所を開発者が直接書き換える方式での拡張クラスBの呼び出し処理を示すフローチャートである。フローチャートの左側のレーンは、標準クラスA(および呼出部)のソースコードが提供する処理(S10A)である。フローチャートの右側のレーンは、拡張クラスBのソースコードが提供する処理(S10B)である。
開発者は、顧客の要望書などから拡張機能を呼ぶか否かを確認する(S11)。
拡張機能を呼ぶ場合(S11,Yes)、開発者は、呼出部のソースコードを編集して、拡張クラスBのインスタンスを生成する処理(S14)と、生成された拡張クラスBのインスタンスを実行する処理(S15)とを呼出部に追加する。開発者は、この呼出部を実行することで、拡張機能が呼ばれる。
【0026】
拡張機能を呼ばない場合(S11,No)、開発者は、標準クラスAのインスタンスを生成する処理(S12)と、生成された標準クラスAのインスタンスを実行する処理(S13)とがソースコードに記載された呼出部を、変更せずにそのまま実行する。開発者は、この呼出部を実行することで、標準機能が呼ばれる。
【0027】
図6は、本実施形態のインスタンス管理部12が拡張クラスBを呼び出すようにする処理を示すフローチャートである。
フローチャートの左側のレーンは、標準クラスA(および呼出部)のソースコードが提供する処理(S20A)である。フローチャートの右側のレーンは、拡張クラスBのソースコードが提供する処理(S20B)である。
インスタンス管理部12は、図4で説明した仕組み(機能拡張機構)を実行することで(S21、前記の(手順A2)~(手順A4))、各処理(S22-S24、S14、S15)を起動する。これにより、拡張機能が呼ばれる。一方、拡張機能が呼ばれない場合には、図4と同様に、S12で生成された標準クラスAのインスタンスを実行する処理(S13)が起動される。
【0028】
インスタンス管理部12は、辞書13から標準クラスAの文字列(図4の標準機能のクラス名称51)を取得し(S22)、ユーザ情報テーブル11から図4の拡張機能名称52も取得する(S23)。
インスタンス管理部12は、機能呼出部14(図4では呼出部)のソースコードについて、文字列「標準クラスA」を「拡張クラスB」に置き換える(S24、前記の(手順A4))。これにより、機能呼出部14は、拡張クラスBの拡張インスタンス56を生成し(S14、前記の(手順A5))、その拡張インスタンス56から拡張クラスBの処理を実行できる(S15)。
【0029】
図7は、図6の処理の詳細を示すフローチャートである。このフローチャートは、ユーザが機能拡張装置10のシステム起動の操作を入力することで、起動される。
インスタンス管理部12は、アセンブリをロードする(S101)。インスタンス管理部12は、標準クラスAを呼び出す処理(機能呼出部14の処理)を実行することで(S102)、インスタンスを生成するメソッドを呼び出す(S103)。
ここで、インスタンス管理部12は、ユーザ端末20から仮想環境についての画面起動の操作を受け付ける(S111)。インスタンス管理部12は、画面起動したユーザのユーザIDと、起動された画面の画面IDとをもとにユーザ情報テーブル11を参照し(S112)、対応する拡張機能名称52(起動モード)を取得する(S113)。S113の起動モードには、標準機能を呼び出す場合には図4の拡張機能名称52が含まれないが、拡張機能を呼び出す場合には拡張機能名称52が含まれる。
【0030】
一方、ユーザ情報テーブル11に画面IDの列が無い構成の場合には、画面起動したユーザのユーザIDをもとにユーザ情報テーブル11を参照し(S112)、対応する拡張機能名称52(起動モード)を取得すればよい(S113)。
ここで、インスタンス管理部12は、S113で取得した起動モードに拡張情報(拡張機能名称52)が存在するか否かを判定し(S114)、S114でYesならS121へ進み、Noなら標準クラスAの型で返すよう辞書13に登録する(S115)。つまり、S115では、「標準機能名称55&標準クラス名称54」の組み合わせから標準機能インスタンスの型を返す旨を示すエントリが、辞書13に登録される。
【0031】
インスタンス管理部12は、辞書13が作成済みか否かを判定し(S121)、S121でYesならS122へ進み、NoならS123へ進む。なお、「拡張機能名称52&標準機能のクラス名称51」というキーに対するエントリが辞書13に存在している場合に、インスタンス管理部12は、S121でYesと判定する。
インスタンス管理部12は、辞書13に登録済の情報通りに型を返し(S122)、その型に応じて以下のいずれかの処理が実行される。
・標準機能インスタンスの型が返った場合、標準クラスAのインスタンスを生成し(S12)、標準クラスAのインスタンス処理を実行する(S13)。
・拡張クラスの型53が返った場合、拡張クラスBのインスタンスを生成し(S14)、拡張クラスBのインスタンス処理を実行する(S15)
【0032】
インスタンス管理部12は、名前空間とクラス17から拡張クラスBを検索する(S123、前記の(手順A4))。その拡張クラスBのエントリが存在する場合(S124,Yes)、かつ、拡張クラスBの属性が明示されている場合(S125,Yes)には、インスタンス管理部12は、拡張クラスBの型で返すよう辞書13に登録する(S126)。S126で登録される拡張クラスBとは、ユーザ情報テーブル11の拡張機能名称52で指定されたクラスである。そして、処理をS121に戻す。
つまり、名前空間とクラス17には、さらに、クラスの名称が属するクラスを示す属性情報も登録されている。そして、インスタンス管理部12は、組み合わせ情報に加えて、自身の属するクラスの属性情報が名前空間とクラス17から検索できた場合に、第1登録処理を行ってもよい。
また、S126では、(手順A2)で示した通り、「拡張機能名称52&標準機能のクラス名称51」をキーとして、生成対象の拡張インスタンス56が用いる拡張クラスの型53を返すエントリが、辞書13に登録される。
【0033】
一方、(S124,No)または(S125,No)の場合には、S115の辞書13に登録される処理が実行される。また、S125の分岐処理は省略してもよい。S125の分岐処理を設けた意図は、自身のインスタンス管理部12が拡張クラスBに属することを明示するための属性を示すためである。
【0034】
以下、図8図11の簡易ソースコードを用いて、図4で説明した各名称の一例を説明する。この簡易ソースコードは、Java(登録商標)の文法を参考に作成したが、他のオブジェクト指向型言語を用いてもよい。この簡易ソースコードは、発熱する部品を冷却するファン(送風機)の制御を行うプログラムを想定し、以下の2種類のクラスを定義する。
・標準クラスAは、ファン型番のみをインスタンス変数として管理する。
・拡張クラスBは、ファン型番に加えてパワー出力値(例えばファンの回転数)もインスタンス変数として管理する。
【0035】
図8は、標準機能実行部15が実行する標準クラスAのソースコードを示すテーブルである。
テーブルの左行には行番号(行A00~A13)を示し、テーブルの右行にはソースコードの内容を示す。また、ソースコードの「/*~*/」で囲まれた「~」内はコメントである。
標準クラスAは、ファン型番を示すインスタンス変数(行A03)と、文字出力のテストを示すメソッド(行A06~行A08)と、ファン型番を返すメソッド(行A10~行A12)とを有する。
行A00の「Standard.StandardFan」とは、標準機能インスタンスの型であり、その先頭の「Standard」が変換対象文字列(標準機能名称55)であり、その後の「StandardFan」が行A01で示す標準クラス名称54である。
辞書13には、「Standard(機能名称)&StandardFan(クラス名称)」のキーから、Standard.StandardFan(インスタンスの型)を返すエントリが登録される。機能呼出部14は、このエントリを参照して、Standard.StandardFanのインスタンスを生成して実行する(S12,S13)。
【0036】
図9は、拡張機能実行部16が実行する拡張クラスBのソースコードを示すテーブルである。
拡張クラスBは、標準クラスAに対して以下の変更がある。
図9の拡張クラスBが図8の標準クラスAに対する継承(extends)を示す旨(行C01)。
・インスタンス変数として、パワー出力値を示すインスタンス変数(行C04)の追加。
・文字出力のテストを示すメソッド(行C07~行C10)が、図8の同名メソッドへのオーバーライドを示す旨(行C08)の追加。
行C00の「Power.StandardFan」とは、標準機能インスタンスの型であり、その先頭の「Power」が変換後の文字列(拡張機能名称52)であり、その後の「StandardFan」が標準クラス名称54である。
辞書13には、「Power(機能名称)&StandardFan(クラス名称)」のキーから、Power.StandardFan(拡張クラスの型53)を返すエントリが登録される。機能呼出部14は、このエントリを参照して、Power.StandardFanのインスタンスを生成して実行する(S14,S15)。
【0037】
図10は、比較例として、インスタンス化している箇所を開発者が直接書き換える方式での呼出部のソースコードを示すテーブルである。
行B03では、クラス名(StandardFan)を指定して、直接インスタンスを生成する命令が記載されている。開発者は、生成するインスタンスを切り替えたいときには、行B03のクラス名を切り替えるロジック(if文で切替先を分岐させるロジック)を、その都度追加する必要がある。そのため、標準ソースに多量の修正を行う必要が発生する。
【0038】
図11は、本実施形態の機能呼出部14が実行するソースコードを示すテーブルである。
図11のテーブルでは、図10の行B03が図11の行B03Pに置き換わる。行B03Pには、あらかじめフルパスの文字列(Standard.StandardFan)を起点としたインスタンスの生成処理が、CreateInstance(図6の機能拡張機構を実行する処理S21)として記載される。
【0039】
S21の実行により、機能拡張装置10は、以下の処理を実行する。
・インスタンス管理部12は、図10の行B03から標準クラス名称54(StandardFan)を取得する(S22)
・インスタンス管理部12は、ユーザ情報テーブル11から拡張機能名称52(Power)を取得する(S23)
・インスタンス管理部12は、行B03Pの文字列(Standard.StandardFan)の先頭の標準クラス名称54(StandardFan)を、拡張機能名称52(Power)に置き換える(S24)
・機能呼出部14は、S24で置き換えた文字列(Power.StandardFan)を拡張クラスの型53として、拡張クラスB(図9)の拡張インスタンス56を生成する(S14)。
【0040】
以上説明した本実施形態の機能拡張装置10により、以下の効果が得られる。
(第1効果)顧客ニーズに合わせて、ソフトウェアのパッケージ製品の売り方を変えることが可能となる。例えば、標準パッケージ製品として標準クラスAを拡張した拡張クラスBを開発して販売した際に、顧客によって標準クラスAを使うか、拡張クラスBを使うかによって販売料金を変えることができる。
(第2効果)標準パッケージのソースコードに手を加えずに、顧客ニーズに合わせた機能開発が可能となる。例えば、顧客が標準クラスAに対して顧客の運用に合うようにアドオンする際に拡張クラスBを作成することで、標準パッケージのソースコードに手を加えることなく処理の変更が可能となる。
【0041】
(第3効果)ユーザ情報テーブル11によって標準クラスAと拡張クラスBとを切り替えることが容易になる。つまり、複数の担当者が同じアプリケーションを使用する場合でも、担当者に応じて(さらに、担当者が起動する画面に応じて)きめ細かく拡張機能のON/OFFを切り替えることが可能となる。
(第4効果)同一の標準機能に対して複数の拡張機能を持たせることが可能となる。そのため、標準クラスAに対して複数の拡張クラスBを用意して、拡張クラスBごとに別々のエントリを辞書13に登録しておく。例えば、インスタンス管理部12は、「第1の拡張機能名称52&標準クラス名称54」から第1の拡張クラスの型53を返す第1エントリと、「第2の拡張機能名称52&標準クラス名称54」から第2の拡張クラスの型53を返す第2エントリとの双方を辞書13に追加する。
【0042】
さらに、本発明は上述した各実施形態に限られるものではなく、特許請求の範囲に記載した本発明の要旨を逸脱しない限りにおいて、その他種々の応用例、変形例を取り得ることは勿論である。例えば、上述した各実施形態は本発明を分かりやすく説明するために機能拡張装置10の構成を詳細かつ具体的に説明したものであり、必ずしも説明した全ての構成要素を備えるものに限定されない。また、ある実施形態の構成の一部を他の実施形態の構成要素に置き換えることが可能である。また、ある実施形態の構成に他の実施形態の構成要素を加えることも可能である。また、各実施形態の構成の一部について、他の構成要素の追加又は置換、削除をすることも可能である。
【0043】
また、上記の各構成、機能、処理部等は、それらの一部又は全部を、例えば集積回路で設計するなどによりハードウェアで実現してもよい。ハードウェアとして、FPGA(Field Programmable Gate Array)やASIC(Application Specific Integrated Circuit)などの広義のプロセッサデバイスを用いてもよい。
また、上述した実施形態にかかる機能拡張装置10の各構成要素は、それぞれのハードウェアがネットワークを介して互いに情報を送受信できるならば、いずれのハードウェアに実装されてもよい。また、ある処理部により実行される処理が、1つのハードウェアにより実現されてもよいし、複数のハードウェアによる分散処理により実現されてもよい。
【符号の説明】
【0044】
10 機能拡張装置
11 ユーザ情報テーブル(ユーザ情報記憶部)
12 インスタンス管理部
13 辞書
14 機能呼出部
15 標準機能実行部
16 拡張機能実行部
17 名前空間とクラス
20 ユーザ端末
51 標準機能のクラス名称
52 拡張機能名称
53 拡張クラスの型
54 標準クラス名称
55 標準機能名称
56 拡張インスタンス(インスタンス)
100 機能提供システム
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11