(57)【要約】プログラム部品の組み合わせによるシステムの実現手法において、プログラム部品の再配置を容易に行う。  再配置処理部１１１による上位、下位コンポジット間でのコンポーネントの移動が行われたときに、補完処理部１１２は、移動元コンポジットに要素と移動対象コンポーネントとの間のワイヤリングがある場合、下位コンポジットに、サービスまたはリファレンスを追加し、移動元コンポジットに、当該追加したサービスまたはリファレンスと当該要素とを接続するワイヤリングを設定し、移動先コンポジットに、当該追加したサービスまたはリファレンスと当該移動対象コンポーネントとを接続するワイヤリングを設定する補完処理を行う。
2012111725.tif 000002
【特許請求の範囲】
【請求項１】
所定の処理または他のコンポジットのインスタンスの利用を定義するコンポーネント、提供する機能を定義するサービス、利用する機能を定義するリファレンス、及び、コンポーネント、サービス、及び、リファレンス間の機能の提供関係を定義するワイヤリングを要素として含む複数のコンポジットを記憶するコンポジット情報記憶手段と、
前記複数のコンポジットの内の第１のコンポジットを移動先、前記第１のコンポジットに含まれるコンポーネントがインスタンスとして利用する第２のコンポジットを移動元として、前記第２のコンポジットに含まれる対象コンポーネントを移動、または、前記第１のコンポジットを移動元、前記第２のコンポジットを移動先として、前記第１のコンポジットに含まれる対象コンポーネントを移動する再配置処理手段と、
前記移動元コンポジットに前記要素と前記対象コンポーネントとの間のワイヤリングがある場合、前記対象コンポーネントの移動後に、前記第２のコンポジットに、サービスまたはリファレンスを追加し、前記移動元コンポジットに、当該追加したサービスまたはリファレンスと当該要素とを接続するワイヤリングを設定し、前記移動先コンポジットに、当該追加したサービスまたはリファレンスと当該対象コンポーネントとを接続するワイヤリングを設定する補完処理を行う補完処理手段と
を含むリファクタリング装置。
【請求項２】
前記補完処理手段は、前記再配置処理手段が、前記第１のコンポジットを移動先、前記第２のコンポジットを移動元として、前記第２のコンポジットに含まれる対象コンポーネントを移動したとき、
前記第２のコンポジットに前記対象コンポーネントのサービスを接続先とするワイヤリングが検出された場合、当該第２のコンポジットに当該検出されたワイヤリングが接続可能なリファレンスを追加し、当該検出されたワイヤリングの接続先を当該追加されたリファレンスに変更し、当該第１のコンポジットに、当該第２のリファレンスを接続元、当該対象コンポーネントのサービスを接続先とするワイヤリングを追加し、
前記第２のコンポジットに、前記対象コンポーネントのリファレンスを接続元とするワイヤリングが検出された場合、当該第２のコンポジットに当該検出されたワイヤリングが接続可能なサービスを追加し、当該検出されたワイヤリングの接続元を当該追加したサービスに変更し、当該第１のコンポジットに、当該追加したサービスを接続先、当該対象コンポーネントのリファレンスを接続元とするワイヤリングを追加する
請求項１に記載のリファクタリング装置。
【請求項３】
前記再配置処理手段は、さらに、前記第１のコンポジットを移動先、前記第２のコンポジットを移動元として、前記第２のコンポジットに含まれる対象サービス、及び、前記第２のコンポジットに含まれる対象リファレンスの少なくとも一方を移動し、
前記補完処理手段は、さらに、前記再配置処理手段が前記対象サービスを移動した場合、前記第２のコンポジットに、当該対象サービスと接続可能なサービスを追加し、当該第２のコンポジット内の当該対象サービスを接続元としていたワイヤリングの接続元を当該追加したサービスに変更し、前記第１のコンポジットに、当該対象サービスを接続元、当該追加したサービスを接続先としたワイヤリングを追加し、
前記再配置処理手段が前記対象リファレンスを移動した場合、前記第２のコンポジットに、当該対象リファレンスと接続可能なリファレンスを追加し、当該第２のコンポジット内の当該対象リファレンスを接続先としていたワイヤリングの接続先を当該追加したリファレンスに変更し、前記第１のコンポジットに、当該追加したリファレンスを接続元、当該対象リファレンスを接続先としたワイヤリングを追加する
請求項２に記載のリファクタリング装置。
【請求項４】
さらに、
前記補完処理手段による前記補完処理の後に、
前記第２のコンポジットに、前記対象コンポーネントのリファレンスと接続されたサービスを接続元、当該第２のコンポジットのリファレンスを接続先とするワイヤリングが検出された場合、当該検出されたワイヤリングを削除し、前記第１のコンポジットに、当該第２のコンポジットのリファレンスを接続元としたワイヤリングと同一の接続先と当該対象コンポーネントのリファレンスを接続元とを有するワイヤリングを追加し、
前記第２のコンポジットに、前記対象コンポーネントのサービスが接続されたリファレンスを接続先、当該第２のコンポジットのサービスを接続元とするワイヤリングが検出された場合、当該検出されたワイヤリングを削除し、前記第１のコンポジットに、当該第２のコンポジットのサービスを接続先としたワイヤリングと同一の接続元と当該対象コンポーネントのサービスを接続先とを有するワイヤリングを追加し、
前記第２のコンポジットに、当該第２のコンポジットのサービスまたはリファレンスと当該第２のコンポジットの他の前記要素とを接続するワイヤリングが無い場合、当該第２のコンポジットのサービスまたはリファレンスを削除し、前記第１のコンポジットから、当該第２のコンポジットのサービスまたはリファレンスと当該第１のコンポジットの前記要素とを接続するワイヤリングを削除する修正処理手段
を含む請求項２または３に記載のリファクタリング装置。
【請求項５】
さらに、
前記再配置処理手段が、前記第１のコンポジットを移動先、前記第２のコンポジットを移動元として、前記第２のコンポジットに含まれる対象コンポーネントを移動する前に、前記第１のコンポジットと同一のコンポジットである前記第２のコンポジットを生成し、当該第１のコンポジットに含まれるコンポーネントを削除し、当該第１のコンポジットに、当該第２のコンポジットのインスタンスを利用するコンポーネントを設定する内包化処理手段
を含む請求項１に記載のリファクタリング装置。
【請求項６】
前記補完処理手段は、前記再配置処理手段が、前記第１のコンポジットを移動元、前記第２のコンポジットを移動先として、前記第１のコンポジットに含まれる対象コンポーネントを移動したとき、
前記第１のコンポジットに前記対象コンポーネントのサービスを接続先とするワイヤリングが検出された場合、前記第２のコンポジットに当該検出されたワイヤリングが接続可能なサービスを追加し、当該検出されたワイヤリングの接続先を当該追加したサービスに変更し、当該第２のコンポジットに、当該追加したサービスを接続元、当該対象コンポーネントのサービスを接続先とするワイヤリングを追加し、
前記第１のコンポジットに前記対象コンポーネントのリファレンスを接続元とするワイヤリングが検出された場合、前記第２のコンポジットに当該検出されたワイヤリングが接続可能なリファレンスを追加し、当該検出されたワイヤリングの接続元を当該追加したリファレンスに変更し、当該第２のコンポジットに、当該追加したリファレンスを接続先、当該対象コンポーネントのリファレンスを接続元とするワイヤリングを追加する
請求項１に記載のリファクタリング装置。
【請求項７】
さらに、
前記補完処理手段による前記補完処理の後に、
前記第２のコンポジットに、当該第２のコンポジットのサービスと接続された前記第１のコンポジットにおける接続元が同一である他のサービスがある場合、当該第２のコンポジットのサービス、及び、当該第２のコンポジットのサービスと当該第１のコンポジットにおける接続元とを接続するワイヤリングを削除し、当該第２のコンポジットにおける、当該第２のコンポジットのサービスを接続元としていたワイヤリングの接続元を当該他のサービスに変更し、
前記第２のコンポジットに、当該第２のコンポジットのリファレンスと接続された前記第１のコンポジットにおける接続先が同一である他のリファレンスがある場合、当該第２のコンポジットのリファレンス、及び、当該第２のコンポジットのリファレンスと当該第１のコンポジットにおける接続先とを接続するワイヤリングを削除し、当該第２のコンポジットにおける、当該第２のコンポジットのリファレンスを接続先としていたワイヤリングの接続先を当該他のサービスに変更する修正処理手段
を含む請求項６に記載のリファクタリング装置。
【請求項８】
さらに、
前記再配置処理手段が、前記第１のコンポジットを移動元、前記第２のコンポジットを移動先として、前記第１のコンポジットに含まれる対象コンポーネントを移動した後に、前記第１のコンポジットに含まれる前記第２のコンポジットのインスタンスを利用するコンポーネントを削除し、当該第１のコンポジットに、当該第２のコンポジットに含まれるコンポーネントを設定する内包化処理手段
を含む請求項１に記載のリファクタリング装置。
【請求項９】
所定の処理または他のコンポジットのインスタンスの利用を定義するコンポーネント、提供する機能を定義するサービス、利用する機能を定義するリファレンス、及び、コンポーネント、サービス、及び、リファレンス間の機能の提供関係を定義するワイヤリングを要素として含む複数のコンポジットを記憶し、
前記複数のコンポジットの内の第１のコンポジットを移動先、前記第１のコンポジットに含まれるコンポーネントがインスタンスとして利用する第２のコンポジットを移動元として、前記第２のコンポジットに含まれる対象コンポーネントを移動、または、前記第１のコンポジットを移動元、前記第２のコンポジットを移動先として、前記第１のコンポジットに含まれる対象コンポーネントを移動し、
前記移動元コンポジットに前記要素と前記対象コンポーネントとの間のワイヤリングがある場合、前記対象コンポーネントの移動後に、前記第２のコンポジットに、サービスまたはリファレンスを追加し、前記移動元コンポジットに、当該追加したサービスまたはリファレンスと当該要素とを接続するワイヤリングを設定し、前記移動先コンポジットに、当該追加したサービスまたはリファレンスと当該対象コンポーネントとを接続するワイヤリングを設定する補完処理を行う
リファクタリング方法。
【請求項１０】
コンピュータに、
所定の処理または他のコンポジットのインスタンスの利用を定義するコンポーネント、提供する機能を定義するサービス、利用する機能を定義するリファレンス、及び、コンポーネント、サービス、及び、リファレンス間の機能の提供関係を定義するワイヤリングを要素として含む複数のコンポジットを記憶し、
前記複数のコンポジットの内の第１のコンポジットを移動先、前記第１のコンポジットに含まれるコンポーネントがインスタンスとして利用する第２のコンポジットを移動元として、前記第２のコンポジットに含まれる対象コンポーネントを移動、または、前記第１のコンポジットを移動元、前記第２のコンポジットを移動先として、前記第１のコンポジットに含まれる対象コンポーネントを移動し、
前記移動元コンポジットに前記要素と前記対象コンポーネントとの間のワイヤリングがある場合、前記対象コンポーネントの移動後に、前記第２のコンポジットに、サービスまたはリファレンスを追加し、前記移動元コンポジットに、当該追加したサービスまたはリファレンスと当該要素とを接続するワイヤリングを設定し、前記移動先コンポジットに、当該追加したサービスまたはリファレンスと当該対象コンポーネントとを接続するワイヤリングを設定する
処理を実行させるプログラムを格納するコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はリファクタリング装置、リファクタリング方法、及び、プログラムに関し、特に、システムを構成するプログラム部品の再配置を行うリファクタリング装置、リファクタリング方法、及び、プログラムに関する。
【背景技術】
【０００２】
近年、分散コンピューティング技術の進展に伴い、サービス指向アーキテクチャ（ＳＯＡ：Ｓｅｒｖｉｃｅ  Ｏｒｉｅｎｔｅｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）と呼ばれるソフトウェアの設計概念が注目されている。ＳＯＡにおいては、あるひとまとまりの汎用的な機能群を提供するプログラム部品を独立して動作させ、その機能がサービスとして外部へ提供される。そして、これらのサービスを連携させることで、目的とするシステムが構築される。プログラム部品間の連携は、各プログラム部品が提供するサービスのインタフェースによってのみ規定されるため、各プログラム部品の独立性や保守性、再利用性が高まる。
このようなＳＯＡの概念に従ったソフトウェアの具体的な実現手法の一つにサービス・コンポーネント・アーキテクチャ（ＳＣＡ：  Ｓｅｒｖｉｃｅ  Ｃｏｍｐｏｎｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ）がある。
ＳＣＡとは、プログラム部品のインスタンスであるコンポーネント（または、コンポーネント要素）と、コンポーネントが提供する機能であるサービス（または、サービス要素）を中心にシステムを構築するソフトウェアの実現手法である。コンポーネントとサービスの他にリファレンス（または、リファレンス要素）、ワイヤリング（または、ワイヤリング要素）、プロパティ（または、プロパティ要素）、コンポジット（または、コンポジット要素）などの要素が用いられる。
ＳＣＡの詳細な仕様は、例えば、非特許文献１に記載されている。
ここで、ＳＣＡを例に、このような、プログラム部品の組み合わせによるシステムの実現手法における再利用性に優れたプログラムの部品化の仕様を説明する。
図３５は、ＳＣＡにおいて定義される要素を示す図である。
図３５において、コンポーネント３０１は、実行可能なプログラム部品のインスタンスを規定する要素である。コンポーネント３０１は、プログラム部品の実装とその実行に必要な設定とで構成される。実装は、例えば、Ｊａｖａ（登録商標）やＣ＋＋などの言語で記述されたプログラムによって規定され、その設定は、コンポーネント３０１のサービス３０２、リファレンス３０３、プロパティ３０４などの要素で規定される。ここで、サービス３０２は、コンポーネント３０１が提供する機能を規定する要素である。リファレンス３０３は、コンポーネント３０１が消費するサービスを規定する要素である。プロパティ３０４は、コンポーネント３０１が実行時に利用する変数とその値を規定する要素である。
またコンポジット３１０は、これらの要素の組み合わせを規定する要素である。コンポジット３１０は、内部に複数のコンポーネント３０１やワイヤリング３１５、３１６を含むことができる。ワイヤリング３１５、３１６は、サービスを必要とする要素とサービスを提供する要素との結び付きを規定する要素である。複数のコンポーネント３０１間でリファレンス３０３とサービス３０２をワイヤリングにより結び付けることで、ＳＯＡの特徴である複数のプログラム部品間の連携が表現される。
また、コンポジット３１０は、それ自体を、さらに他のコンポーネントの実装として再利用できる（コンポーネントとして、他のコンポジット３１０のインスタンスを利用できる）。
コンポジット３１０は内部にサービス３１２を含むことができ、これにより当該コンポジット３１０がコンポーネントとしてインスタンス化された場合に提供可能なサービスを規定できる。コンポジットに含まれるサービス３１２は、実際には、当該コンポジット３１０に含まれるコンポーネント３０１のサービス３０２によって提供され、これらのサービス３０２、３１２は当該コンポジット３１０内においてワイヤリング３１５で結びつけられる。
また、コンポジット３１０は内部にリファレンス３１３を含むことができ、これにより当該コンポジット３１０がコンポーネントとしてインスタンス化された場合に消費するサービスを規定できる。これは当該コンポジット３１０に含まれるコンポーネント３０１が消費するサービスが、当該コンポジット３１０外で提供される場合に利用される。この場合、当該コンポジット３１０において、当該サービスを消費するコンポーネント３０１のリファレンス３０３と、当該コンポジット３１０のリファレンス３１３とが、ワイヤリング３１６で結びつけられる。
コンポジット３１０のサービス３１２やリファレンス３１３にはインタフェースを規定することができる。これによりサービス３１２が提供可能な機能性やリファレンス３１３が必要とする機能性を考慮して、ワイヤリングの適用を制御できる。
また、コンポジット３１０は内部にプロパティ３１４を含むことができ、これにより当該コンポジットがコンポーネントとしてインスタンス化される際に値を指定可能なプロパティを規定することができる。コンポジットに含まれるプロパティ３１４は、当該コンポジット３１０に含まれるコンポーネント３０１のプロパティ３０４の値として、当該コンポーネント３０１から参照させることができる。これにより、当該コンポジット３１０に含まれるコンポーネント３０１のプロパティ３１４の値を、当該コンポジット３１０を実装とするコンポーネントで設定できる。プロパティ３１４には値の型を規定することができる。これにより、参照する側のプロパティが要求する値の種類と参照される側が提供する値の種類との整合性を考慮して、参照設定の可否を制御できる。
上述のリファレンスやプロパティの参照の仕組みのように、プログラム部品が依存する機能やデータを外部から注入できる仕組みは、一般に依存性注入（ＤＩ：  Ｄｅｐｅｎｄｅｎｃｙ  Ｉｎｊｅｃｔｉｏｎ）と呼ばれ、プログラム部品の再利用性を高める手法として近年特に注目を集めている。
ＳＣＡなどのプログラム部品の組み合わせによるシステムの実現手法では、こうしたＤＩの仕組みを用いつつ、コンポジットとしてまとめたコンポーネントやサービスをさらに上位のコンポジットでまとめていくことで、多数の汎用的で細粒度のプログラム部品をもとに、目的のシステムを効果的に構築できる。
ところで、このようなプログラム部品の組み合わせによるシステムの実現手法において、一般的に、常に最初から必要な要素を適切なコンポジットに収めた設計ができるとは限らず、他のプログラミング手法と同様に、リファクタリングを実施し、プログラム部品を構成する要素の配置を調整する必要が生じる。
例えば、２つの整数を受け取り、それらを足し合わせた結果を利用者に見やすく表示するサービスを提供するコンポジットＡを考える。コンポジットＡは内部に加算をするコンポーネントＳと、利用者に見やすく表示するコンポーネントＰを持つとする。ここで、コンポーネントＳを別のコンポーネント、例えば乗算をするコンポーネントＭ、に変更することで他の演算についても同様の機能を提供できることがわかった場合、コンポジットＡにおいてコンポーネントＳのサービスを利用している部分をリファレンスとして抜き出すことにより、コンポジットＡを任意の演算用コンポーネントと組み合わせて演算結果を見やすく表示するコンポジットに変更し、その再利用性を高めることができる。
しかしながら、再配置するコンポーネントを含むコンポジットが、既に別のコンポジットにおけるコンポーネントの実装として利用されている場合や、再配置されるコンポーネントが他のサービスやリファレンスと接続されている場合、利用者は、リファクタリングによってシステム全体の機能性に影響が発生しないように、コンポーネントの追加や追加したコンポーネントを接続するためのワイヤリングの追加等、再配置するコンポーネント以外の要素の調整を行う必要がある。
なお、関連技術として、特許文献１には、プログラム部品の組み合わせによるシステム開発におけるリファクタリング支援に関する技術として、利用しない機能のコードを除去する方法が記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−１２２１８７号公報
【非特許文献】
【０００４】
【非特許文献１】ＳＣＡ  Ｓｅｒｖｉｃｅ  Ｃｏｍｐｏｎｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ，Ａｓｓｅｍｂｌｙ  Ｍｏｄｅｌ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ，ＳＣＡ  Ｖｅｒｓｉｏｎ  １．００，Ｍａｒｃｈ  １５  ２００７，ｈｔｔｐ：／／ｏｓｏａ．ｏｒｇ／ｄｏｗｎｌｏａｄ／ａｔｔａｃｈｍｅｎｔｓ／３５／ＳＣＡ＿ＡｓｓｅｍｂｌｙＭｏｄｅｌ＿Ｖ１００．ｐｄｆ？ｖｅｒｓｉｏｎ＝１
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述の通り、プログラム部品の組み合わせによるシステムの実現手法では、利用者は、リファクタリングにおいてプログラム部品を再配置するときに、プログラム全体の機能性を維持するため、プログラム部品の定義を修正する必要があった。特に、再配置するプログラム部品が他のプログラム部品と複雑に関連している場合には、必要な修正が多く、煩雑になるため、リファクタリングに伴う作業コストの増大や、誤った修正を行う可能性が高まるという課題があった。
本発明の目的は、上述した課題を解決し、プログラム部品の組み合わせによるシステムの実現手法において、プログラム部品の再配置を容易にするリファクタリング装置を提供することである。
【課題を解決するための手段】
【０００６】
本発明の一態様におけるリファクタリング装置は、所定の処理または他のコンポジットのインスタンスの利用を定義するコンポーネント、提供する機能を定義するサービス、利用する機能を定義するリファレンス、及び、コンポーネント、サービス、及び、リファレンス間の機能の提供関係を定義するワイヤリングを要素として含む複数のコンポジットを記憶するコンポジット情報記憶手段と、前記複数のコンポジットの内の第１のコンポジットを移動先、前記第１のコンポジットに含まれるコンポーネントがインスタンスとして利用する第２のコンポジットを移動元として、前記第２のコンポジットに含まれる対象コンポーネントを移動、または、前記第１のコンポジットを移動元、前記第２のコンポジットを移動先として、前記第１のコンポジットに含まれる対象コンポーネントを移動する再配置処理手段と、前記移動元コンポジットに前記要素と前記対象コンポーネントとの間のワイヤリングがある場合、前記対象コンポーネントの移動後に、前記第２のコンポジットに、サービスまたはリファレンスを追加し、前記移動元コンポジットに、当該追加したサービスまたはリファレンスと当該要素とを接続するワイヤリングを設定し、前記移動先コンポジットに、当該追加したサービスまたはリファレンスと当該対象コンポーネントとを接続するワイヤリングを設定する補完処理を行う補完処理手段とを含む。
本発明の一態様におけるリファクタリング方法は、所定の処理または他のコンポジットのインスタンスの利用を定義するコンポーネント、提供する機能を定義するサービス、利用する機能を定義するリファレンス、及び、コンポーネント、サービス、及び、リファレンス間の機能の提供関係を定義するワイヤリングを要素として含む複数のコンポジットを記憶し、前記複数のコンポジットの内の第１のコンポジットを移動先、前記第１のコンポジットに含まれるコンポーネントがインスタンスとして利用する第２のコンポジットを移動元として、前記第２のコンポジットに含まれる対象コンポーネントを移動、または、前記第１のコンポジットを移動元、前記第２のコンポジットを移動先として、前記第１のコンポジットに含まれる対象コンポーネントを移動し、前記移動元コンポジットに前記要素と前記対象コンポーネントとの間のワイヤリングがある場合、前記対象コンポーネントの移動後に、前記第２のコンポジットに、サービスまたはリファレンスを追加し、前記移動元コンポジットに、当該追加したサービスまたはリファレンスと当該要素とを接続するワイヤリングを設定し、前記移動先コンポジットに、当該追加したサービスまたはリファレンスと当該対象コンポーネントとを接続するワイヤリングを設定する補完処理を行う。
本発明の一態様におけるコンピュータ読み取り可能な記録媒体は、コンピュータに、所定の処理または他のコンポジットのインスタンスの利用を定義するコンポーネント、提供する機能を定義するサービス、利用する機能を定義するリファレンス、及び、コンポーネント、サービス、及び、リファレンス間の機能の提供関係を定義するワイヤリングを要素として含む複数のコンポジットを記憶し、前記複数のコンポジットの内の第１のコンポジットを移動先、前記第１のコンポジットに含まれるコンポーネントがインスタンスとして利用する第２のコンポジットを移動元として、前記第２のコンポジットに含まれる対象コンポーネントを移動、または、前記第１のコンポジットを移動元、前記第２のコンポジットを移動先として、前記第１のコンポジットに含まれる対象コンポーネントを移動し、前記移動元コンポジットに前記要素と前記対象コンポーネントとの間のワイヤリングがある場合、前記対象コンポーネントの移動後に、前記第２のコンポジットに、サービスまたはリファレンスを追加し、前記移動元コンポジットに、当該追加したサービスまたはリファレンスと当該要素とを接続するワイヤリングを設定し、前記移動先コンポジットに、当該追加したサービスまたはリファレンスと当該対象コンポーネントとを接続するワイヤリングを設定する処理を実行させるプログラムを格納する。
【発明の効果】
【０００７】
本発明の効果は、上述した課題を解決し、プログラム部品の組み合わせによるシステムの実現手法において、プログラム部品の再配置を容易に行うことができることである。
【図面の簡単な説明】
【０００８】
【図１】本発明の第１の実施の形態の特徴的な構成を示すブロック図である。
【図２】本発明の第１の実施の形態におけるリファクタリング装置１００を適用したリファクタリングシステムの構成を示すブロック図である。
【図３】コンポジットの定義情報のＸＭＬ形式による記述例を示す図である。
【図４】コンポジットの定義情報のＸＭＬ形式による他の記述例を示す図である。
【図５】コンポジットの定義情報の図形による記述例を示す図である。
【図６】コンポジットの定義情報の図形による他の記述例を示す図である。
【図７】コンポジットの定義情報の図形による他の記述例を示す図である。
【図８】本発明の第１の実施の形態における、リファクタリング処理の概要を示すフローチャートである。
【図９】本発明の第１の実施の形態における、リファクタリング処理の概要を示すフローチャート（図８の続き）である。
【図１０】本発明の第１の実施の形態における、コンポーネント要素の上位コンポジットへの再配置に係る補完処理の詳細を示すフローチャートである。
【図１１】本発明の第１の実施の形態における、コンポーネント要素の上位コンポジットへの再配置に係る、コンポジットの定義情報の例を示す図である。
【図１２】本発明の第１の実施の形態における、サービス要素の上位コンポジットへの再配置に係る補完処理の詳細を示すフローチャートである。
【図１３】本発明の第１の実施の形態における、サービス要素の上位コンポジットへの再配置に係る、コンポジットの定義情報の例を示す図である。
【図１４】本発明の第１の実施の形態における、リファレンス要素の上位コンポジットへの再配置に係る補完処理の詳細を示すフローチャートである。
【図１５】本発明の第１の実施の形態における、リファレンス要素の上位コンポジットへの再配置に係る、コンポジットの定義情報の例を示す図である。
【図１６】本発明の第１の実施の形態における、プロパティ要素の上位コンポジットへの再配置に係る補完処理の詳細を示すフローチャートである。
【図１７】本発明の第１の実施の形態における、プロパティ要素の上位コンポジットへの再配置に係る、コンポジットの定義情報の例を示す図である。
【図１８】本発明の第１の実施の形態における、コンポーネント要素の下位コンポジットへの再配置に係る補完処理の詳細を示すフローチャートである。
【図１９】本発明の第１の実施の形態における、コンポーネント要素の下位コンポジットへの再配置に係る、コンポジットの定義情報の例を示す図である。
【図２０】本発明の第２の実施の形態におけるリファクタリング装置１００を適用したリファクタリングシステムの構成を示すブロック図である。
【図２１】本発明の第２の実施の形態における、補完情報の例を示す図である。
【図２２】本発明の第２の実施の形態における、リファクタリング処理の概要を示すフローチャートである。
【図２３】本発明の第２の実施の形態における、リファクタリング処理の概要を示すフローチャート（図２２の続き）である。
【図２４】本発明の第２の実施の形態における、上位コンポジットへの要素の再配置に係る修正処理の詳細を示すフローチャートである。
【図２５】本発明の第２の実施の形態における、上位コンポジットへの要素の再配置に係る、コンポジットの定義情報の例を示す図である。
【図２６】本発明の第２の実施の形態における、上位コンポジットへの要素の再配置に係る、コンポジットの定義情報の例を示す図である。
【図２７】本発明の第２の実施の形態における、下位コンポジットへの要素の再配置に係る修正処理の詳細を示すフローチャートである。
【図２８】本発明の第２の実施の形態における、下位コンポジットへの要素の再配置に係る、コンポジットの定義情報の例を示す図である。
【図２９】本発明の第２の実施の形態における、下位コンポジットへの要素の再配置に係る、コンポジットの定義情報の例を示す図である。
【図３０】本発明の第３の実施の形態におけるリファクタリング装置１００を適用したリファクタリングシステムの構成を示すブロック図である。
【図３１】本発明の第３の実施の形態における、内包化処理、及び、展開処理に係る、コンポジットの定義情報の例を示す図である。
【図３２】本発明の第３の実施の形態における内包化処理を示すフローチャートである。
【図３３】本発明の第３の実施の形態における展開処理を示すフローチャートである。
【図３４】本発明の第３の実施の形態における、展開処理に係る、コンポジットの定義情報の例を示す図である。
【図３５】ＳＣＡにおいて定義される要素を示す図である。
【発明を実施するための形態】
【０００９】
（第１の実施の形態）
次に、本発明の第１の実施の形態について説明する。
はじめに、本発明の第１の実施の形態の構成について説明する。図２は、本発明の第１の実施の形態におけるリファクタリング装置１００を適用したリファクタリングシステムの構成を示すブロック図である。
図２を参照すると、本発明の第１の実施の形態におけるリファクタリングシステムは、リファクタリング装置１００と利用者端末２００とを含む。ファクタリング装置１００は、再配置処理部１１１、補完処理部１１２、及び、コンポジット情報記憶部１１３を含む。再配置処理部１１１と利用者端末２００とは、ネットワーク等により通信可能に接続される。
ここで、プログラム部品の構成に関する情報である、コンポジットの定義情報はコンポジット情報記憶部１１３に記憶される。
再配置処理部１１１は、利用者端末２００からのリファクタリング要求を受信し、当該リファクタリング要求に従ってプログラム部品を構成する要素の再配置（移動）を行い、コンポジットの定義情報を更新すると共に、更新後の定義情報を利用者へ提示する。
また、再配置処理部１１１は、利用者端末２００からリファクタリング要求を受信したときに、当該リファクタリング要求が実施可能であるかどうかを判断し、実施可能であると判断された要求について要素の再配置（移動）を実施する。
補完処理部１１２は、再配置処理部１１１による要素の再配置（移動）が完了すると、リファクタリング対象となるプログラム全体の機能性を維持するように、要素の補完を実施する。
なお、リファクタリング装置１００は、ＣＰＵとプログラムを記憶した記憶媒体を含み、プログラムに基づく制御によって動作するコンピュータであってもよい。
次に、コンポジットの定義情報の具体例を示す。図３及び図４は、コンポジットの定義情報のＸＭＬ形式による記述例を示す図である。図３は、コンポジットＣに関する定義情報、図４は、コンポジットＰに関するコンポジットの定義情報である。
図３において、コンポジットの定義情報は、全体がｃｏｍｐｏｓｉｔｅタグで囲まれており、ｃｏｍｐｏｓｉｔｅタグのｎａｍｅ属性としてそのコンポジットの名前が定義される。ここでは、Ｃという名前のコンポジットが定義されている。コンポジットＣの内部にはサービス要素、リファレンス要素、プロパティ要素、コンポーネント要素、及び、２つのワイヤリング要素が記述されている。これらはコンポジットＣが持つサービス、リファレンス、プロパティ、コンポーネント及びワイヤリングを示している。
サービス要素はｓｅｒｖｉｃｅタグで囲まれており、ｓｅｒｖｉｃｅタグのｎａｍｅ属性として、そのサービスの名前が定義される。図３では、Ｓ−Ｃという名前のサービスが定義されている。
リファレンス要素はｒｅｆａｒｅｎｃｅタグで囲まれており、ｒｅｆａｒｅｎｃｅタグのｎａｍｅ属性として、そのリファレンスの名前が定義される。図３では、Ｒ−Ｃという名前のリファレンスが定義されている。
コンポジットの内部に記述されるサービス要素やリファレンス要素には、さらにｉｎｔｅｒｆａｃｅタグを用いて、当該要素のインタフェースを規定することができる。
プロパティ要素はｐｒｏｐｅｒｔｙタグで囲まれており、ｐｒｏｐｅｒｔｙタグのｎａｍｅ属性として、そのプロパティの名前が定義され、ｂｏｄｙ要素としてそのプロパティの値が定義される。図３では、Ｐ−Ｃという名前のプロパティが定義され、その値には“ｓａｍｐｌｅ  ｖａｌｕｅ”が指定されている。
プロパティ要素には、さらにｔｙｐｅ属性を用いて、当該プロパティ要素の型を規定することができる。図３では、ｔｙｐｅ属性として、文字列であることを示す“ｓｔｒｉｎｇ”が指定されている。
コンポーネント要素はｃｏｍｐｏｎｅｎｔタグで囲まれており、ｃｏｍｐｏｎｅｎｔタグのｎａｍｅ属性として、そのコンポーネントの名前が定義される。図３では、Ｃ−Ｃ＿ＪＣという名前のコンポーネントが定義されている。コンポーネント要素にはインプリメント要素が含まれ、そのコンポーネントの実装であるプログラム部品が指定される。図３ではｉｍｐｌｅｍｅｎｔ．ｊａｖａタグで囲まれた要素がインプリメント要素である。この場合、コンポーネントＣ−Ｃ＿ＪＣの実装はＪａｖａ言語で記述され、ｉｍｐｌｅｍｅｎｔ．ｊａｖａタグのｃｌａｓｓ属性により、ＪＣという名前のＪａｖａクラスが実装として指定されている。
コンポーネント要素内のインプリメント要素は、コンポジットと同様にサービス、リファレンス、プロパティの要素を含むことができる。コンポーネント要素内では、これらの要素のインスタンスが定義される。インスタンスはコンポジットにおける各要素の定義と同様にｓｅｒｖｉｃｅタグ、ｒｅｆｅｒｅｎｃｅタグ、ｐｒｏｐｅｒｔｙタグを用いて定義され、これらのタグのｎａｍｅ属性にインプリメント要素が持つ各要素のｎａｍｅ属性の値と同一の値を指定することで、当該要素のインスタンスを指定する。図３では、コンポーネントＣ−Ｃ＿ＪＣ内のインプリメント要素であるＪａｖａクラスＪＣがプロパティＰ−ＪＣを持っており、コンポーネントＣ−Ｃ＿ＪＣ内のｐｒｏｐｅｒｔｙタグによって、プロパティＰ−ＪＣのインスタンスが定義されている。
コンポーネント要素内のインプリメント要素の各要素のインスタンスは、そのコンポーネントを含むコンポジット内の他の要素のインスタンスと関連付けることができる。例えばそのコンポジット内の他の要素のインスタンスから、当該インプリメント要素のサービスを利用することや、当該インプリメント要素のリファレンスが必要とするサービスのインスタンスをそのコンポジット内の他の要素のインスタンスで提供することができる。
また、コンポーネント要素内のインプリメント要素のプロパティのインスタンスの値を、そのコンポーネント要素内で指定できる。この場合、当該インプリメント要素のプロパティの値として、そのコンポーネントを含むコンポジットで定義されたプロパティ要素を参照するように指定できる。図３では、コンポーネントＣ−Ｃ＿ＪＣ内のプロパティＰＪＣは、コンポジットＣ内のプロパティＰ−Ｃを参照しており、プロパティＰ−Ｃの値である“ｓａｍｐｌｅ  ｖａｌｕｅ”がプロパティＰ−ＪＣの値として指定される。
ワイヤリング要素はｗｉｒｅタグで囲まれており、ｗｉｒｅタグのｓｏｕｒｃｅ属性としてそのワイヤリングの接続元が定義され、ｔａｒｇｅｔ属性としてそのワイヤリングの接続先が定義される。ｓｏｕｒｃｅ属性やｔａｒｇｅｔ属性の値が“／”を含む場合、“／”の前の部分が、コンポーネント名を示し、“／”の後の部分が、そのコンポーネント内のインプリメント要素が持つサービスやリファレンスの名前を示している。図３では、サービスＳ−ＣとコンポーネントＣ−Ｃ＿ＪＣが持つ図示しないサービスＳ−ＪＣとを接続するワイヤリングと、コンポーネントＣ−Ｃ＿ＪＣが持つ図示しないリファレンスＲＪＣとリファレンスＲ−Ｃとを接続するワイヤリングが定義されていることになる。
また、図４では、コンポジットＰはサービスＳ−Ｐ、コンポーネントＣ１−Ｐ＿Ｃ、コンポーネントＣ２−Ｐ＿Ｏを含む。
ここで、コンポーネントＣ１−Ｐ＿Ｃでは、インプリメント要素としてコンポジットＣが指定されている（コンポーネントＣ１−Ｐ＿Ｃとして、コンポジットＣのインスタンスを利用することが指定されている）。このように、コンポーネントのインプリメント要素としてコンポジットを指定する場合にはｉｍｐｌｅｍｅｎｔ．ｃｏｍｐｏｓｉｔｅタグが用いられ、そのｎａｍｅ属性としてそのコンポーネントの実装であるコンポジットのコンポジット名が指定される。
同様に、コンポーネントＣ２−Ｐ＿Ｏでは、インプリメント要素として、図示しないコンポジットＯが指定されている。ここで、コンポジットＯは、図示しないサービスＳ−Ｏを持つ。
また、コンポーネントＣ１−Ｐ＿Ｃ内では、プロパティ要素が指定され、コンポーネントＣ１−Ｐ＿Ｃのインプリメント要素であるコンポジットＣ内で定義されたプロパティＰ−Ｃの値に“ｏｖｅｒｗｒｉｔｉｎｇ  ｖａｌｕｅ”が指定されている。
さらにコンポジットＰは、コンポーネントＣ１−Ｐ＿ＣのリファレンスＲ−ＣとコンポーネントＣ２−Ｐ＿ＯのサービスＳ−Ｏとを接続するワイヤリング、及び、サービスＳＰとコンポーネントＣ１−Ｐ＿ＣのサービスＳ−Ｃとを接続するワイヤリングを備えている。
コンポジットＰの実行時には、コンポーネントＣ１−Ｐ＿ＣとしてコンポジットＣがインスタンス化され、さらに、コンポジットＣが持つコンポーネントＣ−Ｃ＿ＪＣとしてＪａｖａクラスＪＣがインスタンス化される。そして、コンポジットＣのプロパティＰ−Ｃには、コンポーネントＣ１−Ｐ＿Ｃ内で指定された値“ｏｖｅｒｗｒｉｔｉｎｇ  ｖａｌｕｅ”が与えられる。さらに、コンポジットＣ内のコンポーネントＣ−Ｃ＿ＪＣでは、プロパティ要素によってインプリメント要素であるＪａｖａクラスＪＣのプロパティＰ−ＪＣの値としてプロパティＰ−Ｃを参照するように指定されているため、インスタンス化されたＪａｖａクラスＪＣのオブジェクトにおけるプロパティＰ−Ｃの値として“ｏｖｅｒｒｉｔｉｎｇ  ｖａｌｕｅ”が与えられる。また、コンポジットＣがリファレンスＲ−Ｃとして要求していたサービスは、コンポジットＰにおいてはコンポジットＯのサービスＳ−Ｏによって提供される。
このように、プログラム部品であるＪａｖａクラスＪＣ、コンポジットＣ、及び、コンポジットＯが組み合わされ、各コンポジットが必要とする値やサービス、すなわちコンポジット間の依存性が解決されることにより、実行可能でより具体化されたサービスＳ−Ｐが実現される。これらの依存性が解決できない場合は、コンポジットがインスタンス化されない、或いは、プログラムの実行時にエラーが出力され、そのサービスの提供に支障が生じる。
本発明の第１の実施の形態においては、再配置処理部１１１が利用者端末２００から受信するリファクタリング要求は、コンポジット間における要素の再配置である。リファクタリング要求は、コンポジット間における要素の再配置であることを示す情報に加え、再配置元のコンポジットの名前、再配置対象の要素の名前、再配置先のコンポジットの名前を含む。このような要求の内容は、例えば“ｒｅｐｌａｃｅ  Ｃ２−Ｐ＿Ｏ  Ｐ  Ｃ”などの文字列であればよい。
コンポジット間における要素の再配置とは、例えば、リファクタリング要求が“ｒｅｐｌａｃｅ  Ｃ１−Ｐ＿Ｏ  Ｐ  Ｃ”であれば、コンポジットＰからコンポーネントＣ１−Ｐ＿Ｏを削除し、これをそのままコンポジットＣに追加することである。このような操作をした場合、上述のコンポジット間の依存性が解決されなくなる可能性がある。本発明の第１の実施の形態における補完処理部１１２による要素の補完とは、要素の再配置を実施した後に、依存性が引き続き解決されるように、各コンポジットに、適宜要素を追加することである。
図５及び図６は、コンポジットの定義情報の図形による記述例を示す図である。図５及び図６は、それぞれ、図３のコンポジットＣ、図４のコンポジットＰに対応する。
図５及び図６では、コンポジットやコンポーネントは、角の丸い矩形で表現される。コンポジットやコンポーネントのインプリメント要素が持つサービスは、当該コンポジットやコンポーネントの左辺に重ねられた図形で表現される。コンポジットやコンポーネントのインプリメント要素が持つリファレンスは、当該コンポジットやコンポーネントの右辺に重ねられた図形で表現される。コンポジットやコンポーネントのインプリメント要素が持つプロパティは、当該コンポジットやコンポーネントの上辺に重ねられた矩形で表現される。ワイヤリングは接続する要素間を結ぶ線で表現される。プロパティの参照関係は、プロパティ間を結ぶ線で表現される。各要素の名前は、各要素の内部などに示される。
図７は、コンポジットの定義情報の図形による他の記述例を示す図である。以下では、あるコンポジットとそのコンポジットに含まれるコンポーネントのインプリメント要素であるコンポジットの定義情報を、図７に示すように、同じ図上に示す表現を用いる。この場合、コンポーネントのインプリメント要素であるコンポジットの定義情報は、当該コンポーネントを示す矩形の内部に重ねられ、そのコンポジット名が“（）”内に示される。図７では、コンポジットＣの定義情報が、コンポジットＰの定義情報内のコンポーネントＣ１−Ｐ＿Ｃを示す矩形の内部に重ねられている。
また、以下では、コンポジットＡに含まれるコンポーネントのインプリメント要素が、コンポジットＢである場合、コンポジットＡをコンポジットＢの上位コンポジットと表現し、コンポジットＢをコンポジットＡの下位コンポジットと表現する。
次に、本発明の第１の実施の形態におけるリファクタリング装置１００の動作について説明する。
＜リファクタリング処理の概要＞
図８及び図９は、本発明の第１の実施の形態における、リファクタリング処理の概要を示すフローチャートである。ここでは、はじめに、リファクタリング処理の概要を説明し、再配置対象の要素に応じた補完処理の詳細は後述する。
再配置処理部１１１は、利用者端末２００からリファクタリング要求を受信すると（ステップＳ１０００）、再配置処理部１１１は、コンポジット情報記憶部１１３に記憶されている再配置元、及び、再配置先コンポジットの定義情報を読み出す（ステップＳ１００１）。そして、再配置処理部１１１は、読み出した定義情報をもとに、受信したリファクタリング要求に従ったリファクタリングを実施可能であるかどうかを判断する。ここで、再配置処理部１１１は、リファクタリング要求が所定の前提条件を満たすかどうかを確認する（ステップＳ１００２）。所定の前提条件としては、例えば、受信したリファクタリング要求が、再配置元のコンポジットの名前と、再配置対象の要素の名前と、再配置先のコンポジットとを含むこと、再配置元及び再配置先のコンポジットの定義情報が共にコンポジット情報記憶部１１３に記憶されており、かつ、再配置対象の要素が再配置元のコンポジット内に含まれていること、及び、再配置先のコンポジットと再配置元のコンポジットの関係は、いずれかがもう一方の上位コンポジットであること、の全てを満たすことであり、それ以外の場合には、リファクタリングは実施不可能と判断される。
リファクタリング要求が当該前提条件を満たさない場合（ステップＳ１００２／Ｎｏ）、再配置処理部１１１は、利用者にリファクタリング要求を棄却する旨を通知し（ステップＳ１０１８）、リファクタリング処理を終了する。
リファクタリング要求が当該前提条件を満たす場合（ステップＳ１００２／Ｙｅｓ）、再配置処理部１１１は、さらに再配置先のコンポジットが再配置元のコンポジットの上位コンポジットであるか、或いは下位コンポジットであるかどうかを判定する（ステップＳ１００３）。
再配置先のコンポジットが再配置元のコンポジットの上位コンポジットである場合（ステップＳ１００３／上位）、再配置処理部１１１は、さらに再配置対象の要素がコンポーネント、サービス、リファレンス、プロパティのいずれであるかを判定する（ステップＳ１００４）。
再配置対象の要素がコンポーネントである場合（ステップＳ１００４／コンポーネント）、再配置処理部１１１は、リファクタリング要求に従い、再配置対象のコンポーネント要素を再配置元（下位）コンポジットの定義情報から削除し、再配置先（上位）コンポジットの定義情報へ追加（再配置）する（ステップＳ１００５）。
次に、補完処理部１１２は、コンポーネントの上位コンポジットへの再配置に係る要素の補完を行う（ステップＳ１００６）。
そして、再配置処理部１１１は、再配置及び補完の結果、更新された再配置元、及び、再配置先コンポジットの定義情報をコンポジット情報記憶部１１３に保存し（ステップＳ１００７）、利用者端末２００へ通知して（ステップＳ１００８）、リファクタリング処理を終了する。
また、ステップＳ１００４において、再配置対象の要素がサービスである場合（ステップＳ１００４／サービス）、再配置処理部１１１は、リファクタリング要求に従い、再配置対象のサービス要素を再配置元（下位）コンポジットの定義情報から削除し、再配置先（上位）コンポジットの定義情報へ追加（再配置）する（ステップＳ１００９）。
次に、補完処理部１１２は、サービスの上位コンポジットへの再配置に係る要素の補完を行い（ステップＳ１０１０）、ステップＳ１００７へ進む。
また、ステップＳ１００４において、再配置対象の要素がリファレンスである場合（ステップＳ１００４／リファレンス）、再配置処理部１１１は、リファクタリング要求に従い、再配置対象のリファレンス要素を再配置元（下位）コンポジットの定義情報から削除し、再配置先（上位）コンポジットの定義情報へ追加（再配置）する（ステップＳ１０１１）。
次に、補完処理部１１２は、リファレンスの上位コンポジットへの再配置に係る要素の補完を行い（ステップＳ１０１２）、ステップＳ１００７へ進む。
また、ステップＳ１００４において、再配置対象の要素がプロパティである場合（ステップＳ１００４／プロパティ）、再配置処理部１１１は、リファクタリング要求に従い、再配置対象のプロパティ要素を再配置元（下位）コンポジットの定義情報から削除し、再配置先（上位）コンポジットの定義情報へ追加（再配置）する（ステップＳ１０１３）。
次に、補完処理部１１２は、プロパティの上位コンポジットへの再配置に係る要素の補完を行い（ステップＳ１０１４）、ステップＳ１００７へ進む。
一方、ステップＳ１００３において、再配置先のコンポジットが再配置元のコンポジットの下位コンポジットである場合（ステップＳ１００３／下位）、再配置処理部１１１は、さらに再配置対象の要素がコンポーネントであるかどうかを判定する（ステップＳ１０１５）。
再配置対象の要素がコンポーネントである場合（ステップＳ１０１５／コンポーネント）、再配置処理部１１１は、リファクタリング要求に従い、再配置対象のコンポーネント要素を再配置元（上位）コンポジットの定義情報から削除し、再配置先（下位）コンポジットの定義情報へ追加（再配置）する（ステップＳ１０１６）。
次に、補完処理部１１２は、コンポーネントの下位コンポーネントへの再配置に係る要素の補完を行い（ステップＳ１０１７）、ステップＳ１００７へ進む。
また、ステップＳ１０１５において、再配置対象の要素がコンポーネントでない場合（ステップＳ１０１５／コンポーネント以外）、再配置処理部１１１は、ステップＳ１０１８に進み、リファクタリング処理を終了する。
次に、再配置対象の要素に応じた補完処理の詳細を説明する。
＜コンポーネント要素の上位コンポジットへの再配置＞
図１０は、本発明の第１の実施の形態における、コンポーネント要素の上位コンポジットへの再配置に係る補完処理（ステップＳ１００６）の詳細を示すフローチャートである。図１１は、本発明の第１の実施の形態における、コンポーネント要素の上位コンポジットへの再配置に係る、コンポジットの定義情報の例を示す図である。
ここでは、図１１の状態（ａ）に示す、再配置元コンポジットＣに含まれる再配置対象のコンポーネントＣ−Ｃ＿Ｏが、図１１の状態（ｂ）に示すように、上位の再配置先コンポジットＰへ再配置された場合を例に、補完処理を説明する。
補完処理部１１２は、再配置元コンポジットＣの定義情報に、再配置対象のコンポーネントＣ−Ｃ＿Ｏが持つサービスＳ−Ｏを接続先として指定するワイヤリング（ワイヤリングＣ＿Ｓ−Ｏとする）が有るかどうかを判断する（ステップＳ１２０１）。
このようなワイヤリングＣ＿Ｓ−Ｏが有る場合（ステップＳ１２０１／有）、補完処理部１１２は、接続先として指定された全てのサービスＳ−Ｏの各々について、再配置元コンポジットＣの定義情報に、サービスＳ−Ｏと同一のインタフェースを備えたリファレンスＲ２−Ｃを追加する（ステップＳ１２０２）。さらに、補完処理部１１２は、サービスＳ−Ｏを接続先として指定する全てのワイヤリングＣ＿Ｓ−Ｏの各々について、その接続先を、追加したリファレンスＲ２−Ｃに変更する（ステップＳ１２０３）。
そして、補完処理部１１２は、再配置先コンポジットＰの定義情報に、コンポジットＣをインプリメント要素とするコンポーネントＣ−Ｐ＿ＣのリファレンスＲ２−Ｃと再配置対象のコンポーネントＣ−Ｃ＿ＯのサービスＳ−Ｏとを接続するワイヤリングを追加して（ステップＳ１２０４）、ステップＳ１２０５へ進む。
ステップＳ１２０１において、ワイヤリングＣ＿Ｓ−Ｏが無い場合（ステップＳ１２０１／無）、補完処理部１１２は、ステップＳ１２０５へ進む。
次に、補完処理部１１２は、再配置元コンポジットＣの定義情報に、再配置対象のコンポーネントＣ−Ｃ＿Ｏが持つリファレンスＲ−Ｏを接続元と指定するワイヤリング（ワイヤリングＲ−Ｏ＿Ｃとする）が有るかどうか判断する（ステップＳ１２０５）、
このようなワイヤリングＲ−Ｏ＿Ｃが有る場合（ステップＳ１２０５／有）、補完処理部１１２は、接続元として指定された全てのリファレンスＲ−Ｏの各々について、再配置元コンポジットＣの定義情報に、リファレンスＲ−Ｏと同一のインタフェースを備えたサービスＳ２−Ｃを追加する（ステップＳ１２０６）。さらに、補完処理部１１２は、リファレンスＲ−Ｏを接続元として指定する全てのワイヤリングＲ−Ｏ＿Ｃの各々について、その接続元を追加したサービスＳ２−Ｃに変更する（ステップＳ１２０７）。
そして、補完処理部１１２は、再配置先コンポジットＰの定義情報に、コンポジットＣをインプリメント要素とするコンポーネントＣ−Ｐ＿ＣのサービスＳ２−Ｃと再配置対象のコンポーネントＣ−Ｃ＿ＯのリファレンスＲ−Ｏとを接続するワイヤリングを追加して（ステップＳ１２０８）、ステップＳ１２０９へ進む。
ステップＳ１２０５において、ワイヤリングＲ−Ｏ＿Ｃが無い場合（ステップＳ１２０５／無）、補完処理部１１２は、ステップＳ１２０９へ進む。
次に、補完処理部１１２は、再配置先コンポジットＰの定義情報を参照し、再配置対象のコンポーネントＣ−Ｃ＿Ｏに、再配置元コンポジットＣ内のプロパティＰ−Ｃを参照するプロパティＰ−Ｏのインスタンスが有るかどうかを判断する（ステップＳ１２０９）。
このようなプロパティＰ−Ｏのインスタンスが有る場合（ステップＳ１２０９／有）、補完処理部１１２は、このような全てのプロパティＰ−Ｏのインスタンスの各々について、再配置先コンポジットＰの定義情報に、上位のプロパティＰ−Ｐが有るかどうか判断する（ステップＳ１２１０）。ここで上位のプロパティＰ−Ｐとは、再配置先コンポジットＰ内の再配置元コンポジットＣをインプリメント要素に持つコンポーネントＣ−Ｐ＿Ｃにおいて、プロパティＰ−Ｃのインスタンスの参照先に指定されたプロパティである。
このような上位のプロパティＰ−Ｐが無い場合（ステップＳ１２１０／無）、補完処理部１１２は、再配置先コンポジットＰの定義情報に、プロパティＰ−Ｃと同一の型を持つプロパティＰ−Ｐを追加する（ステップＳ１２１１）。そして、補完処理部１１２は、再配置先コンポジットＰの定義情報における、コンポーネントＣ−Ｐ＿Ｃ内のプロパティＰ−Ｃのインスタンスの参照先を、追加したプロパティＰ−Ｐに変更し（ステップＳ１２１２）、再配置対象のコンポーネントＣ−Ｃ＿Ｏ内のプロパティＰ−Ｏのインスタンスの参照先を、追加したプロパティＰ−Ｐに変更して（ステップＳ１２１３）、補完処理を終了する。
ステップＳ１２１０において、上位のプロパティＰ−Ｐが有る場合（ステップＳ１２１０／有）、再配置先コンポジットＰの定義情報における、再配置対象のコンポーネントＣ−Ｃ＿Ｏ内のプロパティＰ−Ｏのインスタンスの参照先をプロパティＰ−Ｐに変更し（ステップＳ１２１３）、補完処理を終了する。
この結果、各コンポジットの定義情報は、図１１の状態（ｃ）のようになる。
ステップＳ１２０９において、再配置元コンポジットＣ内のプロパティＰ−Ｃを参照するプロパティＰ−Ｏのインスタンスが無い場合（ステップＳ１２０９で無の場合）、補完処理部１１２は、補完処理を終了する。
＜サービス要素の上位コンポジットへの再配置＞
図１２は、本発明の第１の実施の形態における、サービス要素の上位コンポジットへの再配置に係る補完処理（ステップＳ１０１０）の詳細を示すフローチャートである。図１３は、本発明の第１の実施の形態における、サービス要素の上位コンポジットへの再配置に係る、コンポジットの定義情報の例を示す図である。
ここでは、図１３の状態（ａ）に示す、再配置元コンポジットＣに含まれる再配置対象のＳ−Ｃが、図１３の状態（ｂ）に示すように、上位の再配置先コンポジットＰへ再配置された場合を例に、補完処理を説明する。
補完処理部１１２は、再配置元コンポジットＣの定義情報に、再配置対象のサービスＳ−Ｃと同一のインタフェースを備えたサービスＳ２−Ｃを追加し（ステップＳ１３０１）、再配置元コンポジットＣ内で、再配置対象のサービスＳ−Ｃを接続元としている全てのワイヤリング要素の各々について、その接続元を追加したサービスＳ２−Ｃに変更する（ステップＳ１３０２）。そして、補完処理部１１２は、再配置先コンポジットＰの定義情報に、コンポジットＣをインプリメント要素とするコンポーネントＣ−Ｐ＿ＣのサービスＳ２−ＣとサービスＳ−Ｃとを接続するワイヤリングを追加する（ステップＳ１３０３）。
この結果、各コンポジットの定義情報は、図１３の状態（ｃ）のようになる。
＜リファレンス要素の上位コンポジットへの再配置＞
図１４は、本発明の第１の実施の形態における、リファレンス要素の上位コンポジットへの再配置に係る補完処理（ステップＳ１０１２）の詳細を示すフローチャートである。図１５は、本発明の第１の実施の形態における、リファレンス要素の上位コンポジットへの再配置に係る、コンポジットの定義情報の例を示す図である。
ここでは、図１５の状態（ａ）に示す、再配置元コンポジットＣに含まれる再配置対象のＲ−Ｃが、図１５の状態（ｂ）に示すように、上位の再配置先コンポジットＰへ再配置された場合を例に、補完処理を説明する。
補完処理部１１２は、再配置元コンポジットＣの定義情報に、再配置対象のリファレンスＲ−Ｃと同一のインタフェースを備えたリファレンスＲ２−Ｃを追加し（ステップＳ１４０１）、再配置元コンポジットＣ内で、再配置したリファレンスＲ−Ｃを接続先としている全てのワイヤリング要素の各々について、その接続先を追加したリファレンスＲ２−Ｃに変更する（ステップＳ１４０２）。そして、補完処理部１１２は、再配置先コンポジットＰの定義情報に、コンポジットＣをインプリメント要素とするコンポーネントＣ−Ｐ＿ＣのリファレンスＲ２−ＣとリファレンスＲ−Ｃとを接続するワイヤリングを追加する（ステップＳ１４０３）。
この結果、各コンポジットの定義情報は、図１５の状態（ｃ）のようになる。
＜プロパティ要素の上位コンポジットへの再配置＞
図１６は、本発明の第１の実施の形態における、プロパティ要素の上位コンポジットへの再配置に係る補完処理（ステップＳ１０１４）の詳細を示すフローチャートである。図１７は、本発明の第１の実施の形態における、プロパティ要素の上位コンポジットへの再配置に係る、コンポジットの定義情報の例を示す図である。
ここでは、図１７の状態（ａ）に示す、再配置元コンポジットＣに含まれる再配置対象のＰ−Ｃが、図１７の状態（ｂ）に示すように、上位の再配置先コンポジットＰへ再配置された場合を例に、補完処理を説明する。
補完処理部１１２は、再配置元コンポジットＣの定義情報に、再配置対象のプロパティＰ−Ｃと同一の型を持つプロパティＰ２−Ｃを追加し（ステップＳ１５０１）、再配置元コンポジットＣ内のコンポーネントが持つプロパティ要素の内、再配置対象のプロパティＰ−Ｃを参照先とする全てのプロパティ要素の各々について、その参照先を追加したプロパティＰ２−Ｃに変更する（ステップＳ１５０２）。そして、補完処理部１１２は、再配置先コンポジットＰの定義情報におけるコンポジットＣをインプリメント要素とするコンポーネントＣ−Ｐ＿Ｃに、プロパティＰ２−Ｃのインスタンスが無ければ追加し、その参照先を再配置したプロパティＰ−Ｃに設定する（ステップＳ１５０３）。
この結果、各コンポジットの定義情報は、図１７の状態（ｃ）のようになる。
＜コンポーネント要素の下位コンポジットへの再配置＞
図１８は、本発明の第１の実施の形態における、コンポーネント要素の下位コンポジットへの再配置に係る補完処理（ステップＳ１０１７）の詳細を示すフローチャートである。図１９は、本発明の第１の実施の形態における、コンポーネント要素の下位コンポジットへの再配置に係る、コンポジットの定義情報の例を示す図である。
ここでは、図１９の状態（ａ）に示す、再配置元コンポジットＰに含まれる再配置対象のコンポーネントＣ−Ｐ＿Ｃが、図１９の状態（ｂ）に示すように、下位の再配置先コンポジットＯへ再配置された場合を例に、補完処理を説明する。
補完処理部１１２は、再配置元コンポジットＰの定義情報に、再配置対象のコンポーネントＣ−Ｐ＿Ｃが持つサービスＳ−Ｃを接続先として指定するワイヤリング（ワイヤリングＰ＿Ｓ−Ｃとする）が有るかどうかを判断する（ステップＳ１６０１）。
このようなワイヤリングＰ＿Ｓ−Ｃが有る場合（ステップＳ１６０１／有）、補完処理部１１２は、接続先として指定された全てのサービスＳ−Ｃの各々について、再配置先コンポジットＯの定義情報に、サービスＳ−Ｃと同一のインタフェースを備えたサービスＳ−Ｏを追加し（ステップＳ１６０２）、追加したサービスＳ−Ｏと再配置対象のコンポーネントＣ−Ｐ＿ＣのサービスＳ−Ｃとを接続するワイヤリングを追加する（ステップＳ１６０３）。さらに、補完処理部１１２は、コンポジットＰの定義情報において、サービスＳ−Ｃを接続先として指定する全てのワイヤリングＰ＿Ｓ−Ｃの各々について、その接続先を、再配置先コンポジットＯをインプリメント要素とするコンポーネントＣ２−Ｐ＿Ｏが持つサービスＳ−Ｏに変更し（ステップＳ１６０４）、ステップＳ１６０５へ進む。
ステップＳ１６０１において、ワイヤリングＰ＿Ｓ−Ｃが無い場合（ステップＳ１６０１／無）、補完処理部１１２は、ステップＳ１６０５へ進む。
次に、補完処理部１１２は、再配置元コンポジットＰに、再配置対象のコンポーネントＣ−Ｐ＿Ｃが持つリファレンスＲ−Ｃを接続元として指定するワイヤリング（ワイヤリングＲ−Ｃ＿Ｐとする）が有るかどうかを判断する（ステップＳ１６０５）。
このようなワイヤリングＲ−Ｃ＿Ｐが有る場合（ステップＳ１６０５／有）、補完処理部１１２は、接続元として指定された全てのリファレンスＲ−Ｃの各々について、再配置先コンポジットＯの定義情報に、リファレンスＲ−Ｃと同一のインタフェースを備えたリファレンスＲ−Ｏを追加し（ステップＳ１６０６）、追加したリファレンスＲ−Ｏと再配置対象のコンポーネントＣ−Ｐ＿ＣのリファレンスＲ−Ｃとを接続するワイヤリングを追加する（ステップＳ１６０７）。さらに、補完処理部１１２は、コンポジットＰの定義情報において、リファレンスＲ−Ｃを接続元として指定する全てのワイヤリングＲ−Ｃ＿Ｐの各々について、その接続元を、再配置先コンポジットＯをインプリメント要素とするコンポーネントＣ２−Ｐ＿Ｏが持つリファレンスＲ−Ｏに変更し（ステップＳ１６０８）、ステップＳ１６０９へ進む。
ステップＳ１６０５において、ワイヤリングＲ−Ｃ＿Ｐが無い場合（ステップＳ１６０５／無）、補完処理部１１２は、ステップＳ１６０９へ進む。
次に、補完処理部１１２は、再配置先コンポジットＯの定義情報を参照し、再配置対象のコンポーネントＣ−Ｐ＿Ｃに、再配置元コンポジットＰ内のプロパティＰ−Ｐを参照するプロパティＰ−Ｃのインスタンスが有るかどうかを判断する（ステップＳ１６０９）。
このようなプロパティＰ−Ｃのインスタンスが有る場合（ステップＳ１６０９／有）、補完処理部１１２は、このような全てのプロパティＰ−Ｃのインスタンスの各々について、再配置先コンポジットＯの定義情報に、プロパティＰ−Ｃと同一の型を持つプロパティＰ−Ｏを追加し（ステップＳ１６１０）、再配置対象のコンポーネントＣ−Ｐ＿Ｃ内のプロパティＰ−Ｃのインスタンスの参照先を追加したプロパティＰ−Ｏに変更する（ステップＳ１６１１）。そして、補完処理部１１２は、再配置元コンポジットＰの定義情報において、コンポーネントＣ２−Ｐ＿Ｏ内のプロパティＰ−Ｏのインスタンスの参照先をプロパティＰ−Ｐに変更し（ステップＳ１６１２）、補完処理を終了する。
この結果、各コンポジットの定義情報は、図１９の状態（ｃ）のようになる。
ステップＳ１６０９において、再配置元コンポジットＰ内のプロパティＰ−Ｐを参照するプロパティＰ−Ｃが無い場合（ステップＳ１６０９／無）、補完処理部１１２は、補完処理を終了する。
以上により、本発明の第１の実施の形態におけるリファクタリング装置１００の動作が完了する。
次に、本発明の第１の実施の形態の特徴的な構成を説明する。図１は、本発明の第１の実施の形態の特徴的な構成を示すブロック図である。
図１を参照すると、リファクタリング装置１００は、コンポジット情報記憶部１１３、再配置処理部１１１、及び、補完処理部１１２を含む。
ここで、コンポジット情報記憶部１１３は、所定の処理または他のコンポジットのインスタンスの利用を定義するコンポーネント、提供する機能を定義するサービス、利用する機能を定義するリファレンス、及び、コンポーネント、サービス、及び、リファレンス間の機能の提供関係を定義するワイヤリングを要素として含む複数のコンポジットを記憶する。
再配置処理部１１１は、複数のコンポジットの内の第１のコンポジットを移動先、第１のコンポジットに含まれるコンポーネントがインスタンスとして利用する第２のコンポジットを移動元として、第２のコンポジットに含まれる対象コンポーネントを移動、または、第１のコンポジットを移動元、第２のコンポジットを移動先として、第１のコンポジットに含まれる対象コンポーネントを移動する。
補完処理部１１２は、移動元コンポジットに要素と対象コンポーネントとの間のワイヤリングがある場合、対象コンポーネントの移動後に、第２のコンポジットに、サービスまたはリファレンスを追加し、移動元コンポジットに、当該追加したサービスまたはリファレンスと当該要素とを接続するワイヤリングを設定し、移動先コンポジットに、当該追加したサービスまたはリファレンスと当該対象コンポーネントとを接続するワイヤリングを設定する補完処理を行う。
本発明の第１の実施の形態によれば、プログラム部品の組み合わせによるシステムの実現手法において、プログラム部品の再配置を容易に行うことができる。その理由は、再配置処理部１１１による上位、下位コンポジット間でのコンポーネントの再配置が行われたときに、補完処理部１１２が、当該上位及び下位のコンポジットの各々に含まれるサービスが提供する機能が保持されるように、下位のコンポジットに、サービス、及び、リファレンス内の少なくとも一つを追加し、上位及び下位のコンポジットにおけるワイヤリングの設定を変更する、補完処理を行うためである。
（第２の実施の形態）
次に、本発明の第２の実施の形態について説明する。
本発明の第２の実施形態においては、補完処理に伴う冗長な要素や無駄な依存性をコンポジットの定義情報から削除する点において、本発明の第１の実施形態と異なる。なお、本発明の第２の実施形態において、本発明の第１の実施の形態と同様の構成要素については、本発明の第１の実施の形態と同じ符号を付与し、詳細な説明を省略する。
はじめに、本発明の第２の実施の形態の構成について説明する。図２０は、本発明の第２の実施の形態におけるリファクタリング装置１００を適用したリファクタリングシステムの構成を示すブロック図である。
図２０を参照すると、本発明の第２の実施の形態におけるリファクタリング装置１００は、本発明の第１の実施の形態におけるリファクタリング装置１００の構成に加えて、修正処理部１２１、及び、補完情報記憶部１２２を含む。
補完情報記憶部１２２は、要素の再配置に伴い補完処理部１１２により追加された要素を示す補完情報を記憶する。図２１は、本発明の第２の実施の形態における、補完情報の例を示す図である。補完情報は、図２１に示すように、コンポジット名、要素種別、及び、要素ＩＤを含む。ここで、要素ＩＤとしては、ｎａｍｅ属性を持つ要素についてはｎａｍｅ属性の値を、ｗｉｒｅ要素についてはｓｏｕｒｃｅ属性の値とｔａｒｇｅｔ属性の値を連結したものを用いることができる。
修正処理部１２１は、補完情報記憶部１２２の補完情報を参照し、補完処理に伴う冗長な要素や無駄な依存性を削除するように、コンポジットの定義情報を修正する。
また、本発明の第２の実施の形態においては、再配置処理部１１１は、利用者からのリファクタリング要求としてリファクタリングを終了する要求をさらに受け付ける。リファクタリングを終了する要求として、例えば“ｑｕｉｔ”などの文字列を利用してもよい。
次に、本発明の第２の実施の形態におけるリファクタリング装置１００の動作について説明する。
図２２及び図２３は、本発明の第２の実施の形態における、リファクタリング処理の概要を示すフローチャートである。図２２及び図２３において、第１の実施の形態と同様の動作については、図８及び図９と同様の符号を付与し、詳細な説明を省略する。
本発明の第２の実施形態においては、補完処理部１１２による補完処理（ステップＳ１００６、Ｓ１０１０、Ｓ１０１２、Ｓ１０１４、Ｓ１０１７）で、コンポジットの定義情報に要素が追加された場合には、当該要素の情報が、補完情報として補完情報記憶部１２２に記録される。そして、補完処理部１１２による補完処理の後に、修正処理部１２１によるコンポジット定義情報の修正処理が行われる。さらに、本発明の第２の実施形態では、利用者からリファクタリングの終了要求を受信するまで、繰り返しリファクタリング要求を受け付けられる。
再配置処理部１１１は、利用者端末２００からリファクタリング要求を受信すると、リファクタリング要求が終了要求であるかどうかを判断する（ステップＳ２００１）。終了要求である場合（ステップＳ２００１／Ｙｅｓ）、再配置処理部１１１は、補完情報記憶部１２２に記憶されている補完情報を削除し（ステップＳ２００２）、処理を終了する。
ステップＳ２００１において、終了要求でない場合（ステップＳ２００１／Ｎｏ）、再配置処理部１１１は、ステップＳ１００１へ進む。
また、補完処理部１１２による補完処理（ステップＳ１００６、Ｓ１０１０、Ｓ１０１２、Ｓ１０１４、Ｓ１０１７）の後に、修正処理部１２１が、コンポジット定義情報の修正処理を行う（ステップＳ２００３、Ｓ２００４）。ここで、修正処理部１２１は、補完情報記憶部１２２の補完情報を参照し、補完処理によって追加された要素を取得する。
さらに、ステップＳ１００８の後に、再配置処理部１１１は、利用者からのリファクタリング要求を待機し、ステップＳ１０００へ戻る。
次に、コンポジット定義情報の修正処理（ステップＳ２００３、Ｓ２００４）の詳細を説明する。
＜上位コンポジットへの再配置＞
図２４は、本発明の第２の実施の形態における、上位コンポジットへの要素の再配置に係る修正処理（ステップＳ２００３）の詳細を示すフローチャートである。また、図２５及び図２６は、本発明の第２の実施の形態における、上位コンポジットへの要素の再配置に係る、コンポジットの定義情報の例を示す図である。なお、煩雑さを避けるため、コンポジットの定義情報の内、プロパティ以外の要素（図２５）と、プロパティ要素（図２６）とが分けて示されている。
ここでは、図２５の状態（ａ）、図２６の状態（ａ）に示すように、コンポジットＣ内のコンポーネントＣ−Ｃ＿Ｏ、サービスＳ−Ｃ、及びリファレンスＲ−Ｃを上位コンポジットであるコンポジットＰに再配置した場合を例に、コンポジット定義情報の修正処理を説明する。
また、図２５、図２６において、点線で示した要素は、補完処理によって追加された要素であることを示す。例えば、サービスＳ１−ＣはサービスＳ−Ｃの再配置に伴って補完された要素であり、サービスＲ１−ＣはリファレンスＲ−Ｃの再配置に伴って補完された要素であり、プロパティＰ１−ＣはプロパティＰ−Ｃの再配置に伴って補完された要素であり、サービスＳ２−Ｃ、リファレンスＲ２−Ｃ、及び、プロパティＰ−ＰはコンポーネントＣ−Ｃ＿Ｏの再配置に伴って補完された要素である。
修正処理部１２１は、再配置元コンポジットの定義情報に、リファレンス要素と、補完によって追加されたサービス要素とを接続するワイヤリング（ワイヤリングＸ１とする）が有るかどうかを判断する（ステップＳ２１０１）。ワイヤリングＸ１が有る場合（ステップＳ２１０１／有）、修正処理部１２１は、ワイヤリングＸ１を削除する（ステップＳ２１０２）。
例えば、図２５の状態（ａ）において、修正処理部１２１は、再配置元コンポジットＣ内の、リファレンスＲ１−Ｃと補完によって追加されたサービスＳ２−Ｃとを接続するワイヤリング（ワイヤリングＸ１に相当）を削除する。
さらに、修正処理部１２１は、再配置先コンポジットの定義情報において、削除したワイヤリングＸ１の接続先であるリファレンスのインスタンスと接続されている要素（要素Ｘ２とする）が有るかどうかを判断する（ステップＳ２１０３）。要素Ｘ２が有る場合（ステップＳ２１０３／有）、修正処理部１２１は、再配置先コンポジットの定義情報において、削除したワイヤリングＸ１の接続元であるサービス要素のインスタンスと接続されている再配置対象のコンポーネント内のリファレンスを検出し、当該リファレンスと要素Ｘ２とを接続するワイヤリングを追加し（ステップＳ２１０４）、ステップＳ２１０５へ進む。
ステップＳ２１０３において要素Ｘ２が無い場合（ステップＳ２１０３／無）や、ステップＳ２１０１においてワイヤリングＸ１が無い場合（ステップＳ２１０１／無）、修正処理部１２１は、ステップＳ２１０５へ進む。
例えば、図２５の状態（ａ）において、修正処理部１２１は、リファレンスＲ１−Ｃのインスタンスと接続されているリファレンスＲ−Ｃ（要素Ｘ２に相当）と、サービスＳ２−Ｃのインスタンスと接続されている再配置対象のコンポーネントＣ−Ｃ＿Ｏ内のリファレンスＲ−Ｏとを接続するワイヤリングを追加する。
次に、修正処理部１２１は、再配置元コンポジットの定義情報に、サービス要素と、補完によって追加されたリファレンス要素とを接続するワイヤリング（ワイヤリングＸ３とする）が有るかどうかを判断する（ステップＳ２１０５）。ワイヤリングＸ３が有る場合（ステップＳ２１０５／有）、修正処理部１２１は、ワイヤリングＸ３を削除する（ステップＳ２１０６）。
例えば、図２５の状態（ａ）において、修正処理部１２１は、再配置元コンポジットＣ内の、サービスＳ１−Ｃと補完によって追加されたリファレンスＲ２−Ｃとを接続するワイヤリング（ワイヤリングＸ３に相当）を削除する。
さらに、修正処理部１２１は、再配置先コンポジットの定義情報において、削除したワイヤリングＸ３の接続元であるサービス要素のインスタンスと接続されている要素（要素Ｘ４とする）が有るかどうかを判断する（ステップＳ２１０７）。要素Ｘ４が有る場合（ステップＳ２１０７／有）、修正処理部１２１は、再配置先コンポジットの定義情報において、削除したワイヤリングＸ３の接続先であるリファレンス要素のインスタンスと接続されている再配置対象のコンポーネント内のサービス要素を検出し、当該サービス要素と要素Ｘ４とを接続するワイヤリングを追加し（ステップＳ２１０８）、ステップＳ２１０９へ進む。
ステップＳ２１０７において、要素Ｘ４が無い場合（ステップＳ２１０７／無）や、ステップＳ２１０５において、ワイヤリングＸ３が無い場合（ステップＳ２１０５／無）、修正処理部１２１は、ステップＳ２１０９へ進む。
例えば、図２５の状態（ａ）において、修正処理部１２１は、サービスＳ１−Ｃのインスタンスと接続されているサービスＳ−Ｃ（要素Ｘ４に相当）と、リファレンスＲ２−Ｃのインスタンスと接続されている再配置対象のコンポーネントＣ−Ｃ＿Ｏ内のサービスＳ−Ｏとを接続するワイヤリングを追加する。
この結果、再配置元及び再配置先コンポジットの状態は、図２５の状態（ｂ）のようになる。
次に、修正処理部１２１は、再配置元コンポジットの定義情報に、接続するワイヤリングが無くなったサービス要素やリファレンス要素、または、参照されていないプロパティ要素が有るかどうかを判断する（ステップＳ２１０９）。このような要素が有る場合（ステップＳ２１０９／有）、修正処理部１２１は、再配置元コンポジットの定義情報において、これらの要素を削除し、さらに再配置先コンポジットの定義情報において、削除した要素のインスタンスと、削除した要素のインスタンスと接続していたワイヤリングを削除して（ステップＳ２１１０）、修正処理を終了する。
ステップＳ２１０９においてこのような要素が無い場合（ステップＳ２１０９／無）、修正処理部１２１は、修正処理を終了する。
例えば、図２５の状態（ｂ）において、再配置元コンポジットＣ内の要素であるサービスＳ１−Ｃ、サービスＳ２−Ｃ、リファレンスＲ１−Ｃ、リファレンスＲ２−Ｃは接続するワイヤリングが無くなっているため、これらの要素は全て削除される。また、図２６の状態（ａ）において、プロパティＰ１−Ｃ、及び、プロパティＰ２−Ｃが参照されていない場合、これらの要素は全て削除される。さらに、修正処理部１２１は、再配置先コンポジットＰ内で、削除したサービス要素やリファレンス要素と接続していたワイヤリングを削除する。
この結果、再配置元及び再配置先コンポジットの状態は、図２５の状態（ｃ）、図２６の状態（ｂ）のようになる。
なお、ステップＳ２１１０において、修正処理部１２１は、削除対象の要素が補完処理によって追加された要素でない場合には、その要素を、利用者の確認を得てから削除してもよい。
＜下位コンポジットへの再配置＞
図２７は、本発明の第２の実施の形態における、下位コンポジットへの要素の再配置に係る修正処理（ステップＳ２００４）の詳細を示すフローチャートである。また、図２８及び図２９は、本発明の第２の実施の形態における、下位コンポジットへの要素の再配置に係る、コンポジットの定義情報の例を示す図である。なお、煩雑さを避けるため、コンポジットの定義情報の内、プロパティ要素以外の要素（図２８）とプロパティ要素（図２９）とが分けて示されている。
ここでは、図２８の状態（ａ）、図２９の状態（ａ）に示すように、コンポジットＰ内のコンポーネントＣ−Ｐ＿Ｏを下位コンポジットであるコンポジットＣに再配置した場合を例に、コンポジット定義情報の修正処理を説明する。なお、再配置元コンポジットＰにおいて、コンポーネントＣ−Ｐ＿ＯのサービスＳ−Ｏ及びリファレンスＲ−Ｏは、コンポジットＰのサービスＳ−Ｐ及びリファレンスＲ−Ｐとそれぞれ接続されていたものとする。
また、図２８、図２９において、点線で示した要素は、補完処理によって追加された要素であることを示している。例えば、サービスＳ１−Ｃ、リファレンスＲ１−Ｃ、及び、プロパティＰ２−ＣはコンポーネントＣ−Ｐ＿Ｏの再配置に伴って補完された要素である。
なお、コンポジットＣには他のコンポーネントＣ−Ｃ＿Ｏ２があり、コンポーネントＣ−Ｃ＿Ｏ２のサービスＳ−Ｏ２及びリファレンスＲ−Ｏ２のインスタンスは、コンポジットＣのサービスＳ２−Ｃ及びリファレンスＲ２−Ｃとそれぞれ接続されている。コンポジットＰにおいて、サービスＳ２−Ｃ及びリファレンスＲ２−Ｃのインスタンスは、コンポジットＰのサービスＳ−Ｐ及びリファレンスＲ−Ｐとそれぞれ接続されている。コンポジットＣにおいて、コンポジットＯ２のプロパティＰ−Ｏ２のインスタンスはコンポジットＣのプロパティＰ１−Ｃを参照している。コンポジットＰにおいて、コンポジットＣのプロパティＰ１−ＣのインスタンスはコンポジットＰのプロパティＰ−Ｐを参照している。
修正処理部１２１は、再配置先コンポジットの定義情報に、再配置元コンポジットにおけるインスタンスの接続元が補完によって追加されたサービス（サービスＸ５とする）と同一のサービス（サービスＸ６とする）が有るかどうかを判断する（ステップＳ２２０１）。サービスＸ６が有る場合（ステップＳ２２０１／有）、修正処理部１２１は、再配置先コンポジットの定義情報におけるサービスＸ５、及び、再配置元コンポジットの定義情報におけるサービスＸ５のインスタンスとサービスＸ５のインスタンスと接続された全てのワイヤリングを削除する（ステップＳ２２０２）。修正処理部１２１は、再配置先コンポジットにおいて、サービスＸ５と接続していたワイヤリングの接続元をサービスＸ６に変更し（ステップＳ２２０３）、ステップＳ２２０４へ進む。サービスＸ６が無い場合（ステップＳ２２０１／無）、修正処理部１２１は、ステップＳ２２０４へ進む。
例えば、図２８の状態（ａ）において、再配置元コンポジットＰにおけるサービスＳ１−Ｃ（サービスＸ５に相当）のインスタンスの接続元（サービスＳ−Ｐ）がサービスＳ２−Ｃ（サービスＸ６に相当）のインスタンスの接続元と同一であるため、修正処理部１２１は、再配置先コンポジットＣにおいて、サービスＳ１−Ｃを削除し、再配置元コンポジットＰにおいて、サービスＳ１−Ｃのインスタンス及びこれと接続していたワイヤリングを削除する。さらに、修正処理部１２１は、再配置先コンポジットＣにおいて、サービスＳ１−Ｃと接続していたワイヤリングの接続元をサービスＳ２−Ｃに変更する。
次に、修正処理部１２１は、再配置先コンポジットの定義情報に、再配置元コンポジットにおけるインスタンスの接続先が補完によって追加されたリファレンス（リファレンスＸ７とする）と同一のリファレンス（リファレンスＸ８とする）が有るかどうかを判断する（ステップＳ２２０４）。リファレンスＸ８が有る場合（ステップＳ２２０４／有）、修正処理部１２１は、再配置先コンポジットの定義情報におけるリファレンスＸ７、及び、再配置元コンポジットの定義情報におけるリファレンスＸ７のインスタンスとリファレンスＸ７のインスタンスと接続された全てのワイヤリングを削除する（ステップＳ２２０５）。修正処理部１２１は、再配置先コンポジットにおいて、リファレンスＸ７と接続していたワイヤリングの接続先をリファレンスＸ８に変更し（ステップＳ２２０６）、ステップＳ２２０７へ進む。リファレンスＸ８が無い場合（ステップＳ２２０４／無）、修正処理部１２１は、ステップＳ２２０７へ進む。
例えば、図２８の状態（ａ）において、再配置元コンポジットＰにおけるリファレンスＲ１−Ｃ（リファレンスＸ７に相当）のインスタンスの接続先（リファレンスＲ−Ｐ）がリファレンスＲ２−Ｃ（リファレンスＸ８に相当）のインスタンスの接続先と同一であるため、修正処理部１２１は、再配置先コンポジットＣにおいて、リファレンスＲ１−Ｃを削除し、再配置元コンポジットＰにおいて、リファレンスＲ１−Ｃのインスタンス及びこれと接続していたワイヤリングを削除する。さらに、修正処理部１２１は、再配置先コンポジットＣにおいて、リファレンスＲ１−Ｃと接続していたワイヤリングの接続先をリファレンスＲ２−Ｃに変更する。
次に、修正処理部１２１は、再配置先コンポジットの定義情報に、再配置元コンポジットにおけるインスタンスの参照先が、補完によって追加されたプロパティ（プロパティＸ９とする）と同一のプロパティ（プロパティＸ１０とする）が有るかどうかを判断する（ステップＳ２２０７）。プロパティＸ１０が有る場合（ステップＳ２２０７／有）、修正処理部１２１は、再配置先コンポジットの定義情報におけるプロパティＸ９、及び、再配置元コンポジットの定義情報におけるプロパティＸ９のインスタンスを削除する（ステップＳ２２０８）。修正処理部１２１は、再配置先コンポジットおいて、プロパティＸ９を参照する全てのプロパティのインスタンスの参照先をプロパティＸ１０に変更し（ステップＳ２２０９）、修正処理を終了する。プロパティＸ１０が無い場合（ステップＳ２２０７／無）、修正処理部１２１は、修正処理を終了する。
例えば、図２９の状態（ａ）において、再配置元コンポジットＰにおけるプロパティＰ２−Ｃ（プロパティＸ９に相当）のインスタンスの参照先（プロパティＰ−Ｐ）がプロパティＰ１−Ｃ（プロパティＸ１０に相当）のインスタンスの参照先と同一であるため、修正処理部１２１は、再配置先コンポジットＣにおいて、プロパティＰ２−Ｃを削除し、さらに再配置先コンポジットＣにおいて、プロパティＰ２−Ｃを参照するプロパティＰ−Ｏのインスタンスの参照先をプロパティＰ１−Ｃに変更する。
この結果、再配置元及び再配置先コンポジットの状態は、図２８の状態（ｂ）、図２９の状態（ｂ）のようになる。
なお、修正処理部１２１は、ステップＳ２００３、Ｓ２００４内において、補完によって追加された要素を削除する場合、補完情報記憶部１２２に記憶されている補完情報からも、当該要素を削除する。
以上により、本発明の第２の実施の形態におけるリファクタリング装置１００の動作が完了する。
本発明の第２の実施の形態によれば、プログラム部品の組み合わせによるシステムの実現手法において、プログラム部品の再配置後のコンポジットを、簡潔で保守性の高いコンポジットにすることができる。その理由は、補完処理部１１２が、補完処理に伴う冗長な要素や、再配置元コンポジットに残存している無駄な依存性を削除するためである。
（第３の実施の形態）
次に、本発明の第３の実施の形態について説明する。
本発明の第３の実施形態においては、コンポジットの内包化を行う内包化処理と、内包化されたコンポーネントの展開を行う展開処理を行う点において、本発明の第１の実施形態と異なる。なお、本発明の第３の実施形態において、本発明の第１の実施の形態と同様の構成要素については、本発明の第１の実施の形態と同じ符号を付与し、詳細な説明を省略する。
ここで、本発明の第３の実施の形態における、内包化処理、及び、展開処理について説明する。図３１は、本発明の第３の実施の形態における、内包化処理、及び、展開処理に係る、コンポジットの定義情報の例を示す図である。
コンポジットの内包化は、内包化対象のコンポジットと同一の定義情報を持つ新しいコンポジットを生成し、内包化対象コンポジット内の全てのコンポーネントを、生成されたコンポジットをインプリメント要素とするコンポーネントに置き換える操作である。
コンポジットの内包化は、例えば、あるコンポジットの定義情報に含まれるコンポーネントを再配置により当該コンポジットから抜き出す必要があるときに、その再配置による当該コンポジットの上位のコンポジットの定義情報への影響を防ぐために用いられる。
例えば、図３１の状態（ａ）のように、コンポジットＣがコンポーネントＣ−Ｃ＿Ｏを含み、コンポーネントＣ−Ｃ＿Ｏを再配置によりコンポジットＣから抜き出す必要がある場合、コンポジットＣを内包化対象として内包化処理が行われる。この場合、図３１の状態（ｂ）のように、コンポジットＣと同一の定義情報を持つコンポジットＣＩが生成され、コンポジットＣ内のコンポーネントＣ−Ｃ＿Ｏは、生成されたコンポジットＣＩをインプリメント要素とするコンポーネントＣ−Ｃ＿ＣＩに置き換えられる。そして、コンポジットＣＩのコンポーネントＣ−Ｃ＿ＯをコンポジットＣＩの上位コンポジットＣに再配置することで、コンポジットＣの上位コンポジットへの影響無く、コンポーネントＣ−Ｃ＿Ｏが抜き出されたコンポジットＣＩの定義情報が得られる。
また、コンポーネントの展開は、展開対象のコンポーネントを、当該コンポーネントのインプリメント要素であるコンポジットが持つコンポーネント群に置き換える操作である。
コンポジットの展開は、例えば、コンポーネントの再配置により生じた冗長なコンポジットの階層の削除、または、内包化されたコンポジットを内包化前の状態に戻すために用いられる。
例えば、コンポーネントＣ−Ｃ＿ＯをコンポジットＣからコンポジットＣＩに再配置した結果、図３１の状態（ｂ）のように、コンポジットＣＩが冗長な階層となっている場合、コンポーネントＣ−Ｃ＿ＣＩを展開対象として展開処理が行われる。この場合、図３１の状態（ａ）のように、コンポーネントＣ−Ｃ＿ＣＩが、コンポジットＣＩが持つコンポーネントＣ−Ｃ＿Ｏに置き換えられる。
次に、本発明の第３の実施の形態の構成について説明する。図３０は、本発明の第３の実施の形態におけるリファクタリング装置１００を適用したリファクタリングシステムの構成を示すブロック図である。
図３０を参照すると、本発明の第３の実施の形態におけるリファクタリング装置１００は、本発明の第１の実施の形態におけるリファクタリング装置１００の構成に加えて、内包化処理部１３１を含む。
内包化処理部１３１は、再配置処理部１１１が利用者端末２００から内包化要求、または、展開要求を受信したときに、内包化処理、または、展開処理を行う。
内包化要求は、コンポジットの内包化の要求を示す情報に加え、内包化対象のコンポジットの名前を含む。内包化要求は、例えば、“ｃａｐｓｕｌｅ  Ｃ”などの文字列でもよい。
また、展開要求は、コンポーネントの展開の要求を示す情報に加え、展開対象のコンポーネントの名前と当該コンポーネントが含まれるコンポジット名を含む。展開要求は、例えば“ｅｘｐａｎｄ  Ｐ  Ｃ−Ｐ＿Ｃ”などの文字列でもよい。
次に、本発明の第３の実施の形態におけるリファクタリング装置１００の動作について説明する。
＜内包化処理＞
はじめに、本発明の第３の実施の形態における内包化処理について説明する。図３２は、本発明の第３の実施の形態における内包化処理を示すフローチャートである。
ここでは、図３１の状態（ａ）において、内包化対象コンポジットがコンポジットＣである場合を例に、展開処理を説明する。
内包化処理部１３１は、再配置処理部１１１が、コンポジットの内包化要求を受信すると（ステップＳ３１００）、コンポジット情報記憶部１１３に記憶されている内包化対象コンポジットの定義情報を読み出す（ステップＳ３１０１）。内包化処理部１３１は、内包化対象コンポジットと同一の定義情報を持つ別名のコンポジットの定義情報を生成し、コンポジット情報記憶部１１３に保存する（ステップＳ３１０２）。
次に、内包化処理部１３１は、内包化対象コンポジットの定義情報において、全てのコンポジットとワイヤリングを削除し（ステップＳ３１０３）、生成した別名のコンポジットをインプリメント要素とするコンポーネントを追加する（ステップＳ３１０４）。内包化処理部１３１は、内包化対象コンポジットの定義情報において、全てのサービス及びリファレンスと、追加したコンポーネントの同名のサービス及びリファレンスとをそれぞれ接続するワイヤリングを追加する（ステップＳ３１０５）。さらに、内包化処理部１３１は、内包化対象コンポジットの定義情報において、追加したコンポジットの全てのプロパティのインスタンスの参照先に内包化対象コンポジットの同名のプロパティを設定する（ステップＳ３１０６）。そして、内包化処理部１３１は、内包化対象コンポジットの定義情報をコンポジット情報記憶部１１３に保存する（ステップＳ３１０７）。
例えば、図３１の状態（ａ）において、内包化処理部１３１は、コンポジットＣと同一の定義情報を持つコンポジットＣＩを生成し、コンポジットＣ内のコンポーネントＣ−Ｃ＿Ｏを削除する。そして、内包化処理部１３１は、コンポジットＣに、生成されたコンポジットＣＩをインプリメント要素とするコンポーネントＣ−Ｃ＿ＣＩを追加し、サービスＳ−ＣとコンポーネントＣ−Ｃ＿ＣＩのサービスＳ−Ｃのインスタンス、リファレンスＲ−ＣとコンポーネントＣ−Ｃ＿ＣＩのリファレンスＲ−Ｃのインスタンスをそれぞれ接続するワイヤリングを追加する。さらに、内包化処理部１３１は、コンポーネントＣ−Ｃ＿ＣＩのプロパティＰ−Ｃのインスタンスの参照先に、コンポジットＣのプロパティＰ−Ｃを設定する。
この結果、再配置元及び再配置先コンポジットの状態は、図３１の状態（ｂ）のようになる。
＜展開処理＞
次に、本発明の第３の実施の形態における展開処理について説明する。図３３は、本発明の第３の実施の形態における展開処理を示すフローチャートである。また、図３４は、本発明の第３の実施の形態における、展開処理に係る、コンポジットの定義情報の例を示す図である。
ここでは、図３４の状態（ａ）において、展開対象コンポーネントがコンポジットＰ内のコンポーネントＣ−Ｐ＿Ｃである場合を例に、展開処理を説明する。
内包化処理部１３１は、再配置処理部１１１が、コンポーネントの展開要求を受信すると（ステップＳ３２００）、コンポジット情報記憶部１１３に記憶されている、展開対象コンポーネントのインプリメント要素であるコンポジット（展開対象コンポジットとする）の定義情報と、展開対象コンポーネントを含むコンポジット（展開先コンポジットとする）の定義情報を読み出す（ステップＳ３２０１）。内包化処理部１３１は、展開先コンポジットの定義情報において、展開対象コンポーネントを削除し（ステップＳ３２０２）、展開対象コンポジットが持つ全てのコンポーネントと、当該コンポーネントが持つサービスやリファレンス間を接続するワイヤリングを追加する（ステップＳ３２０３）。
例えば、図３４の状態（ｂ）のように、コンポジットＰからコンポーネントＣ−Ｐ＿Ｃが削除され、コンポーネントＣ−Ｐ＿Ｃのインプリメント要素であるコンポジットＣが持つコンポーネントＣ１−Ｃ＿ＯとコンポーネントＣ２−Ｃ＿Ｏ２、及び、リファレンスＲ２−ＯとサービスＳ−Ｏ２とを接続するワイヤリングが追加される。
次に、内包化処理部１３１は、展開先コンポジットの定義情報に、展開対象のコンポーネントが持つサービスのインスタンスを接続先としたワイヤリングが有るかどうかを判断する（ステップＳ３２０４）。そのようなワイヤリングが有る場合（ステップＳ３２０４／有）、内包化処理部１３１は、当該ワイヤリングを削除する（ステップＳ３２０５）。内包化処理部１３１は、削除したワイヤリングの接続先であるサービスが、展開対象コンポジットの定義情報において接続していた要素を抽出する。そして、内包化処理部１３１は、展開先コンポジットの定義情報に、削除したワイヤリングの接続元と抽出した要素のインスタンスとを接続するワイヤリングを追加し（ステップＳ３２０６）、ステップＳ３２０７へ進む。
ステップＳ３２０４において、そのようなワイヤリングが無い場合（ステップＳ３２０４／無）、内包化処理部１３１は、ステップＳ３２０７へ進む。
例えば、図３４の状態（ｂ）において、コンポジットＰ内のサービスＳ−ＰとサービスＳ−Ｃを接続していたワイヤリングが削除され、サービスＳ−ＰとサービスＳ−Ｏとを接続するワイヤリングが追加される。
次に、内包化処理部１３１は、展開先コンポジットの定義情報に、展開対象のコンポーネントが持つリファレンスのインスタンスを接続元としたワイヤリングが有るかどうかを判断する（ステップＳ３２０７）。そのようなワイヤリングが有る場合（ステップＳ３２０７／有）、内包化処理部１３１は、当該ワイヤリングを削除する（ステップＳ３２０８）。内包化処理部１３１は、削除したワイヤリングの接続元であるリファレンスが、展開対象コンポジットの定義情報において接続していた要素を抽出する。そして、内包化処理部１３１は、展開先コンポジットの定義情報に、削除したワイヤリングの接続先と抽出した要素のインスタンスとを接続するワイヤリングを追加し（ステップＳ３２０９）、ステップＳ３２１０へ進む。
ステップＳ３２０７において、そのようなワイヤリングが無い場合（ステップＳ３２０７／無）、内包化処理部１３１は、ステップＳ３２１０へ進む。
例えば、図３４の状態（ｂ）において、コンポジットＰのリファレンスＲ１−ＰとリファレンスＲ１−Ｃ、及び、リファレンスＲ２−ＰとリファレンスＲ２−Ｃを接続していたワイヤリングが削除され、リファレンスＲ１−ＰとリファレンスＲ１−Ｏとを接続するワイヤリング、及び、リファレンスＲ２−ＰとリファレンスＲ−Ｏ２とを接続するワイヤリング追加される。
次に、内包化処理部１３１は、展開対象コンポジットの定義情報にプロパティ（プロパティＰ１とする）が有るかどうかを判断する（ステップＳ３２１０）。プロパティＰ１が有る場合（ステップＳ３２１０／有）、内包化処理部１３１は、全てのプロパティＰ１に対して、展開先コンポジットの定義情報において、プロパティＰ１のインスタンスが展開先コンポジットのプロパティＰ２を参照しているかを判断する（ステップＳ３２１１）。参照している場合（ステップＳ３２１１／Ｙｅｓ）、内包化処理部１３１は、展開先コンポジットの定義情報において、ステップＳ３２０３で追加されたコンポーネント内のプロパティのインスタンスの内、プロパティＰ１を参照していた全てのインスタンスの参照先をプロパティＰ２に変更し（ステップＳ３２１２）、ステップＳ３２１４へ進む。
ステップＳ３２１１において、参照していない場合（ステップＳ３２１１／Ｎｏ）、内包化処理部１３１は、展開先コンポジットにプロパティＰ１を追加し（ステップＳ３２１３）、ステップＳ３２１４へ進む。
また、ステップＳ３２１０において、プロパティＰ１が無い場合（ステップＳ３２１０／無）、内包化処理部１３１は、ステップＳ３２１４へ進む。
例えば、図３４の状態（ａ）において、コンポーネントＣ−Ｐ＿Ｃ内のプロパティＰＣのインスタンスがコンポジットＰ内のプロパティＰ−Ｐを参照しているため、図３４の状態（ｂ）において、プロパティＰ−Ｃを参照していたコンポーネントＣ１−Ｃ＿ＯのプロパティＰ−Ｏのインスタンスの参照先は、プロパティＰ−Ｐに変更される。
また、図３４の状態（ａ）において、コンポーネントＣ−Ｐ＿Ｃ内のプロパティＰ−ＣのインスタンスがコンポジットＰ内のプロパティＰ−Ｐを参照していない場合、図３４の状態（ｂ）において、コンポジットＰにプロパティＰ−Ｃが追加され、プロパティＰ−Ｏのインスタンスの参照先は、引き続き、プロパティＰ−Ｃとなる。
内包化処理部１３１は、展開先コンポジットの定義情報をコンポジット情報記憶部１１３に保存し、展開処理を終了する（ステップＳ３２１４）。
以上により、本発明の第３の実施の形態におけるリファクタリング装置１００の動作が完了する。
本発明の第３の実施の形態によれば、リファクタリング対象のコンポジットの上位にコンポジットが存在する場合でも、当該上位コンポジットの定義情報へ影響することなく、リファクタリングを行うことができる。その理由は、内包化処理部１３１が、リファクタリング対象のコンポジットと同一の定義情報を持つ新しいコンポジットを用いて、当該リファクタリング対象のコンポジットの内包化を行うためである。
また、本発明の第３の実施の形態によれば、コンポーネントの再配置により生じた冗長なコンポジットの階層を削除や、内包化されたコンポジットを内包化前の状態に戻すことができる。その理由は、内包化処理部１３１が、展開対象のコンポーネントのインプリメント要素であるコンポジットが持つコンポーネントを用いて、当該展開対象のコンポーネントの展開を行うためである。
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
例えば、本発明の実施の形態においては、図３、図４のようなコンポジット定義情報を例に、構成、及び、動作を説明したが、コンポーネント要素、サービス要素、リファレンス要素、及び、ワイヤリング要素と同様の要素を用いて定義されるプログラム部品を用いた他の開発システムに適用した場合も、同様の効果が得られる。
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
所定の処理または他のコンポジットのインスタンスの利用を定義するコンポーネント、提供する機能を定義するサービス、利用する機能を定義するリファレンス、及び、コンポーネント、サービス、及び、リファレンス間の機能の提供関係を定義するワイヤリングを要素として含む複数のコンポジットを記憶するコンポジット情報記憶手段と、
前記複数のコンポジットの内の第１のコンポジットを移動先、前記第１のコンポジットに含まれるコンポーネントがインスタンスとして利用する第２のコンポジットを移動元として、前記第２のコンポジットに含まれる対象コンポーネントを移動、または、前記第１のコンポジットを移動元、前記第２のコンポジットを移動先として、前記第１のコンポジットに含まれる対象コンポーネントを移動する再配置処理手段と、
前記移動元コンポジットに前記要素と前記対象コンポーネントとの間のワイヤリングがある場合、前記対象コンポーネントの移動後に、前記第２のコンポジットに、サービスまたはリファレンスを追加し、前記移動元コンポジットに、当該追加したサービスまたはリファレンスと当該要素とを接続するワイヤリングを設定し、前記移動先コンポジットに、当該追加したサービスまたはリファレンスと当該対象コンポーネントとを接続するワイヤリングを設定する補完処理を行う補完処理手段と
を含むリファクタリング装置。
（付記２）
前記補完処理手段は、前記再配置処理手段が、前記第１のコンポジットを移動先、前記第２のコンポジットを移動元として、前記第２のコンポジットに含まれる対象コンポーネントを移動したとき、
前記第２のコンポジットに前記対象コンポーネントのサービスを接続先とするワイヤリングが検出された場合、当該第２のコンポジットに当該検出されたワイヤリングが接続可能なリファレンスを追加し、当該検出されたワイヤリングの接続先を当該追加されたリファレンスに変更し、当該第１のコンポジットに、当該第２のリファレンスを接続元、当該対象コンポーネントのサービスを接続先とするワイヤリングを追加し、
前記第２のコンポジットに、前記対象コンポーネントのリファレンスを接続元とするワイヤリングが検出された場合、当該第２のコンポジットに当該検出されたワイヤリングが接続可能なサービスを追加し、当該検出されたワイヤリングの接続元を当該追加したサービスに変更し、当該第１のコンポジットに、当該追加したサービスを接続先、当該対象コンポーネントのリファレンスを接続元とするワイヤリングを追加する
（付記１）に記載のリファクタリング装置。
（付記３）
前記再配置処理手段は、さらに、前記第１のコンポジットを移動先、前記第２のコンポジットを移動元として、前記第２のコンポジットに含まれる対象サービス、及び、前記第２のコンポジットに含まれる対象リファレンスの少なくとも一方を移動し、
前記補完処理手段は、さらに、前記再配置処理手段が前記対象サービスを移動した場合、前記第２のコンポジットに、当該対象サービスと接続可能なサービスを追加し、当該第２のコンポジット内の当該対象サービスを接続元としていたワイヤリングの接続元を当該追加したサービスに変更し、前記第１のコンポジットに、当該対象サービスを接続元、当該追加したサービスを接続先としたワイヤリングを追加し、
前記再配置処理手段が前記対象リファレンスを移動した場合、前記第２のコンポジットに、当該対象リファレンスと接続可能なリファレンスを追加し、当該第２のコンポジット内の当該対象リファレンスを接続先としていたワイヤリングの接続先を当該追加したリファレンスに変更し、前記第１のコンポジットに、当該追加したリファレンスを接続元、当該対象リファレンスを接続先としたワイヤリングを追加する
（付記２）に記載のリファクタリング装置。
（付記４）
さらに、
前記補完処理手段による前記補完処理の後に、
前記第２のコンポジットに、前記対象コンポーネントのリファレンスと接続されたサービスを接続元、当該第２のコンポジットのリファレンスを接続先とするワイヤリングが検出された場合、当該検出されたワイヤリングを削除し、前記第１のコンポジットに、当該第２のコンポジットのリファレンスを接続元としたワイヤリングと同一の接続先と当該対象コンポーネントのリファレンスを接続元とを有するワイヤリングを追加し、
前記第２のコンポジットに、前記対象コンポーネントのサービスが接続されたリファレンスを接続先、当該第２のコンポジットのサービスを接続元とするワイヤリングが検出された場合、当該検出されたワイヤリングを削除し、前記第１のコンポジットに、当該第２のコンポジットのサービスを接続先としたワイヤリングと同一の接続元と当該対象コンポーネントのサービスを接続先とを有するワイヤリングを追加し、
前記第２のコンポジットに、当該第２のコンポジットのサービスまたはリファレンスと当該第２のコンポジットの他の前記要素とを接続するワイヤリングが無い場合、当該第２のコンポジットのサービスまたはリファレンスを削除し、前記第１のコンポジットから、当該第２のコンポジットのサービスまたはリファレンスと当該第１のコンポジットの前記要素とを接続するワイヤリングを削除する修正処理手段
を含む（付記２）または（付記３）に記載のリファクタリング装置。
（付記５）
さらに、
前記再配置処理手段が、前記第１のコンポジットを移動先、前記第２のコンポジットを移動元として、前記第２のコンポジットに含まれる対象コンポーネントを移動する前に、前記第１のコンポジットと同一のコンポジットである前記第２のコンポジットを生成し、当該第１のコンポジットに含まれるコンポーネントを削除し、当該第１のコンポジットに、当該第２のコンポジットのインスタンスを利用するコンポーネントを設定する内包化処理手段
を含む（付記１）に記載のリファクタリング装置。
（付記６）
前記補完処理手段は、前記再配置処理手段が、前記第１のコンポジットを移動元、前記第２のコンポジットを移動先として、前記第１のコンポジットに含まれる対象コンポーネントを移動したとき、
前記第１のコンポジットに前記対象コンポーネントのサービスを接続先とするワイヤリングが検出された場合、前記第２のコンポジットに当該検出されたワイヤリングが接続可能なサービスを追加し、当該検出されたワイヤリングの接続先を当該追加したサービスに変更し、当該第２のコンポジットに、当該追加したサービスを接続元、当該対象コンポーネントのサービスを接続先とするワイヤリングを追加し、
前記第１のコンポジットに前記対象コンポーネントのリファレンスを接続元とするワイヤリングが検出された場合、前記第２のコンポジットに当該検出されたワイヤリングが接続可能なリファレンスを追加し、当該検出されたワイヤリングの接続元を当該追加したリファレンスに変更し、当該第２のコンポジットに、当該追加したリファレンスを接続先、当該対象コンポーネントのリファレンスを接続元とするワイヤリングを追加する
（付記１）に記載のリファクタリング装置。
（付記７）
さらに、
前記補完処理手段による前記補完処理の後に、
前記第２のコンポジットに、当該第２のコンポジットのサービスと接続された前記第１のコンポジットにおける接続元が同一である他のサービスがある場合、当該第２のコンポジットのサービス、及び、当該第２のコンポジットのサービスと当該第１のコンポジットにおける接続元とを接続するワイヤリングを削除し、当該第２のコンポジットにおける、当該第２のコンポジットのサービスを接続元としていたワイヤリングの接続元を当該他のサービスに変更し、
前記第２のコンポジットに、当該第２のコンポジットのリファレンスと接続された前記第１のコンポジットにおける接続先が同一である他のリファレンスがある場合、当該第２のコンポジットのリファレンス、及び、当該第２のコンポジットのリファレンスと当該第１のコンポジットにおける接続先とを接続するワイヤリングを削除し、当該第２のコンポジットにおける、当該第２のコンポジットのリファレンスを接続先としていたワイヤリングの接続先を当該他のサービスに変更する修正処理手段
を含む（付記６）に記載のリファクタリング装置。
（付記８）
さらに、
前記再配置処理手段が、前記第１のコンポジットを移動元、前記第２のコンポジットを移動先として、前記第１のコンポジットに含まれる対象コンポーネントを移動した後に、前記第１のコンポジットに含まれる前記第２のコンポジットのインスタンスを利用するコンポーネントを削除し、当該第１のコンポジットに、当該第２のコンポジットに含まれるコンポーネントを設定する内包化処理手段
を含む（付記１）に記載のリファクタリング装置。
（付記９）
所定の処理または他のコンポジットのインスタンスの利用を定義するコンポーネント、提供する機能を定義するサービス、利用する機能を定義するリファレンス、及び、コンポーネント、サービス、及び、リファレンス間の機能の提供関係を定義するワイヤリングを要素として含む複数のコンポジットを記憶し、
前記複数のコンポジットの内の第１のコンポジットを移動先、前記第１のコンポジットに含まれるコンポーネントがインスタンスとして利用する第２のコンポジットを移動元として、前記第２のコンポジットに含まれる対象コンポーネントを移動、または、前記第１のコンポジットを移動元、前記第２のコンポジットを移動先として、前記第１のコンポジットに含まれる対象コンポーネントを移動し、
前記移動元コンポジットに前記要素と前記対象コンポーネントとの間のワイヤリングがある場合、前記対象コンポーネントの移動後に、前記第２のコンポジットに、サービスまたはリファレンスを追加し、前記移動元コンポジットに、当該追加したサービスまたはリファレンスと当該要素とを接続するワイヤリングを設定し、前記移動先コンポジットに、当該追加したサービスまたはリファレンスと当該対象コンポーネントとを接続するワイヤリングを設定する補完処理を行う
リファクタリング方法。
（付記１０）
コンピュータに、
所定の処理または他のコンポジットのインスタンスの利用を定義するコンポーネント、提供する機能を定義するサービス、利用する機能を定義するリファレンス、及び、コンポーネント、サービス、及び、リファレンス間の機能の提供関係を定義するワイヤリングを要素として含む複数のコンポジットを記憶し、
前記複数のコンポジットの内の第１のコンポジットを移動先、前記第１のコンポジットに含まれるコンポーネントがインスタンスとして利用する第２のコンポジットを移動元として、前記第２のコンポジットに含まれる対象コンポーネントを移動、または、前記第１のコンポジットを移動元、前記第２のコンポジットを移動先として、前記第１のコンポジットに含まれる対象コンポーネントを移動し、
前記移動元コンポジットに前記要素と前記対象コンポーネントとの間のワイヤリングがある場合、前記対象コンポーネントの移動後に、前記第２のコンポジットに、サービスまたはリファレンスを追加し、前記移動元コンポジットに、当該追加したサービスまたはリファレンスと当該要素とを接続するワイヤリングを設定し、前記移動先コンポジットに、当該追加したサービスまたはリファレンスと当該対象コンポーネントとを接続するワイヤリングを設定する補完処理を行う
処理を実行させるプログラムを格納するコンピュータ読み取り可能な記録媒体。
（付記１１）
前記複数のコンポジットのそれぞれは、さらに、当該コンポジットに含まれるコンポーネントが利用可能な変数値を定義するプロパティを要素として含み、
前記補完処理手段は、前記再配置処理手段が、前記第１のコンポジットを移動先、前記第２のコンポジットを移動元として、前記第２のコンポジットに含まれる対象コンポーネントを移動したとき、
前記対象コンポーネントのプロパティのインスタンスが、前記第２のコンポジットのプロパティを参照しており、かつ、当該第２のコンポジットのプロパティのインスタンスが、前記第１のコンポジットのプロパティを参照している場合、当該対象コンポーネントのプロパティのインスタンスの参照先を、当該第１のコンポジットのプロパティに変更し、
前記対象コンポーネントのプロパティのインスタンスが、前記第２のコンポジットのプロパティを参照しており、かつ、当該第２のコンポジットのプロパティのインスタンスが、前記第１のコンポジットのプロパティを参照していない場合、当該第１のコンポジットに当該第２のコンポジットのプロパティと同一の型を有するプロパティを追加し、当該対象コンポーネントのプロパティのインスタンス、及び、当該第２のコンポジットのプロパティのインスタンスの参照先を、当該追加した第１のコンポジットのプロパティに変更する
（付記２）に記載のリファクタリング装置。
（付記１２）
前記複数のコンポジットのそれぞれは、さらに、当該コンポジットに含まれるコンポーネントが利用可能な変数値を定義するプロパティを要素として含み、
前記再配置処理手段は、さらに、前記第１のコンポジットを移動先、前記第２のコンポジットを移動元として、前記第２のコンポジットに含まれる対象プロパティを移動し、
前記補完処理手段は、さらに、前記再配置処理手段が前記対象プロパティを移動した場合、前記第２のコンポジットに、当該対象プロパティと同一の型を有するプロパティを追加し、当該追加した第２のコンポジットのプロパティのインスタンスの参照先に、当該第１のコンポジットに移動した対象プロパティを設定し、当該第２のコンポジット内の当該対象プロパティを参照先としていたプロパティのインスタンスの参照先を当該追加した第２のコンポジットのプロパティに変更する、
（付記２）または（付記１１）に記載のリファクタリング装置。
（付記１３）
さらに、
前記補完処理手段による前記補完処理の後に、
前記第２のコンポジットのプロパティが、当該第２のコンポジット内のコンポーネントのプロパティのインスタンスから参照されていない場合、当該第２のコンポジットのプロパティと、当該第２のコンポジットのプロパティのインスタンスの参照先とを削除する修正処理手段
を含む（付記１１）または（付記１２）に記載のリファクタリング装置。
（付記１４）
前記内包化処理手段は、
前記第１のコンポジットと同一のコンポジットである前記第２のコンポジットを生成し、当該第１のコンポジットに含まれるコンポーネントとワイヤリングとを削除し、当該第１のコンポジットに、当該第２のコンポジットのインスタンスを利用するコンポーネントを追加し、当該第１のコンポジットのサービスと当該追加されたコンポーネントの対応するサービスとを接続するワイヤリング、及び、当該第１のコンポジットのリファレンスと当該追加されたコンポーネントの対応するリファレンスとを接続するワイヤリングとを追加する
（付記５）に記載のリファクタリング装置。
（付記１５）
前記複数のコンポジットのそれぞれは、さらに、当該コンポジットに含まれるコンポーネントが利用可能な変数値を定義するプロパティを要素として含み、
前記補完処理手段は、前記再配置処理手段が、前記第１のコンポジットを移動元、前記第２のコンポジットを移動先として、前記第１のコンポジットに含まれる対象コンポーネントを移動したとき、
前記対象コンポーネントのプロパティのインスタンスが、前記第１のコンポジットのプロパティを参照している場合、前記第２のコンポジットに当該対象コンポーネントのプロパティと同一の型を有するプロパティを追加し、当該対象コンポーネントのプロパティのインスタンスの参照先を、当該追加した第２のコンポジットのプロパティに変更し、当該追加した第２のコンポジットのプロパティのインスタンスの参照先に当該第１のコンポジットのプロパティを設定する
（付記６）に記載のリファクタリング装置。
（付記１６）
さらに、
前記補完処理手段による前記補完処理の後に、
前記第２のコンポジットに、当該第２のコンポジットに追加されたプロパティとインスタンスの参照先が同一である他のプロパティがある場合、当該第２のコンポジットに追加されたプロパティを削除し、前記対象コンポーネントにおける当該第２のコンポジットに追加されたプロパティを参照していたプロパティのインスタンスの参照先を、当該他のプロパティに変更する修正処理手段を含む
（付記１５）に記載のリファクタリング装置。
（付記１７）
前記内包化処理手段は、
前記第１のコンポジットに含まれる前記第２のコンポジットのインスタンスを利用するコンポーネントを削除し、当該第１のコンポジットに、当該第２のコンポジットに含まれるコンポーネントと当該コンポーネント間を接続するワイヤリングを追加し、
当該第１のコンポジットに当該削除したコンポーネントのサービスを接続先とするワイヤリングがある場合、当該ワイヤリングの接続先を、当該削除したコンポーネントのサービスに対応する、当該第２のコンポジットに含まれるコンポーネントのサービスに変更し、
当該第１のコンポジットに当該削除したコンポーネントのリファレンスを接続元とするワイヤリングがある場合、当該ワイヤリングの接続元を、当該削除したコンポーネントのリファレンスに対応する、当該第２のコンポジットに含まれるコンポーネントのリファレンスに変更する
（付記８）に記載のリファクタリング装置。
この出願は、２０１１年２月１８日に出願された日本出願特願２０１１−０３３１６６を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【００１０】
１００  リファクタリング装置
１１１  再配置処理部
１１２  補完処理部
１１３  コンポジット情報記憶部
１２１  修正処理部
１２２  補完情報記憶部
１３１  内包化処理部
２００  利用者端末
３０１  コンポーネント
３０２  サービス
３０３  リファレンス
３０４  プロパティ
３１０  コンポジット
３１２  サービス
３１３  リファレンス
３１４  プロパティ
３１５  ワイヤリング
３１６  ワイヤリング
【図１】
2012111725.tif 000003
【図２】
2012111725.tif 000004
【図３】
2012111725.tif 000005
【図４】
2012111725.tif 000006
【図５】
2012111725.tif 000007
【図６】
2012111725.tif 000008
【図７】
2012111725.tif 000009
【図８】
2012111725.tif 000010
【図９】
2012111725.tif 000011
【図１０】
2012111725.tif 000012
【図１１】
2012111725.tif 000013
【図１２】
2012111725.tif 000014
【図１３】
2012111725.tif 000015
【図１４】
2012111725.tif 000016
【図１５】
2012111725.tif 000017
【図１６】
2012111725.tif 000018
【図１７】
2012111725.tif 000019
【図１８】
2012111725.tif 000020
【図１９】
2012111725.tif 000021
【図２０】
2012111725.tif 000022
【図２１】
2012111725.tif 000023
【図２２】
2012111725.tif 000024
【図２３】
2012111725.tif 000025
【図２４】
2012111725.tif 000026
【図２５】
2012111725.tif 000027
【図２６】
2012111725.tif 000028
【図２７】
2012111725.tif 000029
【図２８】
2012111725.tif 000030
【図２９】
2012111725.tif 000031
【図３０】
2012111725.tif 000032
【図３１】
2012111725.tif 000033
【図３２】
2012111725.tif 000034
【図３３】
2012111725.tif 000035
【図３４】
2012111725.tif 000036
【図３５】
2012111725.tif 000037
【国際調査報告】
2012111725.tif 000038
2012111725.tif 000039
2012111725.tif 000040
2012111725.tif 000041