(57)【特許請求の範囲】
【請求項１】
オブジェクト指向のソフトウェア設計を支援する装置において、
開発対象モデルのクラス定義を示す情報を格納する開発対象モデル格納手段と、
オブジェクト指向ソフトウェアの開発にあたって利用可能な複数のパターンのクラス定義を示すパターン情報と、該複数のパターン間を関連づけるパターン間関連情報とを格納するパターン体系格納手段と、
前記開発対象モデル格納手段およびパターン体系格納手段を参照して、該パターン体系格納手段に格納されているパターンのうちで外部から適用が承認されたパターンに含まれるクラスと同じ名前を持つクラスが、前記開発対象モデルに含まれているか否かを判定し、該開発対象モデルに含まれていないクラスのクラス定義を該開発対象モデルに追加し、該開発対象モデルからソースコードファイルを生成し、該適用が承認されたパターンに関連づけられた、各クラスの操作定義に対応するソースコードのひな型を示すパターンを用いて、ソースコードを該ソースコードファイルに挿入するパターン適用手段とを備えることを特徴とするオブジェクト指向ソフトウェア開発支援装置。
【請求項２】
前記開発対象モデルに適用可能なパターンを外部に提示するパターン体系ナビゲート手段を更に備え、前記パターン体系格納手段が、前記パターン間関連情報として、ソフトウェア開発上の観点と、該観点に対応する選択肢とを格納し、前記パターン体系ナビゲート手段が、該観点と選択肢の情報を前記適用可能なパターンとして外部に提示し、前記パターン適用手段が、外部から指示された選択肢に対応するパターンを前記適用が承認されたパターンとして用いることを特徴とする請求項１記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項３】
前記パターン体系格納手段が前記複数のパターンのパターン情報に対する検索キーを更に格納し、前記パターン適用手段が、外部から入力される検索キーによって検索されたパターンのうちで外部から指示されたパターンを、前記適用が承認されたパターンとして用いることを特徴とする請求項１記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項４】
外部からパターンテンプレートの形式を用いて入力されるパターン定義情報を前記パターン情報に変換して前記パターン体系格納手段に格納するパターン情報定義手段を更に備えることを特徴とする請求項１記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項５】
前記パターン情報定義手段が、検索キーを含むパターン定義情報を前記パターン情報に変換することを特徴とする請求項４記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項６】
外部から入力される情報を前記パターン間関連情報に変換して前記パターン体系格納手段に格納するパターン体系定義手段を更に備えることを特徴とする請求項１記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項７】
前記パターン体系定義手段が、前記入力される情報を、ソフトウェア開発上の観点と、該観点に対応する選択肢とを含むパターン間関連情報に変換することを特徴とする請求項６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項８】
前記パターン体系格納手段に格納されている複数のパターンのパターン情報とパターン間関連情報とに対応するパターン体系を表示するパターン体系表示手段と、該パターン体系格納手段に格納されているパターン情報を表示するパターン情報表示手段とを更に備えることを特徴とする請求項１記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項９】
前記パターン体系格納手段に格納されている複数のパターンのパターン情報とパターン間関連情報とに対応するパターン体系を、前記開発対象モデルに適用可能なパターンとして外部に提示するパターン体系ナビゲート手段を更に備え、前記パターン適用手段が、該提示されたパターンのうちで外部から指示されたパターンを前記適用が承認されたパターンとして用いることを特徴とする請求項１記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項１０】
前記複数のパターンが、開発対象モデルに対応する分析パターン、設計パターン、および分析・設計パターンに含まれるクラスの操作定義に対応するソースコードのひな型としての実装パターンであり、前記パターン体系格納手段が、前記パターン間関連情報として、分析・設計パターンと実装パターンとの関連情報をも格納し、前記パターン適用手段が、該分析・設計パターンを前記適用が承認されたパターンとして用いて前記ソースコードファイルを生成し、該分析・設計パターンに関連づけられた実装パターンを用いて、ソースコードを該ソースコードファイルに挿入することを特徴とする請求項１記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項１１】
外部から実装パターンテンプレートの形式を用いて入力される実装パターン定義情報を前記パターン情報に変換して前記パターン体系格納手段に格納するパターン情報定義手段を更に備えることを特徴とする請求項１０記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項１２】
外部から入力される情報を前記分析・設計パターンと実装パターンとの間のパターン間関連情報に変換して前記パターン体系格納手段に格納するパターン体系定義手段を更に備えることを特徴とする請求項１０記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項１３】
前記パターン体系格納手段に格納されている複数のパターンのパターン情報とパターン間関連情報とに対応するパターン体系を表示するパターン体系表示手段と、該パターン体系格納手段に格納されている実装パターンのパターン情報を表示する実装パターン情報表示手段とを更に備えることを特徴とする請求項１０記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項１４】
前記適用が承認されたパターンとしてすでに用いられたことのあるパターンの適用履歴情報を保持するパターン適用履歴情報格納手段と、該パターン適用履歴情報格納手段に保持されている適用履歴情報を参照して、個々のパターンの適用回数を求めるパターン適用履歴解釈手段とを更に備えることを特徴とする請求項１記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項１５】
前記適用が承認されたパターンとしてすでに用いられたことのあるパターンの適用履歴情報を保持するパターン適用履歴情報格納手段を更に備え、前記パターン適用手段が該パターン適用履歴情報格納手段に保持されている適用履歴情報を参照して、該すでに用いられたことのあるパターンと同じパターンに含まれる展開ターゲットを該適用履歴情報に含まれるクラスに置き換えてから、該同じパターンに含まれるクラスと同じ名前を持つクラスが前記開発対象モデルに含まれているか否かを判定することを特徴とする請求項１記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項１６】
外部から与えられるパターン定義情報を前記パターン情報に変換して前記パターン体系格納手段に格納するパターン情報定義手段を更に備えることを特徴とする請求項１記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項１７】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですでに定義済みのクラスが持つ属性のデータを元にして、新たな属性を該開発対象モデルに追加するためのパターン情報に変換し、前記パターン適用手段が、該パターン情報に含まれる展開ターゲットを該属性のデータに置き換えて新たな属性を生成し、該開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項１８】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですでに定義済みのクラスが持つ属性のデータを元にして、新たなメソッドを該開発対象モデルに追加するためのパターン情報に変換し、前記パターン適用手段が、該パターン情報に含まれる展開ターゲットを該属性のデータに置き換えて新たなメソッドを生成し、該開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項１９】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですでに定義済みのクラスが持つ属性のデータを元にして、新たなリンクを該開発対象モデルに追加するこめのパターン情報に変換し、前記パターン適用手段が、該パターン情報に含まれる展開ターゲットを該属性のデータに置き換えて新たなリンクを生成し、該開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項２０】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですでに定義済みのクラスが持つ属性のデータを元にして、新たなクラスを該開発対象モデルに追加するためのパターン情報に変換し、前記パターン適用手段が、該パターン情報に含まれる展開ターゲットを該属性のデータに置き換えて新たなクラスを生成し、該開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項２１】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですでに定義済みのクラスが持つリンクのデータを元にして、新たなリンクを該開発対象モデルに追加するためのパターン情報に変換し、前記パターン適用手段が、該パターン情報に含まれる展開ターゲットを該リンクのデータに置き換えて新たなリンクを生成し、該開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項２２】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですでに定義済みのクラスが持つリンクのデータを元にして、新たな属性を該開発対象モデルに追加するためのパターン情報に変換し、前記パターン適用手段が、該パターン情報に含まれる展開ターゲットを該リンクのデータに置き換えて新たな属性を生成し、該開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項２３】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですでに定義済みのクラスが持つリンクのデータを元にして、新たなメソッドを該開発対象モデルに追加するためのパターン情報に変換し、前記パターン適用手段が、該パターン情報に含まれる展開ターゲットを該リンクのデータに置き換えて新たなメソッドを生成し、該開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項２４】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですでに定義済みのクラスが持つリンクのデータを元にして、新たなクラスを該開発対象モデルに追加するためのパターン情報に変換し、前記パターン適用手段が、該パターン情報に含まれる展開ターゲットを該リンクのデータに置き換えて新たなクラスを生成し、該開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項２５】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですでに定義済みのクラスが持つメソッドのデータを元にして、新たなメソッドを該開発対象モデルに追加するためのパターン情報に変換し、前記パターン適用手段が、該パターン情報に含まれる展開ターゲットを該メソッドのデータに置き換えて新たなメソッドを生成し、該開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項２６】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですでに定義済みのクラスが持つメソッドのデータを元にして、新たな属性を該開発対象モデルに追加するためのパターン情報に変換し、前記パターン適用手段が、該パターン情報に含まれる展開ターゲットを該メソッドのデータに置き換えて新たな属性を生成し、該開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項２７】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですてに定義済みのクラスが持つメソッドのデータを元にして、新たなリンクを該開発対象モデルに追加するためのパターン情報に変換し、前記パターン適用手段が、該パターン情報に含まれる展開ターゲットを該メソッドのデータに置き換えて新たなリンクを生成し、該開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項２８】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですでに定義済みのクラスが持つメソッドのデータを元にして、新たなクラスを該開発対象モデルに追加するためのパターン情報に変換し、前記パターン適用手段が、該パターン情報に含まれる展開ターゲットを該メソッドのデータに置き換えて新たなクラスを生成し、該開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項２９】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですでに定義済みのクラスのデータを元にして、新たなクラスを該開発対象モデルに追加するためのパターン情報に変換し、前記パターン適用手段が、該パターン情報に含まれる展開ターゲットを該クラスのデータに置き換えて新たなクラスを生成し、該開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項３０】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですでに定義済みのクラスのデータを元にして、新たな属性を該開発対象モデルに追加するためのパターン情報に変換し、前記パターン適用手段が、該パターン情報に含まれる展開ターゲットを該クラスのデータに置き換えて新たな属性を生成し、該開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項３１】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですでに定義済みのクラスのデータを元にして、新たなリンクを該開発対象モデルに追加するためのパターン情報に変換し、前記パターン適用手段が、該パターン情報に含まれる展開ターゲットを該クラスのデータに置き換えて新たなリンクを生成し、該開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項３２】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですでに定義済みのクラスのデータを元にして、新たなメソッドを該開発対象モデルに追加するためのパターン情報に変換し、前記パターン適用手段が、該パターン情報に含まれる展開ターゲットを該クラスのデータに置き換えて新たなメソッドを生成し、該開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項３３】
前記パターン情報定義手段が、前記パターン定義情報を、前記新たに追加される属性、メソッド、リンク、またはクラスに関するデータとして、前記すでに定義済みのクラス、あるいは該クラスが持つ属性、メソッド、またはリンクに関するデータを使用することを指定する、パターン情報に変換することを特徴とする請求項１７，１８，１９，２０，２１，２２，２３，２４，２５，２６，２７，２８，２９，３０，３１、または３２記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項３４】
前記パターン情報定義手段が、前記パターン定義情報を、前記すでに定義済みのクラス、あるいは該クラスが持つ属性、メソッド、またはリンクに関するデータの文字列を指定された加工方法で加工して、前記新たに追加される属性、メソッド、リンク、またはクラスに関するデータの文字列を生成することを指定する、パターン情報に変換することを特徴とする請求項３３記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項３５】
前記パターン情報定義手段が、前記パターン定義情報を、前記すでに定義済みのクラス、あるいは該クラスが持つ属性、メソッド、またはリンクのうちで、指定された条件を満たすもののデータを元にして、前記新たな属性、リンク、メソッド、またはクラスを追加するためのパターン情報に変換することを特徴とする請求項１７，１８，１９，２０，２１，２２，２３，２４，２５，２６，２７，２８，２９，３０，３１、または３２記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項３６】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですでに定義されているクラス、あるいは該クラスが持つ属性、メソッド、またはリンクの一部が外部から指定されるべきことを示すパターン情報に変換し、前記パターン適用手段が、前記展開ターゲットを外部から指定されたクラス、あるいは該クラスが持つ属性、メソッド、またはリンクに置き換えることを特徴とする請求項１６，１７，１８，１９，２０，２１，２２，２３，２４，２５，２６，２７，２８，２９，３０，３１、または３２記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項３７】
あらかじめ独自に規定されたパターン解釈ルールを保持し、該パターン解釈ルールを用いてパターン情報の解釈を行う外部パターン展開手段を更に備え、前記パターン情報定義手段が、前記パターン定義情報を、該パターン解釈ルールを用いて解釈すべきことが指定されている部分を含むパターン情報に変換し、前記パターン適用手段が、該外部パターン展開手段の解釈結果を使用して、新たな属性、リンク、メソッド、またはクラスを前記開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項３８】
前記パターン情報定義手段が、前記パターン定義情報を、外部から入力される文字列を前記開発対象モデルに組み込むべきことを指定する部分を含むパターン情報に変換し、前記パターン適用手段が、外部から入力される文字列が示す新たな属性、リンク、メソッド、またはクラスを前記開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項３９】
前記パターン情報定義手段が、前記パターン定義情報を、前記開発対象モデル内ですでに定義されているオブジェクトのデータを元にして、該オブジェクトに関する新たなデータを該開発対象モデルに追加するためのパターン情報に変換し、前記パターン適用手段が、該パターン情報に含まれる展開ターゲットを該オブジェクトのデータに置き換えて新たなオブジェクトのデータを生成し、該開発対象モデルに追加することを特徴とする請求項１６記載のオブジェクト指向ソフトウェア開発支援装置。
【請求項４０】
オブジェクト指向のソフトウェア設計を支援する方法において、
パターン適用手段が、開発対象モデルのクラス定義を示す情報を格納する開発対象モデル格納手段と、オブジェクト指向ソフトウェアの開発にあたって利用可能な複数のパターンのクラス定義を示すパターン情報、および、該複数のパターン間を関連づけるパターン間関連情報を格納するパターン体系格納手段とを参照し、
前記パターン適用手段が、前記パターン体系格納手段に格納されているパターンのうちで外部から適用が承認されたパターンに含まれるクラスと同じ名前を持つクラスが、前記開発対象モデルに含まれているか否かを判定し、
前記パターン適用手段が、前記開発対象モデルに含まれていないクラスのクラス定義を該開発対象モデルに追加し、
前記パターン適用手段が、前記開発対象モデルからソースコードファイルを生成し、
前記パターン適用手段が、前記適用が承認されたパターンに関連づけられた、各クラスの操作定義に対応するソースコードのひな型を示すパターンを用いて、ソースコードを該ソースコードファイルに挿入する
ことを特徴とするオブジェクト指向ソフトウェア開発支援方法。
【請求項４１】
パターン情報定義手段が、外部から与えられるパターン定義情報を前記パターン情報に変換して前記パターン体系格納手段に格納することを特徴とする請求項４０記載のオブジェクト指向ソフトウェア開発支援方法。
【請求項４２】
オブジェクト指向ソフトウェア開発支援装置において使用される記憶媒体であって、
開発対象モデルのクラス定義を示す情報を格納する開発対象モデル格納手段と、オブジェクト指向ソフトウェアの開発にあたって利用可能な複数のパターンのクラス定義を示すパターン情報、および、該複数のパターン間を関連づけるパターン間関連情報を格納するパターン体系格納手段とを参照するステップと、
前記パターン体系格納手段に格納されているパターンのうちで外部から適用が承認されたパターンに含まれるクラスと同じ名前を持つクラスが、前記開発対象モデルに含まれているか否かを判定するステップと、
前記開発対象モデルに含まれていないクラスのクラス定義を該開発対象モデルに追加するステップと、
前記開発対象モデルからソースコードファイルを生成するステップと、
前記適用が承認されたパターンに関連づけられた、各クラスの操作定義に対応するソースコードのひな型を示すパターンを用いて、ソースコードを該ソースコードファイルに挿入するステップとを計算機に実行させるプログラムを格納した計算機読出し可能記憶媒体。
【請求項４３】
前記プログラムは、外部から与えられるパターン定義情報を前記パターン情報に変換して前記パターン体系格納手段に格納するステップをさらに前記計算機に実行させることを特徴とする請求項４２記載の計算機読出し可能記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はオブジェクト指向ソフトウェア開発支援技術に係り、更に詳しくはオブジェクト指向モデルの動作と構造を定義するパターン、例えば分析パターン、設計パターン、および実装パターンを体系的に定義し、それらのパターンを開発対象モデルに適用することによってモデルの自動的な詳細化を行うと共に、そのモデルに適合するソースコードの自動生成を行うオブジェクト指向ソフトウェア開発支援装置に関する。
【０００２】
【従来の技術】
オブジェクト指向ソフトウェア技術とは、現実世界のもの（オブジェクト）を構成単位としてソフトウェアを開発しようとする技術であり、近年多くのオブジェクト指向分析・設計手法が提案されている。
【０００３】
オブジェクト指向分析・設計手法では、分析や設計で記述すべき仕様書の作成手順が定められ、またこれらの仕様書を作成するために仕様書作成作業を支援するためのソフトウェア分析・設計支援装置が用いられている。
【０００４】
これらのソフトウェア分析・設計支援装置では、例えば良い設計をするために過去に作成された設計のノウハウなどをパターン化し、再利用可能な形式でまとめた設計パターンが利用されることがある。このパターンは開発プロジェクト内でノウハウを共有するためにも用いられいる。
【０００５】
このようなパターンとして、設計時にはある問題を解決するために構成された複数のオブジェクトの構造、例えばクラス群とそのクラス群の振舞を記述した設計パターンがあり、実装時にはソースコードのコーディングノウハウとしての実装パターンがある。また同様に分析時には、分析モデルに適用するための分析パターンがある。開発者はパターンに従ってソフトウェアのモデルおよびプログラムを開発することによって、開発ノウハウを再利用でき、ソフトウェアの生産性が向上する。
【０００６】
【発明が解決しようとする課題】
このような分析パターンや設計パターンについて、近年それらをまとめた書籍も出版されている（例えばＥ．Ｇamma他著「オブジェクト指向における再利用のためのデザインパターン」ソフトバンク）。しかしながら、それらのパターンを利用する方法としては、具体的な開発対象モデルに対して独立した分析パターンや設計パターンを個々に適用して仕様書を作成するという程度に留まっていた。また書籍などで紹介されている既存のパターンには様々なものがあるため、それらを理解し、開発対象モデルに適切なパターンを探し出し、開発対象のアプリケーションへの使い方を判断して、実際に適用するという一連の作業が大変困難であるという問題点があった。更にたとえパターンを理解したとしても、実際に開発対象アプリケーションに適用できるパターンの割合が低いという問題点もあった。
【０００７】
従来のパターン適用を支援する装置には、パターンを適用して仕様書を作成する装置（特開平９−２３７１８０）と、パターンがモデルに対して正しく適用されているかチェックする装置（特開平９−１９８２４２）があった。しかし両者ともパターンの構成要素と開発者が設計するモデルの構成要素の対応をパターン適用時にユーザが指定するものであり、パターン適用作業の効率を大きく改善するものではなかった。
【０００８】
またパターンを自動適用するための技術としてマクロ展開によるプログラム自動生成があるが、従来の方法では（特開平１−１９１２３３，特開昭６１−７２３３８）、マクロ（変数）展開を行うためにマクロと置換える（展開する）値を別途指定する必要があった。
【０００９】
本発明は、第１にパターンを体系的に登録して、その体系に基づいてパターンを適用することによって、パターンを適切、かつ効率的に再利用可能とし、ソフトウェアの開発支援をより効率的にすることを目的とする。第２に既存のパターンだけでなく、開発者が自らのアプリケーションを対象に抽出されるパターンを新たに定義して登録することによって、開発対象モデルに適用可能なパターンの割合を向上させることを目的とする。第３にパターンを適用して仕様書を作成するだけでなく、仕様書に整合するソースコードの生成も自動的に行うことを目的とする。第４にオブジェクト指向の多様なパターンを簡単に定義して開発者の望むモデルやプログラムを自動生成することを目的とする。第５にパターン自身の内部に展開のためのデータの所在を指定して開発者による指定の必要性を減らし、ソフトウェア自動生成を効率化することを目的とする。
【００１０】
【課題を解決するための手段】
図１は本発明の原理構成ブロック図である。同図は、オブジェクト指向のソフトウェア設計を支援する、オブジェクト指向ソフトウェア開発支援装置１の構成ブロック図である。
【００１１】
図１においてパターン体系格納手段２は、例えばパターン体系格納部であり、オブジェクト指向ソフトウェアの開発にあたって、利用可能な複数のパターンのパターン情報３と、その複数のパターンのうちで開発時に前後関係があるパターンの間を関連づけるパターン間関連情報４とを格納するものである。
【００１２】
またパターン適用手段５は、パターン体系格納手段２に格納されているパターンのうちで、外部、例えばユーザによって適用が承認されたパターンを開発対象モデルに適用して、そのモデルを詳細化し、そのモデルに対応するソフトウェアの開発を支援するものである。
【００１３】
本発明の実施の形態においては、パターン体系格納手段２には、パターン間関連情報４として、ソフトウェア開発上の観点と、その観点に対応する選択肢とを格納することができ、パターン適用手段５はその観点と選択肢とに対応する、例えばユーザからの指示に応じて自動的にパターンを選択し、その選択されたパターンを開発対象モデルに適用することもできる。
【００１４】
また本発明の実施の形態においては、パターン体系格納手段２が複数の各パターン情報に対する検索キーを更に格納することもでき、パターン適用手段５は外部から入力される検索キーによって検索されるパターンのうちで、外部から指示されたパターンを開発対象モデルに適用することもできる。
【００１５】
本発明の実施の形態においては更にパターン情報定義手段とパターン体系定義手段を備えることもでき、このパターン情報定義手段は外部からパターンテンプレートの形式を用いて入力されるパターン定義情報に従ってパターン情報を定義することもでき、またパターン体系定義手段は外部から入力される情報に従って前後関係があるパターンの間を関連づけるパターン間関連情報を定義することもできる。
【００１６】
本発明の実施の形態においては、ソフトウェア開発支援装置は更に、パターン体系格納手段２に格納されている複数のパターン情報３とパターン間関連情報４とに対応するパターン体系を１つのまとまった形式で表示するパターン体系表示手段と、パターン情報３をそのパターン情報に対応するテンプレートの形式に従って表示するパターン情報表示手段とを備えることもできる。
【００１７】
また本発明の実施の形態においては、パターン体系格納手段２に格納されている複数のパターン情報３とパターン間関連情報４とに対応するパターン体系を解釈して、開発対象モデルに適用可能なパターンを、例えばユーザに提示するパターン体系ナビゲート手段を更に備え、パターン適用手段５が提示されたパターンのうちでユーザによって適用が承認されたパターンを開発対象モデルに適用することもできる。
【００１８】
例えばこの場合、前述の複数のパターンが開発対象モデルに対応する分析パターン、設計パターン、および分析・設計パターンに含まれるクラスの操作定義に対応するソースコードのひな型としての実装パターンであって、パターン体系格納手段２がパターン間関連情報４として、分析・設計パターンと実装パターンとの関連情報を格納することもでき、パターン適用手段５が例えばユーザによって選択された分析・設計パターンを開発対象モデルに適用すると共に、その開発対象モデルのうちで分析・設計パターンが適用された部分に対応するソースコードを、実装パターンに基づいて自動生成することもできる。
【００１９】
また本発明の実施の形態においては、オブジェクト指向ソフトウェア開発支援装置が、パターン適用手段５によって開発対象モデルへの適用が行われたパターンに対する適用履歴情報を保持するパターン適用履歴情報格納手段と、保持されている適用履歴情報を解釈して個々のパターンと、複数のパターン情報とパターン間関連情報に対応するパターン体系との再利用度、例えば適用回数を求めるパターン適用履歴解釈手段とを更に備えることもできる。
【００２０】
またこの場合、パターン適用手段５が、パターン適用履歴情報格納手段に保持されている適用履歴情報を解釈して、パターン適用時に外部から入力されるべきデータをあらかじめ設定して、パターン適用処理の効率を向上させることもできる。
【００２１】
また本発明のオブジェクト指向ソフトウェア開発支援装置においてはパターン情報定義手段と、パターン格納手段と、パターン適用手段とを備えることも可能である。パターン情報定義手段は、外部から与えられるパターン定義情報に従って、オブジェクト指向ソフトウェアの開発にあたって利用可能なパターンのパターン情報を定義して、パターン情報を格納するパターン格納手段に与えるものであり、パターン適用手段はパターン格納手段に格納されているパターン情報を開発対象モデルに適用して、該モデルを詳細化し、そのモデルに対応するソフトウェアの開発を支援するものである。
【００２２】
この場合、パターン情報定義手段は、開発対象モデル内ですでに定義されているクラスが持つ属性のデータを元にして新たな属性、メソッド、リンク、またはクラスを追加するためのパターン情報を定義し、パターン適用手段がそのパターン情報を開発対象モデルに適用して新たな属性、メソッド、リンク、またはクラスを追加することができる。
【００２３】
またパターン情報定義手段は、開発対象モデル内ですでに定義されているクラスが持つリンクのデータを元にして、新たなリンク、属性、メソッド、またはクラスを追加するためのパターン情報を定義し、パターン適用手段がそのパターン情報を開発対象モデルに適用して、新たなリンク、属性、メソッド、またはクラスを追加することができる。
【００２４】
あるいはパターン情報定義手段は、開発対象モデル内ですでに定義されているクラスが持つメソッドのデータを元にして、新たなメソッド、属性、リンク、またはクラスを追加するためのパターン情報を定義し、パターン適用手段がそのパターン情報を開発対象モデルに適用してメソッド、属性、リンク、またはクラスを追加することもできる。
【００２５】
更にパターン情報定義手段は、開発対象モデル内ですでに定義されているクラスのデータを元にして、新たなクラス、属性、リンク、またはメソッドを追加するためのパターン情報を定義し、パターン適用手段がそのパターン情報を開発対象モデルに適用して、新たなクラス、属性、リンク、またはメソッドを追加することもできる。
【００２６】
また本発明の実施形態においては、パターン情報定義手段が、追加される属性、メソッド、リンク、またはクラスに関するデータとして、すでに定義されているクラス、あるいはそのクラスが持つ属性、メソッド、またはリンクに関するデータを使用してパターン情報を定義することも、また追加される属性、メソッド、リンク、またはクラスに関するデータを表現する文字例を、指定された加工方法を用いて表現して、パターン情報を定義することも、また定義されているクラス、あるいはそのクラスが持つ属性、メソッド、またはリンクのうちで、指定された条件を満たすもののデータを元にして、新たな属性、リンク、メソッド、またはクラスを追加するためのパターン情報を定義することもできる。
【００２７】
更に本発明の実施形態においては、パターン情報定義手段が、開発対象モデル内ですでに定義されているクラス、あるいはそのクラスが持つ属性、メソッド、またはリンクの一部が外部、例えばユーザによって指定されるべきことを示すデータを含んでパターン情報を定義し、パターン適用手段がそのクラス、あるいはそのクラスが持つ属性、メソッド、またはリンクのユーザによる指定を求め、その指定の結果に応じて、そのパターン情報を開発対象モデルに適用することもできる。
【００２８】
本発明のオブジェクト指向ソフトウェア開発支援装置は、その実施形態として外部パターン展開手段を更に備えることもできる。外部パターン展開手段は、例えばユーザによって独自に規定されたパターン解釈ルールを保持し、そのパターン解釈ルールを用いてパターン情報の解釈を行うものである。
【００２９】
この場合、パターン情報定義手段は、そのパターン解釈ルールを用いて解釈すべきことが指定されている部分を含んでパターン情報を定義し、パターン適用手段が、そのパターン情報の適用にあたって、外部パターン展開手段の解釈結果を使用して、パターンを適用することになる。
【００３０】
更に本発明のオブジェクト指向ソフトウェア開発支援装置では、その実施形態として、パターン情報定義手段が、パターン適用手段によるパターンの適用中に外部、例えばユーザから入力される文字列を開発対象モデルに組み込むべきことを指定する部分を含んでパターン情報を定義し、パターン適用手段が、そのパターン情報の適用にあたって、外部から入力される文字列を開発対象モデルに組み込んで、パターンを適用することも可能である。
本発明の別のオブジェクト指向ソフトウェア開発支援装置は、開発対象モデル格納手段、パターン体系格納手段２、およびパターン適用手段５を備える。開発対象モデル格納手段は、開発対象モデルのクラス定義を示す情報を格納する。パターン体系格納手段２は、オブジェクト指向ソフトウェアの開発にあたって利用可能な複数のパターンのクラス定義を示すパターン情報３と、その複数のパターン間を関連づけるパターン間関連情報４とを格納する。パターン適用手段５は、開発対象モデル格納手段およびパターン体系格納手段２を参照して、パターン体系格納手段２に格納されているパターンのうちで外部から適用が承認されたパターンに含まれるクラスと同じ名前を持つクラスが、開発対象モデルに含まれているか否かを判定し、開発対象モデルに含まれていないクラスのクラス定義をその開発対象モデルに追加し、その開発対象モデルからソースコードファイルを生成し、適用が承認されたパターンに関連づけられた、各クラスの操作定義に対応するソースコードのひな型を示すパターンを用いて、ソースコードをそのソースコードファイルに挿入する。
【００３１】
本発明のソフトウェア設計支援方法においては、オブジェクト指向ソフトウェアの開発にあたって利用可能な複数のパターンのパターン情報と、その複数のパターンのうちで開発時に前後関係があるパターンの間を関連づけるパターン間関連情報とを格納し、
該格納されているパターンのうちで外部、例えばユーザにって適用が承認されたパターンを開発対象モデルに適用して、そのモデルを詳細化し、そのモデルに対応するソフトウェアの開発を支援する方法が用いられる。
【００３２】
更に本発明のオブジェクト指向ソフトウェア開発支援装置において使用される記憶媒体として、オブジェクト指向ソフトウェアの開発にあたって利用可能な複数のパターンのパターン情報と、その複数のパターンのうちで開発時に前後関係があるパターンの間を関連づけるパターン間関連情報とを格納させる機能と、格納されているパターンのうちで例えばユーザによって適用が承認されたパターンを開発対象モデルに適用させて、そのモデルを詳細化させ、そのモデルに対応するソフトウェアの開発を支援させる機能とを備えるプログラムを格納した計算機読出し可能記憶媒体を用いることができる。
【００３３】
以上のように本発明によれば、例えば開発対象モデルに適合する分析・設計パターンと、その分析・設計パターンに関連する実装パターンとを体系的に開発対象モデルに適用することによって、そのモデルに対応するソフトウェアの開発を効率的に支援することが可能となる。
【００３４】
【発明の実施の形態】
図２は本発明のオブジェクト指向ソフトウェア開発支援装置の基本構成ブロック図である。同図において開発支援装置はパターン体系格納部１１、パターン体系ナビゲート部１２、パターン適用部１３、パターン情報定義部１４、パターン体系定義部１５を基本的な構成要素としている。
【００３５】
パターン体系格納部１１は、例えば分析パターンや設計パターンなどの各種のパターンを体系的に整理し、各パターンのパターン情報１６と、パターンとパターンの間のパターン間関連情報１７とを保持するものである。
【００３６】
パターン体系ナビゲート部１２は、パターン体系格納部１１に格納されているパターン情報１６とパターン間関連情報１７とに対応するパターン体系を解釈し、開発対象モデルにふさわしいパターンを、例えば開発担当者としてのユーザに提示するものである。
【００３７】
パターン適用部１３は、例えばパターン体系ナビゲート部１２によって起動され、パターン体系格納部１１に格納されているパターン情報１６と、パターン間関連情報１７とを開発対象モデルに適用してモデルを詳細化すると共に、適用されたパターンに適合するソースコードを自動生成するものであり、その作用は開発対象モデル１８とソースコード１９に、パターンを適用することに伴う変更を加えることによって行われる。
【００３８】
パターン情報定義部１４は、パターン体系格納部１１に格納されるべきパターン情報１６を定義するものであり、またパターン体系定義部１５はパターン体系格納部１１に格納されるパターン間関連情報１７を定義することによってパターン体系を定義するものである。
【００３９】
図３は本発明におけるオブジェクト指向ソフトウェア開発支援装置の第１の実施形態の構成ブロック図である。同図は図２と同様の構成を持っているが、パターン体系格納部１１からパターン体系定義部１５までの、より詳細な構成が示されている。
【００４０】
まずパターン体系格納部１１に格納されているパターン情報１６は、例えばＨＴＭＬ（ハイパーテキスト  マークアップ  ランゲージ）形式で記述されており、またＣＡＳＥ（コンピュータ  エイデッド  ソフトウェア  エンジニアリング）ツールが利用できる形式のデータとなっている。またパターン間関連情報１７は、後述するパターン体系の構成子、例えばパターン、観点、および選択肢に関連する情報が、例えばＨＴＭＬ形式で格納されている。
【００４１】
パターン体系ナビゲート部１２は、必要に応じてパターン体系全体、すなわちパターンとパターン間関連情報を表示するパターン／パターン関連表示部２１、および例えば後述するキーワードを用いてパターンを検索するパターン検索部２２を備えている。パターン／パターン関連表示部２１およびパターン検索部２２としては、ＷＷＷのクライアントソフト、例えばネットスケープやインターネットエクスプローラなどがパターン体系の表示や、パターンの検索に使用される。
【００４２】
パターン適用部１３は、実装パターン挿入部２６、分析・設計パターン適用部２７、およびオブジェクト指向ＣＡＳＥ２８を備えている。分析・設計パターン適用部２７は、オブジェクト指向ＣＡＳＥ２８を起動して、パターン体系格納部１１に格納されているパターン情報１６、およびパターン間関連情報１７を参照させ、開発対象モデル１８に対する編集、および追加を行わせると共に、適用された分析・設計パターンに含まれるオブジェクトのクラスの操作定義に対応するソースコードのひな型としての実装パターンを用いて、後述する展開済み操作本体ソースコード２９を作成し、実装パターン挿入部２６がこのソースコード２９を開発対象モデル１８に対応するソースコード１９に追加することによって、ソースコードの自動生成が行われる。
【００４３】
パターン情報定義部１４は、パターン情報のうちのパターン文書を定義するパターン文書定義部２３、パターン情報のうちで図面を入力するための作図エディタを有するオブジェクト指向ＣＡＳＥ２４を備えている。またパターン体系定義部１５は、パターン・観点・選択肢間関連定義部２５を備えている。
【００４４】
図４は本発明の第１の実施形態におけるパターン体系の定義と、定義されたパターンの適用方法の説明図である。同図においてパターン体系の定義（登録）は全体の責任者としての開発責任者によって行われ、具体的な開発モデルでのパターンの適用が各モデルの開発者によって行われるものとする。
【００４５】
図４において、▲１▼でパターンの登録として、開発責任者によってパターン体系定義部１５を用いてパターン体系の定義が行われる。すなわち開発責任者がパターン体系定義者として、例えば質問・想定変更方式情報編集装置を用いて質問・想定変更方式の情報を入力する。これによってパターン体系定義部１５によって、例えばある１つのプロジェクト、すなわちＡプロジェクト向けのパターン体系１とパターン体系２の定義が行われる。ここでパターン体系１は例えばデータベースアクセス用のものであり、パターン体系２はクライアントとアプリケーションサーバとの間の通信用のものである。定義されたパターン体系は、開発を進める上でプロジェクト全体が守るべき規約として運用される。
【００４６】
それぞれの開発者は▲２▼で定義されたパターン体系を参照して、開発対象モデルに対する分析、設計、実装の面で守るべきモデルの構造と振舞の定義、すなわち規約を確認し、その定義を自分がＣＡＳＥを用いて編集している開発対象モデルに反映する。一般的に分析パターンは文書として確認され、クラスとそれらの間のメッセージのやり取りが開発対象モデル向けに解釈された上で、開発者によってモデルに追加される。
【００４７】
各開発者は▲３▼で開発対象モデルにパターンを適用し、モデルを規約に沿って自動更新（修正）する。設計モデルには設計パターンを当てはめるのが一般的である。設計パターンが適用されると、その設計パターンに関連づけられた実装パターンに基づいて、自動的に開発アプリ向けに構成されたソースコード、すなわち図３で説明した展開済み操作本体ソースコード２９がパターン適用部１３によって作成される。
【００４８】
各開発者によって▲４▼で、設計モデルに基づいてＣＡＳＥツールのソースコード自動生成機能を使用して、クラスの仕様部に対応するソースコード（Ｃ＋＋であればＡ.hpp, Ｂ.hpp）が生成される。次に図３の実装パターン挿入部２６が起動され、適用対象となるソースコード、例えば図３のソースコード１９が指定されると、開発モデルにあったソースコードとして展開済み操作本体ソースコード２９が適切な場所に自動的に挿入される。なおここで操作本体という用語はＣ＋＋をソフトウェア言語の具体例として発明の実施形態を説明するために使用されている。Ｃ＋＋では操作定義が操作仕様（**.hppに書く）と操作本体（**.cppに書く）とに分けて書かれる。
【００４９】
図５は本発明の第１の実施形態における、パターン体系の定義から開発の終了までの、ソフトウェア開発処理全体のフローチャートである。同図において処理が開始されると、まずステップＳ１とＳ２でパターン体系定義部１５とパターン情報定義部１４とが同時に起動され、ステップＳ３でパターン体系定義部１５による処理、ステップＳ４でパターン情報定義部１４による処理が並行して実行され、これらの処理が終了するとステップＳ５でパターン体系格納部１１にパターン情報１６とパターン間関連情報１７が格納され、ステップＳ６でパターン体系の定義が終了したか否かが判定され、終了していない場合にはステップＳ１，Ｓ２以降の処理が繰り返される。
【００５０】
ステップＳ６でパターン体系の定義が終了したと判定されると、ステップＳ７でそのパターン体系が各開発者に配布、公開され、ステップＳ８でパターン体系ナビゲート部１２が起動され、ステップＳ９でパターン体系ナビゲート部１２による処理が実行され、ステップＳ１０でパターン適用部１３による処理が実行され、ステップＳ１１で開発が終了したか否かが判定され、終了していない場合には、ステップＳ８以降の処理が繰り返され、開発が終了したと判定された時点で全ての処理を終了する。
【００５１】
図６は定義されたパターン体系の例である。同図においてパターン体系は、パターンを表す四角形、ソフトウェア開発上の観点、およびその観点に関連する選択肢としてのケースを矢印で結んだものとなっている。
【００５２】
図６において左側は１つのドメインオブジェクトを単独で更新する場合、例えば受注明細伝票の単一更新の場合のパターン体系であり、右側は複数のドメインオブジェクトの更新、例えば品目の大量順次更新の場合のパターン体系の例である。左側のパターン体系では、分析パターンの識別子（ＩＤ）がＡ２の分析パターンからパターン体系が始まり、更新するドメインオブジェクトの数についての観点からケース、すなわち選択肢が１つのドメインオブジェクトを単独で更新する場合を対象として、Ｄ５の設計パターンとＩ５の実装パターンとが適用される形式の体系となっている。
【００５３】
右側の複数ドメインオブジェクトの更新のパターン体系では、複数のドメインオブジェクトを一括して更新するケース（選択肢）であることから、Ｄ６の設計パターンが適用され、その後アプリケーション（ＡＰ）サーバ上に更新対象となる全てのドメインオブジェクトが生成されるか、生成されるオブジェクトは１つだけに限定されるかによって２つのケースに分かれ、更に全てのドメインオブジェクトがＡＰサーバのメモリ上に生成される場合には、ドメインオブジェクトの更新用のデータがＡＰサーバ側にキャッシュされるか、ＤＢ（データベース）サーバ側にキャッシュされるかによって２つのケースに分かれ、それぞれの場合について対応する設計パターンと実装パターンが適用される体系となっている。
【００５４】
なおここで設計パターンＤ６では、ここまでの処理において共通に使えるオブジェクトのクラスの構造とその振舞が定義される。例えば３つのクラスＡ，Ｂ、及びＣが必要であるとすれば、その構造とそれらのクラスの間のやり取りが定義される。すなわち外部仕様が定義されることになる。このような定義には実装コードは関連づけられることはない。その理由は実際に動作するソースコードを作成するには、更に詳細な設計が必要なためである。
【００５５】
例えば設計パターンＤ９では更に設計が詳細化される。例えばクラスＣの属性としてキャッシュ操作を表す属性が持たされたり、そのキャッシュの実装方法が追加される。すなわち内部仕様が定義されることになり、そこで実装コードを関連づけることができる。但しそのクラスＣの外部仕様（操作のインタフェース定義など）は、設定パターンＤ６で定義されたものと同じである。
【００５６】
またＡＰサーバ上に生成されるドメインオブジェクトが１つだけに限定される場合に、更新データのキャッシュ場所の観点に対する選択肢（ケース）はＡＰサーバ側に更新用のデータがキャッシュされる場合に限られることになるが、これは通信による性能低下を防止するためであ。性能、すなわちパターン体系の適用に必要な時間はＡＰサーバとＤＢサーバとの間の通信回数が少ない方が圧倒的に向上、すなわち短くなる。そこで通信回数ができるだけ少なくするようにパターンが作成される。
【００５７】
ＡＰサーバのメモリ上に作成されるオブジェクトが１つに限られる場合には、ＡＰサーバにＤＢサーバから渡されたデータをそのまま保持しておいて、必要に応じてその１つのオブジェクトに対するデータの読み書きを行う。ＤＢサーバ側にドメインオブジェクトの更新用のデータをキャッシュしておいたのでは、ＡＰサーバのメモリを節約することはできても、毎回データの読み書きのたびに通信を行う必要があり、性能は低下することになる。
【００５８】
図７はパターン情報定義部１４の処理フローチャートである。同図において処理が開始されると、まずステップＳ１６でパターン定義書式、例えば後述するパターン情報書式が読み込まれ、定義画面の表示が行われ、ステップＳ１７で定義終了か否かが判定される。定義終了でない場合にはステップＳ１８でユーザ、すなわち個々の開発者が定義情報を入力すべきフィールドを選択し、ステップＳ１９でそのフィールドが図が入力されるフィールドか否かが判定される。
【００５９】
図を入力するフィールドでない場合には、ステップＳ２０でユーザによってそのフィールドに定義、例えばパターン情報としてのパターン文書の入力が行われ、ステップＳ２１でその入力が終了するとステップＳ１７以降の処理が繰り返される。
【００６０】
ステップＳ１９で選択されたフィールドが図を入力するフィールドである場合には、ステップＳ２２でオブジェクト指向ＣＡＳＥの作図エディタが起動され、ステップＳ２３で図の編集が行われ、ステップＳ２４で編集が終了した図が保存され、ステップＳ２５で編集された図が定義情報にリンクされて、ステップＳ１７以降の処理が繰り返される。
【００６１】
ステップＳ１７で定義が終了したと判定されると、ステップＳ２６で編集情報の保存が行われ、ステップＳ２７でその情報のＨＴＭＬ形式の変換が行われ、その形式のデータが保存され、ステップＳ２８でパターン情報としてパターン体系格納部１１のメモリへの新規登録、または上書きが行われて、処理を終了する。
【００６２】
図８はパターン体系定義部１５の処理フローチャートである。同図において処理が開始されると、まずステップＳ３０でパターン体系定義画面、例えば図６のようなパターン体系を定義するための画面が表示され、ステップＳ３１で定義が終了したか否かが判定される。終了していない場合には、ステップＳ３２でユーザ、すなわち開発者によってパターン体系の構成子のうちの１つが選択される。ここでパターン体系の構成子とはパターンの間の関連を示す矢印、パターンすなわち図６の四角形、観点、あるいは選択肢（ケース）のいずれかであるとする。
【００６３】
ステップＳ３３で構成子の種類は何かが判定され、パターンである時にはステップＳ３４で図形の領域、例えば四角形の中にパターンカテゴリ、名前、パターン番号などが記入され、ステップＳ３５でそのパターンのリンク先としてパターン情報定義のＨＴＭＬファイルが指定された後に、ステップＳ３１以降の処理が繰り返される。
【００６４】
ステップＳ３３で構成子の種類が関連、すなわち矢印である場合には、ステップＳ３６で関連する構成子が線で結ばれた後に、また観点あるいは選択肢である時には、ステップＳ３７で図形の領域中に観点、または選択肢を示す文が入力された後に、ステップＳ３１以降の処理が繰り返される。
【００６５】
ステップＳ３１で定義終了と判定されると、ステップＳ３８で編集情報が保存され、ステップＳ３９でその情報がＨＴＭＬ形式に変換され、その形式の情報が保存され、ステップＳ４０でパターン体系（パターン間関連情報）としてパターン体系格納部１１に新規登録、または上書きされて、処理を終了する。
【００６６】
図９、および図１０はパターン情報定義例を示す。パターン情報としては、文書やクラス図、およびシーケンス図など、人間が読める情報と、オブジェクト指向ＣＡＳＥツールが理解可能な形式の情報との２種類が用意される。
【００６７】
図９は人間が読める情報の例であり、図６のパターン体系の中での設計パターンＤ９のパターン情報定義例である。その内容は文書としてのパターンの名前や課題、および説明に加えて、設計パターンに対応するクラス図、図示しないシーケンス図（ＭＴＤ）などから構成されている。
【００６８】
図１０は、オブジェクト指向ＣＡＳＥツールを利用して、パターンモデルの形式で定義されるパターン情報定義の例である。一般にオブジェクト指向技術ではパターンという概念は繰返し表れる問題とその解決法の組と定義されていて、本発明においてはパターンをパターン文書、すなわちパターンの内容を説明するドキュメントと、パターンモデル、すなわちソースコードの自動生成用の情報を格納し、ＣＡＳＥツールが理解可能なモデルとの２つで構成されるものとする。パターンモデルという用語と開発対象モデルという用語における“モデル”という用語は異なる意味を持つものである。
【００６９】
図１１はパターン情報定義例としての実装パターン定義画面の例を示す。
図１２は、例えば図７のステップＳ１６で用いられるパターン情報定義書式としてのテンプレートの例である。このようなテンプレートを用いることによって、パターン定義情報の入力を容易にさせることができる。なおこのテンプレートにおいてシナリオは具体例の説明であり、オブジェクト図はインスタンスの構造を示し、シーケンス図はインスタンス間でのインタラクションを示す。
【００７０】
図１３はパターン体系ナビゲート部１２の処理フローチャートである。同図において処理が開始されると、まずステップＳ４１でユーザによってパターン体系が選択され、ステップＳ４２でパターン体系が読み込まれ、パターン体系の発端のパターンが自動的に選択され、そのプロパティ“ステータス”が“初期状態”とされる。ここで発端のパターンとは、例えば図６において矢印によって示されていないパターンＡ２，Ａ３であり、ステップＳ４２ではこれらのパターンのプロパティ“ステータス”が“初期状態”とされる。
【００７１】
続いてステップＳ４３でパターン体系が表示され、ステップＳ４４でユーザによるＨＴＭＬ画面での選択が行われ、ユーザがパターン体系中の１パターン、ここでは発端のパターンＡ２，Ａ３のうちのいずれかを選択すると、ステップＳ４５で選択されたパターン情報のステータスが“初期状態”から“選択中”に変更される。そしてステップＳ４６で選択されたパターンの詳細化パターンのステータスが“自動適用”にされる。この詳細化パターンとは、選択されたパターンの先で更に詳細化した情報を定義しているパターンのことであり、例えばＡ２が選択された場合にはＤ５が詳細化パターンであり、Ａ３が選択された場合にはＤ６が詳細化パターンである。
【００７２】
ステップＳ４７で選択されたパターンのパターン定義情報としての文書情報が表示され、ステップＳ４８でＨＴＭＬ画面でのユーザによる選択が行われる。
ユーザによって適用ボタンが押された場合には、ステップＳ４９で選択されたパターン情報、例えばＡ２のステータスが“適用中”とされ、ステップＳ５０でパターン適用部が起動され、パターンＡ２の適用が行われる。
【００７３】
その後ユーザに対してステータスが“自動適用”となっているパターン情報の名前、例えばＤ５が示され、自動適用を続けるかどうかの問い合わせが行われ、自動適用を続けるとの指示があった場合には、ステップＳ５３で“選択中”のパターン、例えばＡ２のステータスが“適用済”とされ、“自動適用”のパターン、例えばＤ５のステータスが“適用中”とされ、今までステータスが“自動適用”であったパターンの詳細化パターン、例えばパターンＩ５のステータスが“自動適用”とされた後にステップＳ５０でパターン適用部１３が起動され、ステータスが“適用中”となったパターン、ここではＤ５の適用が行われ、以後次々と矢印によって関連づけられる先のパターンの適用が行われる。
【００７４】
ステップＳ５２で自動適用しないと判定された場合には、ステップＳ４７でステータスが“自動適用”となっているパターン情報の文書情報が表示される。これは例えばユーザがパターンの自動適用を続けるか否か判断がつかない場合に、その文書情報を表示することによってユーザの判断を促すためである。そしてステップＳ４８のＨＴＭＬ画面での選択において再び適用ボタンが押されると、ステップＳ４９以降の処理が繰り返される。
【００７５】
ステップＳ４８において詳細化パターンのいずれか、すなわちステップＳ４４で選択されたパターンの先にあるパターンのいずかが選択されると、“選択中”、すなわち選択されたパターンのステータスがステップＳ５４で“参照済”にされた後に、ステップＳ４５で選択されたパターン、すなわち詳細化パターンのステータスが“選択中”とされる処理以降が繰り返される。
【００７６】
更にステップＳ４８でＨＴＭＬ画面においてユーザによって“閉じる”が選択されると、ステップＳ５５で“選択中”のパターンと、その詳細化パターンのステータスが以前のステータスの値、例えば“初期状態”に戻された後、ステップＳ５６でパターン定義情報表示ウィンドウが閉じられ、ステップＳ４３でパターン体系が表示された後に、例えばステップＳ４４でＨＴＭＬ画面で“閉じる”が選択されることによって、処理が終了する。
【００７７】
図１４，図１５はパターン情報表示画面の例である。図１４の画面においてスクロールを行うことによって、図１５の画面が表れる。図１５の下部の適用ボタンを押すことが、図１３のステップＳ４８でのＨＴＭＬ画面での適用ボタンを押す選択に相当する。
【００７８】
図１６はパターン体系表示画面の例である。図１４，図１５のパターン情報表示画面と同様に、例えばネットスケープを用いることによって、このような画面表示を行うことができる。
【００７９】
図１７〜図２０はパターン適用部１３の処理フローチャートである。本発明の実施形態においては、実際の開発対象モデルを取り扱うために開発アプリケーション毎に与えるべき固有の情報を処理するために、パターン適用部１３によって解釈が可能なある形式の変数、例えば＄＄Target＄＄が用いられる。この形式の変数は、既存技術としてのマクロ展開方式を基本技術として用いる方式で各種用意されている。パターン適用部１３はこの形式の変数を解釈して、開発アプリケーション毎に必要となる情報の入力画面を表示し、ユーザ、すなわち開発者からの入力を得て、その値を展開、例えば代入する。
【００８０】
図１７はパターン適用部１３の全体処理フローチャートである。同図において処理が開始されると、まずステップＳ６０で開発対象モデルファイル名、パターンモデルファイル名の入力ウィンドウが表示され、これらの名前がユーザによって入力される。そしてステップＳ６１でパターンモデルファイルが読み込まれ、ステップＳ６２でパターンモデル中の展開ターゲット（＄＄Target＄＄）の情報の入力ウィンドウが表示され、ユーザによってターゲットの名前（クラス名など）の入力が行われる。ステップＳ６３で開発対象モデルが読み込まれ、ステップＳ６４でパターンモデルファイル中の全てのクラス定義に関してステップＳ６５〜ステップＳ７７までの処理が繰り返される。
【００８１】
まずステップＳ６５において、パターンモデルファイル中の１つのクラスが追加クラス名として設定され、そのクラス定義中の展開ターゲットがユーザによって入力された値、またはその値を解釈した結果で置き換えられる。そしてそのクラス用の実装パターン適用結果ファイルが作成、すなわち準備される。続いてステップＳ６６で開発対象モデルに追加クラス名と同じ名前を持つクラスがあるか否かが判定され、ある場合にはステップＳ６７でそのクラスが処理対象クラスとされ、ステップＳ６８で追加クラスの全ての属性定義の展開が行われる。このステップの処理については図１８で説明する。
【００８２】
続いてステップＳ６９で追加クラスの全ての属性に関して処理対象クラスの中に同じ属性定義がないか否かが調べられ、ない場合にはその属性定義が処理対象クラスに追加され、“パターン＃＃を適用した”ことがその属性定義の仕様に加えられ、ステップＳ７０で追加クラスの全ての操作定義が展開される。このステップの処理については図１９で説明する。ここでパターン＃＃は、例えばパターンモデルファイルのファイル名である。
【００８３】
ステップＳ７１で追加クラスの全ての操作定義に関して処理対象クラスに同じ操作定義がないか否かが調べられ、ない場合にはその操作定義が処理対象クラスに追加され、“パターン＃＃を適用した”ことがその操作定義の仕様に加えれら、ステップＳ７２で全てのクラス定義を処理したか否かが判定され、まだ処理されていない場合にはステップＳ６５以降の処理が繰り返される。
【００８４】
ステップＳ６６で開発対象モデルに追加クラス名と同じ名前を持つクラスがない場合には、開発対象モデルに対して追加クラスを関連するクラスとして追加する必要がある。そこでステップＳ７３で追加クラスの定義が開発対象モデルに追加され、ステップＳ７４で追加クラスの全ての属性定義が展開される。このステップの処理は図１８の処理である。
【００８５】
続いてステップＳ７５で開発対象モデルに追加されたクラスに対して全ての属性定義が追加され、“パターン＃＃を適用した”ことがその属性定義の仕様に加えられ、ステップＳ７６で追加クラスの全ての操作定義が展開される。このステップの処理は図１９の処理である。
【００８６】
ステップＳ７７で開発対象モデルに追加されたクラスに全ての操作定義が追加され、“パターン＃＃を適用した”ことがその操作定義の仕様に加えられ、ステップＳ７２の処理に移行する。
【００８７】
ステップＳ７２で全てのクラス定義が処理されたと判定された場合には、ステップＳ７８でパターンモデルファイルにある全ての関係定義が展開される。この処理については図２０で説明する。続いてステップＳ７９でパターンモデルファイルの中の全ての関係定義に関して開発対象モデルに同じ関係定義がないかが調べられ、もしなければその関係定義が開発対象モデルに追加され、“パターン＃＃を適用した”ことがその関係定義の仕様に加えられて、処理を終了する。
【００８８】
図１８は図１７のステップＳ６８、およびＳ７４の処理の詳細フローチャートである。同図においては、追加クラスの全ての属性定義を展開する処理として、まずステップＳ８１で追加クラスの全ての属性定義（名前、型、初期値など）が調べられ、未知の“展開ターゲット”を示す文字列がある場合には、ユーザの入力を求める入力ウィンドウが表示され、ユーザによってターゲットの値が入力され、ステップＳ８２で属性定義中の“展開ターゲット”が入力された値、またはその値を解釈した結果に置き換えられて処理を終了する。
【００８９】
図１９は図１７のステップＳ７０，Ｓ７６の処理の詳細フローチャートである。同図においては、追加クラスの全ての操作定義を展開するために、まずステップＳ８４で追加クラスの全ての操作定義（名前、引数の数、各引数の型、返却値の型など）が調べられ、未知の“展開ターゲット”を示す文字列があれば、ユーザに対して入力を求める入力ウィンドウが表示され、ユーザによってターゲットの値が入力され、ステップＳ８５で操作定義中の“展開ターゲット”が入力された値、またはその値を解釈した結果に置き換えられ、ステップＳ８６で操作定義中の仕様に実装パターンが定義されている場合には仕様の中の“展開ターゲット”が入力された値、またはその値を解釈した結果に置き換えられ、操作名、引数名、引数の型、返却値の型、仕様を使って、展開した操作本体（本来の操作の中味）が実装パターン適用結果ファイルに書き出されて、処理を終了する。
【００９０】
図２０は図１７のステップＳ７８、すなわちパターンモデルファイルにある全ての関係定義を展開する処理の詳細フローチャートである。同図においてステップＳ８８でパターンモデルファイル内の全ての関係定義（関係先のクラス名、関係元のクラス名など）が調べられ、未知の“展開ターゲット”を示す文字列がある場合にはユーザに対して入力を求める入力ウィンドウが表示され、ユーザによってターゲットの値が入力され、ステップＳ８９で関係定義中の“展開ターゲット”が入力された値、またはその値を解釈した結果に置き換えられて、処理を終了する。
【００９１】
図２１はパターンの適用対象となる開発モデルの例である。例えば“ＧＡSample”がオブジェクトのクラス名であり、このような開発モデルに対してパターン適用部１３が起動されることになる。
【００９２】
図２２は図１７のステップＳ６０，Ｓ６２などで、パターン適用部１３によって表示されるユーザ入力画面の例である。ここでは開発モデルファイル名、パターンモデルファイル名、および前述の変数＄＄Target＄＄が“ＧＡSample”という文字列であることがユーザによって入力されている。
【００９３】
図２３は、例えば図１８のステップＳ８１で表示される入力画面の例であり、また図２４は例えば図１９のステップＳ８４において表示されるユーザ入力画面の例である。このようにパターン適用部１３は、パターンの適用の処理中に必要なデータのユーザ入力を促し、ユーザの入力結果を用いて文字列変換などの処理を進める。
【００９４】
図２５はパターンの適用が終了して、モデル変更が自動的に行われた後の開発モデル例の一部である。図２１においてＧＡSampleしか定義されていなかったモデルが、パターンの適用によってＧＡSample Manager, ＧＡSample Entity など必要なクラス、継承関係や関連の定義が追加され、ＧＡSample自体にも属性や操作が追加されている。例えばＧＡSample Entity に対しては表示が省略されているが、属性、操作など全ての定義が行われている。
【００９５】
図２６はパターンモデルファイルの中のターゲットマネージャクラスの定義の例を示す。この定義がＧＡSample Managerクラスに展開されて、開発対象モデルに追加される。
【００９６】
図２７は実装パターン適用結果ファイルの出力例である。ターゲットマネージャクラスの操作定義として、ソースコードのひな型としての実装パターンがあらかじめ定義されており、その定義の中の＄＄Target＄＄のような変数がＧＡSampleなどの値に展開されて、図２７のような実装パターン適用結果ファイル、すなわち操作本体が出力される。
【００９７】
図２８はユーザによるソースコード生成時の操作、すなわち実装パターン挿入部２６の起動処理のフローチャートである。同図においてステップＳ９１で開発対象モデルファイルから、ＣＡＳＥツールのソースコード自動生成機能を使ってソースコードの生成が行われる。Ｃ＋＋の場合にはデフォルトで“クラス名.h”と“クラス名.cpp”とが生成され、ステップＳ９２で実装パターン挿入部２６の自動起動が行われて処理を終了する。
【００９８】
図２９は実装パターン挿入部２６の処理フローチャートである。図２８のステップＳ９２で自動起動された実装パターン挿入部２６の処理が開始されると、まずステップＳ９５で実装パターンが挿入される対象のソースファイル名と、実装パターン適用結果ファイル名との入力をユーザに求めるウィンドウが表示され、ユーザによってそれらのファイル名が入力され、ステップＳ９６でソースファイルのバックアップが行われ、ソースファイル名が例えば“ソースファイル名.back ”に変更され、ステップＳ９７でソースファイル名と同じファイルが新規作成され、操作本体挿入結果ファイルの準備が行われ、ステップＳ９８でソースファイルのバックアップファイルの現在行が先頭行とされ、ステップＳ９９でソースファイルのバックアップファイルから現在行が読み込まれ、ステップＳ１００で現在行がそのファイルの終了行であるか否かが判定され、終了行である場合には直ちに処理を終了する。
【００９９】
終了行でない場合には、ステップＳ１０１で操作本体、すなわち挿入されるべきソースコードの先頭行に相当する行であるか否かが判定され、先頭行に相当する行である場合にはステップＳ１０２で実装パターン適用結果ファイルにその操作本体があるか否かが調べられる。すなわち操作名、返却値の型、引数の数、各引数の型と順序などが比較され、ステップＳ１０３でその操作本体があるか否かが判定される。ある場合には、ステップＳ１０４で実装パターン適用結果ファイルの操作本体が操作本体挿入結果ファイルに出力され、ステップＳ１０５でソースファイルのバックアップファイルが操作本体終了行の次の行まで読み飛ばされた後に、ステップＳ９９以降の処理が繰り返される。
【０１００】
ステップＳ１０１で操作本体コードの先頭行に相当する行でない場合、およびステップＳ１０３でその操作本体がない場合には、ステップＳ１０６で現在行の内容がそのまま操作本体挿入結果ファイルに出力され、ステップＳ１０７でソースファイルのバックアップファイルの現在行が次の行に進められた後、ステップＳ９９以降の処理が繰り返される。
【０１０１】
図３０、および図３１は、図２８のステップＳ９１でオブジェクト指向ＣＡＳＥツールによって出力されるソースコードの例である。これらはＧＡSample Managerのソースコードであり、図３０のヘッダファイルはそのまま使用することができるが、図３１のボディファイルには本来のプログラムに相当する操作の中味は何ら生成されていない。
【０１０２】
図３２は、例えば図２９のステップＳ９５でユーザに対して表示されるユーザ入力画面の例である。例えば、この図の各入力フィールドには、ソースコード生成の対象となっているクラス名から一般的に推測されるファイル名があらかじめ表示されている。適用ボタンが押されることによって実装パターン挿入部２６に入力情報が渡され、実装パターン挿入部２６の実質的な処理が開始される。
【０１０３】
図３３は操作本体が挿入されたＧＡSample Managerのボディファイルの例である。図３１に示されている中味のないボディファイルに対して、設計パターンに従って定義された実装パターンが展開された図２７の操作本体コードが適切な場所に挿入されている。これによって設計パターンに従った設計モデルと、その設計モデルに対応する実装パターンが取り入れられたソースコードの自動生成が行われたことになる。
【０１０４】
本発明の実施形態においては、パターン体系格納部１１に格納されているパターン情報１６のそれぞれにキーワードをつけておくことにより、そのキーワードによってパターンの検索を行うことができる。図３４はそのようなキーワードによるパターン検索動作例の説明図である。同図においては、オブジェクトライフサイクル管理というパターン体系を対象にして、“削除”というキーワードを用いて検索が行われた結果、５つのパターンが検索され、そのうちで例えばユーザとしての開発者の指定によって１つのパターン情報の表示が行われている。
【０１０５】
図３５は、図３４の動作例のように、キーワードによってパターン情報を検索する処理のフローチャートである。この処理は例えばパターン検索部２２によって実行される。同図において処理が開始されると、まずステップＳ１１０で検索対象として指定されたパターン体系を格納しているフォルダにあるファイルのリストが得られ、また検索結果データの初期化が行われる。そしてステップＳ１１１でファイルのリストから先頭のファイルが選択され、ステップＳ１１２で選択されたファイルがないか否かが判定される。ファイルがある場合にはステップＳ１１３でファイル、すなわちパターン情報のキーワードとして、ユーザから入力された文字列が格納されているか否かが判定され、ある場合にはステップＳ１１４でファイルの名前、ファイルの内容の一部が検索結果データに格納され、ステップＳ１１５で次のファイルが選択されて、ステップＳ１１２以降の処理が繰り返される。
【０１０６】
ステップＳ１１３でキーワードとしてユーザから入力された文字列がない場合には、ステップＳ１１５で次のファイルが選択され、ステップＳ１１２以降の処理が繰り返される。ステップＳ１１２で選択ファイルがないと判定されると、ステップＳ１１６で検索結果データが表示されて、処理を終了する。
【０１０７】
図３６はパターン情報にキーワードをつける場合のパターン情報定義書式の例である。図１２と比較すると、キーワードの入力欄がテンプレート書式に追加されている。
【０１０８】
図３７は本発明のソフトウェア開発支援装置の第２の実施形態の構成を示すブロック図である。図３の第１の実施形態と比較すると、パターン適用部１３によって適用されたパターンを記録、参照することによって、そのパターンの適用履歴を格納するパターン適用履歴情報格納部３１と、そこに格納されている履歴情報を参照して、例えば個々のパターンやパターン体系の再利用度、例えば適用回数などを求めるパターン適用履歴解釈部３２とが追加されている点が異なっている。
【０１０９】
図３８はパターン適用履歴情報格納部３１に格納されるパターン適用履歴情報の例である。同図においてパターン適用履歴情報は、ユーザの名前からターゲットクラスの名前までの、だれが、いつ、どのファイルを適用したかに関する情報と、ターゲットクラス名称の所で区別される、属性リストその他の、どのように使ったかの情報とによって構成されている。
【０１１０】
図３９は、パターン適用履歴情報格納部３１に格納された適用履歴情報を用いる、パターン適用部１３の処理フローチャートである。同図において処理が開始されると、ステップＳ１２０でシステムから時間とユーザ情報が求められ、履歴ファイルが作成され、その履歴ファイルに時間とユーザ情報が出力される。履歴入力ファイル、すなわちすでにそのパターンが適用され、パターン適用履歴情報が格納されているときに、その適用履歴情報に相当する履歴入力ファイルが指定されている場合には、その内容が読み込まれ、展開ターゲット別に内部データ、すなわち前述の変数＄＄Target＄＄に対応してユーザから入力されるべきデータが求められ、ステップＳ１２２で図１７で説明したパターン適用部１３による処理が実行される。但し、この中でユーザにデータの入力を求めるウィンドウにおいて、すでに前述の履歴入力ファイルの内容によって既知となった内部データは、ユーザの入力を待つことなく表示される。
【０１１１】
そしてステップＳ１２３でユーザによって入力された開発対象モデルファイルとパターンモデルファイルの名前が履歴ファイルに出力され、ステップＳ１２４で“展開ターゲット”の内容、すなわちステップＳ１２１で読み込まれた内部データの内容がターゲット毎に履歴ファイルに出力されて、処理を終了する。
【０１１２】
図４０は図３９の処理によるユーザ入力画面における内部データの表示例である。同図において、そのパターンの前回の適用時に作成された履歴ファイルが履歴入力ファイルとして指定され、ユーザ入力を求めるウィンドウにその履歴入力ファイルから読み込まれたターゲットクラス名があらかじめ表示されている。
【０１１３】
図４１は図３７のパターン適用履歴解釈部３２による処理のフローチャートである。同図において処理が開始されると、まずステップＳ１３１で履歴ファイルが格納されているフォルダがユーザによって入力され、ステップＳ１３２でそのフォルダの中の履歴ファイルの全てのファイルの名前がリストにされ、ステップＳ１３３でそのリストの先頭のファイルが選択され、ステップＳ１３４で選択ファイルがないか否かが判定される。
【０１１４】
選択ファイルがある場合には、ステップＳ１３５で選択されたファイルからパターンモデルファイルの名前が得られ、ステップＳ１３６で同じパターンモデルファイル名をキーとしたデータが集計結果データの中に既に存在するか否かが判定され、存在する場合には、ステップＳ１３７でそのデータに１が追加された後に、ステップＳ１３８でリストの次のファイルが選択され、ステップＳ１３４以降の処理が繰り返される。
【０１１５】
ステップＳ１３６で同じパターンモデルファイル名をキーにしたデータが存在しない場合には、ステップＳ１３９でそのパターンモデルファイル名をキーにする値１のデータが集計結果データの中に新たに登録された後に、ステップＳ１３８以降の処理が実行される。そしてステップＳ１３４で選択ファイルがすでに存在しないと判定された時点で、ステップＳ１４０で集計結果データが表示されて、処理を終了する。
【０１１６】
以上においては任意のパターンを定義し、そのパターンに従って開発対象モデルや、ソースコードを自動的に詳細化する機能を中心として、オブジェクト指向ソフトウェア開発支援装置の動作を詳細に説明したが、自動化のためのパターンをどのように定義し、定義されたパターンをどのように適用するかについて、比較的簡単ではあるが、具体的なパターンの例を用いて更に説明する。
【０１１７】
以後の説明においては、具体的なパターンの例として、すでに開発対象モデル内で定義されているオブジェクトのデータを元にして、クラスや、クラスの属性、メソッド（操作）、リンク（関係）を追加するためのパターンを主として、パターンの定義とその適用について説明する。このようなパターンを用いることにより、追加すべき要素についてのデータの指定を簡単化し、パターン適用作業を効率化することができる。
【０１１８】
図４２は、そのようなパターンの定義と、その適用を説明するためのオブジェクト指向ソフトウェア開発支援装置の基本的なシステム構成ブロック図である。同図は、例えば図３のソフトウェア開発支援装置においてパターン情報定義部１４に対応するパターン定義部１０１、パターン体系格納部１１に対応するパターン格納部１０２、パターン適用部１３に対応するパターン適用部１０３、および開発対象モデル１８や、ソースコード１９としてのプログラムなどを格納するモデル・プログラム格納部１０４を備えている。
【０１１９】
前述のように、ここでは例えばすでに開発対象モデル１８内で定義されているオブジェクト指向モデルの各要素、例えばクラス、属性、メソッド、リンクなどのデータを元にして、その開発対象モデルに追加すべき他の要素を規定することができるパターンが定義され、そのパターンを適用することによって開発対象モデルに必要な要素が追加される。
【０１２０】
例えば開発者によって、そのような要素を追加するためのパターンがパターン定義部１０１を用いて定義され、定義されたパターンがパターン格納部１０２に格納される。パターン適用部１０３は開発者によって指定された、例えば開発対象モデルをモデル・プログラム格納部１０４から読み込み、パターン格納部１０２に格納されているパターンをその開発対象モデルに適用することによって、開発対象モデルにオブジェクト指向モデルの要素を追加したり、変更した後に、その開発対象モデルをモデル・プログラム格納部１０４に再度格納する。
【０１２１】
図４３はすでに定義されている属性のデータを元にして、新たな属性を追加するパターンの定義と、その適用の説明図である。同図においてパターン格納部１０２に格納されているパターンの先頭の＄＄Ｔａｒｇｅｔ＄＄によって、後述するようにＣｌａｓｓＡにそのパターンを適用すべきことが指定される。パターン適用部１０３はパターンの中にａｔｔｒｉｂｕｔｅのキーワードを見つけて、ＣｌａｓｓＡに新たな属性を追加するためのパターンであることを認識する。そして＄＄ａｔｔｒｉｂｕｔｅ＄＄をモデル・プログラム格納部１０４内ですでに定義されているＣｌａｓｓＡの属性名、ここではａ、ｂ、ｃと置き換えて文字列を合成し、それを名前とする属性、ここではａＦｌａｇ、ｂＦｌａｇ、及びｃＦｌａｇをＣｌａｓｓＡに新たに追加する。
【０１２２】
図４４はモデル・プログラム格納部１０４内にすでに定義されているクラスがもつ属性のデータを元にして、新たなメソッドを追加するパターンとその適用の説明図である。同図においてパターン適用部１０３はパターン中にｍｅｔｈｏｄのキーワードを見つけることによって、メソッドを追加すべきパターンであることを認識する。そして＄＄ａｔｔｒｉｂｕｔｅ＄＄をモデル・プログラム格納部１０４にすでに格納され、定義済みの属性名、ここではａ、ｂ、ｃに置き換えて文字列を合成し、それを名前とするメソッド、ここではｇｅｔａ（  ）、ｇｅｔｂ（  ）、およびｇｅｔｃ（  ）を追加する。
【０１２３】
図４５はクラスが持つ属性のデータを元にしてリンクを追加するパターンの適用例の説明図である。同図においてパターン適用部１０３はパターンの中にｌｉｎｋのキーワードを見つけることによって、リンクを追加すべきパターンであることを認識する。そして、ｌｉｎｋ以降の文字列から、＄＄ａｔｔｒｉｂｕｔｅ＄＄をすでにモデル・プログラム格納部１０４内で定義されているクラスＡの属性名、ここではａ、ｂ、ｃに置き換えて、それを名前とするリンク、ここではａＲｏｌｅ、ｂＲｏｌｅ、およびｃＲｏｌｅをＣｌａｓｓＢとの間での新たなリンクとして追加する。なおここで例えばａＲｏｌｅはＣｌａｓｓＡから見たＣｌａｓｓＢのロール名とする。
【０１２４】
図４６はすでに定義されている属性のデータを元にして、クラスを追加するパターンとその適用例の説明図である。パターン適用部１０３はパターンの中のクラス名定義部分、図４５のパターンでは＄＄Ｔａｒｇｅｔ＄＄の部分に文字列置換変換、すなわち＄＄ａｔｔｒｉｂｕｔｅ＄＄を見つけることによって、クラスを追加するパターンであることを認識する。そしてその文字列置換変換をＣｌａｓｓＡにおいてすでに定義されている属性名、すなわちａ、ｂ、ｃに置き換えて文字列を合成し、それを名前とするクラス、すなわちＸａ、Ｘｂ、およびＸｃを新たに追加する。
【０１２５】
図４７〜図５０は、例えば開発対象モデル内ですでに定義されているクラスのリンクのデータを元にして、新たな要素を追加するパターンの適用例の説明図である。図４７において、図４５と比較すると＄＄ｌｉｎｋ＄＄の部分がすでにＣｌａｓｓＡとＣｌａｓｓＢとの間で定義されているリンクの名称、すなわちａ、ｂ、ｃに置き換えられて、新たなリンクａＸ、ｂＸ、ｃＸが追加されている。
【０１２６】
図４８においては、図４３と比較すると＄＄ｌｉｎｋ＄＄の部分がすでに定義されているリンクのａ，ｂ、およびｃに置き換えられ、新たな属性としてａＦｌａｇ，ｂＦｌａｇ、およびｃＦｌａｇがＣｌａｓｓＡに追加されている。
【０１２７】
図４９においては、図４４と比較すると＄＄ｌｉｎｋ＄＄の部分がすでに定義されているリンクのａ，ｂ、およびｃに置き換えられ、新たなメソッド、すなわちｇｅｔａ（  ），ｇｅｔｂ（  ）、およびｇｅｔｃ（  ）がＣｌａｓｓＡに追加されている。
【０１２８】
図５０においては、図４６と比較すると＄＄ｌｉｎｋ＄＄の部分がすでに定義されているリンクの名前としてのａ，ｂ、およびｃに置き換えられて、新たなクラスＸａ，Ｘｂ、およびＸｃが追加されている。
【０１２９】
図５１〜図５４はすでに定義されているメソッドのデータを元にして、オブジェクトの要素を追加するパターンとその適用例の説明図である。図５１においては、図４４と比較すると＄＄ｍｅｔｈｏｄ＄＄の部分がすでに定義されているＣｌａｓｓＡのメソッドの名前であるａ、ｂ、およびｃに置き換えられて、新たなメソッドとしてｃｈｅｃｋａ（  ）、ｃｈｅｃｋｂ（  ）、およびｃｈｅｃｋｃ（  ）がＣｌａｓｓＡに追加されている。
【０１３０】
図５２においては、図４３と比較すると＄＄ｍｅｔｈｏｄ＄＄の部分がＣｌａｓｓＡにすでに定義されているメソッドの名前であるａ、ｂ、およびｃに置き換えられて、新たな属性としてのａａｔｔｒ、ｂａｔｔｒ、およびｃａｔｔｒがＣｌａｓｓＡに追加されている。
【０１３１】
図５３においては、図４５と比較すると＄＄ｍｅｔｈｏｄ＄＄の部分がすでにＣｌａｓｓＡにおいて定義されているメソッドの名前としてのａ、ｂ、およびｃに置き換えられて、ＣｌａｓｓＡとＣｌａｓｓＢとの間の新たなリンクとしてａＲｏｌｅ、ｂＲｏｌｅ、ｃＲｏｌｅの３つのリンクが追加されている。
【０１３２】
図５４においては、図４６と比較すると＄＄ｍｅｔｈｏｄ＄＄の部分がＣｌａｓｓＡにすでに定義されているメソッドの名前としてのａ、ｂ、およびｃに置き換えられて、新たなクラスとしてＸａ、Ｘｂ、およびＸｃが追加されている。
【０１３３】
図５５〜図５８はすでに定義されているクラスのデータを元にして、オブジェクトの新たな要素を追加するパターンとその適用例の説明図である。図５５においては、図４６と比較すると＄＄Ｃｌａｓｓ＄＄の部分がすでに定義されているクラスの名前、ここではａ、ｂ、およびｃに置き換えられ、新たなクラスとしてＸａ、Ｘｂ、およびＸｃが追加されている。
【０１３４】
図５６では、図４３と比較すると＄＄Ｃｌａｓｓ＄＄の部分がすでに定義されているクラスの名前ａ、ｂ、およびｃに置き換えられて、新たな属性としてａａｔｔｒ、ｂａｔｔｒ、およびｃａｔｔｒがクラスａに追加されている。なおここでクラスａに追加されることは、＄＄Ｔａｒｇｅｔ＄＄の部分に対して指定されている。
【０１３５】
図５７においては、図４５と比較すると＄＄Ｃｌａｓｓ＄＄の部分がすでに定義されているクラスの名前としてのａ、ｂ、およびｃに置き換えられて、クラスａとクラスｂとの間での新しいリンクａＲｏｌｅ、ｂＲｏｌｅ、およびｃＲｏｌｅが追加されている。
【０１３６】
図５８においては、図４４と比較すると＄＄Ｃｌａｓｓ＄＄の部分がすでに定義されているクラスの名前であるａ、ｂ、およびｃに置き換えられて、クラスａ内の新しい属性ａｍｅｔｈｏｄ（  ）、ｂｍｅｔｈｏｄ（  ）、およびｃｍｅｔｈｏｄとして追加されている。
【０１３７】
以上において、例えば開発対象モデル内ですでに定義されているオブジェクトの要素を元にして新たな要素を開発対象モデルに追加するためのパターンの定義とその適用について、比較的簡単なパターンを例として説明したが、更に様々な具体例を説明する前に、ここでそのようなパターンの適用処理のフローチャートについて説明する。
【０１３８】
図５９は図４２のパターン適用部１０３によるパターン適用処理の全体フローチャートである。同図の処理は前述の第１の実施例に対応する図１７とほぼ同じである。異なる部分は図１７のステップＳ６５が２つのステップＳ６５ａとＳ６５ｂとに分けられ、ステップＳ６５ａで全てのクラス定義が展開された後に、ステップＳ６５ｂで展開して得られた追加クラス用の実装パターン適用結果ファイルが準備された後にステップＳ６６以降の処理が行われる点と、追加クラスの全ての属性定義が展開されるステップＳ６８，Ｓ７４の処理、追加クラスの全ての操作定義が展開されるＳ７０，Ｓ７６の処理、およびパターンファイルにある全ての関係定義が展開されるステップＳ７８の処理が、図１８〜図２０と異なることであり、これらのステップは図５９ではＳ６８ａ，Ｓ７４ａ，Ｓ７０ａ，Ｓ７６ａ、およびＳ７８ａとされている。なお例えば前述の図４３におけるＣｌａｓｓＡの指定はステップＳ６２におけるユーザによるターゲット名の入力によって行われる。
【０１３９】
図６０は図５９のステップＳ６５ａにおいて全てのクラス定義を展開する処理の詳細フローチャートである。同図において処理が開始されると、まずステップＳ２００でパターンの中に、すでに例えば開発対象モデル内で定義されている属性を元にした新たなクラスの追加のキーワードがあるか否かが判定され、ある場合にはステップＳ２０１で定義済みの属性、すなわち例えば開発対象モデルに定義されている属性のデータを元に新たなクラスの定義が展開された後に、また追加キーワードがない場合には直ちにステップＳ２０２の処理に移行する。このステップＳ２０１の処理については図６４で説明する。
【０１４０】
ステップＳ２０２ではパターンの中に、すでに定義されているメソッドを元にした新たなクラスの追加のキーワードがあるか否かが判定され、ある場合にはステップＳ２０３でステップＳ２０１におけると同様にすでに定義済みのメソッドを元にして新たなクラスの定義が展開された後に、またクラスの追加キーワードがない場合には直ちにステップＳ２０４の処理に移行する。
【０１４１】
ステップＳ２０４，Ｓ２０５では、例えばステップＳ２００，Ｓ２０１と同様に、すでに定義されているリンクを元にしたクラスの追加に対応する処理が行われ、またステップＳ２０６，Ｓ２０７ではすでに定義されているクラスを元にしたクラスの追加に対応する処理が行われる。
【０１４２】
ステップＳ２０８では、パターンの中に後述する外部パターン展開部への処理の依頼を示すキーワードがあるか否かが判定される。外部パターン展開部とは、後述するように例えば開発者によって定義された独自のパターン解釈ルールを保持するものであり、パターンの中にこの外部パターン展開部に解釈を依頼する部分がある場合には、パターン適用部１０３はこの外部パターン展開部にその部分の解釈を依頼する。すなわち、ステップＳ２０９でキーワード以降のパターンの部分が外部パターン展開部に渡され、クラス定義の展開が依頼されてその結果がパターン適用部に戻された後に、またそのような処理依頼を示すキーワードがない場合には直ちにステップＳ２１０の処理に移行する。
【０１４３】
ステップＳ２１０では、パターン中で追加が指定されているクラスの定義に未解決のキーワード、すなわちそのキーワードに対応する文字列の内容の入力を、例えば開発者に求めるキーワードがあるか否かが判定される。そのようなキーワードがある場合には、ステップＳ２１１で開発者によって未解決のキーワードに対応する文字列が入力された後に、ステップＳ２１２でパターンの中の属性定義内の未解決のキーワードや、既に入力されたキーワードが対応する文字列に置き換えられて処理を終了する。またステップＳ２１０でそのような未解決のキーワードがない場合にはステップＳ２１２で、既にその内容が入力され、まだ置き換えの行われていないキーワード、例えば前述の＄＄Ｔａｒｇｅｔ＄＄が対応する文字列に置き換えられて処理を終了する。
【０１４４】
図６１〜図６３はそれぞれ例えば開発対象モデル内で定義されているオブジェクトの要素のデータを元にした新たな属性、メソッド、およびリンクの定義の展開処理の詳細フローチャートであり、図６１は図５９のステップＳ６８ａ，Ｓ７４ａに、また図６２はステップＳ７０ａ，７６ａに、また図６３はステップＳ７８ａに対応する。
【０１４５】
図６１〜図６３の処理は実質的に図６０におけるとほぼ同様であるが、例えば図６１ではステップＳ２２０〜Ｓ２２７で、例えば開発対象モデル内ですでに定義されている属性、メソッド、リンク、およびクラスを元にした属性の追加に対応する処理が行われ、ステップＳ２２８，Ｓ２２９で外部パターン展開部への処理依頼に対応する処理が行われ、ステップＳ２３０〜Ｓ２３２で追加すべき属性の定義に未解決のキーワードがある場合に対応する処理と、既に入力されたキーワードに対応する文字列置換の処理が行われる。
【０１４６】
図６４はすでに例えば開発対象モデル内で定義されている要素を元にして、新たに追加されるべき要素の定義を展開する処理のフローチャートであり、例えは図６０ではステップＳ２０１，Ｓ２０３，Ｓ２０５，Ｓ２０７の処理にそれぞれ対応する。例えばステップＳ２０１ではすでに定義されている要素はオブジェクトの属性であり、新たに追加されるべきクラスの定義を展開する処理が実行される。
【０１４７】
図６４で処理が開始されると、ステップＳ２８０で元情報、すなわちすでに定義されている要素のリストが取得され、ステップＳ２８１でパターンの中に後述するように要素を絞り込むための条件が指定されているか否かが判定され、指定されている場合にはステップＳ２８２でその条件に応じて要素のリストが絞り込まれた後に、また指定されていない場合には直ちにステップＳ２８３の処理に移行する。
【０１４８】
ステップＳ２８３ではパターンの中で、後述するように例えば開発者によって要素が選択されることが、すなわち開発者に要素の選択を依頼すべきことが指定されているか否かが判定され、指定されている場合にはステップＳ２８４で開発者によって要素が選択された後に、指定されていない場合には直ちにステップＳ２８５の処理に移行する。
【０１４９】
ステップＳ２８５では、リストの中の要素に対して元となる要素のデータからパターンで指定されたデータ、例えば名前や型などの文字列表現が抽出され、ステップＳ２８６でその抽出された文字列表現が、後述するようにパターン内で指定された方法、例えば先頭の文字の大文字化などを用いて加工され、ステップＳ２８７で加工された文字列中に未解決のキーワードがあるか否かが、例えば図６０のステップＳ２１０におけると同様に判定され、そのようなキーワードがある場合にはステップＳ２８８で開発者によって未解決のキーワードに対応する文字列が入力され、未解決のキーワードがその文字列に置き換えられた後に、そのような未解決のキーワードがない場合には直ちにステップＳ２８９の処理に移行する。
【０１５０】
ステップＳ２８９では、加工された文字列表現がパターンで指定された箇所に用いられて新たな要素の定義が生成され、ステップＳ２９０でリストの要素全てについて処理が行われたか否かが判定され、まだ行われていない場合にはステップＳ２８１以降の処理が行われ、全てについて処理がなされた場合には処理を終了する。
【０１５１】
以上で比較的簡単なパターンの適用例と、パターン適用処理のフローチャートについての説明を終わり、続いてより応用的なパターンの適用例について更に説明する。
【０１５２】
図６５は、パターンとして分析・設計パターンに対応する部分と、実装パターンに対応する部分とが定義され、そのパターンを適用することによって、例えば開発対象モデルにメソッドの追加が行われると共に、実装パターンに対応して新たなプログラムが生成される例である。実装パターンは“ｍｅｔｈｏｄ”というタグ内で中かっこによって囲まれる部分である。
【０１５３】
同図においてｃｏｐｙ（ＣｌａｓｓＡ＆ｏｂｊ）という新たなメソッドが生成されると共に実装パターンに対応するプログラムが生成されている。実装パターンの中の「//＄＄ｆｏｒｅａｃｈキーワード・・・//＄＄ｅｎｄｆｏｒｅａｃｈ」の部分は、間に挟まれたコードをキーワードによって表される要素の数だけ繰り返して、プログラムを生成するための命令である。ここではキーワードとして＄＄ａｔｔｒｉｂｕｔｅ＄＄が指定されており、ＣｌａｓｓＡの属性ａ，ｂ，およびｃに対応するコードが生成される。実装パターンの２行目のコードの中の＄＄ａｔｔｒｉｂｕｔｅ＄＄が繰り返しの対象となっている属性の名前と置き換えられている。
【０１５４】
図６６〜図６８は、より応用的なパターンの例として、例えば開発対象モデルに新たに追加されるオブジェクトの要素のデータ、例えば名前、型、初期値、可視性などとして、すでに開発対象モデル内で定義されている要素が持つデータのいずれかを使用することがパターン内で指定されているパターンの適用例を示す。ここで可視性はアクセス可能なクラスの範囲を示すものであり、その詳細は後述する。
【０１５５】
図６６はメソッドの追加の例を示すが、タグしての’ｍｅｔｈｏｄ”の次の行の後半に対応して、図４４におけると同様のメソッドの追加が行われるが、前半の＄＄ａｔｔｒｉｂｕｔｅ＄＄；ｔｙｐｅを、すでに定義されている属性ａ，ｂ、およびｃの型に置き換えて、それをメソッドの返却値の型とする新たなメソッドが追加されている。
【０１５６】
図６７は属性の追加の例であるが、＄＄ａｔｔｒｉｂｕｔｅ＄＄をａ，ｂ、およびｃに置き換えたａｘ，ｂｘ、およびｃｘの属性が新たに追加され、その型として元の属性の型とその初期値が用いられている。
【０１５７】
図６８においてはＣｌａｓｓＡに新たなメソッドが追加されているが、パターン内のタグとしての“ｍｅｔｈｏｄ”の次の行の前半部分における＄＄ｌｉｎｋ＄＄；ｔｙｐｅ* によって、リンク先のクラスの名前が、新たに追加されるメソッドの返却値として用いられている。
【０１５８】
図６９〜図７２は、新たに追加される要素に対するデータの文字列をあらかじめ指定した方法で加工した後に使用することが図６４のステップＳ２８６で説明したようにパターン内で指定されているパターンの適用例である。ここで指定された方法としては全大文字化、最初の文字だけ大文字にするキャピタライズ、前一単語分削除などの方法がある。
【０１５９】
図６９は、図６６とほぼ同様にメソッドの追加を行う例であるが、パターン内のｇｅｔ＄＄ａｔｔｒｉｂｕｔｅ：Ｃ＄＄（  ）内の“Ｃ”がキャピタライズを示しているため、新たに追加されているメソッドの例えばｇｅｔＡ（  ）において、属性名のａが大文字化されて用いられている。
【０１６０】
図７０は属性の追加の例であるが、パターン内の“Ｕ”が全大文字化を指定するものであるため、すでにＣｌａｓｓＡ内で定義されている３つの属性が全大文字化されて追加されている。
【０１６１】
図７１では図７０におけると同様に新たに属性が追加されているが、パターン内の“Ｆ”が前一単語分削除を示すため、すでに定義されている属性のそれぞれにおいて最初の一単語、すなわち“ｆｌａｇ−”が削除されている。
【０１６２】
図７２では同様に属性が追加されているが、パターン内の“−”によって“−”の削除と、その直後の文字の大文字化が指定されているために、例えばｆｌａｇＡなどの属性が追加されている。
【０１６３】
図７３〜図７５は、例えば開発対象モデル内ですでに定義されているオブジェクトの要素のうちで、例えばインスタンス変数のみ、スタティック変数のみ、プライベートメソッドのみなどの条件を指定し、それを満たすものを自動的に選択すべきことが図６４のステップＳ２８１，Ｓ２８２で説明したように、指定されているパターンの適用例である。
【０１６４】
図７３はメソッドの追加の例を示すが、パターン中の“ｐｒｉｖａｔｅ”によってプライベートな属性のみが選択されるべきことが指定されていることから、すでに定義されている属性のうちで、その先頭にある可視性、すなわちアクセス可能なクラスを示す文字として、プライベート（そのクラスのみがアクセス可能）を示す“−”がついているｂ、およびｃだけに対応してメソッドの追加が行われている。なおａに対する“＃”はそのクラスとサブクラスだけがアクセス可能であるプロテクテッドを示し、図示しない“＋”は全てのクラスがアクセス可能なパブリックを示す。
【０１６５】
図７４ではメソッドの追加が行われているが、パターン中の“ｓｔａｔｉｃ”がスタティック変数のみを条件としているため、すでに定義されている属性ａ，ｂ、およびｃのうちで、スタティック変数を示す＄が先頭についているａのみに対してメソッドの追加が行われている。
【０１６６】
図７５でもメソッドの追加が行われているが、パターン中の“ａｂｓｔｒａｃｔ”がイタリックで示されている抽象メソッドのみを選択すべきことを指定しているため、すでに定義されているメソッドのうちでイタリックで表示されているａ（  ）のみを用いてメソッドの追加が行われている。
【０１６７】
図７６は例えば開発対象モデル内ですでに定義され、新しい要素を追加する元となる要素をパターン適用時に開発者、またはユーザに選択させることが図６４のステップＳ２８３，Ｓ２８４で説明したように、指定されているパターンの適用例である。同図においてはパターンの中で“ｓｅｌｅｃｔ”によって要素の選択を、例えばユーザに依頼すべきことが指定されており、パターン適用部１０３はこの指定に対応して、ここでは属性選択画面をユーザに提示し、ユーザが例えば属性名として“ｃ”を選択することによって、それを用いてメソッドの追加が行われている。
【０１６８】
図７７，図７８はパターン適用中に任意の文字列の入力を開発者、またはユーザに求めるべきことが指定されているパターンの適用例の説明図である。図７７においては、追加されるメソッドの名前の入力が、例えばユーザに求められており、ユーザから入力された“Ｔｅｓｔ”を名前とする新しいメソッドが追加されている。
【０１６９】
図７８では、図６５と同様にパターンの内部に分析・設計パターンに対応する部分と、実装パターンに対応する部分とが含まれており、メソッドの追加と、プログラムの生成が行われている。この時パターン適用部１０３によって＄＄×××＄＄に対応する文字列の入力がユーザに求められ、ユーザによって入力された“ｓａｖｅ”が用いられて、メソッドの追加とプログラムの生成が行われている。ユーザによって入力された文字列は、追加されるメソッドの部分にも、また生成されるプログラムの部分にもまたがって利用されている。プログラムの内部の記述を用いて２番目の追加メソッドが追加されている。更にパターンの中でキャピタライズを示す“Ｃ”も使用されている。
【０１７０】
パターン適用例の最後としてパターンの中に、例えば開発者によって独自に規定された展開ルールを用いた部分が定義されているパターンの適用例について説明する。この展開ルールは図６０のステップＳ２０８，Ｓ２０９で説明したように、例えば開発者によって作成された外部パターン展開部に保持され、パターンの解釈に使用される。図７９はそのような場合のオブジェクト指向ソフトウェア開発支援装置の基本構成ブロック図である。図４２の構成と比較すると、パターン適用部１０３に接続された外部パターン展開部１０５を備えている点が異なる。
【０１７１】
図８０はこの外部パターン展開部１０５による処理を含んだパターンの適用例の説明図である。同図において、メソッドを追加すべきパターンの内部で“ｕｓｅｒ−ｄｅｆｉｎｅ”以降の次のタグまでの文字列が、外部パターン展開部１０５にパターン適用部１０３から与えられ、外部パターン展開部に保持されている展開ルールに対応して、属性の追加が行われている。
【０１７２】
最後に本発明のオブジェクト指向ソフトウェア開発支援装置におけるプログラムのローディングについて図８１を用いて説明する。本発明のソフトウェア開発支援装置は当然一般的なコンピュータシステムによって実現することが可能であるが、そのようなコンピュータ３５は基本的には本体３６とメモリ３７とから構成されており、本体３６に対しては可搬型記憶媒体３９から本発明の処理のためのプログラムなどをロードすることも、またプログラム提供者側からネットワーク３８を介してプログラムなどをロードすることも可能である。
【０１７３】
本発明の特許請求の範囲の請求項１６，１７などに記載されているプログラムや、例えば図５，図７，図８，図１３，図１７〜図２０，図５９〜図６４などのフローチャートに示されているプログラムなどは、例えばメモリ３７に格納され、そのプログラムは本体３６によって実行される。ここでメモリ３７としてはハードディスクなどが用いられる。
【０１７４】
また例えばソフトウェア開発支援装置におけるパターン定義のためのプログラムなどは、可搬型記憶媒体３９に記憶され、コンピュータ３６にそのプログラムをロードすることによってパターンの定義などを行うことも可能である。この可、光ディスク、光磁気ディスクなどを用いることができる。更にパターン定義のためのプログラムなどは、プログラム提供者側からネットワーク３８を介してコンピュータ３５側に送られ、そのプログラムがロードされることによってパターン定義などを実現することも可能である。
【０１７５】
以上において、オブジェクト指向ソフトウェア言語としてＣ＋＋を例に取り、本発明の実施形態を説明したが、ソフトウェア言語はＣ＋＋に限定されることなく、他の言語を使用できることも当然可能であ。またその他の発明の実施の形態についても、本発明の特許請求の範囲に記載された範囲において様々な実施の形態を取ることができることは当然である。
【０１７６】
【発明の効果】
以上詳細に説明したように、本発明によれば、開発プロジェクトの責任者が分析パターン、設計パターン、および実装パターンなどの開発上必要なパターンを体系立てて定義、提供し、各部門の開発者がそのパターンを適切、かつ効率的に利用することが可能となり、ソフトウェア開発効率を向上させることが可能となる。パターン体系として関連づけられたパターンを順次適用することによって、分析情報、設計情報、およびソースコードの品質を均一にすることができる。また分析情報と設計情報、設計情報とソースコードの間での矛盾をなくすることができ、情報の追跡も可能となる。さらに比較的簡単なパターンとして、例えば既に開発対象モデル内で定義されているオブジェクトのデータを利用できるパターンを適用することにより、ソフトウェア開発の多くの部分を自動化することができ、オブジェクト指向ソフトウェア開発業務の能率向上に寄与するところが大きい。
【図面の簡単な説明】
【図１】本発明の原理構成ブロック図である。
【図２】本発明のオブジェクト指向ソフトウェア開発支援装置の基本構成ブロック図である。
【図３】本発明のオブジェクト指向ソフトウェア開発支援装置の第１の実施形態の構成を示すブロック図である。
【図４】本発明の第１の実施形態におけるパターン体系の定義と定義されたパターンの適用方法を説明する図である。
【図５】本発明の第１の実施形態におけるソフトウェア開発処理全体のフローチャートである。
【図６】パターン体系の例を示す図である。
【図７】パターン情報定義部による処理のフローチャートである。
【図８】パターン体系定義部による処理のフローチャートである。
【図９】パターン情報定義例（文書情報）を示す図である。
【図１０】パターン情報定義例（ＣＡＳＥ形式）を示す図である。
【図１１】実装パターン定義画面の例を示す図である。
【図１２】パターン情報定義書式としてのテンプレートの例を示す図である。
【図１３】パターン体系ナビゲート部による処理のフローチャートである。
【図１４】パターン情報表示画面の例（その１）である。
【図１５】パターン情報表示画面の例（その２）である。
【図１６】パターン体系表示画面の例である。
【図１７】パターン適用部による処理の全体フローチャートである。
【図１８】追加クラスの全ての属性定義を展開する処理のフローチャートである。
【図１９】追加クラスの全ての操作定義を展開する処理のフローチャートである。
【図２０】追加クラスの全ての関係定義を展開する処理のフローチャートである。
【図２１】パターンの適用対象となる開発モデルの例を示す図である。
【図２２】パターン適用部によって表示されるユーザ入力画面の例である。
【図２３】追加クラスの属性定義を展開する処理において表示されるユーザ入力画面の例である。
【図２４】追加クラスの操作定義を展開する処理において表示されるユーザ入力画面の例である。
【図２５】パターン適用が終了した後の開発モデル例を示す図である。
【図２６】パターンモデルファイルの中のターゲットマネージャクラスの定義の例を示す図である。
【図２７】実装パターン適用結果ファイルの出力例を示す図である。
【図２８】ユーザによるソースコード生成時の操作（実装パターン挿入部の起動処理）のフローチャートでる。
【図２９】実装パターン挿入部の処理フローチャートである。
【図３０】ＣＡＳＥツールによって出力されるソースコード（ヘッダファイル）の例を示す図である。
【図３１】ＣＡＳＥツールによって出力されるソースコード（ボディファイル）の例を示す図である。
【図３２】実装パターン挿入部の処理において表示されるユーザ入力画面の例である。
【図３３】操作本体が挿入されたボディファイルの例を示す図である。
【図３４】キーワードを用いたパターン情報検索動作の例を示す図である。
【図３５】キーワードによるパターン情報検索処理のフローチャートである。
【図３６】パターン情報にキーワードを付加するためのパターン情報定義書式用テンプレートの例を示す図である。
【図３７】本発明のオブジェクト指向ソフトウェア開発支援装置の第２の実施形態の構成を示すブロック図である。
【図３８】パターン適用履歴情報の例を示す図である。
【図３９】パターン適用履歴情報を用いたパターン適用部による処理のフローチャートである。
【図４０】図３９のパターン適用部の処理において表示されるユーザ入力画面の例を示す図である。
【図４１】パターン適用履歴解釈部の処理フローチャートである。
【図４２】すでに定義されているオブジェクトのデータを元にして、新しいオブジェクトのデータを追加するパターンの定義と、その適用を行うオブジェクト指向ソフトウェア開発支援装置の基本的なシステム構成ブロック図である。
【図４３】すでに定義されている属性のデータを元にして、新たな属性を追加するパターンの適用例の説明図である。
【図４４】すでに定義されている属性のデータを元にして、新たなメソッドを追加するパターンの適用例の説明図である。
【図４５】すでに定義されている属性のデータを元にして、リンクを追加するパターンの適用例の説明図である。
【図４６】すでに定義されている属性のデータを元にして、クラスを追加するパターンの適用例の説明図である。
【図４７】すでに定義されているリンクのデータを元にして、リンクを追加するパターンの適用例の説明図である。
【図４８】すでに定義されているリンクのデータを元にして、属性を追加するパターンの適用例の説明図である。
【図４９】すでに定義されているリンクのデータを元にして、メソッドを追加するパターンの適用例の説明図である。
【図５０】すでに定義されているリンクのデータを元にして、クラスを追加するパターンの適用例の説明図である。
【図５１】すでに定義されているメソッドのデータを元にして、メソッドを追加するパターンの適用例の説明図である。
【図５２】すでに定義されているメソッドのデータを元にして、属性を追加するパターンの適用例の説明図である。
【図５３】すでに定義されているメソッドのデータを元にして、リンクを追加するパターンの適用例の説明図である。
【図５４】すでに定義されているメソッドのデータを元にして、クラスを追加するパターンの適用例の説明図である。
【図５５】すでに定義されているクラスのデータを元にして、クラスを追加するパターンの適用例の説明図である。
【図５６】すでに定義されているクラスのデータを元にして、属性を追加するパターンの適用例の説明図である。
【図５７】すでに定義されているクラスのデータを元にして、リンクを追加するパターンの適用例の説明図である。
【図５８】すでに定義されているクラスのデータを元にして、メソッドを追加するパターンの適用例の説明図である。
【図５９】新たなオブジェクトの要素を追加するパターン適用処理の全体フローチャートである。
【図６０】全てのクラス定義を展開する処理の詳細フローチャートである。
【図６１】追加クラスの全ての属性定義を展開する処理の詳細フローチャートである。
【図６２】追加クラスの全てのメソッド定義（操作定義）を展開する処理の詳細フローチャートである。
【図６３】追加クラスの全てのリンク定義（関係定義）を展開する処理の詳細フローチャートである。
【図６４】すでに定義されているオブジェクトの要素を元にして、新たに追加されるべき要素の定義を展開する処理の詳細フローチャートである。
【図６５】分析・設計パターンに対応する部分と、実装パターンに対応する部分とが定義されているパターンの適用例の説明図である。
【図６６】追加されるメソッドの返却値の型が、すでに定義されている属性の型に対応すべきことが指定されているパターンの適用例の説明図である。
【図６７】追加される属性の型が、すでに定義されている属性の型とその初期値に対応すべきことが指定されているパターンの適用例の説明図である。
【図６８】追加されるメソッドの返却値が、すでに定義されているリンクのリンク先のクラスの名前に対応すべきことが指定されているパターンの適用例の説明図である。
【図６９】追加される要素に対するデータの文字列に対してキャピタライズを行うべきことが指定されているパターンの適用例の説明図である。
【図７０】新たに追加される属性の文字列が全大文字化されるべきことが指定されているパターンの適用例の説明図である。
【図７１】新たに追加される属性の文字列に対して前一単語分削除が指定されているパターンの適用例の説明図である。
【図７２】追加される属性の文字列における”一”の削除と、その直後の文字の大文字化が指定されているパターンの適用例の説明図である。
【図７３】すでに定義されている属性の可視性に対応してメソッドが追加されるパターンの適用例を示す図である。
【図７４】スタティック変数のみを条件として、すでに定義されている属性に対応するメソッドの追加が行われるパターンの適用例を示す図である。
【図７５】抽象メソッドのみを条件として、すでに定義されているメソッドに対応してメソッドの追加が行われるパターンの適用例を示す図である。
【図７６】すでに定義されている要素を、パターン適用時に開発者、またはユーザに選択させることが指定されているパターンの適用例を示す図である。
【図７７】パターン適用中に文字列の入力を開発者、またはユーザに求めることが指定されているパターンの適用例の説明図である。
【図７８】内部に分析・設計パターンに対応する部分と実装パターンに対応する部分とが含まれ、適用時に文字列の入力がユーザに求められるパターンの適用例を示す図である。
【図７９】外部パターン展開部を含むオブジェクト指向ソフトウェア開発支援装置の基本構成ブロック図である。
【図８０】外部パターン展開部による処理を含むパターンの適用例を説明する図である。
【図８１】本発明のオブジェクト指向ソフトウェア開発支援装置におけるプログラムのローディングを説明する図である。
【符号の説明】
１  オブジェクト指向ソフトウェア開発支援装置
２  パターン体系格納手段
３，１６  パターン情報
４，１７  パターン間関連情報
５  パターン適用手段
１１  パターン体系格納部
１２  パターン体系ナビゲート部
１３  パターン適用部
１４  パターン情報定義部
１５  パターン体系定義部
１８  開発対象モデル
１９  ソースコード
２６  実装パターン挿入部
２７  分析・設計パターン適用部
３１  パターン適用履歴情報格納部
３２  パターン適用履歴解釈部
【図１】
0003765949.tif 000002
【図２】
0003765949.tif 000003
【図３】
0003765949.tif 000004
【図４】
0003765949.tif 000005
【図５】
0003765949.tif 000006
【図６】
0003765949.tif 000007
【図７】
0003765949.tif 000008
【図８】
0003765949.tif 000009
【図９】
0003765949.tif 000010
【図１０】
0003765949.tif 000011
【図１１】
0003765949.tif 000012
【図１２】
0003765949.tif 000013
【図１３】
0003765949.tif 000014
【図１４】
0003765949.tif 000015
【図１５】
0003765949.tif 000016
【図１６】
0003765949.tif 000017
【図１７】
0003765949.tif 000018
【図１８】
0003765949.tif 000019
【図１９】
0003765949.tif 000020
【図２０】
0003765949.tif 000021
【図２１】
0003765949.tif 000022
【図２２】
0003765949.tif 000023
【図２３】
0003765949.tif 000024
【図２４】
0003765949.tif 000025
【図２５】
0003765949.tif 000026
【図２６】
0003765949.tif 000027
【図２７】
0003765949.tif 000028
【図２８】
0003765949.tif 000029
【図２９】
0003765949.tif 000030
【図３０】
0003765949.tif 000031
【図３１】
0003765949.tif 000032
【図３２】
0003765949.tif 000033
【図３３】
0003765949.tif 000034
【図３４】
0003765949.tif 000035
【図３５】
0003765949.tif 000036
【図３６】
0003765949.tif 000037
【図３７】
0003765949.tif 000038
【図３８】
0003765949.tif 000039
【図３９】
0003765949.tif 000040
【図４０】
0003765949.tif 000041
【図４１】
0003765949.tif 000042
【図４２】
0003765949.tif 000043
【図４３】
0003765949.tif 000044
【図４４】
0003765949.tif 000045
【図４５】
0003765949.tif 000046
【図４６】
0003765949.tif 000047
【図４７】
0003765949.tif 000048
【図４８】
0003765949.tif 000049
【図４９】
0003765949.tif 000050
【図５０】
0003765949.tif 000051
【図５１】
0003765949.tif 000052
【図５２】
0003765949.tif 000053
【図５３】
0003765949.tif 000054
【図５４】
0003765949.tif 000055
【図５５】
0003765949.tif 000056
【図５６】
0003765949.tif 000057
【図５７】
0003765949.tif 000058
【図５８】
0003765949.tif 000059
【図５９】
0003765949.tif 000060
【図６０】
0003765949.tif 000061
【図６１】
0003765949.tif 000062
【図６２】
0003765949.tif 000063
【図６３】
0003765949.tif 000064
【図６４】
0003765949.tif 000065
【図６５】
0003765949.tif 000066
【図６６】
0003765949.tif 000067
【図６７】
0003765949.tif 000068
【図６８】
0003765949.tif 000069
【図６９】
0003765949.tif 000070
【図７０】
0003765949.tif 000071
【図７１】
0003765949.tif 000072
【図７２】
0003765949.tif 000073
【図７３】
0003765949.tif 000074
【図７４】
0003765949.tif 000075
【図７５】
0003765949.tif 000076
【図７６】
0003765949.tif 000077
【図７７】
0003765949.tif 000078
【図７８】
0003765949.tif 000079
【図７９】
0003765949.tif 000080
【図８０】
0003765949.tif 000081
【図８１】
0003765949.tif 000082