(57)【特許請求の範囲】
【請求項１】
ソフトウェアの機能単位の部品であるコンポーネントを構成するクラス間の関係構造を生成するクラス構造生成装置におけるクラス構造生成方法であって、
前記クラス構造生成装置の処理部には、
前記コンポーネントで処理されまたは処理された処理情報の入出力に関する情報である入出力情報、
前記コンポーネントを構成するクラスの機能に関する情報である機能情報、
および前記クラスの機能間の関係に関する情報である関係情報
が入力部を介して入力され、
前記処理部は、
前記入力した入出力情報および機能情報を基に、前記処理情報の入出力に関連するクラスに関する情報であるクラス情報を生成し、
前記入力した関係情報を基に、前記生成したクラス情報同士を関連付けるクラス間関係情報を生成し、
前記生成したクラス間関係情報に基づいて、複数の前記クラス情報を関連付けて表示部に表示することを特徴とするクラス構造生成方法。
【請求項２】
前記処理部には、
前記入力部を介して当該情報が所属するコンポーネントの情報である所属コンポーネント情報が、前記入出力情報と対応付けられて入力され、
前記生成したクラス情報は、前記所属コンポーネント情報と対応付けられ、
前記処理部は、
前記表示部に前記クラス情報を表示する際に、前記所属コンポーネント情報も表示することを特徴とする請求項１に記載のクラス構造生成方法。
【請求項３】
前記機能情報は、同一の機能を有する前記クラス情報が複数生成されたとき、当該クラス情報を１つにまとめる統合が可能であるか否かに関する統合情報を有しており、
前記処理部は、
同一の機能を有する前記クラス情報が複数生成された場合、前記クラス情報の生成元となった前記機能情報の前記統合情報を参照し、統合が可能であった場合、前記同一の機能を有するクラス情報を１つにまとめたクラス情報を新たに生成し、
前記まとめる前のクラス情報に関連のあったクラス情報と、前記新たに生成したクラス情報とを関連付けて、前記クラス間関係情報に格納することを特徴とする請求項１に記載のクラス構造生成方法。
【請求項４】
前記機能情報は、共通の機能を有する前記クラス情報が複数生成されたとき、当該クラス情報から、共通の機能を抽出したクラスを生成する抽出が可能であるか否かに関する抽出情報を有しており、
前記処理部は、
共通の機能を有する前記クラス情報が複数生成された場合、前記クラス情報の生成元となった前記機能情報の前記抽出情報を参照し、抽出が可能であった場合、共通の機能を有するクラス情報を新たに生成し、
当該生成したクラス情報を、前記新たに生成したクラス情報に関連付けて、前記クラス間関係情報に格納することを特徴とする請求項１に記載のクラス構造生成方法。
【請求項５】
前記入出力情報は、前記処理情報の入出力の機能を有するサービスインタフェースの名称であるサービスインタフェース名を有し、
前記処理部は、
前記サービスインタフェース名を含んだクラス名を有する前記クラス情報を生成することを特徴とする請求項１に記載のクラス構造生成方法。
【請求項６】
前記機能情報は、前記サービスインタフェースに関し、少なくとも２つの機能に関する文字列を有しており、
前記処理部は、
前記機能情報を基に、前記サービスインタフェースに関し、異なる機能に関する文字列を含んだクラス名を有するクラス情報を生成し、
前記関係情報を基に、当該生成したクラス情報同士を関連付けて、前記クラス間関係情報に格納することを特徴とする請求項５に記載のクラス構造生成方法。
【請求項７】
前記機能情報は、前記サービスインタフェース間を仲介する機能に関する情報を有しており、
前記入出力情報は、第１のサービスインタフェースと、第２のサービスインタフェース間の関係に関する情報であるサービスインタフェース間関係情報を有し、
前記処理部は、
前記機能情報を基に、前記サービスインタフェース間を仲介する機能を有するクラスのクラス情報を生成し、
前記サービスインタフェース間関係情報に従って、前記生成したクラス情報を、前記第１のサービスインタフェースの名称をクラス名に有するクラス情報と、前記第２のサービスインタフェースの名称を含んだクラス名に有するクラス情報とに関連付けて、前記クラス間関係情報に格納することを特徴とする請求項５に記載のクラス構造生成方法。
【請求項８】
前記第１のサービスインタフェースおよび前記第２のサービスインタフェースは、異なるコンポーネントに所属することを特徴とする請求項７に記載のクラス構造生成方法。
【請求項９】
前記機能情報は、前記処理情報の入出力方法に関する情報を有しており、
前記入出力情報は、前記処理情報の入出力方法の名称を有し、
前記処理部は、
前記クラス名に前記入出力方法の名称を有する前記クラス情報を生成し、
前記機能情報および関係情報を基に、当該生成したクラス情報を、前記サービスインタフェース名を含んだクラス名を有する前記クラス情報に関連付けて、前記クラス間関係情報に格納することを特徴とする請求項５に記載のクラス構造生成方法。
【請求項１０】
前記サービスインタフェースに関する入出力種類とは、画面入力、画面出力、ＸＭＬファイル入力、ＸＭＬファイル出力、テキストファイル入力、テキストファイル出力およびＣＳＶファイル出力のうち、少なくとも１つが含まれることを特徴とする請求項８に記載のクラス構造生成方法。
【請求項１１】
前記機能情報は、前記クラス構造生成装置が有するテーブルを参照する機能に関する情報が格納されており、
前記入出力情報は、前記処理情報の入出力の機能を有するサービスインタフェースと、前記サービスインタフェースが参照するテーブルとの関係に関する情報であるサービスインタフェース・テーブル間関係情報を有し、
前記処理部は、
前記機能情報を基に、前記テーブルを参照する機能を有するクラス情報を生成し、
前記生成したクラス情報を、前記サービスインタフェース・テーブル間関係情報に従って前記テーブルに関連付け、
さらに前記生成したクラス情報を、前記入力されたサービスインタフェース・テーブル間関係情報に従って前記サービスインタフェースに関するクラス情報に関連付けて前記クラス間関係情報に格納することを特徴とする請求項１に記載のクラス構造生成方法。
【請求項１２】
前記入出力情報は、前記サービスインタフェースによるテーブル参照方法の名称を含み、
前記処理部は、
前記テーブル参照方法の名称を含んだクラス名を有する前記テーブルを参照する機能を有する前記クラス情報を生成することを特徴とする請求項１１に記載のクラス構造生成方法。
【請求項１３】
前記テーブル参照方法の名称とは、データ作成、データ参照、データ検索、データ更新およびデータ削除のいずれか一つが含まれていることを特徴とする請求項１２に記載のクラス構造生成方法。
【請求項１４】
ソフトウェアの機能単位の部品であるコンポーネントを構成するクラス間の関係構造を生成するクラス構造生成方法をクラス構造生成装置に実行させるクラス構造生成プログラムであって、
前記クラス構造生成装置の処理部には、
前記コンポーネントで処理されまたは処理された処理情報の入出力に関する情報である入出力情報、
前記コンポーネントを構成するクラスの機能に関する情報である機能情報、
および前記クラスの機能間の関係に関する情報である関係情報
が入力部を介して入力され、
前記処理部に、
前記入力した入出力情報および機能情報を基に、前記処理情報の入出力に関連するクラスに関する情報であるクラス情報を生成し、
前記入力した関係情報を基に、前記生成したクラス情報同士を関連付けるクラス間関係情報を生成し、
前記生成したクラス間関係情報に基づいて、複数の前記クラス情報を関連付けて表示部に表示する処理を実行させることを特徴とするクラス構造生成プログラム。
【請求項１５】
ソフトウェアの機能単位の部品であるコンポーネントを構成するクラス間の関係構造を生成するクラス構造生成装置であって、
前記コンポーネントで処理されまたは処理された処理情報の入出力に関する情報である入出力情報、
前記コンポーネントを構成するクラスの機能に関する情報である機能情報、
および前記クラスの機能間の関係に関する情報である関係情報を入力する入力部、
前記入力した入出力情報および機能情報を基に、前記処理情報の入出力に関連するクラスに関する情報であるクラス情報を生成し、前記入力した関係情報を基に、前記生成したクラス情報同士を関連付けるクラス間関係情報を生成するクラス構造テンプレート適用部、
前記生成したクラス間関係情報に基づいて、複数の前記クラス情報を関連付けて表示部に表示させるクラス構造表示処理部を有することを特徴とするクラス構造生成装置。
【請求項１６】
前記クラス構造テンプレート適用部は、
前記入力部を介して当該情報が所属するコンポーネントの情報である所属コンポーネント情報を、前記入出力情報と対応付けて入力し、前記生成したクラス情報を、前記所属コンポーネント情報と対応付ける機能をさらに有し、
前記クラス構造表示処理部は、
前記表示部に前記クラス情報を表示する際に、前記所属コンポーネント情報も表示する機能をさらに有することを特徴とする請求項１５に記載のクラス構造生成装置。
【請求項１７】
前記機能情報は、同一の機能を有する前記クラス情報が複数生成されたとき、当該クラス情報を１つにまとめる統合が可能であるか否かに関する統合情報を有しており、
前記クラス構造生成装置は、
同一の機能を有する前記クラス情報が複数生成された場合、前記クラス情報の生成元となった前記機能情報の前記統合情報を参照し、統合が可能であった場合、前記同一の機能を有するクラス情報を１つにまとめたクラス情報を新たに生成し、前記まとめる前のクラス情報に関連のあったクラス情報と、前記新たに生成したクラス情報とを関連付けて、前記クラス間関係情報に格納するクラス構造調整部を有することを特徴とする請求項１５に記載のクラス構造生成装置。
【請求項１８】
前記機能情報は、共通の機能を有する前記クラス情報が複数生成されたとき、当該クラス情報から、共通の機能を抽出したクラスを生成する抽出が可能であるか否かに関する抽出情報を有しており、
前記クラス構造生成装置は、
共通の機能を有する前記クラス情報が複数生成された場合、前記クラス情報の生成元となった前記機能情報の前記抽出情報を参照し、抽出が可能であった場合、共通の機能を有するクラス情報を新たに生成し、当該生成したクラス情報を、前記新たに生成したクラス情報に関連付けて、前記クラス間関係情報に格納するクラス構造調整部を有することを特徴とする請求項１５に記載のクラス構造生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クラス構造生成方法、クラス構造生成プログラムおよびクラス構造生成装置の技術に関する。
【背景技術】
【０００２】
ソフトウェア開発においては、開発対象を論理的なモジュールに分割して行うことが多い。特に近年では、プログラムとして実装される機能単位であるコンポーネント（モジュール）と、その機能を外部のコンポーネントから利用できるようにするためのサービスインタフェースなどでソフトウェアを構成する開発方法が注目されている。このように、開発対象をコンポーネントに分割することをコンポーネント分割と呼ぶ。
【０００３】
コンポーネント分割を行ってからソフトウェアを開発する利点として、プログラムの変更による影響が他の箇所へ波及することを極力避けることができるという点や、開発したコンポーネント単位で他のソフトウェアに再利用できる点が挙げられる。
コンポーネント分割の指針としては、同一の機能を１つのコンポーネントに集約し、その機能の変更によって起こる変更箇所を最小限に抑えるというものや、コンポーネント間の関係を疎にすることで、コンポーネント内部の変更の影響が他のコンポーネントに波及することを抑え、また、コンポーネントの独立性を高めて再利用を可能にするといったものがある。
【０００４】
コンポーネント分割の後、ソフトウェア開発設計者（以下、設計者と記載）は、コンポーネント分割で定義したサービスインタフェースやテーブル、およびそれらの間の関係を制約としてコンポーネント内部の設計を行う。オブジェクト指向設計などにおいて、コンポーネント内部の機能は、機能の最小単位であるメソッドを複数有するクラスという単位の集合で構成される。すなわち、コンポーネント内部の設計とはクラス構造の設計である。ここで、サービスインタフェースとは、コンポーネント内部の機能を、コンポーネント外部から使用するためのインタフェースである。
【０００５】
特許文献１では、設計者が入力したユースケースの記述に含まれる情報を解釈し、その解釈から得た情報と設計者が設計したデータ構造に関する情報から、クラス構造の設計を行う技術が開示されている。ここで、ユースケースとは自然言語によって記述されるソフトウェア開発の対象となるシステムの機能単位を表す。なお、特許文献１では、本明細書における「クラス」の意味で「オブジェクト」が用いられている。
【特許文献１】特開平１０−２４０５１０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
コンポーネント分割の指針として、同一機能の集約とコンポーネント間の疎結合とについて挙げたが、これらは同時に成立しない場合も存在する。例えば、集約した同一の機能が他のコンポーネントから何度も利用される機能である場合には、コンポーネント間の関係が増えて結合が強くなってしまう場合などが該当する。そのため、コンポーネント間の結合が密になることを避けるために、同一な機能や類似した機能が複数のコンポーネントにまたがって存在することが避けられない場合もある。
【０００７】
コンポーネント分割の後、同一の機能や類似した機能はそれぞれのコンポーネントで実装されるが、こうした機能に変更がある場合には、変更箇所や変更手順が、スムーズに把握できることが望まれる。そのために、コンポーネント内部の機能の実装の方法、つまりクラス構成は、コンポーネント内部だけではなく開発対象のソフトウェア全体において統一した制約を持つことが望まれる。特に、大規模なシステム開発においてこの考え方は非常に重要で、フレームワークによってクラス構造に制約が与えられる場合もあるのだが、開発プロジェクト全体でその制約を順守しきれない場合も多い。つまり、コンポーネントの設計者毎に、制約を設けるため、システム開発全体で統一された制約が実現されないことが多い。このような状況は、使用変更時の作業量が増大する原因となってしまう。
【０００８】
特許文献１では、設計者が入力したユースケース記述に含まれる情報からクラス構造の生成を行う技術が示されているが、一定の制約に従ったクラス構造を統一させるためには、ユースケース記述にも一定の制約が課される必要がある。しかしながら、ユースケースは、自然言語で記述されるため、設計者間の制約が異なることが生じることが多い。特に大規模なシステム開発においては、制約に従った正確なユースケース記述は設計者の負担となることが予想される。また、クラス構造の決定前の段階ではまだ変更の可能性が高いため、ユースケースのような文章を何度も記述することによって、設計・改善のサイクルの速度低下につながることが懸念される。
【０００９】
このような背景に鑑みて本発明がなされたのであり、本発明は、コンポーネント設計に係るクラス構造を生成することを目的とする。
【課題を解決するための手段】
【００１０】
前記課題を解決するため、本発明は、コンポーネントにおけるサービスインタフェース間の関係およびサービスインタフェース・テーブル間の関係に関する情報と、クラスの機能間の関係に関する情報とが入力されることにより、入力された各情報を基に、コンポーネントを構成するクラス間の関係を出力することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、コンポーネント設計に係るクラス構造を生成することができる。
【発明を実施するための最良の形態】
【００１２】
次に、本発明を実施するための最良の形態（「実施形態」という）について、適宜図面を参照しながら詳細に説明する。
【００１３】
図１は、本実施形態に係るクラス構造生成装置の構成例を示すブロック図である。
図１に示すように、本実施形態に係るクラス構造生成装置１は、情報の処理を行う処理部１０、情報を記憶する記憶部２０、情報の入力を行う入力部３０および情報の表示を行う表示部４０を有してなる。処理部１０は、入力部３０から情報を取得し、記憶部２０に情報を記憶したり、記憶部２０から情報を取得する。また、処理部１０は、表示部４０に情報を表示させる。
処理部１０は、コンポーネント体系定義編集部１１、サービス責務定義編集部１２、クラス構造テンプレート適用部１３、重複クラス構造検出部１４、クラス構造調整部１５およびクラス構造表示処理部１６を有してなる。各部１１〜１６の機能については、図３１から図３９を参照して後記する。記憶部２０は、コンポーネント体系定義記憶部２１、サービス責務定義記憶部２２、クラス構造テンプレート記憶部２３、クラス構造記憶部２４および重複クラス構造記憶部２５を有する。各記憶部２１〜２５の詳細は、図２を参照して後記する。なお、入力部３０、コンポーネント体系定義編集部１１およびサービス責務定義編集部１２が、請求項における入力部に該当する。また、重複クラス構造検出部１４およびクラス構造調整部１５が請求項におけるクラス構造調整部に該当する。
【００１４】
図２は、図１における各記憶部の構成例を示す図である。
コンポーネント体系定義記憶部２１は、入力部３０から入力された情報を基に、コンポーネント体系定義部編集部１１（図１参照）によって、作成・編集されたコンポーネント体系に関する情報を格納している。図３に示すように、コンポーネント体系定義記憶部２１は、コンポーネント定義表２１１、サービスインタフェース定義表２１２、テーブル定義表２１３、サービスインタフェース間依存関係定義表２１４、サービスインタフェース・テーブル間依存関係定義表２１５を有する。
【００１５】
サービス責務定義記憶部２２は、入力部３０を介して入力された情報を基に、サービス責務定義編集部１２によって作成・編集されるサービス責務定義を格納している。図２に示すように、サービス責務定義記憶部２２は、サービス入出力定義表２２１（サービス入出力情報）、テーブル使用方法定義表２２２（テーブル使用方法情報）を有する。
【００１６】
クラス構造テンプレート記憶部２３は、入力部３０を介して入力された情報を基に、コンポーネント体系定義編集部１１（図１参照）によって作成・編集されるクラス間の構造に関する情報を格納している。図２に示すように、クラス構造テンプレート記憶部２３は、クラス構造テンプレート定義表２３１、クラステンプレート定義表２３２、クラス間依存関係テンプレート定義表２３３、クラス・テーブル間依存関係テンプレート定義表２３４およびクラス構造テンプレート・クラステンプレート間依存関係定義表２３５を有する。
【００１７】
クラス構造記憶部２４は、クラス構造テンプレート適用部１３において生成されるクラスに関する情報を格納している。図２に示すように、クラス構造記憶部２４は、クラス定義表２４１（クラス情報）、クラス間依存関係定義表２４２、クラス・テーブル間依存関係定義表２４３およびクラス・サービスインタフェース間依存関係定義表２４４を有する。
【００１８】
重複クラス構造記憶部２５は、重複クラス構造検出部１４によって生成される重複クラスに関する情報を格納している。図２に示すように、重複クラス構造記憶部２５は、重複クラスグループ表２５１、重複クラス表２５２、重複関係元クラス表２５３、重複関係先クラス表２５４、重複関係先テーブル表２５５および統合クラス表２５６を有する。
【００１９】
なお、図２に示す各表２１１〜２１５，２２１，２２２，２３１〜２３５，２４１〜２４４，２５１〜２５６は、図９〜図３０を参照して後で詳細に説明する。なお、サービスインタフェース定義表２１２、テーブル定義表２１３、サービスインタフェース間依存関係定義表２１４およびサービスインタフェース・テーブル間依存関係定義表２１５が、入出力情報に相当し、クラス構造テンプレート定義表２３１およびクラステンプレート２３２が、機能情報に相当し、クラス間依存関係テンプレート定義表２３３およびクラス・テーブル間依存関係テンプレート定義表２３４が関係情報に相当する。また、クラス定義表２４１が、クラス情報に相当する。さらに、サービスインタフェース間依存関係定義表２１４は、サービスインタフェース間関係情報に相当し、およびサービスインタフェース・テーブル間依存関係定義表２１５は、サービスインタフェース・テーブル間関係情報に相当する。また、サービス入出力定義表２２１は、処理情報の入出力方法の名称に相当し、テーブル使用方法定義表２２２は、テーブル参照方法の名称に相当する。
【００２０】
図３は、本実施形態に係るクラス構造生成装置のハードウェア構成の例を示す図である。
クラス構造生成装置１は、プロセッサ５１、主記憶装置５３、補助記憶装置５２、キーボードやマウスなどの入力装置５４、およびディスプレイなどの表示装置５５を有する。
図１における各部１１〜１６は、補助記憶装置５２に記憶されているクラス構成生成プログラムが主記憶装置５３に展開され、プロセッサ５１によって実行されることによって具現化する。
【００２１】
次に、図４〜図８を参照して、本実施形態の概要を説明する。
図４は、本実施形態に係るコンポーネント体系表示画面の例を示す図である。
図４のコンポーネント表示画面３００は、図２を参照して前記した表２１１〜２１５，２２１，２２２，２３１〜２３５が入力部を介して入力されたときのコンポーネント体系を模式的に表示したものである。
図４において、設計したいソフトウェアは、「コンポーネント１」、「コンポーネント２」および「コンポーネント３」からなる。「コンポーネント１」は、外部からの入出力を受け付ける「サービスインタフェース１」を備え、そしてこの「サービスインタフェース１」が参照する「テーブル１」を有する。「コンポーネント２」は、「サービスインタフェース１」から入力を受け付ける「サービスインタフェース２」を有し、「コンポーネント３」は、「サービスインタフェース１」から入力を受け付ける「サービスインタフェース３」を有する。
【００２２】
図４に示す「クラス構造表示」ボタン３２０を選択入力すると、クラス構造生成装置１（図１）は、図２の符号２１１〜２１５，２２１，２２２，２３１〜２３５，２４１〜２４４，２５１〜２５６に示す各表を参照または生成してクラス間の関係を選択し、図５に示すクラス構造表示画面４００を表示部４０（図１）に出力する。
【００２３】
図５は、本実施形態に係るクラス構造表示画面の例を示す図である。
図５のクラス構造表示画面４００では、「コンポーネント１」〜「コンポーネント３」を構成するクラスである「クラス１」〜「クラス７」と「テーブル１」との関係が表示されている。なお、図５における「コンポーネント体系表示」ボタン４２０が選択入力されると、図４に示す画面へ戻る。
【００２４】
次に、図６〜図８を参照して、本実施形態を金融商品契約ソフトウェアに適用した例を示す。
図６は、金融商品契約ソフトウェアにおける表示コンポーネント体系の例を示す図である。
図６に示す表示コンポーネント体系５４０は、表示部４０（図１）のコンポーネント体系表示画面に表示される。
図６に示す表示コンポーネント体系４０は、「保全異動コンポーネント」、「契約情報管理コンポーネント」および「共通機能コンポーネント」からなる。
「保全異動コンポーネント」は、サービスインタフェースとして「契約変更」サービスインタフェースおよび「異動請求進捗照会」サービスインタフェースを含み、テーブルとして「異動請求進捗管理情報」が含まれている。
また、「契約情報管理コンポーネント」には、「契約情報取得」サービスインタフェースおよび「契約情報更新」サービスインタフェースが含まれる。
そして、「共通機能コンポーネント」には、「帳票作成」サービスインタフェースが含まれる。
【００２５】
「契約情報取得」サービスインタフェースおよび「契約情報更新」サービスインタフェースは、「契約変更」サービスインタフェースから情報を取得し、「帳票作成」サービスインタフェースは、「契約変更」サービスインタフェースおよび「異動請求進捗照会」サービスインタフェースから情報を取得する。そして、「契約変更」サービスインタフェースおよび「異動請求進捗照会」サービスインタフェースは、テーブルである「異動請求進捗管理情報」を参照する。
【００２６】
図６に示すようなコンポーネント体系に対し、本実施形態のクラス構造生成方法を適用することによって、図７に示すような表示クラス構造（調整前）５５０を表示部４０（図１参照）に出力する。なお、ここで、「調整」とは、後記する「統合」および「抽出」といったクラスの調整を指す。
図７は、金融商品契約ソフトウェアにおける表示クラス構造の例を示す図である。
図７では、各コンポーネントにおけるクラスとテーブルとの関係が表示されている。各クラスに関する詳細な説明は省略するが、符号５５１に示す「画面入力情報チェック」を示すクラスと、符号５５２に示す「画面入力情報チェック」を示すクラスとは、同一の機能を有するクラスである。
また、符号５５３に示す「契約変更画面入力情報取得」を示すクラスと、符号５５４に示す「異動請求進捗管理情報取得」を示すクラスとは、画面入力情報の機能を共通に有する。
【００２７】
このように同一の機能を有するクラスや、共通の機能を有するクラスが存在する場合は、クラス構造生成装置１が、後記する重複クラス構造検出処理およびクラス構造調整処理を行うことによって図８に示すような表示クラス構造（調整後）５６０が表示部４０（図１）に表示される。
【００２８】
図８は、金融商品契約ソフトウェアにおける表示クラス構造の例を示す図である。
図８では、図７において同一の機能を有していたクラス５５１，５５２が、１つのクラス５６１（「画面入力情報チェック」クラス）に集約されている。このように同一の機能を有する複数のクラスを１つのクラスに集約することを本実施形態では「統合」と記載する）。
また、図８では、図７において共通の機能を有していたクラス５５３，５５４から、共通の機能であるクラス５６４（「画面入力情報取得」クラス）が抽出され、図７のクラス５５３，クラス５５４から「画面入力情報取得」の機能が抽出された後の機能を有するクラス５６２（「契約変更画面入力情報取得」クラス）およびクラス５６３（「異動請求進捗照会画面入力情報取得」クラス）は、新たに生成されたクラス５６４（画面入力情報取得）クラス）へ接続されている。クラス５６４は、図７のクラス５５３，５５４における共通の機能を抽出したクラスである。このように共通の機能を有する複数のクラスから、共通部分を抜き出したクラスを生成することを本実施形態では「抽出」と記載する。
【００２９】
次に、図９〜図３０を参照して、本実施形態に使用される各表を説明し、その後、処理の説明を行う。なお、以下の記述において、依存関係とは、ある対象とある対象とが関係付けられている状況を示す。また。図９〜図３０に示す各表の一番左側に記載されているＩＤは、該当する表の主キーとなり、クラス構造生成装置１の処理部１０によって自動的に発行され、付与される識別情報である。そして、図９〜図３０に示す各表において、同一の名称であるＩＤを有するとき、それらの表は、当該ＩＤを介してリンクしている（対応付けられている）ことを示す。
【００３０】
（コンポーネント定義表）
図９は、コンポーネント定義表の例を示す図である。
コンポーネント定義表２１１は、コンポーネントに関する情報を格納するための表であり、入力部３０（図１）およびコンポーネント体系定義編集部１１（図１）を介してユーザが作成・編集する表である。
コンポーネント定義表２１１は、コンポーネントを一意に識別するための「コンポーネントＩＤ」と、コンポーネントの名称を表す「コンポーネント名」とをフィールドとして有する。
【００３１】
（サービスインタフェース定義表）
図１０は、サービスインタフェース定義表の例を示す図である。
サービスインタフェース定義表２１２は、サービスインタフェースに関する情報を格納するための表であり、入力部３０（図１）およびコンポーネント体系定義編集部１１（図１）を介してユーザが作成・編集する表である。
サービスインタフェース定義表２１２は、サービスインタフェースを一意に識別するための「サービスインタフェースＩＤ」と、サービスインタフェースの名称を表す「サービスインタフェース名」と、サービスインタフェースが所属するコンポーネントを指定するための「所属コンポーネントＩＤ」とをフィールドとして有する。
【００３２】
（テーブル定義表）
図１１は、テーブル定義表の例を示す図である。
テーブル定義表２１３は、テーブルに関する情報を格納するための表であり、入力部３０（図１）およびコンポーネント体系定義編集部１１（図１）を介してユーザが作成・編集する表である。
テーブル定義表２１３は、テーブルを一意に識別するための「テーブルＩＤ」と、テーブルの名称を表す「テーブル名」と、テーブルが所属するコンポーネントを指定するための「所属コンポーネントＩＤ」とをフィールドとして有する。
【００３３】
（サービスインタフェース間依存関係定義表）
図１２は、サービスインタフェース間依存関係定義表の例を示す図である。
サービスインタフェース間の依存関係とは、サービスインタフェースを公開している機能が他の機能を呼び出すために、他の機能が有するサービスインタフェースを参照することを意味する。すなわち、サービスインタフェース間依存関係定義表２１４は、サービスインタフェース間の依存関係に関する情報を格納する表であり、入力部３０（図１）およびコンポーネント体系定義編集部１１（図１）を介してユーザが作成・編集する表である。
サービスインタフェース間依存関係定義表２１４は、サービスインタフェース間の関係を一意に識別するための「サービスインタフェース間依存関係ＩＤ」と、サービスインタフェース間依存関係元のサービスインタフェースＩＤである「関係元サービスインタフェースＩＤ」と、サービスインタフェース間依存関係の関係先のサービスインタフェースＩＤである「関係先サービスインタフェースＩＤ」とをフィールドとして有する。
【００３４】
（サービスインタフェース・テーブル間依存関係定義表）
図１３は、サービスインタフェース・テーブル間依存関係定義表の例を示す図である。
サービスインタフェースとテーブルの間の依存関係とは、サービスインタフェースを公開している機能がテーブルを使用することを意味する。すなわち、サービスインタフェース・テーブル間依存関係定義表２１５は、サービスインタフェースとテーブルとの間の依存関係に関する情報を格納する表であり、入力部３０（図１）およびコンポーネント体系定義編集部１１（図１）を介してユーザが作成・編集する表である。
サービスインタフェース・テーブル間依存関係定義表２１５は、サービスインタフェース・テーブル間依存関係を一意に識別するための「サービスインタフェース・テーブル間依存関係ＩＤ」と、サービスインタフェース・テーブル間依存関係の関係元のサービスインタフェースＩＤである「関係元サービスインタフェースＩＤ」と、サービスインタフェース・テーブル間依存関係の関係先のテーブルＩＤである「関係先テーブルＩＤ」を有する。
【００３５】
（サービス入出力定義表）
図１４は、サービス入出力定義表の例を示す図である。
図１４に示すように、サービス入出力定義表２２１は、サービスインタフェースの機能を定義するための表である。すなわち、サービス入出力定義表２２１は、該当するサービスインタフェースにおける情報の入出力方法を特定するための表であり、入力部３０（図１）およびサービス責務定義編集部１２（図１）を介してユーザが作成・編集する表である。
サービス入出力定義表２２１は、「サービスインタフェースＩＤ（Identification）」、「画面入力」、「ＸＭＬ（Extensible Markup Language）ファイル入力」、「テキストファイル入力」、「画面出力」、「帳票出力」、「ＣＳＶ（Comma Separated Values）ファイル出力」、「ＸＭＬファイル出力」などをフィールドとして有している。これらの各フィールドに相当する欄には、該当するサービスインタフェースが有する機能を「ＴＲＵＥ」または「ＦＡＬＳＥ」で規定している。例えば、図１４の１行目の「Ｓ００１」をサービスインタフェースＩＤに有するサービスインタフェースは、「画面入力」および「画面出力」を行うサービスインタフェースである。
【００３６】
図１５は、テーブル使用方法定義表の例を示す図である。
テーブル使用方法定義表２２２は、サービスインタフェースがテーブルを使用するときの使用方法を定義するための表である。すなわち、テーブル使用方法定義表２２２は、サービスインタフェースがテーブルを参照する際の処理内容を特定するための表であり、入力部３０（図１）およびサービス責務定義編集処理部１２（図１）を介してユーザが作成・編集する表である。
テーブル使用方法定義表２２２は、「サービスインタフェース・テーブル間依存関係ＩＤ」、「テーブルデータ作成」、「テーブルデータ参照」、「テーブルデータ検索参照」、「テーブルデータ更新」、「テーブルデータ削除」などをフィールドとして有している。これらの各フィールドに相当する欄には、該当するサービスインタフェースがテーブルを使用する際の機能を「ＴＲＵＥ」または「ＦＡＬＳＥ」で規定している。例えば、図１５の１行目の「ＳＴＲ００１」をサービスインタフェース・テーブル間依存関係ＩＤに該当するサービスインタフェース・テーブル間依存関係は、「テーブルデータ作成」である。
【００３７】
（クラス構造テンプレート定義表）
図１６は、クラス構造テンプレート定義表の例を示す図である。
クラス構造テンプレート定義表２３１は、クラス設計を行うためのクラス構造のテンプレートを定義するためのテーブルであり、入力部３０（図１）およびコンポーネント体系定義編集部１１（図１）を介してユーザが作成・編集する表である。クラス構造のテンプレートは、図１７〜図２０で後記するクラステンプレート定義表２３２、クラス間依存関係テンプレート定義表２３３、クラス・テーブル間依存関係テンプレート定義表２３４、クラス構造テンプレート・クラステンプレート間依存関係定義表２３５などのテンプレートと組み合わせて使用される。
【００３８】
図１６に示すように、クラス構造テンプレート定義表２３１は、クラス構造テンプレートを一意に識別するための「テンプレートＩＤ」と、クラス構造テンプレートを適用する基準を定義する「適用判断基準」と、どのクラス構造テンプレートを適用するかを判断するための「適用判断基準項目」とをフィールドとして有する。なお、「適用判断基準」および「適用判断基準項目」については、後記して説明する。
【００３９】
（クラステンプレート定義表）
図１７は、クラステンプレート定義表の例を示す図である。
クラステンプレート定義表２３２は、クラスに用いられる情報を機能毎に定めたテンプレート（クラステンプレートと記載）を格納する表であり、入力部３０（図１）およびコンポーネント体系定義編集部１１（図１）を介してユーザが作成・編集する表である。
クラステンプレート定義表２３２は、以下の各情報などをフィールドとして有する。「クラステンプレートＩＤ」は、クラステンプレートを一意に識別するための情報である。「生成クラス名」は、クラステンプレートを用いて定義されたクラスの名称である。「名称取得対象」は、クラステンプレート適用の対象となるサービスインタフェース名や、テーブル名などが格納されており、サービスインタフェース名や、テーブル名が複数（サービス１１，サービス１２，などのように）格納されている。「統合」は、クラス構造の調整（前記した統合および抽出）において、統合の対象となるか否かを「ＴＲＵＥ」および「ＦＡＬＳＥ」で指定する情報である（統合可能情報）。「抽出」は、クラス構造の調整で抽出の対象とするか否かを「ＴＲＵＥ」または「ＦＡＬＳＥ」で指定する情報である（抽出可能情報）。なお、符号２３２１，２３２２については後記する。
【００４０】
（クラス間依存関係テンプレート定義表）
図１８は、クラス間依存関係テンプレート定義表の例を示す図である。
クラス間依存関係テンプレート定義表２３３は、図１６で定義されたクラステンプレート間の依存関係を示す表であり、入力部３０（図１）およびコンポーネント体系定義編集部１１（図１）を介してユーザが作成・編集する表である。クラス間依存関係テンプレート定義表２３３は、クラス間の依存関係に関するテンプレートを一意に識別するための「クラス間依存関係テンプレートＩＤ」と、対象となるクラス間依存関係テンプレートの関係元となるクラステンプレートＩＤである「関係元クラステンプレートＩＤ」、対象となるクラス間依存関係の関係先となるクラステンプレートＩＤである「関係先クラステンプレートＩＤ」、対象となるテンプレートＩＤである「テンプレートＩＤ」を有する。
【００４１】
（クラス・テーブル間依存関係テンプレート定義表）
図１９は、クラス・テーブル間依存関係テンプレート定義表の例を示す図である。
クラス・テーブル間依存関係テンプレート定義表２３４は、クラステンプレートと、テーブルとの間の依存関係を示す表であり、入力部３０（図１）およびコンポーネント体系定義編集部１１（図１）を介してユーザが作成・編集する表である。クラス・テーブル間依存関係テンプレート定義表２３４は、以下の各情報をフィールドとして有する。「クラス・テーブル間依存関係テンプレートＩＤ」は、クラステンプレート・テーブル間依存関係に関するテンプレートを一意に識別するための情報である。「関係元クラステンプレートＩＤ」は、クラステンプレート・テーブル間依存関係の関係元となるクラステンプレートＩＤである。「テンプレートＩＤ」は、図１６におけるクラステンプレートと同様である。
【００４２】
（クラス構造テンプレート・クラステンプレート間依存関係定義表）
図２０は、クラス構造テンプレート・クラステンプレート間依存関係定義表の例を示す図である。
クラス構造テンプレート・クラステンプレート間依存関係定義表２３５は、図１６の「テンプレートＩＤ」と、図１７の「クラステンプレートＩＤ」とを関係付けるための表であり、入力部３０（図１）およびコンポーネント体系定義編集部１１（図１）を介してユーザが作成・編集する表である。クラス構造テンプレート・クラステンプレート間依存関係定義表２３５は、図１６における「テンプレートＩＤ」と、図１７における「クラステンプレートＩＤ」とが対応付けられて格納されている。
【００４３】
ここまでは、入力部３０（図１）や、コンポーネント体系定義編集部１１（図１）や、サービス責務１２（図１）を介することによって、ユーザが作成・編集する表であるが、以降の表は、本実施形態に係るクラス構造生成方法を、クラス構造生成装置１（図１）が実行することにより、生成される表である。
【００４４】
（クラス定義表）
図２１は、クラス定義表の例を示す図である。
クラス定義表２４１は、クラスに関する情報を格納するための表である。
クラス定義表２４１は、クラスを一意に識別するための「クラスＩＤ」と、クラスの名称を表す「クラス名」と、クラスが所属するコンポーネントのコンポーネントＩＤ（図９）である「所属コンポーネントＩＤ」と、対象となるクラステンプレートを示す「テンプレートクラスＩＤ」とをフィールドとして有する。
【００４５】
（クラス間依存関係定義表）
図２２は、クラス間依存関係定義表の例を示す図である。
クラス間依存関係定義表２４２は、任意の２つクラス間の依存関係に関する情報を格納する表である。クラス間の依存関係とは、クラスの中で他のクラスを利用していることを意味する。クラス間依存関係定義表２４２は、以下の情報をフィールドとして有する。「クラス間依存関係ＩＤ」は、クラス間の依存関係を一意に識別するための情報である。「関係元クラスＩＤ」は、当該クラス間依存関係の関係元のクラスＩＤである。「関係先クラスＩＤ」は、、当該クラス間依存関係の関係先のクラスＩＤである。「抽出関係」は、関係元のクラスから関係先のクラスへの抽出関係の有無を「ＴＲＵＥ」および「ＦＡＬＳＥ」で示す。
【００４６】
（クラス・テーブル間依存関係定義表）
図２３は、クラス・テーブル間依存関係定義表の例を示す図である。
クラス・テーブル間依存関係定義表２４３は、クラスと、テーブルとの依存関係に関する情報を格納する表である。クラス・テーブル間の依存関係とは、クラスの中でテーブルの利用があることを意味する。クラス・テーブル間依存関係定義表２４３は、以下の情報をフィールドとして有する。「クラス・テーブル間依存関係ＩＤ」は、クラスと、テーブル間の依存関係を一意に識別するため情報である。「関係元クラスＩＤ」は、当該依存関係における関係元のクラスＩＤである。「関係先テーブルＩＤ」は、当該依存関係の関係先のテーブルＩＤである。
【００４７】
（クラス・サービスインタフェース間依存関係定義表）
図２４は、クラス・サービスインタフェース間依存関係定義表の例を示す図である。
クラス・サービスインタフェース間依存関係定義表２４４は、クラスと、サービスインタフェースとの依存関係に関する情報を格納する表である。クラス・サービスインタフェース間の依存関係とは、クラスはサービスインタフェースが提供する機能の１つであることを意味し、クラスが１つのサービスインタフェースのみの機能である場合にクラス・サービスインタフェース間の依存関係を定義する。クラス・サービスインタフェース間依存関係定義表２４４は、以下の情報をフィールドとして有する。「クラス・サービスインタフェース間依存関係ＩＤ」は、クラスと、サービスインタフェースとの間の依存関係を一意に識別するための情報である。「関係元クラスＩＤ」は、当該依存関係における関係元のクラスＩＤである。「関係先サービスインタフェースＩＤ」は、当該依存関係における関係先のサービスインタフェースＩＤである。
【００４８】
（重複クラスグループ表）
図２５は、重複クラスグループ表の例を示す図である。
重複クラスグループ表２５１は、前記した統合や、抽出といったクラス調整の際に用いられる表であり、後記する重複クラス構造検出処理（図３１参照）で生成される表である。
重複クラスグループ情報３７０は、以下の情報をフィールドとして有する。「重複クラスグループＩＤ」は、重複クラス検出部１２７において、重複（クラスの機能が同一もしくは共通の機能を含む）クラスとして検出されたクラスが属するグループ（重複クラスグループ）を一意に識別するための情報である。重複クラスグループは、重複クラス検出部において付されるグループであり、機能が重複しているクラスが属するグループである。クラスと重複クラスグループとは、図２６で後記する重複クラス表２５２において管理されている。「所属コンポーネントＩＤ」は、重複クラスグループでまとめられたクラスが所属するコンポーネントＩＤである。「クラステンプレートＩＤ」は、重複クラスグループでまとめられたクラスを定義したクラステンプレートＩＤを表す。「調整方法」は、「統合」、「抽出」などのクラスの調整方法に関する情報が格納される。
【００４９】
（重複クラス表）
図２６は、重複クラス表の例を示す図である。
重複クラス表２５２は、図２５で説明した重複クラスグループに属するクラスが示されるための表である。
重複クラス情報３７２は、「重複クラスグループＩＤ」と、当該「重複クラスグループＩＤ」に属するクラスＩＤとが対応付けられて格納されている。
【００５０】
（重複関係元クラス表）
図２７は、重複関係元クラス表の例を示す図である。
重複関係元クラス表２５３では、重複クラス検出部において検出された重複クラスの関係元のクラスに関する情報を格納するための表である。
重複関係元クラス表２５３は、重複クラスを呼び出しているクラスＩＤである「重複クラス関係元クラスＩＤ」と、「重複クラスグループＩＤ」とをフィールドとして有する。
【００５１】
図２６を参照すると、「重複クラスグループＩＤ」が「Ｇ００１」に含まれるクラスＩＤは、「Ｃ００１」および「Ｃ００２」である。図２７に記述されている情報は、例えば「Ｃ００３」→「Ｃ００１」および「Ｃ００４」→「Ｃ００２」であったとき、「Ｃ００１」および「Ｃ００２」が「Ｇ００１」に含まれたので、「Ｃ００３」および「Ｃ００４」→「Ｇ００１」に統合されたことを示す。ここで、矢印は、「関係元」→「関係先」であることを示す。つまり、クラス「Ｃ００３」の関係先がクラス「Ｃ００１」であり、クラス「Ｃ００４」の関係先がクラス「Ｃ００２」であったとき、「Ｃ００１」と「Ｃ００２」とが同一の重複クラスグループ「Ｇ００１」にまとまられたため、「Ｃ００３」および「Ｃ００４」の共通の関係先が、「Ｇ００１」となったことを示す。
【００５２】
（重複関係先クラス表）
図２８は、重複関係先クラス表の例を示す図である。
重複関係先クラス表２５４では、重複クラス検出部において検出された重複クラスの関係先のクラスに関する情報を格納するための表である。
重複関係先クラス表２５４は、重複クラスが呼び出されているクラスのＩＤ（図２３）である「重複クラス関係先クラスＩＤ」と、「重複クラスグループＩＤ」とをフィールドとして有する。
【００５３】
図２６を参照すると、「重複クラスグループＩＤ」が「Ｇ００１」に含まれるクラスＩＤは、「Ｃ００１」および「Ｃ００２」である。図２８に記述されている情報は、例えば「Ｃ００１」→「Ｃ００５」および「Ｃ００２」→「Ｃ００６」であったとき、「Ｃ００１」および「Ｃ００２」が「Ｇ００１」に含まれたので、「Ｇ００１」→「Ｃ００５」および「Ｃ００６」に統合されたことを示す。つまり、クラス「Ｃ００５」の関係元がクラス「Ｃ００５」であり、クラス「Ｃ００６」の関係元がクラス「Ｃ００２」であったとき、「Ｃ００１」と「Ｃ００２」とが同一の重複クラスグループ「Ｇ００１」にまとまられたため、「Ｃ００３」および「Ｃ００４」の共通の関係元が、「Ｇ００１」となったことを示す。
【００５４】
（重複関係先テーブル表）
図２９は、重複関係先テーブル表の例を示す図である。
重複関係先テーブル表２５５は、重複クラスに含まれたクラスの関係先テーブルを格納するための表である。重複関係先テーブル表２５５は、重複クラスの含まれたクラスの関係先であったテーブルＩＤである「重複クラス関係先テーブルＩＤ」と、当該重複クラスが属する重複クラスグループＩＤである「重複クラスグループＩＤ」とをフィールドとして有する。
【００５５】
（統合クラス表）
図３０は、統合クラス表の例を示す図である。
統合クラス表２５６は、「重複クラスグルーブＩＤ」に示される重複クラスグループを、新たなクラスとしたときのクラスＩＤが「統合クラスＩＤ」として格納されている。
【００５６】
以下、図１から図３０を参照しつつ、図３１〜図３９に沿って、本実施形態に係るクラス構造生成処理を説明する。
図３１は、本実施形態に係るクラス構造生成処理の全体的な流れを示すフローチャートである。
クラス構造生成処理が起動されると、処理部１０は、表示部４０に編集メニュー画面（図４１で後記）を表示させ、入力部３０を介して情報が入力されることによって、コンポーネント体系定義編集処理部１１およびサービス責務定義編集処理部１２が、定義編集処理を行う（Ｓ１０１）。
【００５７】
定義編集処理は、コンポーネント定義編集処理（Ｓ１１１）、サービスインタフェース定義編集処理（Ｓ１１２）、テーブル定義編集処理（Ｓ１１３）、サービスインタフェース間依存関係定義編集処理（Ｓ１１４）、サービスインタフェース・テーブル間依存関係定義編集処理（Ｓ１１５）、サービス入出力定義編集処理（Ｓ１１６）およびテーブル使用方法定義編集処理（Ｓ１１７）を含む。ステップＳ１１１〜Ｓ１１７の各処理は、メニュー画面から各処理を行うため編集画面を介して行われる。ステップＳ１１１〜Ｓ１１７を行うための編集画面は、図４１〜図４７を参照して後記する。なお、ステップＳ１１１〜Ｓ１１７の処理によって、コンポーネント定義表２１１（図９）、サービスインタフェース定義表２１２（図１０）、テーブル定義表２１３（図１１）、サービスインタフェース間依存関係定義表２１４（図１２）、サービスインタフェース・テーブル間依存関係定義表２１５（図１３）、サービス入出力定義表２２１（図１４）およびテーブル使用方法定義表２２２（図１５）が作成編集される。
【００５８】
さらに、定義編集処理は、クラス構造テンプレート定義編集処理（Ｓ１１８）、クラステンプレート定義編集処理（Ｓ１１９）、クラス間依存関係テンプレート定義編集処理（Ｓ１２０）、クラス・テーブル間依存関係テンプレート定義編集処理（Ｓ１２１）およびクラス構造テンプレート・クラステンプレート間依存関係定義編集処理（Ｓ１２２）を含む。ステップＳ１１８〜Ｓ１２２の処理によって、クラス構造テンプレート定義表２３１（図１６）、クラステンプレート定義表２３２（図１７）、クラス間依存関係テンプレート定義表２３３（図１８）、クラス・テーブル間依存関係テンプレート定義表２３４（図１９）およびクラス構造テンプレート・クラステンプレート間依存関係定義表２３５（図２０）が作成・編集される。
【００５９】
次に、クラス構造テンプレート適用部１３が、クラス構造テンプレート適用処理を行う（Ｓ１０２）。ステップＳ１０２の処理は、図３２〜図３６を参照して後記する。
そして、重複クラス構造検出部１４が、重複クラス構造検出処理を行う（Ｓ１０３）。ステップＳ１０３の処理は、図３７および図３８を参照して後記する。
続いて、クラス構造調整部１５が、クラス構造調整処理を行う（Ｓ１０４）。ステップＳ１０４の処理は、図３９を参照して後記する。
そして、クラス構造表示処理部１６は、生成されたクラス構造を表示部４０に表示させる（Ｓ１０５）。クラス構造表示画面の例は、図５、図７および図８で前記した通りである。
【００６０】
（クラス構造テンプレート適用処理）
次に、図３１のステップＳ１０２であるクラス構造テンプレート適用処理を説明する。
図３２は、クラス構造テンプレート適用処理の全体的な流れを示すフローチャートである。
まず、クラス構造テンプレート適用部１３は、サービスインタフェースの存在に基づくテンプレート適用処理を行う（Ｓ２０１）。これにより、サービスインタフェースに対応するクラスに関する情報が生成される。ステップＳ２０１の処理は、図３３を参照して後記する。
そして、クラス構造テンプレート適用部１３は、サービスインタフェース・テーブル間依存関係に基づくテンプレート適用処理を行う（Ｓ２０２）。ステップＳ２０２の処理は、図３４を参照して後記する。これにより、テーブル参照のためのクラスに関する情報が生成される。
続いて、クラス構造テンプレート適用部１３は、サービスインタフェース間依存関係に基づくテンプレート適用処理を行う（Ｓ２０３）。ステップＳ２０３の処理は、図３５を参照して後記する。これにより、サービスインタフェース間を仲介するクラスに関する情報が生成される。
そして、クラス構造テンプレート適用部１３は、サービスインタフェースに基づくテンプレート適用処理を行う（Ｓ２０４）。ステップＳ２０４の処理は、図３６を参照して後記する。これにより、サービスインタフェースの入出力を実際に行うクラスに関する情報が生成される。
【００６１】
（サービスインタフェースの存在に基づくテンプレート適用処理）
図３３は、本実施形態に係るサービスインタフェースの存在に基づくテンプレート適用処理（図３２のステップＳ２０１）の流れを示すフローチャートである。
まず、クラス構造テンプレート適用部１３は、サービスインタフェース定義表２１２（図１０）を参照して、サービスインタフェースＩＤを１つ選択する（Ｓ３０１）。
続いて、クラス構造テンプレート適用部１３は、ステップＳ３０１で選択したサービスインタフェースＩＤに対応するサービスインタフェース名と、所属コンポーネントＩＤをサービスインタフェース定義表２１２から取得する（Ｓ３０２）
ステップＳ３０２の次に、クラス構造テンプレート適用部１３は、コンポーネント定義表２１１（図９）を参照して、取得した所属コンポーネントＩＤに対応するコンポーネント名を取得する。
【００６２】
＜クラスに関する情報の生成・格納＞
さらに、クラス構造テンプレート適用部１３は、取得したサービスインタフェース名をキーとして、クラステンプレート定義表２３２（図１７）の「名称取得対象」を検索し、「生成クラス名」に格納されている文字列（ここでは、「サービス」）と、対応しているクラステンプレートＩＤとを取得する。さらに、クラス構造テンプレート適用部１３は、取得した「生成クラス名」の文字列の前に、ステップＳ３０２で取得したサービスインタフェース名を付したクラス名（例えば、サービスインタフェース名が「サービス１１」であれば、「サービス１１サービス」）を生成する。つまり、クラス構造テンプレート適用部１３は、サービスインタフェース名を基に、クラス名を生成する（Ｓ３０３）。
【００６３】
次に、クラス構造テンプレート適用部１３は、生成したクラス名に対応するクラスに関する情報を生成し、クラス定義表２４１（図２１）に格納する（Ｓ３０４）。具体的には、クラス構造テンプレート適用部１３は、生成したクラス名に対し、他のクラスと重複しないクラスＩＤを発行すると、クラス定義表２４１に各データを組として格納する。格納は、クラス構造テンプレート適用部１３は、発行したクラスＩＤを、クラス定義表２４１の「クラスＩＤ」に格納し、ステップＳ３０３で生成したサービスに関するクラス名を「クラス名」に格納する。さらに、クラス構造テンプレート適用部１３は、ステップＳ３０２で取得した所属コンポーネントＩＤを、クラス定義表２４１の「所属コンポーネントＩＤ」に格納し、ステップＳ３０３の段階で取得したクラステンプレートＩＤを、「クラステンプレートＩＤ」に格納する。
以上で、本処理におけるクラスに関する情報の生成・格納が終了する。
【００６４】
＜生成したクラスと、生成元であるサービスインタフェースとの関係を格納＞
ステップＳ３０４の次に、クラス構造テンプレート適用部１３は、クラス・サービスインタフェース間の依存関係に関する情報を生成し、生成した情報をクラス・サービスインタフェース間依存関係定義表２４４（図２４）に格納する（Ｓ３０５）。具体的には、クラス構造テンプレート適用部は、ステップＳ３０１で取得したサービスインタフェースＩＤと、ステップＳ３０４の段階で発行したクラスＩＤとに対して、クラス・サービスインタフェース間依存関係ＩＤを発行し、これら３つのデータを組としてクラス・サービスインタフェース間依存関係定義表２４４に格納する。格納は、クラス構造テンプレート適用部１３が、発行したクラス・サービスインタフェース依存関係ＩＤを、「クラス・サービスインタフェース依存関係ＩＤ」に格納し、ステップＳ３０５で発行したクラスＩＤを「関係元クラスＩＤ」に格納し、ステップＳ３０２で取得したサービスインタフェースＩＤを「関係先サービスインタフェースＩＤ」に格納する。
以上で、本処理における生成したクラスと、生成元であるサービスインタフェースとの関係を格納する処理が終了する。
【００６５】
ステップＳ３０５の次に、クラス構造テンプレート適用部１３は、ステップＳ３０２で取得したサービスインタフェース名をキーとして、クラステンプレート定義表２３２（図１７）の「名称取得対象」をさらに検索し、対象となる名称取得対象（取得したサービスインタフェース名を有する名称取得対象）が存在するか否かを判定する（Ｓ３０６）。
ステップＳ３０６の結果、存在する場合（Ｓ３０６→Ｙｅｓ）、クラス構造テンプレート適用部１３は、ステップＳ３０３へ処理を戻し、当該名称取得対象に対応する生成クラス名に関しステップＳ３０３〜Ｓ３０５の処理を行う。なお、図１７の例に従えば、次の生成クラス名は、「コントローラ」となり、生成されるクラス名は、「サービス１１コントローラ」となる。
このような処理により、サービスインタフェースに係り、機能の異なる（「サービス」と「コントローラ」）クラスを生成することができる。
【００６６】
＜生成したクラス間の依存関係に関する情報の生成・格納＞
ステップＳ３０６の結果、存在しない場合（Ｓ３０６→Ｎｏ）、クラス構造テンプレート適用部１３は、以下の手順で、生成したクラス間の依存関係に関する情報の生成・格納を行う。
まず、クラス構造テンプレート適用部は、ステップＳ３０４の段階で発行したクラスＩＤのうち、クラス定義表２４１（図２１）において同一の所属コンポーネントＩＤを有するクラスＩＤの対に対し、クラス間依存関係ＩＤを発行すると、これら３つのデータを組としてクラス間依存関係定義表２４２（図２２）の該当する項目へ格納する。具体的には、クラス構造テンプレート適用部１３は、発行したクラス間依存関係ＩＤを、クラス間依存関係定義表２４２の「クラス間依存関係ＩＤ」に格納し、ステップＳ３０５の段階で発行したクラスＩＤを「関係元クラスＩＤ」に格納し、ステップＳ３０５の段階で発行したもう一方のクラスＩＤを「関係先クラスＩＤ」に格納する。なお、このとき、クラス構造テンプレート適用部１３は、「抽出関係」には、「ＦＡＬＳＥ」を格納する。また、ステップＳ３０３〜ステップＳ３０５の処理を一回しか行わなかった場合（つまり、サービスインタフェースに関するクラスを１つしか生成しなかった場合）は、ステップＳ３０７の処理は省略される。
以上で、生成したクラス間の依存関係に関する情報の生成・格納が終了する。
【００６７】
ステップＳ３０７の後、クラス構造テンプレート適用部１３は、サービスインタフェース定義表２１２（図１０）を検索して、まだ、未選択のサービスインタフェースＩＤが存在するか否かを判定する（Ｓ３０８）。
ステップＳ３０８の結果、存在する場合（Ｓ３０８→Ｙｅｓ）、クラス構造テンプレート適用部１３は、ステップＳ３０１の処理へ戻って、次のサービスインタフェースＩＤを選択する。
ステップＳ３０８の結果、存在しない場合（Ｓ３０８→Ｎｏ）、クラス構造テンプレート適用部１３は、図３２のステップＳ２０２へ進む。
【００６８】
（サービスインタフェース・テーブル間依存関係に基づくテンプレート適用処理）
図３４は、本実施形態に係るサービスインタフェース・テーブル間依存関係に基づくテンプレート適用処理（図３２のステップＳ２０２）の流れを示すフローチャートである。
次に、クラス構造テンプレート適用部１３は、サービスインタフェース・テーブル間依存関係定義表２１５（図１３）を参照して、サービスインタフェース・テーブル間依存関係ＩＤを１つ選択する（Ｓ４０１）。同時に、サービスインタフェース・テーブル間依存関係ＩＤに対応している、関係元サービスインタフェースＩＤおよび関係先テーブルＩＤをも取得する（Ｓ４０２）。
続いて、クラス構造テンプレート適用部１３は、取得したサービスインタフェース・テーブル間依存関係ＩＤをキーとして、テーブル使用方法定義表２２２（図１５）を参照して、「テーブルデータ作成」、「テーブルデータ参照」、「テーブルデータ検索参照」、「テーブルデータ更新」および「テーブルデータ削除」に格納されている各データ（テーブル使用方法データ）を参照する（Ｓ４０３）。
【００６９】
クラス構造テンプレート適用部１３は、ステップＳ４０３で取得したテーブル使用方法データのうち、「ＴＲＵＥ」であるもののフィールド名を取得する（図１５の例では「テーブルデータ作成」および「テーブルデータ検索参照」）。次に、クラス構造テンプレート適用部１３は、クラス構造テンプレート定義表２３１（図１６）の「適用判断基準項目」を参照し、取得したフィールド名と、「適用判断基準項目」の内容が一致する行であるクラス構造テンプレートレコードの一覧を取得する（Ｓ４０４）。ここで、クラス構造テンプレートレコードは、１つしか取得されない場合もあるし、複数取得される場合もある。
【００７０】
＜クラスに関する情報の生成・格納＞
そして、クラス構造テンプレート適用部１３は、以下の手順でクラスに関する情報を生成し、生成した情報をクラス定義表２４１（図２１）に格納する（Ｓ４０５）。
まず、クラス構造テンプレート適用部１３は、ステップＳ４０４で取得したクラス構造テンプレートレコードに含まれるテンプレートＩＤを取得する。
そして、クラス構造テンプレート適用部１３は、取得したテンプレートＩＤをキーとして、クラス構造テンプレート・クラステンプレート間依存関係定義表２３５（図２０）を参照して、対応するクラステンプレートＩＤをすべて取得する。続いて、クラス構造テンプレート適用部１３は、取得したクラステンプレートＩＤをキーとして、クラステンプレート定義表２３２（図１７）の「クラステンプレートＩＤ」を検索し、対応する「生成クラス名」に格納されている文字列を取得する。
【００７１】
次に、クラス構造テンプレート適用部１３は、ステップＳ４０２で取得した関係先テーブルＩＤをキーとして、テーブル定義表２１３（図１１）から対応するテーブル名と所属コンポーネントＩＤを取得する。
そして、クラス構造テンプレート適用部１３は、取得したテーブル名の後に、クラステンプレート定義表２３２（図１７）の「生成クラス」から取得した文字列を付して、テーブルデータ参照に関するクラス名を生成する（例えば、「テーブル１１テーブルデータ取得」など）。
【００７２】
そして、クラス構造テンプレート適用部１３は、生成したクラス名に対し、他のクラスと重複しないクラスＩＤを発行すると、クラス名と、取得している所属コンポーネントＩＤと、処理の対象となっているクラステンプレートのクラステンプレートＩＤとをクラス定義表２４１の該当する項目に格納する。
次に、クラス構造テンプレート適用部１３は、まだ選択されていないクラステンプレートＩＤがあれば、ステップＳ４０５の処理を繰り返し、選択されていないクラステンプレートがなければ、処理をステップＳ４０６に処理を進める。
以上で、本処理におけるクラスに関する情報の生成・格納が終了する。
【００７３】
＜クラス間の依存関係に関する情報の生成・格納＞
ステップＳ４０５の後、クラス構造テンプレート適用部１３は、以下の手順でクラス間の依存関係に関する情報を生成し、生成した情報をクラス間依存関係定義表２４２（図２
２）に格納する（Ｓ４０６）。
まず、クラス構造テンプレート適用部１３は、ステップＳ４０４で取得したクラス構造テンプレートレコードに含まれるテンプレートＩＤを取得する。
そして、クラス構造テンプレート適用部１３は、当該取得したテンプレートＩＤをキーとして、クラス間依存関係テンプレート定義表２３３（図１８）の「テンプレートＩＤ」のフィールドを検索し、対応する行であるクラス間依存関係テンプレートレコードを取得する。ここで、取得されるクラス間依存関係テンプレートレコードは、１つしかないときもあるし、複数あるときもある。次に、クラス構造テンプレート適用部１３は、取得したクラス間依存関係テンプレートレコードのうち、１つを選択する。
【００７４】
クラス構造テンプレート適用部１３は、選択したクラス間依存関係テンプレートレコードの関係元クラステンプレートＩＤおよび関係先クラステンプレートＩＤを取得する。
ここで取得した関係元クラステンプレートＩＤおよびステップＳ４０５の段階で発行したクラスの所属コンポーネントＩＤをキーとしてクラス定義表２４１（図２１）の「クラステンプレートＩＤ」のフィールドと「所属コンポーネント」のフィールドを検索してクラスＩＤをすべて取得し、このクラスＩＤをクラス間依存関係定義表２４２の「関係元クラスＩＤ」に格納する。
それぞれの「関係先クラスＩＤ」には、ステップＳ４０５で生成したクラスのクラスＩＤを格納する。
さらに、クラス構造テンプレート適用部１３は、クラス間依存関係ＩＤを新たに発行すると、格納した「関係元クラスＩＤ」および「関係先クラスＩＤ」に対応するように、クラス間依存関係定義表２４２（図２２）の該当する項目に格納する。
そして、クラス構造テンプレート適用部１３は、取得したクラス間依存関係テンプレートレコードのうち、未選択のクラス間依存関係テンプレートレコードがあれば、ステップＳ４０６を繰り返し、未選択のクラス間依存関係テンプレートレコードがなければ、ステップＳ４０７の処理へ進む。
以上で、本処理におけるクラス間の依存関係に関する情報の生成・格納が終了する。
【００７５】
＜クラス・テーブル間の依存関係に関する情報の生成・格納＞
ステップＳ４０６の後、クラス構造テンプレート適用部１３は、以下の手順でクラス・テーブル間の依存関係に関する情報を生成し、生成した情報をクラス・テーブル間依存関係定義表２４３（図２３）に格納する（Ｓ４０７）。
まず、クラス構造テンプレート適用部１３は、ステップＳ４０４で取得したクラス構造テンプレートレコードに含まれるテンプレートＩＤを取得する。
次に、クラス構造テンプレート適用部１３は、取得したテンプレートＩＤをキーとして、クラス・テーブル間依存関係テンプレート定義表２３４（図１９）の「テンプレートＩＤ」を検索し、対応する行であるクラス・テーブル間依存関係テンプレートレコードを取得する。ここで、取得されるレコードは、１つしかない場合もあるし、複数取得される場合もある。
次に、クラス構造テンプレート適用部１３は、取得されたクラス・テーブル間依存関係テンプレートレコードのうち、１つを選択する。
【００７６】
クラス構造テンプレート適用部１３は、選択したクラス・テーブル間依存関係テンプレートレコードの関係元クラステンプレートＩＤを取得する。
取得した関係元クラステンプレートＩＤが、ステップＳ４０５の段階で取得したクラステンプレートＩＤと等しい場合には、このクラスＩＤをクラス間依存関係定義表２４２の「関係元クラスＩＤ」に格納する。
さらに、クラス構造テンプレート適用部１３は、ステップＳ４０２で取得した関係先テーブルＩＤをクラス・テーブル間依存関係定義表２４３（図２３）の「関係先テーブルＩＤ」に追加格納し、取得した関係元クラステンプレートＩＤを「関係元クラスＩＤ」に格納し、さらに新たなクラス・テーブル間依存関係ＩＤを発行すると、当該格納したデータに対応する「クラス・テーブル間依存関係ＩＤ」の項目に格納する。
【００７７】
そして、クラス構造テンプレート適用部１３は、取得したクラス・テーブル間依存関係テンプレートのうち、未選択のクラス・テーブル間依存関係テンプレートがあれば、ステップＳ４０７を繰り返し、未選択のクラス・テーブル間依存関係テンプレートがなければ、ステップＳ４０８へ処理を進める。
以上で、本処理におけるクラス・テーブル間の依存関係に関する情報の生成・格納が終了する。
【００７８】
ステップＳ４０７の後、クラス構造テンプレート適用部１３は、ステップＳ４０４で取得されたクラス構造テンプレートレコードのうち、未選択のクラス構造テンプレートレコードが存在するか否かを判定する（Ｓ４０８）。
ステップＳ４０８の結果、存在する場合（Ｓ４０８→Ｙｅｓ）、クラス構造テンプレート適用部１３は、ステップＳ４０５へ処理を戻し、次のクラス構造テンプレートレコードについて処理を行う。
ステップＳ４０８の結果、存在しない場合（Ｓ４０８→Ｎｏ）、クラス構造テンプレート適用部１３は、ステップＳ４０１で取得したサービスインタフェース・テーブル間依存関係ＩＤのうち、未選択のサービスインタフェース・テーブル間依存関係ＩＤが存在するか否かを判定する（Ｓ４０９）。
ステップＳ４０９の結果、存在する場合（Ｓ４０９→Ｙｅｓ）、クラス構造テンプレート適用部１３は、ステップＳ４０１へ処理を戻し、次のサービスインタフェース・テーブル間依存関係ＩＤについて処理を行う。
ステップＳ４０９の結果、存在しない場合（Ｓ４０９→Ｎｏ）、クラス構造テンプレート適用部１３は、図３２のステップＳ２０３へ処理を進める。
【００７９】
（サービスインタフェース間依存関係に基づくテンプレート適用処理）
図３５は、本実施形態に係るサービスインタフェース間依存関係に基づくテンプレート適用処理（図３２のステップＳ２０３）の流れを示すフローチャートである。
続いて、クラス構造テンプレート適用部１３は、サービスインタフェース間依存関係定義表２１４（図１２）からサービスインタフェース間依存関係ＩＤを１つ選択する（Ｓ５０１）。
そして、クラス構造テンプレート適用部１３は、ステップＳ５０１で選択したサービスインタフェース間依存関係からステップＳ５０１で取得したサービスインタフェース間依存関係ＩＤに対応する関係元サービスインタフェースＩＤおよび関係元サービスインタフェースＩＤを取得する（Ｓ５０２）。
【００８０】
＜サービス呼出のためのクラスに関する情報の生成・格納＞
次に、クラス構造テンプレート適用部１３は、以下の手順でサービス呼出のためのクラスに関する情報を生成し、クラス定義表２４１（図２３）に格納する（Ｓ５０３）。なお、本実施形態では、「サービスの呼出」のクラスを生成しているが、サービスインタフェースとサービスインタフェースとを仲介する機能であれば、他のクラスに関する情報を生成してもよい。
まず、クラス構造テンプレート適用部１３は、ステップＳ５０２で取得した関係先サービスインタフェースＩＤをキーとして、サービスインタフェース定義表２１２（図１０）を検索して、サービスインタフェース名と所属コンポーネントＩＤとを取得する。次に、クラス構造テンプレート適用部１３は、取得したサービスインタフェース名に、例えば「関係先」の文字列を付したものを、関係先サービスインタフェース名とする。これにより、一般的なサービスインタフェース名と、関係先のサービスインタフェース名とを区別することができる。
【００８１】
クラス構造テンプレート適用部１３は、関係先サービスインタフェース名をキーとして、クラステンプレート定義表２３２（図１７）の「名称取得対象」のフィールドを検索して、一致する関係先サービスインタフェース名を有する行における生成クラス名を取得する。ここでは、図１７の例では、「サービス呼出」の文字列と、対応するクラステンプレートＩＤとが取得される。そして、クラス構造テンプレート適用部１３は、取得した生成クラス名「サービス呼出」の前に、サービスインタフェース定義表２１２（図１０）を検索して取得したサービスインタフェース名を付した文字列をサービス呼出のためのクラス名とする（例えば、「サービス１２呼出」）。
【００８２】
さらに、クラス構造テンプレート適用部１３は、生成したサービス呼出クラスに対し重複しないクラスＩＤを発行する。そして、クラス構造テンプレート適用部１３は、クラス定義表２４１（図２１）にデータを格納する。具体的には、クラス構造テンプレート適用部１３は、発行したクラスＩＤを、クラス定義表２４１の「クラスＩＤ」に格納し、ステップＳ５０３で生成したサービス呼出のためのクラス名を「クラス名」に格納する。そして、クラス構造テンプレート適用部１３は、クラステンプレートＩＤを、クラス定義表２４１の「クラステンプレートＩＤ」に格納する。このとき、該当する「コンポーネントＩＤ」の項目は、空欄にしておく。
以上で、本処理におけるサービス呼出のためのクラスに関する情報の生成・格納が終了する。
【００８３】
ステップＳ５０３の次に、クラス構造テンプレート適用部１３は、以下の手順により、ステップＳ５０２で取得した関係元サービスインタフェースＩＤおよび関係先サービスインタフェースＩＤに係るクラスＩＤを取得する（Ｓ５０４）。
【００８４】
まず、クラス構造テンプレート適用部１３は、ステップＳ５０２で取得した関係元サービスインタフェースＩＤをキーとして、クラス・サービスインタフェース間依存関係定義表２４４（図２４）の「関係先サービスインタフェースＩＤ」を検索して、対応する関係元クラスＩＤを取得する。さらに、クラス構造テンプレート適用部１３は、取得した関係元クラスＩＤをキーとして、クラス定義表２４１（図２１）の「クラスＩＤ」を検索し、対応するクラス名に「コントローラ」の文字列が含まれているか否かを判定し、含まれていれば、このクラスＩＤをステップＳ５０４で発行したクラスＩＤに対する関係元クラスＩＤとして記憶する。
含まれていなければ、クラス構造テンプレート適用部１３は、取得したクラスＩＤをキーとして、クラス間依存関係定義表２４２（図２２）の「関係元クラスＩＤ」を検索し、対応する関係先クラスＩＤを取得する。そして、クラス構造テンプレート適用部１３は、当該取得した関係先クラスＩＤをキーとして、クラス定義表２４１（図２１）の「クラスＩＤ」を検索し、対応するクラス名に「コントローラ」の文字列が含まれているか否かを判定する。以下、同様にしてクラス名に「コントローラ」の文字列が含まれているクラスのクラスＩＤを取得するまで、この処理を繰り返す。なお、本実施形態では、「コントローラ」の文字列を検索したが、ソフトウェアの構造により、検索する文字列が変わることは当然である。
【００８５】
なお、この際、取得した関係元クラスＩＤをキーとして、クラス定義表２４１（図２１）の「クラスＩＤ」を検索し、対応する所属コンポーネントＩＤを取得すると、ステップＳ５０３の段階で格納したクラス定義表２４１（図２４）のクラスＩＤに対応する「所属コンポーネントＩＤ」の項目に、取得した所属コンポーネントＩＤを格納する。
【００８６】
次に、クラス構造テンプレート適用部１３は、ステップＳ５０３で取得した関係先サービスインタフェースＩＤをキーとして、クラス・サービスインタフェース間依存関係定義表２４４（図２４）の「関係先サービスインタフェースＩＤ」に対応する関係元クラスＩＤを取得する。なお、ソフトウェアの構成によっては、前記した手順と同様の手順によって、特定の文字列を有するクラスに関するクラスＩＤを取得してもよい。
【００８７】
＜生成したクラスと、関係先および関係元のクラス間の依存関係に関する情報の生成・格納＞
そして、クラス構造テンプレート適用部１３は、以下の手順により、ステップＳ５０３で生成したクラスに関する情報と、ステップＳ５０２で取得した関係先および関係元のサービスインタフェースに関する依存関係に関する情報を生成し、クラス間依存関係定義表２４２（図２２）に追加格納する（Ｓ５０５）
まず、クラス構造テンプレート適用部１３は、ステップＳ５０３の段階で発行したクラスＩＤを、クラス間依存関係定義表２４２の「関係先クラスＩＤ」に格納し、ステップＳ５０５で関係元サービスインタフェースＩＤをキーとして、最終的に取得した関係元クラスＩＤを、「関係元クラスＩＤ」として追加格納する。さらに、クラス構造テンプレート適用部１３は、この２つのクラスＩＤに対し、クラス間依存関係ＩＤを発行し、クラス間依存関係定義表２４２の「クラス間依存関係ＩＤ」に格納する。
【００８８】
同様に、クラス構造テンプレート適用部１３は、ステップＳ５０３で発行したクラスＩＤを、クラス間依存関係定義表２４２の「関係元クラスＩＤ」に格納し、ステップＳ５０５で関係先サービスインタフェースＩＤをキーとして、最終的に取得した関係元クラスＩＤを、「関係先クラスＩＤ」として追加格納する。さらに、クラス構造テンプレート適用部１３は、この２つのクラスＩＤに対し、クラス間依存関係ＩＤを発行し、クラス間依存関係定義表２４２の「クラス間依存関係ＩＤ」に格納する。
以上で、本処理における生成したクラスと、関係先および関係元のクラス間の依存関係に関する情報の生成・格納を終了する。
【００８９】
ステップＳ５０５の後、クラス構造テンプレート適用部１３は、サービスインタフェース間依存関係表を参照して、未選択のサービスインタフェース間依存関係ＩＤが存在するか否かを判定する（Ｓ５０６）。
ステップＳ５０６の結果、存在する場合（Ｓ５０６→Ｙｅｓ）、クラス構造テンプレート適用部１３は、ステップＳ５０１の処理へ戻って、次のサービスインタフェース間依存関係ＩＤを選択する。
ステップＳ５０６の結果、存在しない場合（Ｓ５０６→Ｎｏ）、クラス構造テンプレート適用部１３は、ステップＳ２０４の処理へ進む。
【００９０】
（サービスインタフェースに基づくテンプレート適用処理）
図３６は、本実施形態に係るサービスインタフェースに基づくテンプレート適用処理（図３２のステップＳ２０４）の流れを示すフローチャートである。
次に、クラス構造テンプレート適用部１３は、取得したサービスインタフェース定義表２１２からサービスインタフェースＩＤを１つ選択する（Ｓ６０１）。同時に、クラス構造テンプレート適用部１３は、対応するサービスインタフェース名および所属コンポーネントＩＤを取得する（Ｓ６０２）。
そして、クラス構造テンプレート適用部１３は、取得したサービスインタフェースＩＤをキーとして、サービス入出力定義表２２１（図１４）を参照して「画面入力」、「ＸＭＬファイル入力」、などの各フィールドを検索する（Ｓ６０３）。
【００９１】
クラス構造テンプレート適用部１３は、ステップＳ６０３で取得したサービス入出力定義表のうち、「ＴＲＵＥ」であるもののフィールド名を取得する（図１５の例では、「Ｓ００１」は「画面入力」と「画面出力」、「Ｓ００２」は「画面入力」と「帳票出力」）。次に、クラス構造テンプレート適用部１３は、クラス構造テンプレート定義表２３１（図１６）の「適用判断基準項目」を参照し、取得したフィールド名と、「適用判断基準項目」の内容が一致する行であるクラス構造テンプレートレコードの一覧を取得する（Ｓ６０４）。ここで、クラス構造テンプレートレコードは、１つしか取得されない場合もあるし、複数取得される場合もある。
クラス構造テンプレート適用部１３は、取得したクラス構造テンプレートレコードのうち、一つを選択する。
【００９２】
＜クラスに関する情報の生成・格納＞
クラス構造テンプレート適用部１３は、以下に示す手順で画面入力のクラスに関する情報を生成し、クラス定義表２４１（図２１）に格納する（Ｓ６０５）。
まず、クラス構造テンプレート適用部１３は、クラステンプレート定義表２３２（図１７）を検索して、「適用判断基準」が「サービス入出力」であり、かつ選択したクラス構造テンプレートレコードについて「適用判断基準項目」がステップＳ６０４で「ＴＲＵＥ」を検出した項目（この例の場合は、「画面入力」）の文字列が含まれているクラステンプレートＩＤを取得する。（図１７の例では、この例の場合に使用するクラステンプレートＩＤは、符号２３２１，２３２２の行に対応するクラステンプレートＩＤである）。
【００９３】
次に、クラス構造テンプレート適用部１３は、取得したクラステンプレートＩＤのうち、任意の１つを選択し（例えば、図１７の符号２３２１に対応するＩＤ）、選択したテンプレートＩＤに対応する「生成クラス名」に格納されている文字列（ここでは、「画面入力情報取得」）を取得する。
そして、ステップＳ６０２で取得したサービスインタフェース名の文字列の後に、先に取得した生成クラス名の文字列（ここでは、「画面入力情報取得」）を付け加えた文字列（例えば、「サービス１１画面入力情報取得」）を画面入力情報取得のためのクラス名として生成する。
【００９４】
そして、クラス構造テンプレート適用部１３は、クラス定義表２４１（図２１）にデータを格納する。具体的には、生成したクラス名を「クラス名」に格納し、ステップＳ６０２で取得した所属コンポーネントＩＤを「所属コンポーネントＩＤ」に格納し、取得したクラステンプレートＩＤを、クラス定義表２４１の「クラステンプレートＩＤ」に格納する。最後に、クラス構造テンプレート適用部１３は、他のクラスと重複しないクラスＩＤを発行し、クラス定義表２４１の「クラスＩＤ」に格納する。
【００９５】
まだ処理を行っていないクラステンプレートＩＤについても同様の処理を行う。図１７の行２３２２に対応するクラステンプレートＩＤが処理の対象となる場合も例に挙げる。なお、図１７の符号２３２２の行のように、「名称取得対象」が「ＮＵＬＬ」である場合は、「画面入力情報取得」の前に文字列を付加しない。
以上で、本処理におけるクラスに関する情報の生成・格納を終了する。
【００９６】
＜クラス間の依存関係に関する情報の生成・格納＞
ステップＳ６０５の後、クラス構造テンプレート適用部１３は、以下の手順でクラス間の依存関係に関する情報を生成し、生成した情報をクラス間依存関係定義表２４２（図２
２）に格納する（Ｓ６０６）。
まず、クラス構造テンプレート適用部１３は、ステップＳ６０４で選択したクラス構造テンプレートレコードに含まれるテンプレートＩＤを取得する。
そして、クラス構造テンプレート適用部１３は、当該取得したテンプレートＩＤをキーとして、クラス間依存関係テンプレート定義表２３３（図１８）の「テンプレートＩＤ」のフィールドを検索し、対応する行であるクラス間依存関係テンプレートレコードを取得する。ここで、取得されるクラス間依存関係テンプレートレコードは、１つしかないときもあるし、複数あるときもある。次に、クラス構造テンプレート適用部１３は、取得したクラス間依存関係テンプレートレコードのうち、１つを選択する。
【００９７】
クラス構造テンプレート適用部１３は、選択したクラス間依存関係テンプレートレコードの関係元クラステンプレートＩＤおよび関係先クラステンプレートＩＤを取得する。
関係元クラステンプレートＩＤがＳ６０５のクラステンプレートＩＤと一致する場合、クラス構造テンプレート適用部１３は、関係先クラステンプレートＩＤおよびステップＳ４０５の段階で発行したクラスの所属コンポーネントＩＤをキーとしてクラス定義表２４１（図２１）の「クラステンプレートＩＤ」のフィールドと「所属コンポーネントＩＤ」フィールドを検索してクラスＩＤをすべて取得し、このクラスＩＤをクラス間依存関係定義表２４２の「関係先クラスＩＤ」に格納する。
【００９８】
それぞれの「関係元クラスＩＤ」には、ステップＳ６０５で生成したクラスのクラスＩＤを格納する。
また、関係先クラステンプレートＩＤがＳ６０５のクラステンプレートＩＤと一致する場合、クラス構造テンプレート適用部１３は、関係元クラステンプレートＩＤおよびステップＳ６０５の段階で発行したクラスの所属コンポーネントＩＤをキーとしてクラス定義表２４１（図２１）の「クラステンプレートＩＤ」のフィールドと「所属コンポーネントＩＤ」フィールドを検索してクラスＩＤをすべて取得し、このクラスＩＤをクラス間依存関係定義表２４２の「関係元クラスＩＤ」に格納する。
それぞれの「関係先クラスＩＤ」には、ステップＳ６０５で生成したクラスのクラスＩＤを格納する。
例えば、関係元クラステンプレートが「コントローラ」型、関係先クラステンプレートが「画面入力」型であった場合には後者である。
【００９９】
さらに、クラス構造テンプレート適用部１３は、クラス間依存関係ＩＤを新たに発行すると、格納した「関係元クラスＩＤ」および「関係先クラスＩＤ」に対応するように、クラス間依存関係定義表２４２（図２２）の該当する項目に格納する。
そして、クラス構造テンプレート適用部１３は、取得したクラス間依存関係テンプレートレコードのうち、未選択のクラス間依存関係テンプレートレコードがあれば、ステップＳ６０６を繰り返し、未選択のクラス間依存関係テンプレートレコードがなければ、ステップＳ６０７の処理へ進む。
【０１００】
ステップＳ６０６の後、クラス構造テンプレート適用部１３は、ステップＳ６０４で取得されたクラス構造テンプレートレコードのうち、未選択のクラス構造テンプレートレコードが存在するか否かを判定する（Ｓ６０７）。
ステップＳ６０７の結果、存在する場合（Ｓ６０７→Ｙｅｓ）、クラス構造テンプレート適用部１３は、ステップＳ６０４へ処理を戻し、次のクラス構造テンプレートレコードについて処理を行う。
ステップＳ６０７の結果、存在しない場合（Ｓ６０７→Ｎｏ）、クラス構造テンプレート適用部１３は、ステップＳ６０１で取得したサービスインタフェースＩＤのうち、未選択のサービスインタフェースＩＤが存在するか否かを判定する（Ｓ６０８）。
ステップＳ６０８の結果、存在する場合（Ｓ６０８→Ｙｅｓ）、クラス構造テンプレート適用部１３は、ステップＳ６０１へ処理を戻し、次のサービスインタフェースＩＤについて処理を行う。
ステップＳ６０８の結果、存在しない場合（Ｓ６０８→Ｎｏ）、クラス構造テンプレート適用部１３は、図３１のステップＳ１０３の重複クラス構造検出処理へ進む。
【０１０１】
（重複クラス検出処理）
図３７は、本実施形態に係る重複クラス検出処理（図３１のステップＳ１０３）の流れを示すフローチャートである。
なお、図３７中に記載の「クラスＡ」は重複を調べるクラスを表し、「クラスＢ」は「クラスＡ」との比較対象のクラスを表すこととする。
まず、重複クラス構造検出部１４は、クラス定義表２４１を仮リストにコピーして、仮リストを作成する（Ｓ７０１）。
次に、重複クラス構造検出部１４は、仮リストの１番上のクラスＩＤを選択する（これをクラスＡのＩＤとする）（Ｓ７０２）。
続いて、重複クラス構造検出部１４は、仮リストからクラスＡのＩＤに対応する（クラスＡの）所属コンポーネントＩＤと、クラステンプレートＩＤとを取得する（Ｓ７０３）。
【０１０２】
次に、重複クラス構造検出部１４は、仮リストを参照して、クラスＡのＩＤ以外のクラスＩＤを１つ選択する（これをクラスＢのＩＤとする）（Ｓ７０４）。
続いて、重複クラス構造検出部１４は、仮リストからクラスＢのＩＤに対応する（クラスＢの）所属コンポーネントＩＤと、クラステンプレートＩＤとを取得する（Ｓ７０５）。
【０１０３】
そして、重複クラス構造検出部１４は、クラスＡの所属コンポーネントＩＤおよびクラステンプレートＩＤと、クラスＢの所属コンポーネントＩＤおよびクラステンプレートＩＤとをそれぞれ比較する（Ｓ７０６）。
そして、重複クラス構造検出部１４は、当該比較の結果、クラスＡの所属コンポーネントＩＤおよびクラステンプレートＩＤと、クラスＢの所属コンポーネントＩＤおよびクラステンプレートＩＤとが共に等しいか否かを判定する（Ｓ７０７）。つまり、重複クラス構造検出部１４は、クラスＡの所属コンポーネントと、クラスＢの所属コンポーネントＩＤとが等しく、かつクラスＡのクラステンプレートＩＤと、クラスＢのクラステンプレートＩＤとが等しいか否かを判定する。
ステップＳ７０７の結果、共に等しくない場合（Ｓ７０７→Ｎｏ）、すなわち、重複クラス構造検出部１４は、クラスＡの所属コンポーネントと、クラスＢの所属コンポーネントＩＤとが等しくない、またはクラスＡのクラステンプレートＩＤと、クラスＢのクラステンプレートＩＤとが等しくない場合、重複クラス構造検出部１４は、ステップＳ７０９へ処理を進める。
ステップＳ７０７の結果、共に等しい場合（Ｓ７０７→Ｙｅｓ）、重複クラス構造検出部１４は、重複クラスグループの定義処理を行う（Ｓ７０８）。ステップＳ７０８の処理は、図３８を参照して後記する。
【０１０４】
さらに、重複クラス構造検出部１４は、クラスＡのＩＤとクラスＢのＩＤとに重複クラスグループＩＤを発行し、発行した重複クラスグループＩＤとクラスＡのＩＤとクラスＢのＩＤとを重複クラス表２５２（図２６）に格納する（Ｓ７０９）。具体的には、重複クラス構造検出部１４は、クラスＡのＩＤを重複クラス表２５２の「重複クラスＩＤ」に格納し、発行した重複クラスグループＩＤを「重複クラスグループＩＤ」に格納する。続いて、重複クラス構造検出部１４は、重複クラス表２５２のクラスＡのＩＤを格納した行の次の行における「重複クラスＩＤ」にクラスＢのＩＤを格納し、発行した重複クラスグループＩＤを「重複クラスグループＩＤ」に格納する。
【０１０５】
そして、重複クラス構造検出部１４は、仮リストを参照して、クラスＢのＩＤとして選択されていないクラスＩＤが存在するか否かを判定する（Ｓ７１０）。
ステップＳ７１０の結果、クラスＢのＩＤとして選択されていないクラスＩＤが存在する場合（Ｓ７１０→Ｙｅｓ）、重複クラス構造検出部１４は、ステップＳ７０４の処理へ戻って、仮リストから次のクラスＢのＩＤを選択する。
ステップＳ７１０の結果、クラスＢのＩＤとして選択されていないクラスＩＤが存在しない場合（Ｓ７１０→Ｙｅｓ）、重複クラス構造検出部１４は、仮リストを参照して、クラスＡのＩＤとして選択されていないクラスＩＤが存在するか否かを判定する（Ｓ７１１）。
ステップＳ７１１の結果、クラスＡのＩＤとして選択されていないクラスＩＤが存在する場合（Ｓ７１１→Ｙｅｓ）、重複クラス構造検出部１４は、ステップＳ７０２の処理へ戻って、仮リストから次のクラスＡのＩＤを選択する。
ステップＳ７１１の結果、クラスＡのＩＤとして選択されていないクラスＩＤが存在しない場合（Ｓ７１１→Ｎｏ）、処理部１０は、図３１のステップＳ１０４のクラス構造調整処理へ進む。
【０１０６】
（重複クラスグループの定義処理）
図３８は、本実施形態に係る重複クラスグループの定義処理（図３７のステップＳ７０８）の処理である。
まず、重複クラス構造検出部１４は、図３７のステップＳ７０７の比較で等しいと判定した所属コンポーネントＩＤとクラステンプレートＩＤを取得する（Ｓ８０１）。
次に、重複クラスグループ表２５１（図２７）の「所属コンポーネントＩＤ」と「クラステンプレートＩＤ」のフィールドを検索し、ステップＳ８０１で取得した所属コンポーネントＩＤとクラステンプレートＩＤと同じＩＤが存在するか否かを判定する（Ｓ８０２）。
ステップＳ８０２の結果、存在する場合（Ｓ８０２→Ｙｅｓ）、処理部１０は、図３７のステップＳ７０９へ処理を進める。
【０１０７】
ステップＳ８０２の結果、存在しない場合（Ｓ８０２→Ｎｏ）、重複クラス構造検出部１４は、ステップＳ８０１で取得したクラステンプレートＩＤをキーとして、クラステンプレート定義表２３２（図１７）の「クラステンプレートＩＤ」において該当する「統合」の項目を参照する。そして、重複クラス構造検出部１４は、参照した「統合」の項目が「ＴＲＵＥ」であるか否かを判定することによって、統合が可能であるか否かを判定する（Ｓ８０３）。
ステップＳ８０３の結果、統合が可能である場合（Ｓ８０３→Ｙｅｓ）、すなわち、クラステンプレート定義表２３２（図１７）の該当する「統合」の項目が「ＴＲＵＥ」である場合、重複クラス構造検出部１４は、他の重複クラスグループＩＤと重複しない重複クラスグループＩＤを発行し、「調整方法」を統合として重複クラスグループ表２５１（図２５）にデータを登録する（Ｓ８０４）。具体的には、重複クラス構造検出部１４は、発行した重複クラスグループＩＤを重複クラスグループ表２５１の「重複クラスグループＩＤ」の項目に格納し、ステップＳ８０１で取得した所属コンポーネントＩＤおよびクラステンプレートＩＤを、「所属コンポーネントＩＤ」および「クラステンプレートＩＤ」にそれぞれ格納する。さらに、重複クラス構造検出部１４は、重複クラスグループ表２５１の「調整方法」に「統合」を格納する。そして、処理部１０は、図３７のステップＳ７０９へ処理を進める。
【０１０８】
ステップＳ８０３の結果、統合が可能でない場合（Ｓ８０３→Ｎｏ）、すなわち、クラステンプレート定義表２３２（図１７）の該当する「統合」の項目が「ＦＡＬＳＥ」である場合、重複クラス構造検出部１４は、ステップＳ８０１で取得したクラステンプレートＩＤをキーとして、クラステンプレート定義表２３２（図１９）の「クラステンプレートＩＤ」において該当する「抽出」の項目を参照する。そして、重複クラス構造検出部１４は、参照した「抽出」の項目が「ＴＲＵＥ」であるか否かを判定することによって、抽出が可能であるか否かを判定する（Ｓ８０５）。
【０１０９】
ステップＳ８０５の結果、抽出が可能でない場合（Ｓ８０５→Ｎｏ）、すなわち、クラステンプレート定義表２３２（図１９）の該当する「抽出」の項目が「ＦＡＬＳＥ」である場合、処理部１０は、図３７のステップＳ７０９へ処理を進める。
ステップＳ８０５の結果、抽出が可能である場合（Ｓ８０５→Ｙｅｓ）、すなわち、クラステンプレート定義表２３２（図１９）の該当する「抽出」の項目が「ＴＲＵＥ」である場合、重複クラス構造検出部１４は、他の重複クラスグループＩＤと重複しない重複クラスグループＩＤを発行し、「調整方法」を抽出として重複クラスグループ表２５１（図２５）にデータを登録する（Ｓ８０６）。具体的には、重複クラス構造検出部１４は、発行した重複クラスグループＩＤを重複クラスグループ表２５１の「重複クラスグループＩＤ」の項目に格納し、ステップＳ８０１で取得した所属コンポーネントＩＤおよびクラステンプレートＩＤを、「所属コンポーネントＩＤ」および「クラステンプレートＩＤ」にそれぞれ格納する。さらに、重複クラス構造検出部１４は、重複クラスグループ表２５１の「調整方法」に「抽出」を格納する。そして、処理部１０は、図３７のステップＳ７０９へ処理を進める。
【０１１０】
（クラス構造調整処理）
図３９は、本実施形態に係るクラス構造調整処理（図３１のステップＳ１０４）の流れを示すフローチャートである。
まず、クラス構造調整部１５は、重複クラスグループ表２５１（図２５）を参照し、重複クラスグループＩＤを１つ選択する（Ｓ９０１）。
次に、クラス構造調整部１５は、ステップＳ９０１で取得した重複クラスグループＩＤに対応する重複クラスグループ表２５１（図２５）の「調整方法」を参照し、該当するデータが「統合」であるか否かを判定する（Ｓ９０２）。
ステップＳ９０２の結果、「統合」ではない場合（Ｓ９０２→Ｎｏ）、クラス構造調整部１５は、ステップＳ９０１で取得した重複クラスグループＩＤに対応する重複クラスグループ表２５１（図２５）の「調整方法」を参照し、該当するデータが「抽出」であるか否かを判定する（Ｓ９０３）。なお、ステップＳ９０３の処理は、省略してもよい。
ステップＳ９０３の結果、「抽出」ではない場合（Ｓ９０３→Ｎｏ）、クラス構造調整部１５は、ステップＳ９１１へ処理を進める。つまり、「調整方法」が「統合」でも「抽出」でもない場合、クラス構造調整部１５は、対象となるクラスに対し統合も抽出もしない。
【０１１１】
＜抽出クラスに関する情報の生成・格納＞
ステップＳ９０３の結果、「抽出」である場合（Ｓ９０３→Ｙｅｓ）、クラス構造調整部１５は、以下の手順によって、複数のクラスに共通の機能を抽出した抽出クラス（図８におけるクラス５６４）に関する情報を生成し、クラス定義表２４１（図２１）に格納する（Ｓ９０４）。
【０１１２】
まず、クラス構造調整部１５は、重複クラスグループ表２５１（図２５）において、ステップＳ９０１で選択した重複クラスグループＩＤの所属コンポーネントＩＤと、クラステンプレートＩＤを取得する。そして、クラス構造調整部１５は、取得したクラステンプレートＩＤをキーとして、クラステンプレート定義表２３２（図１７）を検索し、対応する「生成クラス名」を取得する。そして、クラス構造調整部１５は、他のクラスと重複しないクラスＩＤを発行すると、発行したクラスＩＤと、取得した生成クラス名と、取得した所属コンポーネントＩＤと、クラステンプレートＩＤとを、クラス定義表２４１（図２１）の「クラスＩＤ」、「クラス名」、「所属コンポーネントＩＤ」および「クラステンプレートＩＤ」にそれぞれ格納する。すなわち、クラス構造調整部１５は、取得した生成クラス名をそのまま抽出クラス名とする。
以上で、本処理における抽出クラスに関する情報の生成・格納を終了する。
【０１１３】
＜抽出クラスと、抽出元クラスとの間の関係に関する情報の生成・格納＞
ステップＳ９０４の次に、クラス構造調整部１５は、以下に示す手順で、抽出クラスと、抽出元クラスとの間の関係情報を生成し、生成した情報をクラス間依存関係定義表２４２（図２４）に格納する（Ｓ９０５）。
ステップＳ９０４の処理が終了すると、クラス構造調整部１５は、重複クラスグループ表２５１（図２５）において、ステップＳ９０１で選択した重複クラスグループＩＤをキーとして、重複クラス表２５２（図２６）を参照し、対応する重複クラスＩＤをすべて取得する。
次に、クラス構造調整部１５は、取得した重複クラスＩＤそれぞれをキーとして、クラス間依存関係定義表２４２（図２２）の「関係元クラスＩＤ」を検索し、取得した重複クラスＩＤが存在するか否かを判定する。
存在する場合、対応する関係先クラスＩＤを取得した後、関係先クラスＩＤをステップＳ９０４で抽出クラスに対して発行したクラスＩＤに置換し、対応する「抽出関係」を「ＴＲＵＥ」にする。
次に、クラス構造調整部１５は、新たなクラス間依存関係ＩＤを発行すると、発行したクラス間依存関係ＩＤをクラス間依存関係定義表２４２（図２２）の「クラス間依存関係ＩＤ」に格納し、「関係元クラスＩＤ」にステップＳ９０４で抽出クラスに対して発行したクラスＩＤを格納し、「関係先クラスＩＤ」に取得しておいた関係先クラスＩＤを格納し、「抽出関係」を「ＴＲＵＥ」にする。
【０１１４】
「関係元クラスＩＤ」に、取得した重複クラスＩＤが存在しない場合、クラス構造調整部１５は、取得した重複クラスＩＤそれぞれに対してクラス間依存関係ＩＤを発行すると、発行したクラス間依存関係ＩＤをクラス間依存関係定義表２４２（図２２）の「クラス間依存関係ＩＤ」に格納し、取得した重複クラスＩＤを「関係元クラスＩＤ」に格納し、ステップＳ９０４で抽出クラスに対して発行したクラスＩＤを「関係先クラスＩＤ」に格納し、さらに「抽出関係」に「ＴＲＵＥ」を格納する。
【０１１５】
以上で、本処理における抽出クラスと、抽出元クラスとの間の関係に関する情報の生成・格納を終了する。
【０１１６】
ステップＳ９０２で「統合」である場合（Ｓ９０２→Ｙｅｓ）、クラス構造調整部１５は、重複クラス表２５２の「重複クラスグループＩＤ」のフィールドを検索して、ステップＳ９０１で選択した重複クラスグループＩＤに対応する重複クラスＩＤを１つ取得する（Ｓ９０６）。
【０１１７】
＜重複クラスグループと、関係先クラスとの関係の登録＞
次に、クラス構造調整部１５は、以下の手順で、重複クラスグループと、関係先クラスとの関係を重複関係先クラス表２５４（図２８）に登録する（Ｓ９０７）。
次に、クラス構造調整部１５は、ステップＳ９０６で取得した重複クラスの重複クラスＩＤをキーとして、クラス間依存関係定義表２４２（図２２）の「関係先クラスＩＤ」を検索し対応する関係先クラスＩＤを取得した後、クラス間依存関係定義表２４２の該当する行を削除する。
【０１１８】
そして、クラス構造調整部１５は、取得した関係先クラスＩＤを重複関係先クラス表２５４（図２８）の「重複クラスの関係先クラスＩＤ」に、ステップＳ９０１で取得した重複クラスグループＩＤを「重複クラスグループＩＤ」に格納する。
以上で、本処理における重複クラスグループと、関係先クラスとの関係の登録の処理を終了する。
【０１１９】
＜重複クラスグループと、関係元クラスとの関係の登録＞
次に、クラス構造調整部１５は、以下の手順で、重複クラスグループと、関係元クラスとの関係を重複関係元クラス表２５３（図２７）に登録する（Ｓ９０８）。
次に、クラス構造調整部１５は、ステップＳ９０６で取得した重複クラスの重複クラスＩＤをキーとして、クラス間依存関係定義表２４２（図２２）の「関係先クラスＩＤ」を検索し対応する関係元クラスＩＤを取得した後、クラス間依存関係定義表２４２の該当する行を削除する。
【０１２０】
そして、クラス構造調整部１５は、取得した関係元クラスＩＤを重複関係元クラス表２５３（図２７）の「重複クラスの関係元クラスＩＤ」に、ステップＳ９０１で取得した重複クラスグループＩＤを「重複クラスグループＩＤ」に格納する。
以上で、本処理における重複クラスグループと、関係元クラスとの関係の登録を終了する。
【０１２１】
なお、ステップＳ９０８の後に、クラス構造調整部１５は、以下の手順で重複クラスグループと、関係先テーブルとの関係を登録してもよい。
すなわち、クラス構造調整部１５は、ステップＳ９０６で取得した重複クラスＩＤのそれぞれをキーとして、クラス・テーブル間依存関係定義表２４３（図２３）の「関係元クラスＩＤ」を検索し、対応する関係先テーブルＩＤを取得すると、重複関係先テーブル表２５５（図２９）の「重複クラス関係先テーブルＩＤ」に取得した関係先テーブルＩＤを格納し、ステップＳ９０１で取得した重複クラスグループＩＤを「重複クラスグループＩＤ」に格納してもよい。このとき、該当するクラス・テーブル間依存関係定義表２４３（図２３）のの行を削除してもよい。
【０１２２】
＜統合クラスに関する情報の生成・格納＞
ステップＳ９０８の次に、クラス構造調整部１５は、以下の手順により、統合クラスに関する情報を生成し、生成した統合クラス表２５６（図３０）に格納する（Ｓ９０９）。
クラス構造調整部１５は、ステップＳ９０１で選択した重複クラスグループＩＤに対応するクラスＩＤ（統合クラスＩＤ）を発行し、発行した統合クラスＩＤと、重複クラスグループＩＤとを統合クラス表２５６（図３０）の該当する項目に格納する。
以上で、本処理における統合クラスに関する情報の生成・格納が終了する。
【０１２３】
ステップＳ９０９の次に、クラス構造調整部１５は、重複クラス表２５２を参照して、ステップＳ９０１で取得した重複クラスグループＩＤと一致する重複クラスグループＩＤを持ち、かつステップＳ９０６で未選択の重複クラスＩＤが存在するか否かを判定する（Ｓ９１０）。
ステップＳ９１０の結果、存在する場合（Ｓ９１０→Ｙｅｓ）、クラス構造調整部１５は、処理をステップＳ９０６へ戻し、次の重複クラスＩＤを選択する。
【０１２４】
ステップＳ９１０の結果、存在しない場合（Ｓ９１０→Ｎｏ）、クラス構造調整部１５は、未選択の重複クラスグループＩＤが存在するか否かを判定する（Ｓ９１１）。
ステップＳ９１１の結果、存在する場合（Ｓ９１１→Ｙｅｓ）、クラス構造調整部１５は、ステップＳ９０１へ処理を戻し、次の重複クラスグループＩＤを選択する。
【０１２５】
＜統合クラスに関する情報の反映＞
ステップＳ９１１の結果、存在しない場合（Ｓ９１１→Ｎｏ）、クラス構造調整部１５は、以下の手順で、統合クラスに関する情報を、クラス定義表２４１（図２１）、クラス間依存関係定義表２４２（図２２）およびクラス・テーブル間依存関係定義表２４３（図２３）に反映する（Ｓ９１２）
【０１２６】
＜＜クラス定義表への反映＞＞
クラス構造調整部１５は、統合クラス表２５６（図３０）の統合クラスＩＤを１つ選択する。
次に、クラス構造調整部１５は、クラス定義表２４１（図２１）に、統合クラスＩＤを「クラスＩＤ」として有する行を新たに生成する。そして、クラス構造調整部１５は、統合クラス表２５６（図３０）で統合クラスＩＤに対応している重複クラスグループＩＤを取得すると、重複クラス表２５２から重複クラスグループＩＤに対応している重複クラスＩＤを取得する。さらに、クラス構造調整部１５は、重複クラスＩＤをキーとして、クラス定義表２４１（図２１）を参照して、対応するクラス名を取得する。そして、クラス構造調整部１５は、取得したクラス名を、新たな統合クラス名として、クラス定義表２４１（図２１）における新たに生成した行の「クラス名」に該当する項目に格納する。そして、クラス構造調整部１５は、取得した重複クラスＩＤのそれぞれをキーとして、クラス定義表２４１（図２１）の「クラスＩＤ」を検索し、対応する所属コンポーネントおよびクラステンプレートを新たに生成した行の対応する項目へ追加格納する。
以上で、本処理におけるクラス定義表への反映を終了する。
【０１２７】
＜＜クラス間依存関係定義表への反映＞＞
次に、クラス構造調整部１５は、クラス定義表への反映の段階で取得した重複クラスグループＩＤをキーとして、重複関係元クラス表２５３（図２７）の「重複クラスグループＩＤ」のフィールドを検索し、対応する重複クラスの関係元クラスＩＤをすべて取得する。次に、クラス構造調整部１５は、取得した重複クラスの関係元クラスＩＤのそれぞれをキーとして、クラス間依存関係定義表２４２（図２２）の「関係元クラスＩＤ」を検索し、対応する「関係先クラスＩＤ」に格納されているクラスＩＤを統合クラスＩＤに置換する。
【０１２８】
そして、クラス構造調整部１５は、取得した重複クラスの関係元クラスＩＤのそれぞれをキーとして、クラス間依存関係定義表２４２（図２２）の「関係先クラスＩＤ」を検索し、対応する「関係元クラスＩＤ」に格納されているクラスＩＤを統合クラスＩＤに置換する。
以上で、本処理におけるクラス間依存関係定義表への反映を終了する。
【０１２９】
＜＜クラス・テーブル間依存関係定義表への反映＞＞
さらに、クラス構造調整部１５は、クラス定義表への反映の段階で取得した重複クラスＩＤのそれぞれをキーとして、クラス・テーブル間依存関係定義表２４３（図２３）の「関係元クラスＩＤ」を検索し、対応する「関係元クラスＩＤ」に格納されているクラスＩＤを統合クラスＩＤに置換する。
【０１３０】
そして、クラス構造調整部１５は、クラス定義表２４１（図２１）において、取得している重複クラスＩＤに対応するクラスＩＤのレコード（行）を削除する。次に、クラス構造調整部１５は、統合クラス表２５６（図３０）において、まだ選択されていない統合クラスＩＤが存在するか否かを判定する。
存在する場合、クラス構造調整部１５は、クラス定義表への反映の初めの処理へ戻り、次の統合クラスＩＤに関する処理を行う。
存在しない場合、処理部１０は、図３１のステップＳ１０５へ処理を進める。
【０１３１】
（画面例）
図４０は、本実施形態に係る編集メニュー画面の例を示す図である。
編集メニュー画面５００１は、コンポーネント定義編集ボタン５００２、サービスインタフェース定義編集ボタン５００３、テーブル編集ボタン５００４、サービスインタフェース間依存関係定義編集ボタン５００５、サービスインタフェース・テーブル間依存関係定義編集ボタン５００６、サービス入出力定義編集ボタン５００７、テーブル使用方法定義編集ボタン５００８、クラス構造テンプレート適用ボタン５００９および処理を終了するための終了ボタン５０１０を有する。各ボタンが入力部３０を介して選択入力されることによって、図４１から図４７を参照して後記する各画面が表示される。ユーザは、この画面を介して図９から図１５に示す各表の作成・編集が可能となる。また、本実施形態では図示しないクラス構造テンプレート定義編集画面、クラステンプレート定義編集画面、クラス間依存関係テンプレート定義編集画面、クラス・テーブル間依存関係テンプレート定義編集画面、クラス構造テンプレート・クラステンプレート間依存関係定義変種画面によって、図１６から図２０に示す表も作成される。
【０１３２】
図４１は、本実施形態に係るコンポーネント定義編集画面の例を示す図である。
コンポーネント定義編集画面５１００において、入力部３０を介してコンポーネント名入力エリア５１０１にコンポーネント名が入力され登録ボタン５１０３が選択入力されると、コンポーネントＩＤが発行され、コンポーネントＩＤ表示エリア５１０２に表示される。そして、その時点でのコンポーネント定義表２１１が表表示エリア５１０８に表示される。また、入力部３０を介して、新規ボタン５１０４が選択入力されると、新規のコンポーネント定義表２１１が作成され、編集ボタン５１０５が選択入力されると、コンポーネント定義表２１１の編集が行われ、削除ボタン５１０６が押下されると、コンポーネント定義表２１１の選択した行が削除され、終了ボタン５１０７が選択入力されるとコンポーネント定義編集処理（図３１のステップＳ１１１）が終了する。
【０１３３】
図４２は、本実施形態に係るサービスインタフェース定義編集画面の例を示す図である。
サービスインタフェース定義編集画面５２００において、入力部３０を介してサービスインタフェース名入力エリア５２０１にコンポーネント名が入力され、所属コンポーネント名入力エリア５２０２に所属コンポーネント名が入力され、登録ボタン５１０３が選択入力されると、サービスインタフェースＩＤが発行され、サービスインタフェースＩＤ表示エリア５２０３に表示される。そして、その時点でのサービスインタフェース定義表２１２が表表示エリア５２０４に表示される。また、入力部３０を介して、新規ボタン５１０４が選択入力されると、新規のサービスインタフェース定義表２１２が作成され、編集ボタン５１０５が選択入力されると、サービスインタフェース定義表２１２の編集が行われ、削除ボタン５１０６が押下されると、サービスインタフェース定義表２１２の選択した行が削除され、終了ボタン５１０７が選択入力されるとサービスインタフェース定義編集処理（図３１のステップＳ１１２）が終了する。
【０１３４】
図４３は、本実施形態に係るテーブル定義編集画面の例を示す図である。
テーブル定義編集画面５３００において、入力部３０を介してテーブル名入力エリア５３０１にテーブル名が入力され、所属コンポーネント名入力エリア５３０２に所属コンポーネント名が入力され、登録ボタン５１０３が選択入力されると、テーブルＩＤが発行され、テーブルＩＤ表示エリア５３０３に表示される。そして、その時点でのサービスインタフェース定義表２１２が表表示エリア５３０４に表示される。また、入力部３０を介して、新規ボタン５１０４が選択入力されると、新規のテーブル定義表２１３が作成され、編集ボタン５１０５が選択入力されると、テーブル定義表２１３の編集が行われ、削除ボタン５１０６が押下されると、テーブル定義表２１３の選択した行が削除され、終了ボタン５１０７が選択入力されるとテーブル定義編集処理（図３１のステップＳ１１３）が終了する。
【０１３５】
図４４は、本実施形態に係るサービスインタフェース間依存関係定義編集画面の例を示す図である。
サービスインタフェース間依存関係定義編集画面５４００において、入力部３０を介して関係元サービスインタフェース名入力エリア５４０１に関係元サービスインタフェース名が入力され、関係先サービスインタフェース名入力エリア５４０２に関係先サービスインタフェース名が入力され、関係登録ボタン５４０５が選択入力される。すると、サービスインタフェース間依存関係表示エリア５４０４に、入力されたサービスインタフェースが関係付けられたことを示す「×」の印が表示される。また、関係削除ボタン５４０６が入力部３０を介して選択入力されると、入力されたサービスインタフェース間の関係が削除される。また、関係登録ボタンが選択入力されると、サービスインタフェース間依存関係ＩＤが発行され、サービスインタフェース間依存関係ＩＤ表示エリア５４０３に表示される。サービスインタフェース間依存関係定義編集画面５４００にて入力された情報は、サービスインタフェース間依存関係定義表２１４（図１２）に格納される。なお、終了ボタン５４０７が選択入力されると、サービスインタフェース間依存関係定義編集処理（図３１のステップＳ１１４）が終了する。
【０１３６】
図４５は、本実施形態に係るサービスインタフェース・テーブル間依存関係定義編集画面の例を示す図である。図４５において、図４４と同様の構成要素には、同一の符号を付して説明を省略する。
サービスインタフェース・テーブル間依存関係定義編集画面５５００において、入力部３０を介して関係元サービスインタフェース名入力エリア５５０１に関係元サービスインタフェース名が入力され、関係先テーブル名入力エリア５５０２に関係先テーブル名が入力され、関係登録ボタン５４０５が選択入力される。すると、サービスインタフェース・テーブル間依存関係表示エリア５５０４に、入力されたサービスインタフェースとテーブルとが関係付けられたことを示す「×」の印が表示される。また、関係削除ボタン５４０６が入力部３０を介して選択入力されると、入力されたサービスインタフェースと、テーブルとの関係が削除される。また、関係登録ボタンが選択入力されると、サービスインタフェース・テーブル間依存関係ＩＤが発行され、サービスインタフェース・テーブル間依存関係ＩＤ表示エリア５５０３に表示される。サービスインタフェース間依存関係定義編集画面５５００にて入力された情報は、サービスインタフェース・テーブル間依存関係定義表２１５（図１３）に格納される。なお、終了ボタン５４０７が選択入力されると、サービスインタフェース・テーブル間依存関係定義編集処理（図３１のステップＳ１１５）が終了する。
【０１３７】
図４６は、本実施形態に係るサービス入出力定義編集画面の例を示す図である。
サービス入出力定義編集画面５６００には、画面入力選択プルダウンメニュー５６０１、ＸＭＬファイルプルダウンメニュー５６０２、テキストファイル入力プルダウンメニュー５６０３、画面出力プルダウンメニュー５６０５、帳票出力プルダウンメニュー５６０６、ＣＳＶファイル出力プルダウンメニュー５６０７、ＸＭＬファイルプルダウンメニュー５６０８などが表示されている。各プルダウンメニュー５６０１〜５６０８において、選択された情報（該当する機能を有するか否かに関する情報）は、登録ボタン５６１３が入力部３０を介して選択入力されることによって、サービス入出力定義表２２１（図１４）に格納される。サービス入出力定義表２２１において、格納されるレコードは、行選択ボタン５６１６で選択されている行に相当するレコードである。なお、行選択ボタン５６１６で選択されている行に関する情報は、サービスインタフェースＩＤ表示エリア５６０９、サービスインタフェース名表示エリア５６１０および所属コンポーネント名表示エリア５６１１において表示されている。なお、編集ボタン５６１４が入力部３０を介して選択入力されると、行選択ボタン５６１６で選択されている行（レコード）の編集を行うことが可能であり、終了ボタン５６１２が選択入力されると、サービス入出力定義編集（図３１のステップＳ１１６）が終了する。
【０１３８】
図４７は、本実施形態に係るテーブル使用方法定義編集画面の例を示す図である。図４７において、図４６と同様の構成要素には同一の符号を付して説明を省略する。
サービス入出力定義編集画面５７００には、テーブルデータ作成プルダウンメニュー５７０１、テーブルデータ参照プルダウンメニュー５７０２、テーブルデータ検索参照プルダウンメニュー５７０３、テーブルデータ更新プルダウンメニュー５７０４、テーブルデータ削除プルダウンメニュー５７０５などが表示されている。各プルダウンメニュー５７０１〜５７０５において、選択された情報（該当する機能を有するか否かに関する情報）は、登録ボタン５６１３が入力部３０を介して選択入力されることによって、テーブル使用方法定義表２２２（図１５）に格納される。テーブル使用方法定義表２２２において、格納されるレコードは、行選択ボタン５６１６で選択されている行に相当するレコードである。なお、行選択ボタン５６１６で選択されている行に関する情報は、サービスインタフェース・テーブル間依存関係ＩＤ表示エリア５７０６、関係元サービスインタフェース名表示エリア５７０７および関係先テーブル名表示エリア５７０８において表示されている。なお、編集ボタン５６１４が入力部３０を介して選択入力されると、行選択ボタン５６１６で選択されている行（レコード）の編集を行うことが可能であり、終了ボタン５６１２が選択入力されると、テーブル使用方法定義編集（図３１のステップＳ１１７）が終了する。
【０１３９】
（効果）
本実施形態によれば、サービスインタフェースの機能に関する情報や、サービスインタフェース間の関係や、サービスインタフェース・テーブル間の関係や、クラスの機能に関するテンプレートなどを入力することによって、コンポーネントを構成するクラスの構造を出力することができる。この結果、設計者の意図に左右されず、所定の制約に従ったクラス構造を容易に生成することができる。また、クラス構造を生成する際に、ユースケースのような文章による記述を必要としない。
【図面の簡単な説明】
【０１４０】
【図１】本実施形態に係るクラス構造生成装置の構成例を示すブロック図である。
【図２】図１における各記憶部の構成例を示す図である。
【図３】本実施形態に係るクラス構造生成装置のハードウェア構成の例を示す図である。
【図４】本実施形態に係るコンポーネント体系表示画面の例を示す図である。
【図５】本実施形態に係るクラス構造表示画面の例を示す図である。
【図６】金融商品契約ソフトウェアにおける表示コンポーネント体系の例を示す図である。
【図７】金融商品契約ソフトウェアにおける表示クラス構造の例を示す図である。
【図８】金融商品契約ソフトウェアにおける表示クラス構造の例を示す図である。
【図９】は  コンポーネント定義表の例を示す図である。
【図１０】サービスインタフェース定義表の例を示す図である。
【図１１】テーブル定義表の例を示す図である。
【図１２】サービスインタフェース間依存関係定義表の例を示す図である。
【図１３】サービスインタフェース・テーブル間依存関係定義表の例を示す図である。
【図１４】サービス入出力定義表の例を示す図である。
【図１５】テーブル使用方法定義表の例を示す図である。
【図１６】クラス構造テンプレート定義表の例を示す図である。
【図１７】クラステンプレート定義表の例を示す図である。
【図１８】クラス間依存関係テンプレート定義表の例を示す図である。
【図１９】クラス・テーブル間依存関係テンプレート定義表の例を示す図である。
【図２０】クラス構造テンプレート・クラステンプレート間依存関係定義表の例を示す図である。
【図２１】クラス定義表の例を示す図である。
【図２２】クラス間依存関係定義表の例を示す図である。
【図２３】クラス・テーブル間依存関係定義表の例を示す図である。
【図２４】クラス・サービスインタフェース間依存関係定義表の例を示す図である。
【図２５】重複クラスグループ表の例を示す図である。
【図２６】重複クラス表の例を示す図である。
【図２７】重複関係元クラス表の例を示す図である。
【図２８】重複関係先クラス表の例を示す図である。
【図２９】重複関係先テーブル表の例を示す図である。
【図３０】統合クラス表の例を示す図である。
【図３１】本実施形態に係るクラス構造生成処理の全体的な流れを示すフローチャートである。
【図３２】クラス構造テンプレート適用処理の全体的な流れを示すフローチャートである。
【図３３】本実施形態に係るサービスインタフェースの存在に基づくテンプレート適用処理の流れを示すフローチャートである。
【図３４】本実施形態に係るサービスインタフェース・テーブル間依存関係に基づくテンプレート適用処理の流れを示すフローチャートである。
【図３５】本実施形態に係るサービスインタフェース間依存関係に基づくテンプレート適用処理）の流れを示すフローチャートである。
【図３６】本実施形態に係るサービスインタフェースに基づくテンプレート適用処理の流れを示すフローチャートである。
【図３７】本実施形態に係る重複クラス検出処理の流れを示すフローチャートである。
【図３８】本実施形態に係る重複クラスグループの定義処理の処理である。
【図３９】本実施形態に係るクラス構造調整処理の流れを示すフローチャートである。
【図４０】本実施形態に係る編集メニュー画面の例を示す図である。
【図４１】本実施形態に係るコンポーネント定義編集画面の例を示す図である。
【図４２】本実施形態に係るサービスインタフェース定義編集画面の例を示す図である。
【図４３】本実施形態に係るテーブル定義編集画面の例を示す図である。
【図４４】本実施形態に係るサービスインタフェース間依存関係定義編集画面の例を示す図である。
【図４５】本実施形態に係るサービスインタフェース・テーブル間依存関係定義編集画面の例を示す図である。
【図４６】本実施形態に係るサービス入出力定義編集画面の例を示す図である。
【図４７】本実施形態に係るテーブル使用方法定義編集画面の例を示す図である。
【符号の説明】
【０１４１】
１      クラス構造生成装置
１０    処理部
１１    コンポーネント体系定義編集部（入力部）
１２    サービス責務定義編集部（入力部）
１３    クラス構造テンプレート適用部
１４    重複クラス構造検出部（クラス構造調整部）
１５    クラス構造調整部
１６    クラス構造表示処理部
２０    記憶部
３０    入力部
４０    表示部
２１１  コンポーネント定義表
２１２  サービスインタフェース定義表（入出力情報）
２１３  テーブル定義表（入出力情報）
２１４  サービスインタフェース間依存関係定義表（入出力情報、サービスインタフェース間関係情報）
２１５  サービスインタフェース・テーブル間依存関係定義表（入出力情報、サービスインタフェース・テーブル間関係情報）
２２１  サービス入出力定義表
２２２  テーブル使用方法定義表
２３１  クラス構造テンプレート定義表（機能情報）
２３２  クラステンプレート定義表（機能情報）
２３３  クラス間依存関係テンプレート定義表（関係情報）
２３４  クラス・テーブル間依存関係テンプレート定義表（関係情報）
２３５  クラス構造テンプレート・クラステンプレート依存関係定義表
２４１  クラス定義表（クラス情報）
２４２  クラス間依存関係定義表（クラス間依存関係情報）
２４３  クラス・テーブル間依存関係定義表
２４４  クラス・サービスインタフェース依存関係定義表
２５１  重複クラスグループ表
２５２  重複クラス表
２５３  重複関係元クラス表
２５４  重複関係先クラス表
２５５  重複関係先テーブル表
２５６  統合クラス表
【図１】
0005189880.tif 000002
【図２】
0005189880.tif 000003
【図３】
0005189880.tif 000004
【図４】
0005189880.tif 000005
【図５】
0005189880.tif 000006
【図６】
0005189880.tif 000007
【図７】
0005189880.tif 000008
【図８】
0005189880.tif 000009
【図９】
0005189880.tif 000010
【図１０】
0005189880.tif 000011
【図１１】
0005189880.tif 000012
【図１２】
0005189880.tif 000013
【図１３】
0005189880.tif 000014
【図１４】
0005189880.tif 000015
【図１５】
0005189880.tif 000016
【図１６】
0005189880.tif 000017
【図１７】
0005189880.tif 000018
【図１８】
0005189880.tif 000019
【図１９】
0005189880.tif 000020
【図２０】
0005189880.tif 000021
【図２１】
0005189880.tif 000022
【図２２】
0005189880.tif 000023
【図２３】
0005189880.tif 000024
【図２４】
0005189880.tif 000025
【図２５】
0005189880.tif 000026
【図２６】
0005189880.tif 000027
【図２７】
0005189880.tif 000028
【図２８】
0005189880.tif 000029
【図２９】
0005189880.tif 000030
【図３０】
0005189880.tif 000031
【図３１】
0005189880.tif 000032
【図３２】
0005189880.tif 000033
【図３３】
0005189880.tif 000034
【図３４】
0005189880.tif 000035
【図３５】
0005189880.tif 000036
【図３６】
0005189880.tif 000037
【図３７】
0005189880.tif 000038
【図３８】
0005189880.tif 000039
【図３９】
0005189880.tif 000040
【図４０】
0005189880.tif 000041
【図４１】
0005189880.tif 000042
【図４２】
0005189880.tif 000043
【図４３】
0005189880.tif 000044
【図４４】
0005189880.tif 000045
【図４５】
0005189880.tif 000046
【図４６】
0005189880.tif 000047
【図４７】
0005189880.tif 000048