【0009】
(第1の実施の形態)
次に、本発明の第1の実施の形態について説明する。
はじめに、本発明の第1の実施の形態の構成について説明する。
図2は、本発明の第1の実施の形態におけるリファクタリング装置100を適用したリファクタリングシステムの構成を示すブロック図である。
図2を参照すると、本発明の第1の実施の形態におけるリファクタリングシステムは、リファクタリング装置100と利用者端末200とを含む。ファクタリング装置100は、再配置処理部111、補完処理部112、及び、コンポジット情報記憶部113を含む。再配置処理部111と利用者端末200とは、ネットワーク等により通信可能に接続される。
ここで、プログラム部品の構成に関する情報である、コンポジットの定義情報はコンポジット情報記憶部113に記憶される。
再配置処理部111は、利用者端末200からのリファクタリング要求を受信し、当該リファクタリング要求に従ってプログラム部品を構成する要素の再配置(移動)を行い、コンポジットの定義情報を更新すると共に、更新後の定義情報を利用者へ提示する。
また、再配置処理部111は、利用者端末200からリファクタリング要求を受信したときに、当該リファクタリング要求が実施可能であるかどうかを判断し、実施可能であると判断された要求について要素の再配置(移動)を実施する。
補完処理部112は、再配置処理部111による要素の再配置(移動)が完了すると、リファクタリング対象となるプログラム全体の機能性を維持するように、要素の補完を実施する。
なお、リファクタリング装置100は、CPUとプログラムを記憶した記憶媒体を含み、プログラムに基づく制御によって動作するコンピュータであってもよい。
次に、コンポジットの定義情報の具体例を示す。
図3及び
図4は、コンポジットの定義情報のXML形式による記述例を示す図である。
図3は、コンポジットCに関する定義情報、
図4は、コンポジットPに関するコンポジットの定義情報である。
図3において、コンポジットの定義情報は、全体がcompositeタグで囲まれており、compositeタグのname属性としてそのコンポジットの名前が定義される。ここでは、Cという名前のコンポジットが定義されている。コンポジットCの内部にはサービス要素、リファレンス要素、プロパティ要素、コンポーネント要素、及び、2つのワイヤリング要素が記述されている。これらはコンポジットCが持つサービス、リファレンス、プロパティ、コンポーネント及びワイヤリングを示している。
サービス要素はserviceタグで囲まれており、serviceタグのname属性として、そのサービスの名前が定義される。
図3では、S−Cという名前のサービスが定義されている。
リファレンス要素はrefarenceタグで囲まれており、refarenceタグのname属性として、そのリファレンスの名前が定義される。
図3では、R−Cという名前のリファレンスが定義されている。
コンポジットの内部に記述されるサービス要素やリファレンス要素には、さらにinterfaceタグを用いて、当該要素のインタフェースを規定することができる。
プロパティ要素はpropertyタグで囲まれており、propertyタグのname属性として、そのプロパティの名前が定義され、body要素としてそのプロパティの値が定義される。
図3では、P−Cという名前のプロパティが定義され、その値には“sample value”が指定されている。
プロパティ要素には、さらにtype属性を用いて、当該プロパティ要素の型を規定することができる。
図3では、type属性として、文字列であることを示す“string”が指定されている。
コンポーネント要素はcomponentタグで囲まれており、componentタグのname属性として、そのコンポーネントの名前が定義される。
図3では、C−C_JCという名前のコンポーネントが定義されている。コンポーネント要素にはインプリメント要素が含まれ、そのコンポーネントの実装であるプログラム部品が指定される。
図3ではimplement.javaタグで囲まれた要素がインプリメント要素である。この場合、コンポーネントC−C_JCの実装はJava言語で記述され、implement.javaタグのclass属性により、JCという名前のJavaクラスが実装として指定されている。
コンポーネント要素内のインプリメント要素は、コンポジットと同様にサービス、リファレンス、プロパティの要素を含むことができる。コンポーネント要素内では、これらの要素のインスタンスが定義される。インスタンスはコンポジットにおける各要素の定義と同様にserviceタグ、referenceタグ、propertyタグを用いて定義され、これらのタグのname属性にインプリメント要素が持つ各要素のname属性の値と同一の値を指定することで、当該要素のインスタンスを指定する。
図3では、コンポーネントC−C_JC内のインプリメント要素であるJavaクラスJCがプロパティP−JCを持っており、コンポーネントC−C_JC内のpropertyタグによって、プロパティP−JCのインスタンスが定義されている。
コンポーネント要素内のインプリメント要素の各要素のインスタンスは、そのコンポーネントを含むコンポジット内の他の要素のインスタンスと関連付けることができる。例えばそのコンポジット内の他の要素のインスタンスから、当該インプリメント要素のサービスを利用することや、当該インプリメント要素のリファレンスが必要とするサービスのインスタンスをそのコンポジット内の他の要素のインスタンスで提供することができる。
また、コンポーネント要素内のインプリメント要素のプロパティのインスタンスの値を、そのコンポーネント要素内で指定できる。この場合、当該インプリメント要素のプロパティの値として、そのコンポーネントを含むコンポジットで定義されたプロパティ要素を参照するように指定できる。
図3では、コンポーネントC−C_JC内のプロパティPJCは、コンポジットC内のプロパティP−Cを参照しており、プロパティP−Cの値である“sample value”がプロパティP−JCの値として指定される。
ワイヤリング要素はwireタグで囲まれており、wireタグのsource属性としてそのワイヤリングの接続元が定義され、target属性としてそのワイヤリングの接続先が定義される。source属性やtarget属性の値が“/”を含む場合、“/”の前の部分が、コンポーネント名を示し、“/”の後の部分が、そのコンポーネント内のインプリメント要素が持つサービスやリファレンスの名前を示している。
図3では、サービスS−CとコンポーネントC−C_JCが持つ図示しないサービスS−JCとを接続するワイヤリングと、コンポーネントC−C_JCが持つ図示しないリファレンスRJCとリファレンスR−Cとを接続するワイヤリングが定義されていることになる。
また、
図4では、コンポジットPはサービスS−P、コンポーネントC1−P_C、コンポーネントC2−P_Oを含む。
ここで、コンポーネントC1−P_Cでは、インプリメント要素としてコンポジットCが指定されている(コンポーネントC1−P_Cとして、コンポジットCのインスタンスを利用することが指定されている)。このように、コンポーネントのインプリメント要素としてコンポジットを指定する場合にはimplement.compositeタグが用いられ、そのname属性としてそのコンポーネントの実装であるコンポジットのコンポジット名が指定される。
同様に、コンポーネントC2−P_Oでは、インプリメント要素として、図示しないコンポジットOが指定されている。ここで、コンポジットOは、図示しないサービスS−Oを持つ。
また、コンポーネントC1−P_C内では、プロパティ要素が指定され、コンポーネントC1−P_Cのインプリメント要素であるコンポジットC内で定義されたプロパティP−Cの値に“overwriting value”が指定されている。
さらにコンポジットPは、コンポーネントC1−P_CのリファレンスR−CとコンポーネントC2−P_OのサービスS−Oとを接続するワイヤリング、及び、サービスSPとコンポーネントC1−P_CのサービスS−Cとを接続するワイヤリングを備えている。
コンポジットPの実行時には、コンポーネントC1−P_CとしてコンポジットCがインスタンス化され、さらに、コンポジットCが持つコンポーネントC−C_JCとしてJavaクラスJCがインスタンス化される。そして、コンポジットCのプロパティP−Cには、コンポーネントC1−P_C内で指定された値“overwriting value”が与えられる。さらに、コンポジットC内のコンポーネントC−C_JCでは、プロパティ要素によってインプリメント要素であるJavaクラスJCのプロパティP−JCの値としてプロパティP−Cを参照するように指定されているため、インスタンス化されたJavaクラスJCのオブジェクトにおけるプロパティP−Cの値として“overriting value”が与えられる。また、コンポジットCがリファレンスR−Cとして要求していたサービスは、コンポジットPにおいてはコンポジットOのサービスS−Oによって提供される。
このように、プログラム部品であるJavaクラスJC、コンポジットC、及び、コンポジットOが組み合わされ、各コンポジットが必要とする値やサービス、すなわちコンポジット間の依存性が解決されることにより、実行可能でより具体化されたサービスS−Pが実現される。これらの依存性が解決できない場合は、コンポジットがインスタンス化されない、或いは、プログラムの実行時にエラーが出力され、そのサービスの提供に支障が生じる。
本発明の第1の実施の形態においては、再配置処理部111が利用者端末200から受信するリファクタリング要求は、コンポジット間における要素の再配置である。リファクタリング要求は、コンポジット間における要素の再配置であることを示す情報に加え、再配置元のコンポジットの名前、再配置対象の要素の名前、再配置先のコンポジットの名前を含む。このような要求の内容は、例えば“replace C2−P_O P C”などの文字列であればよい。
コンポジット間における要素の再配置とは、例えば、リファクタリング要求が“replace C1−P_O P C”であれば、コンポジットPからコンポーネントC1−P_Oを削除し、これをそのままコンポジットCに追加することである。このような操作をした場合、上述のコンポジット間の依存性が解決されなくなる可能性がある。本発明の第1の実施の形態における補完処理部112による要素の補完とは、要素の再配置を実施した後に、依存性が引き続き解決されるように、各コンポジットに、適宜要素を追加することである。
図5及び
図6は、コンポジットの定義情報の図形による記述例を示す図である。
図5及び
図6は、それぞれ、
図3のコンポジットC、
図4のコンポジットPに対応する。
図5及び
図6では、コンポジットやコンポーネントは、角の丸い矩形で表現される。コンポジットやコンポーネントのインプリメント要素が持つサービスは、当該コンポジットやコンポーネントの左辺に重ねられた図形で表現される。コンポジットやコンポーネントのインプリメント要素が持つリファレンスは、当該コンポジットやコンポーネントの右辺に重ねられた図形で表現される。コンポジットやコンポーネントのインプリメント要素が持つプロパティは、当該コンポジットやコンポーネントの上辺に重ねられた矩形で表現される。ワイヤリングは接続する要素間を結ぶ線で表現される。プロパティの参照関係は、プロパティ間を結ぶ線で表現される。各要素の名前は、各要素の内部などに示される。
図7は、コンポジットの定義情報の図形による他の記述例を示す図である。以下では、あるコンポジットとそのコンポジットに含まれるコンポーネントのインプリメント要素であるコンポジットの定義情報を、
図7に示すように、同じ図上に示す表現を用いる。この場合、コンポーネントのインプリメント要素であるコンポジットの定義情報は、当該コンポーネントを示す矩形の内部に重ねられ、そのコンポジット名が“()”内に示される。
図7では、コンポジットCの定義情報が、コンポジットPの定義情報内のコンポーネントC1−P_Cを示す矩形の内部に重ねられている。
また、以下では、コンポジットAに含まれるコンポーネントのインプリメント要素が、コンポジットBである場合、コンポジットAをコンポジットBの上位コンポジットと表現し、コンポジットBをコンポジットAの下位コンポジットと表現する。
次に、本発明の第1の実施の形態におけるリファクタリング装置100の動作について説明する。
<リファクタリング処理の概要>
図8及び
図9は、本発明の第1の実施の形態における、リファクタリング処理の概要を示すフローチャートである。ここでは、はじめに、リファクタリング処理の概要を説明し、再配置対象の要素に応じた補完処理の詳細は後述する。
再配置処理部111は、利用者端末200からリファクタリング要求を受信すると(ステップS1000)、再配置処理部111は、コンポジット情報記憶部113に記憶されている再配置元、及び、再配置先コンポジットの定義情報を読み出す(ステップS1001)。そして、再配置処理部111は、読み出した定義情報をもとに、受信したリファクタリング要求に従ったリファクタリングを実施可能であるかどうかを判断する。ここで、再配置処理部111は、リファクタリング要求が所定の前提条件を満たすかどうかを確認する(ステップS1002)。所定の前提条件としては、例えば、受信したリファクタリング要求が、再配置元のコンポジットの名前と、再配置対象の要素の名前と、再配置先のコンポジットとを含むこと、再配置元及び再配置先のコンポジットの定義情報が共にコンポジット情報記憶部113に記憶されており、かつ、再配置対象の要素が再配置元のコンポジット内に含まれていること、及び、再配置先のコンポジットと再配置元のコンポジットの関係は、いずれかがもう一方の上位コンポジットであること、の全てを満たすことであり、それ以外の場合には、リファクタリングは実施不可能と判断される。
リファクタリング要求が当該前提条件を満たさない場合(ステップS1002/No)、再配置処理部111は、利用者にリファクタリング要求を棄却する旨を通知し(ステップS1018)、リファクタリング処理を終了する。
リファクタリング要求が当該前提条件を満たす場合(ステップS1002/Yes)、再配置処理部111は、さらに再配置先のコンポジットが再配置元のコンポジットの上位コンポジットであるか、或いは下位コンポジットであるかどうかを判定する(ステップS1003)。
再配置先のコンポジットが再配置元のコンポジットの上位コンポジットである場合(ステップS1003/上位)、再配置処理部111は、さらに再配置対象の要素がコンポーネント、サービス、リファレンス、プロパティのいずれであるかを判定する(ステップS1004)。
再配置対象の要素がコンポーネントである場合(ステップS1004/コンポーネント)、再配置処理部111は、リファクタリング要求に従い、再配置対象のコンポーネント要素を再配置元(下位)コンポジットの定義情報から削除し、再配置先(上位)コンポジットの定義情報へ追加(再配置)する(ステップS1005)。
次に、補完処理部112は、コンポーネントの上位コンポジットへの再配置に係る要素の補完を行う(ステップS1006)。
そして、再配置処理部111は、再配置及び補完の結果、更新された再配置元、及び、再配置先コンポジットの定義情報をコンポジット情報記憶部113に保存し(ステップS1007)、利用者端末200へ通知して(ステップS1008)、リファクタリング処理を終了する。
また、ステップS1004において、再配置対象の要素がサービスである場合(ステップS1004/サービス)、再配置処理部111は、リファクタリング要求に従い、再配置対象のサービス要素を再配置元(下位)コンポジットの定義情報から削除し、再配置先(上位)コンポジットの定義情報へ追加(再配置)する(ステップS1009)。
次に、補完処理部112は、サービスの上位コンポジットへの再配置に係る要素の補完を行い(ステップS1010)、ステップS1007へ進む。
また、ステップS1004において、再配置対象の要素がリファレンスである場合(ステップS1004/リファレンス)、再配置処理部111は、リファクタリング要求に従い、再配置対象のリファレンス要素を再配置元(下位)コンポジットの定義情報から削除し、再配置先(上位)コンポジットの定義情報へ追加(再配置)する(ステップS1011)。
次に、補完処理部112は、リファレンスの上位コンポジットへの再配置に係る要素の補完を行い(ステップS1012)、ステップS1007へ進む。
また、ステップS1004において、再配置対象の要素がプロパティである場合(ステップS1004/プロパティ)、再配置処理部111は、リファクタリング要求に従い、再配置対象のプロパティ要素を再配置元(下位)コンポジットの定義情報から削除し、再配置先(上位)コンポジットの定義情報へ追加(再配置)する(ステップS1013)。
次に、補完処理部112は、プロパティの上位コンポジットへの再配置に係る要素の補完を行い(ステップS1014)、ステップS1007へ進む。
一方、ステップS1003において、再配置先のコンポジットが再配置元のコンポジットの下位コンポジットである場合(ステップS1003/下位)、再配置処理部111は、さらに再配置対象の要素がコンポーネントであるかどうかを判定する(ステップS1015)。
再配置対象の要素がコンポーネントである場合(ステップS1015/コンポーネント)、再配置処理部111は、リファクタリング要求に従い、再配置対象のコンポーネント要素を再配置元(上位)コンポジットの定義情報から削除し、再配置先(下位)コンポジットの定義情報へ追加(再配置)する(ステップS1016)。
次に、補完処理部112は、コンポーネントの下位コンポーネントへの再配置に係る要素の補完を行い(ステップS1017)、ステップS1007へ進む。
また、ステップS1015において、再配置対象の要素がコンポーネントでない場合(ステップS1015/コンポーネント以外)、再配置処理部111は、ステップS1018に進み、リファクタリング処理を終了する。
次に、再配置対象の要素に応じた補完処理の詳細を説明する。
<コンポーネント要素の上位コンポジットへの再配置>
図10は、本発明の第1の実施の形態における、コンポーネント要素の上位コンポジットへの再配置に係る補完処理(ステップS1006)の詳細を示すフローチャートである。
図11は、本発明の第1の実施の形態における、コンポーネント要素の上位コンポジットへの再配置に係る、コンポジットの定義情報の例を示す図である。
ここでは、
図11の状態(a)に示す、再配置元コンポジットCに含まれる再配置対象のコンポーネントC−C_Oが、
図11の状態(b)に示すように、上位の再配置先コンポジットPへ再配置された場合を例に、補完処理を説明する。
補完処理部112は、再配置元コンポジットCの定義情報に、再配置対象のコンポーネントC−C_Oが持つサービスS−Oを接続先として指定するワイヤリング(ワイヤリングC_S−Oとする)が有るかどうかを判断する(ステップS1201)。
このようなワイヤリングC_S−Oが有る場合(ステップS1201/有)、補完処理部112は、接続先として指定された全てのサービスS−Oの各々について、再配置元コンポジットCの定義情報に、サービスS−Oと同一のインタフェースを備えたリファレンスR2−Cを追加する(ステップS1202)。さらに、補完処理部112は、サービスS−Oを接続先として指定する全てのワイヤリングC_S−Oの各々について、その接続先を、追加したリファレンスR2−Cに変更する(ステップS1203)。
そして、補完処理部112は、再配置先コンポジットPの定義情報に、コンポジットCをインプリメント要素とするコンポーネントC−P_CのリファレンスR2−Cと再配置対象のコンポーネントC−C_OのサービスS−Oとを接続するワイヤリングを追加して(ステップS1204)、ステップS1205へ進む。
ステップS1201において、ワイヤリングC_S−Oが無い場合(ステップS1201/無)、補完処理部112は、ステップS1205へ進む。
次に、補完処理部112は、再配置元コンポジットCの定義情報に、再配置対象のコンポーネントC−C_Oが持つリファレンスR−Oを接続元と指定するワイヤリング(ワイヤリングR−O_Cとする)が有るかどうか判断する(ステップS1205)、
このようなワイヤリングR−O_Cが有る場合(ステップS1205/有)、補完処理部112は、接続元として指定された全てのリファレンスR−Oの各々について、再配置元コンポジットCの定義情報に、リファレンスR−Oと同一のインタフェースを備えたサービスS2−Cを追加する(ステップS1206)。さらに、補完処理部112は、リファレンスR−Oを接続元として指定する全てのワイヤリングR−O_Cの各々について、その接続元を追加したサービスS2−Cに変更する(ステップS1207)。
そして、補完処理部112は、再配置先コンポジットPの定義情報に、コンポジットCをインプリメント要素とするコンポーネントC−P_CのサービスS2−Cと再配置対象のコンポーネントC−C_OのリファレンスR−Oとを接続するワイヤリングを追加して(ステップS1208)、ステップS1209へ進む。
ステップS1205において、ワイヤリングR−O_Cが無い場合(ステップS1205/無)、補完処理部112は、ステップS1209へ進む。
次に、補完処理部112は、再配置先コンポジットPの定義情報を参照し、再配置対象のコンポーネントC−C_Oに、再配置元コンポジットC内のプロパティP−Cを参照するプロパティP−Oのインスタンスが有るかどうかを判断する(ステップS1209)。
このようなプロパティP−Oのインスタンスが有る場合(ステップS1209/有)、補完処理部112は、このような全てのプロパティP−Oのインスタンスの各々について、再配置先コンポジットPの定義情報に、上位のプロパティP−Pが有るかどうか判断する(ステップS1210)。ここで上位のプロパティP−Pとは、再配置先コンポジットP内の再配置元コンポジットCをインプリメント要素に持つコンポーネントC−P_Cにおいて、プロパティP−Cのインスタンスの参照先に指定されたプロパティである。
このような上位のプロパティP−Pが無い場合(ステップS1210/無)、補完処理部112は、再配置先コンポジットPの定義情報に、プロパティP−Cと同一の型を持つプロパティP−Pを追加する(ステップS1211)。そして、補完処理部112は、再配置先コンポジットPの定義情報における、コンポーネントC−P_C内のプロパティP−Cのインスタンスの参照先を、追加したプロパティP−Pに変更し(ステップS1212)、再配置対象のコンポーネントC−C_O内のプロパティP−Oのインスタンスの参照先を、追加したプロパティP−Pに変更して(ステップS1213)、補完処理を終了する。
ステップS1210において、上位のプロパティP−Pが有る場合(ステップS1210/有)、再配置先コンポジットPの定義情報における、再配置対象のコンポーネントC−C_O内のプロパティP−Oのインスタンスの参照先をプロパティP−Pに変更し(ステップS1213)、補完処理を終了する。
この結果、各コンポジットの定義情報は、
図11の状態(c)のようになる。
ステップS1209において、再配置元コンポジットC内のプロパティP−Cを参照するプロパティP−Oのインスタンスが無い場合(ステップS1209で無の場合)、補完処理部112は、補完処理を終了する。
<サービス要素の上位コンポジットへの再配置>
図12は、本発明の第1の実施の形態における、サービス要素の上位コンポジットへの再配置に係る補完処理(ステップS1010)の詳細を示すフローチャートである。
図13は、本発明の第1の実施の形態における、サービス要素の上位コンポジットへの再配置に係る、コンポジットの定義情報の例を示す図である。
ここでは、
図13の状態(a)に示す、再配置元コンポジットCに含まれる再配置対象のS−Cが、
図13の状態(b)に示すように、上位の再配置先コンポジットPへ再配置された場合を例に、補完処理を説明する。
補完処理部112は、再配置元コンポジットCの定義情報に、再配置対象のサービスS−Cと同一のインタフェースを備えたサービスS2−Cを追加し(ステップS1301)、再配置元コンポジットC内で、再配置対象のサービスS−Cを接続元としている全てのワイヤリング要素の各々について、その接続元を追加したサービスS2−Cに変更する(ステップS1302)。そして、補完処理部112は、再配置先コンポジットPの定義情報に、コンポジットCをインプリメント要素とするコンポーネントC−P_CのサービスS2−CとサービスS−Cとを接続するワイヤリングを追加する(ステップS1303)。
この結果、各コンポジットの定義情報は、
図13の状態(c)のようになる。
<リファレンス要素の上位コンポジットへの再配置>
図14は、本発明の第1の実施の形態における、リファレンス要素の上位コンポジットへの再配置に係る補完処理(ステップS1012)の詳細を示すフローチャートである。
図15は、本発明の第1の実施の形態における、リファレンス要素の上位コンポジットへの再配置に係る、コンポジットの定義情報の例を示す図である。
ここでは、
図15の状態(a)に示す、再配置元コンポジットCに含まれる再配置対象のR−Cが、
図15の状態(b)に示すように、上位の再配置先コンポジットPへ再配置された場合を例に、補完処理を説明する。
補完処理部112は、再配置元コンポジットCの定義情報に、再配置対象のリファレンスR−Cと同一のインタフェースを備えたリファレンスR2−Cを追加し(ステップS1401)、再配置元コンポジットC内で、再配置したリファレンスR−Cを接続先としている全てのワイヤリング要素の各々について、その接続先を追加したリファレンスR2−Cに変更する(ステップS1402)。そして、補完処理部112は、再配置先コンポジットPの定義情報に、コンポジットCをインプリメント要素とするコンポーネントC−P_CのリファレンスR2−CとリファレンスR−Cとを接続するワイヤリングを追加する(ステップS1403)。
この結果、各コンポジットの定義情報は、
図15の状態(c)のようになる。
<プロパティ要素の上位コンポジットへの再配置>
図16は、本発明の第1の実施の形態における、プロパティ要素の上位コンポジットへの再配置に係る補完処理(ステップS1014)の詳細を示すフローチャートである。
図17は、本発明の第1の実施の形態における、プロパティ要素の上位コンポジットへの再配置に係る、コンポジットの定義情報の例を示す図である。
ここでは、
図17の状態(a)に示す、再配置元コンポジットCに含まれる再配置対象のP−Cが、
図17の状態(b)に示すように、上位の再配置先コンポジットPへ再配置された場合を例に、補完処理を説明する。
補完処理部112は、再配置元コンポジットCの定義情報に、再配置対象のプロパティP−Cと同一の型を持つプロパティP2−Cを追加し(ステップS1501)、再配置元コンポジットC内のコンポーネントが持つプロパティ要素の内、再配置対象のプロパティP−Cを参照先とする全てのプロパティ要素の各々について、その参照先を追加したプロパティP2−Cに変更する(ステップS1502)。そして、補完処理部112は、再配置先コンポジットPの定義情報におけるコンポジットCをインプリメント要素とするコンポーネントC−P_Cに、プロパティP2−Cのインスタンスが無ければ追加し、その参照先を再配置したプロパティP−Cに設定する(ステップS1503)。
この結果、各コンポジットの定義情報は、
図17の状態(c)のようになる。
<コンポーネント要素の下位コンポジットへの再配置>
図18は、本発明の第1の実施の形態における、コンポーネント要素の下位コンポジットへの再配置に係る補完処理(ステップS1017)の詳細を示すフローチャートである。
図19は、本発明の第1の実施の形態における、コンポーネント要素の下位コンポジットへの再配置に係る、コンポジットの定義情報の例を示す図である。
ここでは、
図19の状態(a)に示す、再配置元コンポジットPに含まれる再配置対象のコンポーネントC−P_Cが、
図19の状態(b)に示すように、下位の再配置先コンポジットOへ再配置された場合を例に、補完処理を説明する。
補完処理部112は、再配置元コンポジットPの定義情報に、再配置対象のコンポーネントC−P_Cが持つサービスS−Cを接続先として指定するワイヤリング(ワイヤリングP_S−Cとする)が有るかどうかを判断する(ステップS1601)。
このようなワイヤリングP_S−Cが有る場合(ステップS1601/有)、補完処理部112は、接続先として指定された全てのサービスS−Cの各々について、再配置先コンポジットOの定義情報に、サービスS−Cと同一のインタフェースを備えたサービスS−Oを追加し(ステップS1602)、追加したサービスS−Oと再配置対象のコンポーネントC−P_CのサービスS−Cとを接続するワイヤリングを追加する(ステップS1603)。さらに、補完処理部112は、コンポジットPの定義情報において、サービスS−Cを接続先として指定する全てのワイヤリングP_S−Cの各々について、その接続先を、再配置先コンポジットOをインプリメント要素とするコンポーネントC2−P_Oが持つサービスS−Oに変更し(ステップS1604)、ステップS1605へ進む。
ステップS1601において、ワイヤリングP_S−Cが無い場合(ステップS1601/無)、補完処理部112は、ステップS1605へ進む。
次に、補完処理部112は、再配置元コンポジットPに、再配置対象のコンポーネントC−P_Cが持つリファレンスR−Cを接続元として指定するワイヤリング(ワイヤリングR−C_Pとする)が有るかどうかを判断する(ステップS1605)。
このようなワイヤリングR−C_Pが有る場合(ステップS1605/有)、補完処理部112は、接続元として指定された全てのリファレンスR−Cの各々について、再配置先コンポジットOの定義情報に、リファレンスR−Cと同一のインタフェースを備えたリファレンスR−Oを追加し(ステップS1606)、追加したリファレンスR−Oと再配置対象のコンポーネントC−P_CのリファレンスR−Cとを接続するワイヤリングを追加する(ステップS1607)。さらに、補完処理部112は、コンポジットPの定義情報において、リファレンスR−Cを接続元として指定する全てのワイヤリングR−C_Pの各々について、その接続元を、再配置先コンポジットOをインプリメント要素とするコンポーネントC2−P_Oが持つリファレンスR−Oに変更し(ステップS1608)、ステップS1609へ進む。
ステップS1605において、ワイヤリングR−C_Pが無い場合(ステップS1605/無)、補完処理部112は、ステップS1609へ進む。
次に、補完処理部112は、再配置先コンポジットOの定義情報を参照し、再配置対象のコンポーネントC−P_Cに、再配置元コンポジットP内のプロパティP−Pを参照するプロパティP−Cのインスタンスが有るかどうかを判断する(ステップS1609)。
このようなプロパティP−Cのインスタンスが有る場合(ステップS1609/有)、補完処理部112は、このような全てのプロパティP−Cのインスタンスの各々について、再配置先コンポジットOの定義情報に、プロパティP−Cと同一の型を持つプロパティP−Oを追加し(ステップS1610)、再配置対象のコンポーネントC−P_C内のプロパティP−Cのインスタンスの参照先を追加したプロパティP−Oに変更する(ステップS1611)。そして、補完処理部112は、再配置元コンポジットPの定義情報において、コンポーネントC2−P_O内のプロパティP−Oのインスタンスの参照先をプロパティP−Pに変更し(ステップS1612)、補完処理を終了する。
この結果、各コンポジットの定義情報は、
図19の状態(c)のようになる。
ステップS1609において、再配置元コンポジットP内のプロパティP−Pを参照するプロパティP−Cが無い場合(ステップS1609/無)、補完処理部112は、補完処理を終了する。
以上により、本発明の第1の実施の形態におけるリファクタリング装置100の動作が完了する。
次に、本発明の第1の実施の形態の特徴的な構成を説明する。
図1は、本発明の第1の実施の形態の特徴的な構成を示すブロック図である。
図1を参照すると、リファクタリング装置100は、コンポジット情報記憶部113、再配置処理部111、及び、補完処理部112を含む。
ここで、コンポジット情報記憶部113は、所定の処理または他のコンポジットのインスタンスの利用を定義するコンポーネント、提供する機能を定義するサービス、利用する機能を定義するリファレンス、及び、コンポーネント、サービス、及び、リファレンス間の機能の提供関係を定義するワイヤリングを要素として含む複数のコンポジットを記憶する。
再配置処理部111は、複数のコンポジットの内の第1のコンポジットを移動先、第1のコンポジットに含まれるコンポーネントがインスタンスとして利用する第2のコンポジットを移動元として、第2のコンポジットに含まれる対象コンポーネントを移動、または、第1のコンポジットを移動元、第2のコンポジットを移動先として、第1のコンポジットに含まれる対象コンポーネントを移動する。
補完処理部112は、移動元コンポジットに要素と対象コンポーネントとの間のワイヤリングがある場合、対象コンポーネントの移動後に、第2のコンポジットに、サービスまたはリファレンスを追加し、移動元コンポジットに、当該追加したサービスまたはリファレンスと当該要素とを接続するワイヤリングを設定し、移動先コンポジットに、当該追加したサービスまたはリファレンスと当該対象コンポーネントとを接続するワイヤリングを設定する補完処理を行う。
本発明の第1の実施の形態によれば、プログラム部品の組み合わせによるシステムの実現手法において、プログラム部品の再配置を容易に行うことができる。その理由は、再配置処理部111による上位、下位コンポジット間でのコンポーネントの再配置が行われたときに、補完処理部112が、当該上位及び下位のコンポジットの各々に含まれるサービスが提供する機能が保持されるように、下位のコンポジットに、サービス、及び、リファレンス内の少なくとも一つを追加し、上位及び下位のコンポジットにおけるワイヤリングの設定を変更する、補完処理を行うためである。
(第2の実施の形態)
次に、本発明の第2の実施の形態について説明する。
本発明の第2の実施形態においては、補完処理に伴う冗長な要素や無駄な依存性をコンポジットの定義情報から削除する点において、本発明の第1の実施形態と異なる。なお、本発明の第2の実施形態において、本発明の第1の実施の形態と同様の構成要素については、本発明の第1の実施の形態と同じ符号を付与し、詳細な説明を省略する。
はじめに、本発明の第2の実施の形態の構成について説明する。
図20は、本発明の第2の実施の形態におけるリファクタリング装置100を適用したリファクタリングシステムの構成を示すブロック図である。
図20を参照すると、本発明の第2の実施の形態におけるリファクタリング装置100は、本発明の第1の実施の形態におけるリファクタリング装置100の構成に加えて、修正処理部121、及び、補完情報記憶部122を含む。
補完情報記憶部122は、要素の再配置に伴い補完処理部112により追加された要素を示す補完情報を記憶する。
図21は、本発明の第2の実施の形態における、補完情報の例を示す図である。補完情報は、
図21に示すように、コンポジット名、要素種別、及び、要素IDを含む。ここで、要素IDとしては、name属性を持つ要素についてはname属性の値を、wire要素についてはsource属性の値とtarget属性の値を連結したものを用いることができる。
修正処理部121は、補完情報記憶部122の補完情報を参照し、補完処理に伴う冗長な要素や無駄な依存性を削除するように、コンポジットの定義情報を修正する。
また、本発明の第2の実施の形態においては、再配置処理部111は、利用者からのリファクタリング要求としてリファクタリングを終了する要求をさらに受け付ける。リファクタリングを終了する要求として、例えば“quit”などの文字列を利用してもよい。
次に、本発明の第2の実施の形態におけるリファクタリング装置100の動作について説明する。
図22及び
図23は、本発明の第2の実施の形態における、リファクタリング処理の概要を示すフローチャートである。
図22及び
図23において、第1の実施の形態と同様の動作については、
図8及び
図9と同様の符号を付与し、詳細な説明を省略する。
本発明の第2の実施形態においては、補完処理部112による補完処理(ステップS1006、S1010、S1012、S1014、S1017)で、コンポジットの定義情報に要素が追加された場合には、当該要素の情報が、補完情報として補完情報記憶部122に記録される。そして、補完処理部112による補完処理の後に、修正処理部121によるコンポジット定義情報の修正処理が行われる。さらに、本発明の第2の実施形態では、利用者からリファクタリングの終了要求を受信するまで、繰り返しリファクタリング要求を受け付けられる。
再配置処理部111は、利用者端末200からリファクタリング要求を受信すると、リファクタリング要求が終了要求であるかどうかを判断する(ステップS2001)。終了要求である場合(ステップS2001/Yes)、再配置処理部111は、補完情報記憶部122に記憶されている補完情報を削除し(ステップS2002)、処理を終了する。
ステップS2001において、終了要求でない場合(ステップS2001/No)、再配置処理部111は、ステップS1001へ進む。
また、補完処理部112による補完処理(ステップS1006、S1010、S1012、S1014、S1017)の後に、修正処理部121が、コンポジット定義情報の修正処理を行う(ステップS2003、S2004)。ここで、修正処理部121は、補完情報記憶部122の補完情報を参照し、補完処理によって追加された要素を取得する。
さらに、ステップS1008の後に、再配置処理部111は、利用者からのリファクタリング要求を待機し、ステップS1000へ戻る。
次に、コンポジット定義情報の修正処理(ステップS2003、S2004)の詳細を説明する。
<上位コンポジットへの再配置>
図24は、本発明の第2の実施の形態における、上位コンポジットへの要素の再配置に係る修正処理(ステップS2003)の詳細を示すフローチャートである。また、
図25及び
図26は、本発明の第2の実施の形態における、上位コンポジットへの要素の再配置に係る、コンポジットの定義情報の例を示す図である。なお、煩雑さを避けるため、コンポジットの定義情報の内、プロパティ以外の要素(
図25)と、プロパティ要素(
図26)とが分けて示されている。
ここでは、
図25の状態(a)、
図26の状態(a)に示すように、コンポジットC内のコンポーネントC−C_O、サービスS−C、及びリファレンスR−Cを上位コンポジットであるコンポジットPに再配置した場合を例に、コンポジット定義情報の修正処理を説明する。
また、
図25、
図26において、点線で示した要素は、補完処理によって追加された要素であることを示す。例えば、サービスS1−CはサービスS−Cの再配置に伴って補完された要素であり、サービスR1−CはリファレンスR−Cの再配置に伴って補完された要素であり、プロパティP1−CはプロパティP−Cの再配置に伴って補完された要素であり、サービスS2−C、リファレンスR2−C、及び、プロパティP−PはコンポーネントC−C_Oの再配置に伴って補完された要素である。
修正処理部121は、再配置元コンポジットの定義情報に、リファレンス要素と、補完によって追加されたサービス要素とを接続するワイヤリング(ワイヤリングX1とする)が有るかどうかを判断する(ステップS2101)。ワイヤリングX1が有る場合(ステップS2101/有)、修正処理部121は、ワイヤリングX1を削除する(ステップS2102)。
例えば、
図25の状態(a)において、修正処理部121は、再配置元コンポジットC内の、リファレンスR1−Cと補完によって追加されたサービスS2−Cとを接続するワイヤリング(ワイヤリングX1に相当)を削除する。
さらに、修正処理部121は、再配置先コンポジットの定義情報において、削除したワイヤリングX1の接続先であるリファレンスのインスタンスと接続されている要素(要素X2とする)が有るかどうかを判断する(ステップS2103)。要素X2が有る場合(ステップS2103/有)、修正処理部121は、再配置先コンポジットの定義情報において、削除したワイヤリングX1の接続元であるサービス要素のインスタンスと接続されている再配置対象のコンポーネント内のリファレンスを検出し、当該リファレンスと要素X2とを接続するワイヤリングを追加し(ステップS2104)、ステップS2105へ進む。
ステップS2103において要素X2が無い場合(ステップS2103/無)や、ステップS2101においてワイヤリングX1が無い場合(ステップS2101/無)、修正処理部121は、ステップS2105へ進む。
例えば、
図25の状態(a)において、修正処理部121は、リファレンスR1−Cのインスタンスと接続されているリファレンスR−C(要素X2に相当)と、サービスS2−Cのインスタンスと接続されている再配置対象のコンポーネントC−C_O内のリファレンスR−Oとを接続するワイヤリングを追加する。
次に、修正処理部121は、再配置元コンポジットの定義情報に、サービス要素と、補完によって追加されたリファレンス要素とを接続するワイヤリング(ワイヤリングX3とする)が有るかどうかを判断する(ステップS2105)。ワイヤリングX3が有る場合(ステップS2105/有)、修正処理部121は、ワイヤリングX3を削除する(ステップS2106)。
例えば、
図25の状態(a)において、修正処理部121は、再配置元コンポジットC内の、サービスS1−Cと補完によって追加されたリファレンスR2−Cとを接続するワイヤリング(ワイヤリングX3に相当)を削除する。
さらに、修正処理部121は、再配置先コンポジットの定義情報において、削除したワイヤリングX3の接続元であるサービス要素のインスタンスと接続されている要素(要素X4とする)が有るかどうかを判断する(ステップS2107)。要素X4が有る場合(ステップS2107/有)、修正処理部121は、再配置先コンポジットの定義情報において、削除したワイヤリングX3の接続先であるリファレンス要素のインスタンスと接続されている再配置対象のコンポーネント内のサービス要素を検出し、当該サービス要素と要素X4とを接続するワイヤリングを追加し(ステップS2108)、ステップS2109へ進む。
ステップS2107において、要素X4が無い場合(ステップS2107/無)や、ステップS2105において、ワイヤリングX3が無い場合(ステップS2105/無)、修正処理部121は、ステップS2109へ進む。
例えば、
図25の状態(a)において、修正処理部121は、サービスS1−Cのインスタンスと接続されているサービスS−C(要素X4に相当)と、リファレンスR2−Cのインスタンスと接続されている再配置対象のコンポーネントC−C_O内のサービスS−Oとを接続するワイヤリングを追加する。
この結果、再配置元及び再配置先コンポジットの状態は、
図25の状態(b)のようになる。
次に、修正処理部121は、再配置元コンポジットの定義情報に、接続するワイヤリングが無くなったサービス要素やリファレンス要素、または、参照されていないプロパティ要素が有るかどうかを判断する(ステップS2109)。このような要素が有る場合(ステップS2109/有)、修正処理部121は、再配置元コンポジットの定義情報において、これらの要素を削除し、さらに再配置先コンポジットの定義情報において、削除した要素のインスタンスと、削除した要素のインスタンスと接続していたワイヤリングを削除して(ステップS2110)、修正処理を終了する。
ステップS2109においてこのような要素が無い場合(ステップS2109/無)、修正処理部121は、修正処理を終了する。
例えば、
図25の状態(b)において、再配置元コンポジットC内の要素であるサービスS1−C、サービスS2−C、リファレンスR1−C、リファレンスR2−Cは接続するワイヤリングが無くなっているため、これらの要素は全て削除される。また、
図26の状態(a)において、プロパティP1−C、及び、プロパティP2−Cが参照されていない場合、これらの要素は全て削除される。さらに、修正処理部121は、再配置先コンポジットP内で、削除したサービス要素やリファレンス要素と接続していたワイヤリングを削除する。
この結果、再配置元及び再配置先コンポジットの状態は、
図25の状態(c)、
図26の状態(b)のようになる。
なお、ステップS2110において、修正処理部121は、削除対象の要素が補完処理によって追加された要素でない場合には、その要素を、利用者の確認を得てから削除してもよい。
<下位コンポジットへの再配置>
図27は、本発明の第2の実施の形態における、下位コンポジットへの要素の再配置に係る修正処理(ステップS2004)の詳細を示すフローチャートである。また、
図28及び
図29は、本発明の第2の実施の形態における、下位コンポジットへの要素の再配置に係る、コンポジットの定義情報の例を示す図である。なお、煩雑さを避けるため、コンポジットの定義情報の内、プロパティ要素以外の要素(
図28)とプロパティ要素(
図29)とが分けて示されている。
ここでは、
図28の状態(a)、
図29の状態(a)に示すように、コンポジットP内のコンポーネントC−P_Oを下位コンポジットであるコンポジットCに再配置した場合を例に、コンポジット定義情報の修正処理を説明する。なお、再配置元コンポジットPにおいて、コンポーネントC−P_OのサービスS−O及びリファレンスR−Oは、コンポジットPのサービスS−P及びリファレンスR−Pとそれぞれ接続されていたものとする。
また、
図28、
図29において、点線で示した要素は、補完処理によって追加された要素であることを示している。例えば、サービスS1−C、リファレンスR1−C、及び、プロパティP2−CはコンポーネントC−P_Oの再配置に伴って補完された要素である。
なお、コンポジットCには他のコンポーネントC−C_O2があり、コンポーネントC−C_O2のサービスS−O2及びリファレンスR−O2のインスタンスは、コンポジットCのサービスS2−C及びリファレンスR2−Cとそれぞれ接続されている。コンポジットPにおいて、サービスS2−C及びリファレンスR2−Cのインスタンスは、コンポジットPのサービスS−P及びリファレンスR−Pとそれぞれ接続されている。コンポジットCにおいて、コンポジットO2のプロパティP−O2のインスタンスはコンポジットCのプロパティP1−Cを参照している。コンポジットPにおいて、コンポジットCのプロパティP1−CのインスタンスはコンポジットPのプロパティP−Pを参照している。
修正処理部121は、再配置先コンポジットの定義情報に、再配置元コンポジットにおけるインスタンスの接続元が補完によって追加されたサービス(サービスX5とする)と同一のサービス(サービスX6とする)が有るかどうかを判断する(ステップS2201)。サービスX6が有る場合(ステップS2201/有)、修正処理部121は、再配置先コンポジットの定義情報におけるサービスX5、及び、再配置元コンポジットの定義情報におけるサービスX5のインスタンスとサービスX5のインスタンスと接続された全てのワイヤリングを削除する(ステップS2202)。修正処理部121は、再配置先コンポジットにおいて、サービスX5と接続していたワイヤリングの接続元をサービスX6に変更し(ステップS2203)、ステップS2204へ進む。サービスX6が無い場合(ステップS2201/無)、修正処理部121は、ステップS2204へ進む。
例えば、
図28の状態(a)において、再配置元コンポジットPにおけるサービスS1−C(サービスX5に相当)のインスタンスの接続元(サービスS−P)がサービスS2−C(サービスX6に相当)のインスタンスの接続元と同一であるため、修正処理部121は、再配置先コンポジットCにおいて、サービスS1−Cを削除し、再配置元コンポジットPにおいて、サービスS1−Cのインスタンス及びこれと接続していたワイヤリングを削除する。さらに、修正処理部121は、再配置先コンポジットCにおいて、サービスS1−Cと接続していたワイヤリングの接続元をサービスS2−Cに変更する。
次に、修正処理部121は、再配置先コンポジットの定義情報に、再配置元コンポジットにおけるインスタンスの接続先が補完によって追加されたリファレンス(リファレンスX7とする)と同一のリファレンス(リファレンスX8とする)が有るかどうかを判断する(ステップS2204)。リファレンスX8が有る場合(ステップS2204/有)、修正処理部121は、再配置先コンポジットの定義情報におけるリファレンスX7、及び、再配置元コンポジットの定義情報におけるリファレンスX7のインスタンスとリファレンスX7のインスタンスと接続された全てのワイヤリングを削除する(ステップS2205)。修正処理部121は、再配置先コンポジットにおいて、リファレンスX7と接続していたワイヤリングの接続先をリファレンスX8に変更し(ステップS2206)、ステップS2207へ進む。リファレンスX8が無い場合(ステップS2204/無)、修正処理部121は、ステップS2207へ進む。
例えば、
図28の状態(a)において、再配置元コンポジットPにおけるリファレンスR1−C(リファレンスX7に相当)のインスタンスの接続先(リファレンスR−P)がリファレンスR2−C(リファレンスX8に相当)のインスタンスの接続先と同一であるため、修正処理部121は、再配置先コンポジットCにおいて、リファレンスR1−Cを削除し、再配置元コンポジットPにおいて、リファレンスR1−Cのインスタンス及びこれと接続していたワイヤリングを削除する。さらに、修正処理部121は、再配置先コンポジットCにおいて、リファレンスR1−Cと接続していたワイヤリングの接続先をリファレンスR2−Cに変更する。
次に、修正処理部121は、再配置先コンポジットの定義情報に、再配置元コンポジットにおけるインスタンスの参照先が、補完によって追加されたプロパティ(プロパティX9とする)と同一のプロパティ(プロパティX10とする)が有るかどうかを判断する(ステップS2207)。プロパティX10が有る場合(ステップS2207/有)、修正処理部121は、再配置先コンポジットの定義情報におけるプロパティX9、及び、再配置元コンポジットの定義情報におけるプロパティX9のインスタンスを削除する(ステップS2208)。修正処理部121は、再配置先コンポジットおいて、プロパティX9を参照する全てのプロパティのインスタンスの参照先をプロパティX10に変更し(ステップS2209)、修正処理を終了する。プロパティX10が無い場合(ステップS2207/無)、修正処理部121は、修正処理を終了する。
例えば、
図29の状態(a)において、再配置元コンポジットPにおけるプロパティP2−C(プロパティX9に相当)のインスタンスの参照先(プロパティP−P)がプロパティP1−C(プロパティX10に相当)のインスタンスの参照先と同一であるため、修正処理部121は、再配置先コンポジットCにおいて、プロパティP2−Cを削除し、さらに再配置先コンポジットCにおいて、プロパティP2−Cを参照するプロパティP−Oのインスタンスの参照先をプロパティP1−Cに変更する。
この結果、再配置元及び再配置先コンポジットの状態は、
図28の状態(b)、
図29の状態(b)のようになる。
なお、修正処理部121は、ステップS2003、S2004内において、補完によって追加された要素を削除する場合、補完情報記憶部122に記憶されている補完情報からも、当該要素を削除する。
以上により、本発明の第2の実施の形態におけるリファクタリング装置100の動作が完了する。
本発明の第2の実施の形態によれば、プログラム部品の組み合わせによるシステムの実現手法において、プログラム部品の再配置後のコンポジットを、簡潔で保守性の高いコンポジットにすることができる。その理由は、補完処理部112が、補完処理に伴う冗長な要素や、再配置元コンポジットに残存している無駄な依存性を削除するためである。
(第3の実施の形態)
次に、本発明の第3の実施の形態について説明する。
本発明の第3の実施形態においては、コンポジットの内包化を行う内包化処理と、内包化されたコンポーネントの展開を行う展開処理を行う点において、本発明の第1の実施形態と異なる。なお、本発明の第3の実施形態において、本発明の第1の実施の形態と同様の構成要素については、本発明の第1の実施の形態と同じ符号を付与し、詳細な説明を省略する。
ここで、本発明の第3の実施の形態における、内包化処理、及び、展開処理について説明する。
図31は、本発明の第3の実施の形態における、内包化処理、及び、展開処理に係る、コンポジットの定義情報の例を示す図である。
コンポジットの内包化は、内包化対象のコンポジットと同一の定義情報を持つ新しいコンポジットを生成し、内包化対象コンポジット内の全てのコンポーネントを、生成されたコンポジットをインプリメント要素とするコンポーネントに置き換える操作である。
コンポジットの内包化は、例えば、あるコンポジットの定義情報に含まれるコンポーネントを再配置により当該コンポジットから抜き出す必要があるときに、その再配置による当該コンポジットの上位のコンポジットの定義情報への影響を防ぐために用いられる。
例えば、
図31の状態(a)のように、コンポジットCがコンポーネントC−C_Oを含み、コンポーネントC−C_Oを再配置によりコンポジットCから抜き出す必要がある場合、コンポジットCを内包化対象として内包化処理が行われる。この場合、
図31の状態(b)のように、コンポジットCと同一の定義情報を持つコンポジットCIが生成され、コンポジットC内のコンポーネントC−C_Oは、生成されたコンポジットCIをインプリメント要素とするコンポーネントC−C_CIに置き換えられる。そして、コンポジットCIのコンポーネントC−C_OをコンポジットCIの上位コンポジットCに再配置することで、コンポジットCの上位コンポジットへの影響無く、コンポーネントC−C_Oが抜き出されたコンポジットCIの定義情報が得られる。
また、コンポーネントの展開は、展開対象のコンポーネントを、当該コンポーネントのインプリメント要素であるコンポジットが持つコンポーネント群に置き換える操作である。
コンポジットの展開は、例えば、コンポーネントの再配置により生じた冗長なコンポジットの階層の削除、または、内包化されたコンポジットを内包化前の状態に戻すために用いられる。
例えば、コンポーネントC−C_OをコンポジットCからコンポジットCIに再配置した結果、
図31の状態(b)のように、コンポジットCIが冗長な階層となっている場合、コンポーネントC−C_CIを展開対象として展開処理が行われる。この場合、
図31の状態(a)のように、コンポーネントC−C_CIが、コンポジットCIが持つコンポーネントC−C_Oに置き換えられる。
次に、本発明の第3の実施の形態の構成について説明する。
図30は、本発明の第3の実施の形態におけるリファクタリング装置100を適用したリファクタリングシステムの構成を示すブロック図である。
図30を参照すると、本発明の第3の実施の形態におけるリファクタリング装置100は、本発明の第1の実施の形態におけるリファクタリング装置100の構成に加えて、内包化処理部131を含む。
内包化処理部131は、再配置処理部111が利用者端末200から内包化要求、または、展開要求を受信したときに、内包化処理、または、展開処理を行う。
内包化要求は、コンポジットの内包化の要求を示す情報に加え、内包化対象のコンポジットの名前を含む。内包化要求は、例えば、“capsule C”などの文字列でもよい。
また、展開要求は、コンポーネントの展開の要求を示す情報に加え、展開対象のコンポーネントの名前と当該コンポーネントが含まれるコンポジット名を含む。展開要求は、例えば“expand P C−P_C”などの文字列でもよい。
次に、本発明の第3の実施の形態におけるリファクタリング装置100の動作について説明する。
<内包化処理>
はじめに、本発明の第3の実施の形態における内包化処理について説明する。
図32は、本発明の第3の実施の形態における内包化処理を示すフローチャートである。
ここでは、
図31の状態(a)において、内包化対象コンポジットがコンポジットCである場合を例に、展開処理を説明する。
内包化処理部131は、再配置処理部111が、コンポジットの内包化要求を受信すると(ステップS3100)、コンポジット情報記憶部113に記憶されている内包化対象コンポジットの定義情報を読み出す(ステップS3101)。内包化処理部131は、内包化対象コンポジットと同一の定義情報を持つ別名のコンポジットの定義情報を生成し、コンポジット情報記憶部113に保存する(ステップS3102)。
次に、内包化処理部131は、内包化対象コンポジットの定義情報において、全てのコンポジットとワイヤリングを削除し(ステップS3103)、生成した別名のコンポジットをインプリメント要素とするコンポーネントを追加する(ステップS3104)。内包化処理部131は、内包化対象コンポジットの定義情報において、全てのサービス及びリファレンスと、追加したコンポーネントの同名のサービス及びリファレンスとをそれぞれ接続するワイヤリングを追加する(ステップS3105)。さらに、内包化処理部131は、内包化対象コンポジットの定義情報において、追加したコンポジットの全てのプロパティのインスタンスの参照先に内包化対象コンポジットの同名のプロパティを設定する(ステップS3106)。そして、内包化処理部131は、内包化対象コンポジットの定義情報をコンポジット情報記憶部113に保存する(ステップS3107)。
例えば、
図31の状態(a)において、内包化処理部131は、コンポジットCと同一の定義情報を持つコンポジットCIを生成し、コンポジットC内のコンポーネントC−C_Oを削除する。そして、内包化処理部131は、コンポジットCに、生成されたコンポジットCIをインプリメント要素とするコンポーネントC−C_CIを追加し、サービスS−CとコンポーネントC−C_CIのサービスS−Cのインスタンス、リファレンスR−CとコンポーネントC−C_CIのリファレンスR−Cのインスタンスをそれぞれ接続するワイヤリングを追加する。さらに、内包化処理部131は、コンポーネントC−C_CIのプロパティP−Cのインスタンスの参照先に、コンポジットCのプロパティP−Cを設定する。
この結果、再配置元及び再配置先コンポジットの状態は、
図31の状態(b)のようになる。
<展開処理>
次に、本発明の第3の実施の形態における展開処理について説明する。
図33は、本発明の第3の実施の形態における展開処理を示すフローチャートである。また、
図34は、本発明の第3の実施の形態における、展開処理に係る、コンポジットの定義情報の例を示す図である。
ここでは、
図34の状態(a)において、展開対象コンポーネントがコンポジットP内のコンポーネントC−P_Cである場合を例に、展開処理を説明する。
内包化処理部131は、再配置処理部111が、コンポーネントの展開要求を受信すると(ステップS3200)、コンポジット情報記憶部113に記憶されている、展開対象コンポーネントのインプリメント要素であるコンポジット(展開対象コンポジットとする)の定義情報と、展開対象コンポーネントを含むコンポジット(展開先コンポジットとする)の定義情報を読み出す(ステップS3201)。内包化処理部131は、展開先コンポジットの定義情報において、展開対象コンポーネントを削除し(ステップS3202)、展開対象コンポジットが持つ全てのコンポーネントと、当該コンポーネントが持つサービスやリファレンス間を接続するワイヤリングを追加する(ステップS3203)。
例えば、
図34の状態(b)のように、コンポジットPからコンポーネントC−P_Cが削除され、コンポーネントC−P_Cのインプリメント要素であるコンポジットCが持つコンポーネントC1−C_OとコンポーネントC2−C_O2、及び、リファレンスR2−OとサービスS−O2とを接続するワイヤリングが追加される。
次に、内包化処理部131は、展開先コンポジットの定義情報に、展開対象のコンポーネントが持つサービスのインスタンスを接続先としたワイヤリングが有るかどうかを判断する(ステップS3204)。そのようなワイヤリングが有る場合(ステップS3204/有)、内包化処理部131は、当該ワイヤリングを削除する(ステップS3205)。内包化処理部131は、削除したワイヤリングの接続先であるサービスが、展開対象コンポジットの定義情報において接続していた要素を抽出する。そして、内包化処理部131は、展開先コンポジットの定義情報に、削除したワイヤリングの接続元と抽出した要素のインスタンスとを接続するワイヤリングを追加し(ステップS3206)、ステップS3207へ進む。
ステップS3204において、そのようなワイヤリングが無い場合(ステップS3204/無)、内包化処理部131は、ステップS3207へ進む。
例えば、
図34の状態(b)において、コンポジットP内のサービスS−PとサービスS−Cを接続していたワイヤリングが削除され、サービスS−PとサービスS−Oとを接続するワイヤリングが追加される。
次に、内包化処理部131は、展開先コンポジットの定義情報に、展開対象のコンポーネントが持つリファレンスのインスタンスを接続元としたワイヤリングが有るかどうかを判断する(ステップS3207)。そのようなワイヤリングが有る場合(ステップS3207/有)、内包化処理部131は、当該ワイヤリングを削除する(ステップS3208)。内包化処理部131は、削除したワイヤリングの接続元であるリファレンスが、展開対象コンポジットの定義情報において接続していた要素を抽出する。そして、内包化処理部131は、展開先コンポジットの定義情報に、削除したワイヤリングの接続先と抽出した要素のインスタンスとを接続するワイヤリングを追加し(ステップS3209)、ステップS3210へ進む。
ステップS3207において、そのようなワイヤリングが無い場合(ステップS3207/無)、内包化処理部131は、ステップS3210へ進む。
例えば、
図34の状態(b)において、コンポジットPのリファレンスR1−PとリファレンスR1−C、及び、リファレンスR2−PとリファレンスR2−Cを接続していたワイヤリングが削除され、リファレンスR1−PとリファレンスR1−Oとを接続するワイヤリング、及び、リファレンスR2−PとリファレンスR−O2とを接続するワイヤリング追加される。
次に、内包化処理部131は、展開対象コンポジットの定義情報にプロパティ(プロパティP1とする)が有るかどうかを判断する(ステップS3210)。プロパティP1が有る場合(ステップS3210/有)、内包化処理部131は、全てのプロパティP1に対して、展開先コンポジットの定義情報において、プロパティP1のインスタンスが展開先コンポジットのプロパティP2を参照しているかを判断する(ステップS3211)。参照している場合(ステップS3211/Yes)、内包化処理部131は、展開先コンポジットの定義情報において、ステップS3203で追加されたコンポーネント内のプロパティのインスタンスの内、プロパティP1を参照していた全てのインスタンスの参照先をプロパティP2に変更し(ステップS3212)、ステップS3214へ進む。
ステップS3211において、参照していない場合(ステップS3211/No)、内包化処理部131は、展開先コンポジットにプロパティP1を追加し(ステップS3213)、ステップS3214へ進む。
また、ステップS3210において、プロパティP1が無い場合(ステップS3210/無)、内包化処理部131は、ステップS3214へ進む。
例えば、
図34の状態(a)において、コンポーネントC−P_C内のプロパティPCのインスタンスがコンポジットP内のプロパティP−Pを参照しているため、
図34の状態(b)において、プロパティP−Cを参照していたコンポーネントC1−C_OのプロパティP−Oのインスタンスの参照先は、プロパティP−Pに変更される。
また、
図34の状態(a)において、コンポーネントC−P_C内のプロパティP−CのインスタンスがコンポジットP内のプロパティP−Pを参照していない場合、
図34の状態(b)において、コンポジットPにプロパティP−Cが追加され、プロパティP−Oのインスタンスの参照先は、引き続き、プロパティP−Cとなる。
内包化処理部131は、展開先コンポジットの定義情報をコンポジット情報記憶部113に保存し、展開処理を終了する(ステップS3214)。
以上により、本発明の第3の実施の形態におけるリファクタリング装置100の動作が完了する。
本発明の第3の実施の形態によれば、リファクタリング対象のコンポジットの上位にコンポジットが存在する場合でも、当該上位コンポジットの定義情報へ影響することなく、リファクタリングを行うことができる。その理由は、内包化処理部131が、リファクタリング対象のコンポジットと同一の定義情報を持つ新しいコンポジットを用いて、当該リファクタリング対象のコンポジットの内包化を行うためである。
また、本発明の第3の実施の形態によれば、コンポーネントの再配置により生じた冗長なコンポジットの階層を削除や、内包化されたコンポジットを内包化前の状態に戻すことができる。その理由は、内包化処理部131が、展開対象のコンポーネントのインプリメント要素であるコンポジットが持つコンポーネントを用いて、当該展開対象のコンポーネントの展開を行うためである。
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
例えば、本発明の実施の形態においては、
図3、
図4のようなコンポジット定義情報を例に、構成、及び、動作を説明したが、コンポーネント要素、サービス要素、リファレンス要素、及び、ワイヤリング要素と同様の要素を用いて定義されるプログラム部品を用いた他の開発システムに適用した場合も、同様の効果が得られる。
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
(付記1)
所定の処理または他のコンポジットのインスタンスの利用を定義するコンポーネント、提供する機能を定義するサービス、利用する機能を定義するリファレンス、及び、コンポーネント、サービス、及び、リファレンス間の機能の提供関係を定義するワイヤリングを要素として含む複数のコンポジットを記憶するコンポジット情報記憶手段と、
前記複数のコンポジットの内の第1のコンポジットを移動先、前記第1のコンポジットに含まれるコンポーネントがインスタンスとして利用する第2のコンポジットを移動元として、前記第2のコンポジットに含まれる対象コンポーネントを移動、または、前記第1のコンポジットを移動元、前記第2のコンポジットを移動先として、前記第1のコンポジットに含まれる対象コンポーネントを移動する再配置処理手段と、
前記移動元コンポジットに前記要素と前記対象コンポーネントとの間のワイヤリングがある場合、前記対象コンポーネントの移動後に、前記第2のコンポジットに、サービスまたはリファレンスを追加し、前記移動元コンポジットに、当該追加したサービスまたはリファレンスと当該要素とを接続するワイヤリングを設定し、前記移動先コンポジットに、当該追加したサービスまたはリファレンスと当該対象コンポーネントとを接続するワイヤリングを設定する補完処理を行う補完処理手段と
を含むリファクタリング装置。
(付記2)
前記補完処理手段は、前記再配置処理手段が、前記第1のコンポジットを移動先、前記第2のコンポジットを移動元として、前記第2のコンポジットに含まれる対象コンポーネントを移動したとき、
前記第2のコンポジットに前記対象コンポーネントのサービスを接続先とするワイヤリングが検出された場合、当該第2のコンポジットに当該検出されたワイヤリングが接続可能なリファレンスを追加し、当該検出されたワイヤリングの接続先を当該追加されたリファレンスに変更し、当該第1のコンポジットに、当該第2のリファレンスを接続元、当該対象コンポーネントのサービスを接続先とするワイヤリングを追加し、
前記第2のコンポジットに、前記対象コンポーネントのリファレンスを接続元とするワイヤリングが検出された場合、当該第2のコンポジットに当該検出されたワイヤリングが接続可能なサービスを追加し、当該検出されたワイヤリングの接続元を当該追加したサービスに変更し、当該第1のコンポジットに、当該追加したサービスを接続先、当該対象コンポーネントのリファレンスを接続元とするワイヤリングを追加する
(付記1)に記載のリファクタリング装置。
(付記3)
前記再配置処理手段は、さらに、前記第1のコンポジットを移動先、前記第2のコンポジットを移動元として、前記第2のコンポジットに含まれる対象サービス、及び、前記第2のコンポジットに含まれる対象リファレンスの少なくとも一方を移動し、
前記補完処理手段は、さらに、前記再配置処理手段が前記対象サービスを移動した場合、前記第2のコンポジットに、当該対象サービスと接続可能なサービスを追加し、当該第2のコンポジット内の当該対象サービスを接続元としていたワイヤリングの接続元を当該追加したサービスに変更し、前記第1のコンポジットに、当該対象サービスを接続元、当該追加したサービスを接続先としたワイヤリングを追加し、
前記再配置処理手段が前記対象リファレンスを移動した場合、前記第2のコンポジットに、当該対象リファレンスと接続可能なリファレンスを追加し、当該第2のコンポジット内の当該対象リファレンスを接続先としていたワイヤリングの接続先を当該追加したリファレンスに変更し、前記第1のコンポジットに、当該追加したリファレンスを接続元、当該対象リファレンスを接続先としたワイヤリングを追加する
(付記2)に記載のリファクタリング装置。
(付記4)
さらに、
前記補完処理手段による前記補完処理の後に、
前記第2のコンポジットに、前記対象コンポーネントのリファレンスと接続されたサービスを接続元、当該第2のコンポジットのリファレンスを接続先とするワイヤリングが検出された場合、当該検出されたワイヤリングを削除し、前記第1のコンポジットに、当該第2のコンポジットのリファレンスを接続元としたワイヤリングと同一の接続先と当該対象コンポーネントのリファレンスを接続元とを有するワイヤリングを追加し、
前記第2のコンポジットに、前記対象コンポーネントのサービスが接続されたリファレンスを接続先、当該第2のコンポジットのサービスを接続元とするワイヤリングが検出された場合、当該検出されたワイヤリングを削除し、前記第1のコンポジットに、当該第2のコンポジットのサービスを接続先としたワイヤリングと同一の接続元と当該対象コンポーネントのサービスを接続先とを有するワイヤリングを追加し、
前記第2のコンポジットに、当該第2のコンポジットのサービスまたはリファレンスと当該第2のコンポジットの他の前記要素とを接続するワイヤリングが無い場合、当該第2のコンポジットのサービスまたはリファレンスを削除し、前記第1のコンポジットから、当該第2のコンポジットのサービスまたはリファレンスと当該第1のコンポジットの前記要素とを接続するワイヤリングを削除する修正処理手段
を含む(付記2)または(付記3)に記載のリファクタリング装置。
(付記5)
さらに、
前記再配置処理手段が、前記第1のコンポジットを移動先、前記第2のコンポジットを移動元として、前記第2のコンポジットに含まれる対象コンポーネントを移動する前に、前記第1のコンポジットと同一のコンポジットである前記第2のコンポジットを生成し、当該第1のコンポジットに含まれるコンポーネントを削除し、当該第1のコンポジットに、当該第2のコンポジットのインスタンスを利用するコンポーネントを設定する内包化処理手段
を含む(付記1)に記載のリファクタリング装置。
(付記6)
前記補完処理手段は、前記再配置処理手段が、前記第1のコンポジットを移動元、前記第2のコンポジットを移動先として、前記第1のコンポジットに含まれる対象コンポーネントを移動したとき、
前記第1のコンポジットに前記対象コンポーネントのサービスを接続先とするワイヤリングが検出された場合、前記第2のコンポジットに当該検出されたワイヤリングが接続可能なサービスを追加し、当該検出されたワイヤリングの接続先を当該追加したサービスに変更し、当該第2のコンポジットに、当該追加したサービスを接続元、当該対象コンポーネントのサービスを接続先とするワイヤリングを追加し、
前記第1のコンポジットに前記対象コンポーネントのリファレンスを接続元とするワイヤリングが検出された場合、前記第2のコンポジットに当該検出されたワイヤリングが接続可能なリファレンスを追加し、当該検出されたワイヤリングの接続元を当該追加したリファレンスに変更し、当該第2のコンポジットに、当該追加したリファレンスを接続先、当該対象コンポーネントのリファレンスを接続元とするワイヤリングを追加する
(付記1)に記載のリファクタリング装置。
(付記7)
さらに、
前記補完処理手段による前記補完処理の後に、
前記第2のコンポジットに、当該第2のコンポジットのサービスと接続された前記第1のコンポジットにおける接続元が同一である他のサービスがある場合、当該第2のコンポジットのサービス、及び、当該第2のコンポジットのサービスと当該第1のコンポジットにおける接続元とを接続するワイヤリングを削除し、当該第2のコンポジットにおける、当該第2のコンポジットのサービスを接続元としていたワイヤリングの接続元を当該他のサービスに変更し、
前記第2のコンポジットに、当該第2のコンポジットのリファレンスと接続された前記第1のコンポジットにおける接続先が同一である他のリファレンスがある場合、当該第2のコンポジットのリファレンス、及び、当該第2のコンポジットのリファレンスと当該第1のコンポジットにおける接続先とを接続するワイヤリングを削除し、当該第2のコンポジットにおける、当該第2のコンポジットのリファレンスを接続先としていたワイヤリングの接続先を当該他のサービスに変更する修正処理手段
を含む(付記6)に記載のリファクタリング装置。
(付記8)
さらに、
前記再配置処理手段が、前記第1のコンポジットを移動元、前記第2のコンポジットを移動先として、前記第1のコンポジットに含まれる対象コンポーネントを移動した後に、前記第1のコンポジットに含まれる前記第2のコンポジットのインスタンスを利用するコンポーネントを削除し、当該第1のコンポジットに、当該第2のコンポジットに含まれるコンポーネントを設定する内包化処理手段
を含む(付記1)に記載のリファクタリング装置。
(付記9)
所定の処理または他のコンポジットのインスタンスの利用を定義するコンポーネント、提供する機能を定義するサービス、利用する機能を定義するリファレンス、及び、コンポーネント、サービス、及び、リファレンス間の機能の提供関係を定義するワイヤリングを要素として含む複数のコンポジットを記憶し、
前記複数のコンポジットの内の第1のコンポジットを移動先、前記第1のコンポジットに含まれるコンポーネントがインスタンスとして利用する第2のコンポジットを移動元として、前記第2のコンポジットに含まれる対象コンポーネントを移動、または、前記第1のコンポジットを移動元、前記第2のコンポジットを移動先として、前記第1のコンポジットに含まれる対象コンポーネントを移動し、
前記移動元コンポジットに前記要素と前記対象コンポーネントとの間のワイヤリングがある場合、前記対象コンポーネントの移動後に、前記第2のコンポジットに、サービスまたはリファレンスを追加し、前記移動元コンポジットに、当該追加したサービスまたはリファレンスと当該要素とを接続するワイヤリングを設定し、前記移動先コンポジットに、当該追加したサービスまたはリファレンスと当該対象コンポーネントとを接続するワイヤリングを設定する補完処理を行う
リファクタリング方法。
(付記10)
コンピュータに、
所定の処理または他のコンポジットのインスタンスの利用を定義するコンポーネント、提供する機能を定義するサービス、利用する機能を定義するリファレンス、及び、コンポーネント、サービス、及び、リファレンス間の機能の提供関係を定義するワイヤリングを要素として含む複数のコンポジットを記憶し、
前記複数のコンポジットの内の第1のコンポジットを移動先、前記第1のコンポジットに含まれるコンポーネントがインスタンスとして利用する第2のコンポジットを移動元として、前記第2のコンポジットに含まれる対象コンポーネントを移動、または、前記第1のコンポジットを移動元、前記第2のコンポジットを移動先として、前記第1のコンポジットに含まれる対象コンポーネントを移動し、
前記移動元コンポジットに前記要素と前記対象コンポーネントとの間のワイヤリングがある場合、前記対象コンポーネントの移動後に、前記第2のコンポジットに、サービスまたはリファレンスを追加し、前記移動元コンポジットに、当該追加したサービスまたはリファレンスと当該要素とを接続するワイヤリングを設定し、前記移動先コンポジットに、当該追加したサービスまたはリファレンスと当該対象コンポーネントとを接続するワイヤリングを設定する補完処理を行う
処理を実行させるプログラムを格納するコンピュータ読み取り可能な記録媒体。
(付記11)
前記複数のコンポジットのそれぞれは、さらに、当該コンポジットに含まれるコンポーネントが利用可能な変数値を定義するプロパティを要素として含み、
前記補完処理手段は、前記再配置処理手段が、前記第1のコンポジットを移動先、前記第2のコンポジットを移動元として、前記第2のコンポジットに含まれる対象コンポーネントを移動したとき、
前記対象コンポーネントのプロパティのインスタンスが、前記第2のコンポジットのプロパティを参照しており、かつ、当該第2のコンポジットのプロパティのインスタンスが、前記第1のコンポジットのプロパティを参照している場合、当該対象コンポーネントのプロパティのインスタンスの参照先を、当該第1のコンポジットのプロパティに変更し、
前記対象コンポーネントのプロパティのインスタンスが、前記第2のコンポジットのプロパティを参照しており、かつ、当該第2のコンポジットのプロパティのインスタンスが、前記第1のコンポジットのプロパティを参照していない場合、当該第1のコンポジットに当該第2のコンポジットのプロパティと同一の型を有するプロパティを追加し、当該対象コンポーネントのプロパティのインスタンス、及び、当該第2のコンポジットのプロパティのインスタンスの参照先を、当該追加した第1のコンポジットのプロパティに変更する
(付記2)に記載のリファクタリング装置。
(付記12)
前記複数のコンポジットのそれぞれは、さらに、当該コンポジットに含まれるコンポーネントが利用可能な変数値を定義するプロパティを要素として含み、
前記再配置処理手段は、さらに、前記第1のコンポジットを移動先、前記第2のコンポジットを移動元として、前記第2のコンポジットに含まれる対象プロパティを移動し、
前記補完処理手段は、さらに、前記再配置処理手段が前記対象プロパティを移動した場合、前記第2のコンポジットに、当該対象プロパティと同一の型を有するプロパティを追加し、当該追加した第2のコンポジットのプロパティのインスタンスの参照先に、当該第1のコンポジットに移動した対象プロパティを設定し、当該第2のコンポジット内の当該対象プロパティを参照先としていたプロパティのインスタンスの参照先を当該追加した第2のコンポジットのプロパティに変更する、
(付記2)または(付記11)に記載のリファクタリング装置。
(付記13)
さらに、
前記補完処理手段による前記補完処理の後に、
前記第2のコンポジットのプロパティが、当該第2のコンポジット内のコンポーネントのプロパティのインスタンスから参照されていない場合、当該第2のコンポジットのプロパティと、当該第2のコンポジットのプロパティのインスタンスの参照先とを削除する修正処理手段
を含む(付記11)または(付記12)に記載のリファクタリング装置。
(付記14)
前記内包化処理手段は、
前記第1のコンポジットと同一のコンポジットである前記第2のコンポジットを生成し、当該第1のコンポジットに含まれるコンポーネントとワイヤリングとを削除し、当該第1のコンポジットに、当該第2のコンポジットのインスタンスを利用するコンポーネントを追加し、当該第1のコンポジットのサービスと当該追加されたコンポーネントの対応するサービスとを接続するワイヤリング、及び、当該第1のコンポジットのリファレンスと当該追加されたコンポーネントの対応するリファレンスとを接続するワイヤリングとを追加する
(付記5)に記載のリファクタリング装置。
(付記15)
前記複数のコンポジットのそれぞれは、さらに、当該コンポジットに含まれるコンポーネントが利用可能な変数値を定義するプロパティを要素として含み、
前記補完処理手段は、前記再配置処理手段が、前記第1のコンポジットを移動元、前記第2のコンポジットを移動先として、前記第1のコンポジットに含まれる対象コンポーネントを移動したとき、
前記対象コンポーネントのプロパティのインスタンスが、前記第1のコンポジットのプロパティを参照している場合、前記第2のコンポジットに当該対象コンポーネントのプロパティと同一の型を有するプロパティを追加し、当該対象コンポーネントのプロパティのインスタンスの参照先を、当該追加した第2のコンポジットのプロパティに変更し、当該追加した第2のコンポジットのプロパティのインスタンスの参照先に当該第1のコンポジットのプロパティを設定する
(付記6)に記載のリファクタリング装置。
(付記16)
さらに、
前記補完処理手段による前記補完処理の後に、
前記第2のコンポジットに、当該第2のコンポジットに追加されたプロパティとインスタンスの参照先が同一である他のプロパティがある場合、当該第2のコンポジットに追加されたプロパティを削除し、前記対象コンポーネントにおける当該第2のコンポジットに追加されたプロパティを参照していたプロパティのインスタンスの参照先を、当該他のプロパティに変更する修正処理手段を含む
(付記15)に記載のリファクタリング装置。
(付記17)
前記内包化処理手段は、
前記第1のコンポジットに含まれる前記第2のコンポジットのインスタンスを利用するコンポーネントを削除し、当該第1のコンポジットに、当該第2のコンポジットに含まれるコンポーネントと当該コンポーネント間を接続するワイヤリングを追加し、
当該第1のコンポジットに当該削除したコンポーネントのサービスを接続先とするワイヤリングがある場合、当該ワイヤリングの接続先を、当該削除したコンポーネントのサービスに対応する、当該第2のコンポジットに含まれるコンポーネントのサービスに変更し、
当該第1のコンポジットに当該削除したコンポーネントのリファレンスを接続元とするワイヤリングがある場合、当該ワイヤリングの接続元を、当該削除したコンポーネントのリファレンスに対応する、当該第2のコンポジットに含まれるコンポーネントのリファレンスに変更する
(付記8)に記載のリファクタリング装置。
この出願は、2011年2月18日に出願された日本出願特願2011−033166を基礎とする優先権を主張し、その開示の全てをここに取り込む。