(57)【要約】【課題】  拡張性や再利用性の高いプログラムとなるための要件を満たしているかどうかを判断し、ユーザに指摘することができるオブジェクト指向プログラムの作成支援装置及び作成支援方法を提供する。【解決手段】  役割情報記憶手段と、役割に対応する規約を記憶する規約情報記憶手段と、役割情報記憶手段に記憶された役割を各クラスに設定する役割設定手段と、クラスに設定された役割を記憶するクラス情報記憶手段と、各クラスに設定された役割に関する情報を抽出し、クラス情報記憶手段に記憶させるクラス情報登録手段と、各クラスについて、クラス情報記憶手段から当該クラスに設定された役割を取得し、規約情報記憶手段から役割に対応する規約を取得し、当該クラス内において規約に対する違反を検出する規約照合手段と、を備えたオブジェクト指向プログラムの作成支援装置。【選択図】  図１
2005092519.tif 000002
【特許請求の範囲】
【請求項１】
役割を記憶する役割情報記憶手段と、
前記役割に対応する規約を記憶する規約情報記憶手段と、
前記役割情報記憶手段に記憶された役割を、オブジェクト指向プログラムの各クラスに設定する役割設定手段と、
クラスに設定された役割を記憶するクラス情報記憶手段と、
オブジェクト指向プログラムを解析し、各クラスに設定された役割に関する情報を抽出し、前記クラス情報記憶手段に記憶させるクラス情報登録手段と、
各クラスについて、前記クラス情報記憶手段から当該クラスに設定された役割を取得し、前記規約情報記憶手段から前記役割に対応する規約を取得し、当該クラス内において前記規約に対する違反を検出する規約照合手段と、
を備えたオブジェクト指向プログラムの作成支援装置。
【請求項２】
前記規約情報記憶手段は、各規約の違反に対応した警告メッセージを記憶しており、
前記規約照合手段は、規約違反を検出すると、前記警告メッセージを出力することを特徴とする請求項１に記載のオブジェクト指向プログラムの作成支援装置。
【請求項３】
前記役割設定手段は、オブジェクト指向プログラムのコメント部分に役割に関する情報を挿入することにより、役割の設定を行うことを特徴とする請求項１又は２に記載のオブジェクト指向プログラムの作成支援装置。
【請求項４】
前記役割は、少なくともＭｏｄｅｌ、Ｖｉｅｗ及びＣｏｎｔｒｏｌｌｅｒを含んでおり、
前記規約は、前記各役割を有するクラス間の関連の有無を規定することを特徴とする請求項１から３のいずれか１項に記載のオブジェクト指向プログラムの作成支援装置。
【請求項５】
前記役割は、クラス間の継承関係により定められる役割であり、
前記規約は、前記役割に従って各クラスが継承すべき上位クラスを規定することを特徴とする請求項１から３のいずれか１項に記載のオブジェクト指向プログラムの作成支援装置。
【請求項６】
役割を役割情報記憶手段に記憶させるステップと、
前記役割に対応する規約を規約情報記憶手段に記憶させるステップと、
前記役割情報記憶手段に記憶された役割を、オブジェクト指向プログラムの各クラスに設定するステップと、
オブジェクト指向プログラムを解析し、各クラスに設定された役割に関する情報を抽出し、クラス情報記憶手段に記憶させるステップと、
各クラスについて、前記クラス情報記憶手段から当該クラスに設定された役割を取得し、前記規約情報記憶手段から前記役割に対応する規約を取得し、当該クラス内において前記規約に対する違反を検出するステップと、
を含むオブジェクト指向プログラムの作成支援方法。
【請求項７】
前記規約情報記憶手段は、各規約の違反に対応した警告メッセージを記憶しており、
前記規約違反を検出するステップにおいて、規約違反を検出すると、前記警告メッセージを出力することを特徴とする請求項６に記載のオブジェクト指向プログラムの作成支援方法。
【請求項８】
前記役割を設定するステップにおいて、オブジェクト指向プログラムのコメント部分に役割に関する情報を挿入することにより、役割の設定を行うことを特徴とする請求項６又は７に記載のオブジェクト指向プログラムの作成支援装置。
【請求項９】
役割を役割情報記憶手段に記憶させるステップと、
前記役割に対応する規約を規約情報記憶手段に記憶させるステップと、
前記役割情報記憶手段に記憶された役割を、オブジェクト指向プログラムの各クラスに設定するステップと、
オブジェクト指向プログラムを解析し、各クラスに設定された役割に関する情報を抽出し、クラス情報記憶手段に記憶させるステップと、
各クラスについて、前記クラス情報記憶手段から当該クラスに設定された役割を取得し、前記規約情報記憶手段から前記役割に対応する規約を取得し、当該クラス内において前記規約に対する違反を検出するステップと、
を含むオブジェクト指向プログラムの作成支援プログラム。
【請求項１０】
前記規約情報記憶手段は、各規約の違反に対応した警告メッセージを記憶しており、
前記規約違反を検出するステップにおいて、規約違反を検出すると、前記警告メッセージを出力することを特徴とする請求項９に記載のオブジェクト指向プログラムの作成支援プログラム。
【請求項１１】
前記役割を設定するステップにおいて、オブジェクト指向プログラムのコメント部分に役割に関する情報を挿入することにより、役割の設定を行うことを特徴とする請求項９又は１０に記載のオブジェクト指向プログラムの作成支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オブジェクト指向プログラムの作成支援装置及び作成支援方法に関し、特に、拡張性や再利用性の高いプログラムが作成されるよう支援する装置及び方法に関するものである。
【背景技術】
【０００２】
オブジェクト指向プログラムは、関連するデータの集合と、それに対する手続き(メソッド)とを一体化したオブジェクトとして定義し、それらのオブジェクトの組み合わせによって構築されるプログラムである。
【０００３】
作成されたオブジェクトは、その内部構造や動作原理の詳細を知らないでも、外部からメッセージを送ることにより容易に利用できるため、オブジェクト指向プログラムでは、既存のプログラムの機能を拡張したり、部分的に再利用したりするのが容易であるといった利点がある。
【０００４】
オブジェクト指向プログラムに用いられる代表的なプログラム言語として、Ｃ言語にオブジェクト指向的な拡張を施したＣ＋＋言語や、Ｓｕｎ Ｍｉｃｒｏｓｙｓｔｅｍｓ社のＪａｖａ（登録商標）などが知られている。
【０００５】
従来、オブジェクト指向言語を用いたプログラムの作成を支援する技術として、作成されたプログラムを解析し、所定の規約やコーディングルールとの照合を行い、規約違反が発見された場合には、バグになる可能性の高いプログラムとしてユーザに通知したり、修正例を提示したりするプログラム作成支援装置及び方法が提案されている。
【０００６】
特許文献１に記載されたオブジェクト指向プログラム作成支援装置は、入力プログラムの構文解析を行い、構文解析結果とプログラム規約情報とを照合し、照合結果に基づいて修正したプログラムを出力するものである。
【０００７】
特許文献２に記載されたオブジェクト指向プログラム作成支援装置は、上記特許文献１の構成に加えて、さらに詳細な規約チェックを行い、違反しているものについては適合コード例を自動的あるいは対話的に生成することを特徴としている。
【０００８】
特許文献３に記載されたオブジェクト指向プログラム品質改善方法およびシステムは、入力されたプログラムにおいて、個々のクラスのサイズ、他クラスを参照する回数、継承の深さ等の品質情報に基づいて、問題がある可能性の高いクラス又はモジュールを抽出して、その参照関係を解析し、また、規約違反を検出し、これらの結果に基づいたグラフ表示を行うものである。
【０００９】
また、具体例としては、ＮＴＴ−ＡＴシステムズ株式会社の“Ｉｎｓｐｅｃｔ Ｅｙｅｓ”が挙げられる。このソフトウェアは、Ｊａｖａプログラムを解析し、Ｊａｖａ標準として規定されているコーディングルール（Ｊａｖａｄｏｃのコメント規約など）の違反を検出し、ユーザに通知するものである。
【特許文献１】特開平１１−８５４９６号公報。
【特許文献２】特開２０００−１３２３８７号公報。
【特許文献３】特開２０００−２９８５８６号公報。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
上記した従来技術によれば、作成されたプログラムの構造を解析し、プログラム規約やコーディングルールの違反を検出することにより、バグになる可能性の高いプログラムについては、ユーザに注意を促したり、修正例を提示したりすることができる。また、上記した“Ｉｎｓｐｅｃｔ Ｅｙｅｓ”の例のように、標準的なコーディングルールを基準に用いれば、可読性の高いプログラムの作成を促すこともできる。
【００１１】
しかしながら、オブジェクト指向プログラムの品質を評価する基準は、プログラム規約やコーディングルールに適合しているかどうかだけではない。オブジェクト指向プログラムでは、特に、プログラムの拡張性や再利用性が高いのが好ましいとされている。その判断基準は、プログラムの部品であるオブジェクトやクラスが予め定義してある役割や性質に適合して作成されているかどうかである。
【００１２】
そこで、本発明は、オブジェクト指向プログラムの作成支援装置及び作成支援方法として、作成されたプログラムが、単にプログラム規約やコーディングルールに適合するかどうかを判断するのではなく、拡張性や再利用性の高いプログラムとなるための要件を満たしているかどうかを判断し、ユーザに指摘することができるプログラム作成支援装置及び作成支援方法を提供することを目的とするものである。
【課題を解決するための手段】
【００１３】
上記解決課題に鑑みて鋭意研究の結果、本発明者は、以下のようなプログラム作成支援装置及び作成支援方法に想到した。
すなわち、本発明は、役割を記憶する役割情報記憶手段と、前記役割に対応する規約を記憶する規約情報記憶手段と、前記役割情報記憶手段に記憶された役割を、オブジェクト指向プログラムの各クラスに設定する役割設定手段と、クラスに設定された役割を記憶するクラス情報記憶手段と、オブジェクト指向プログラムを解析し、各クラスに設定された役割に関する情報を抽出し、前記クラス情報記憶手段に記憶させるクラス情報登録手段と、各クラスについて、前記クラス情報記憶手段から当該クラスに設定された役割を取得し、前記規約情報記憶手段から前記役割に対応する規約を取得し、当該クラス内において前記規約に対する違反を検出する規約照合手段と、を備えたオブジェクト指向プログラムの作成支援装置を提供するものである。
【００１４】
本発明のオブジェクト指向プログラムの作成支援装置において、前記規約情報記憶手段は、各規約の違反に対応した警告メッセージを記憶しており、前記規約照合手段は、規約違反を検出すると、前記警告メッセージを出力することを特徴とする。
これにより、規約違反を表示部に表示するなどしてユーザに警告し、プログラムの修正などを促すことができる。
【００１５】
本発明のオブジェクト指向プログラムの作成支援装置において、前記役割設定手段は、オブジェクト指向プログラムのコメント部分に役割に関する情報を挿入することにより、役割の設定を行うことを特徴とする。
これにより、プログラム本体に何ら影響を与えることなく、役割情報を設定することができる。
【００１６】
本発明のオブジェクト指向プログラムの作成支援装置において、前記役割は、少なくともＭｏｄｅｌ、Ｖｉｅｗ及びＣｏｎｔｒｏｌｌｅｒを含んでおり、前記規約は、前記各役割を有するクラス間の関連の有無を規定することを特徴とする。
【００１７】
いわゆるＭＶＣモデルに従ってプログラムを設計している場合には、各クラス間の関連をチェックすることにより、設計通りのプログラムが作成されているかどうかを確認することができる。
【００１８】
本発明のオブジェクト指向プログラムの作成支援装置において、前記役割は、クラス間の継承関係により定められる役割であり、前記規約は、前記役割に従って各クラスが継承すべき上位クラスを規定することを特徴とする。
【００１９】
クラス間に継承関係を設定している場合には、各クラスが継承すべき上位のクラスを継承しているかどうかをチェックすることにより、設計通りのプログラムが作成されているかどうかを確認することができる。
【００２０】
本発明は、また、役割を役割情報記憶手段に記憶させるステップと、前記役割に対応する規約を規約情報記憶手段に記憶させるステップと、前記役割情報記憶手段に記憶された役割を、オブジェクト指向プログラムの各クラスに設定するステップと、オブジェクト指向プログラムを解析し、各クラスに設定された役割に関する情報を抽出し、クラス情報記憶手段に記憶させるステップと、各クラスについて、前記クラス情報記憶手段から当該クラスに設定された役割を取得し、前記規約情報記憶手段から前記役割に対応する規約を取得し、当該クラス内において前記規約に対する違反を検出するステップと、を含むオブジェクト指向プログラムの作成支援方法を提供するものである。
【００２１】
本発明のオブジェクト指向プログラムの作成支援方法において、前記規約情報記憶手段は、各規約の違反に対応した警告メッセージを記憶しており、前記規約違反を検出するステップにおいて、規約違反を検出すると、前記警告メッセージを出力することを特徴とする。
【００２２】
本発明のオブジェクト指向プログラムの作成支援方法において、前記役割を設定するステップにおいて、オブジェクト指向プログラムのコメント部分に役割に関する情報を挿入することにより、役割の設定を行うことを特徴とする。
【００２３】
本発明は、また、役割を役割情報記憶手段に記憶させるステップと、前記役割に対応する規約を規約情報記憶手段に記憶させるステップと、前記役割情報記憶手段に記憶された役割を、オブジェクト指向プログラムの各クラスに設定するステップと、オブジェクト指向プログラムを解析し、各クラスに設定された役割に関する情報を抽出し、クラス情報記憶手段に記憶させるステップと、各クラスについて、前記クラス情報記憶手段から当該クラスに設定された役割を取得し、前記規約情報記憶手段から前記役割に対応する規約を取得し、当該クラス内において前記規約に対する違反を検出するステップと、を含むオブジェクト指向プログラムの作成支援プログラムを提供するものである。
【００２４】
本発明のオブジェクト指向プログラムの作成支援プログラムにおいて、前記規約情報記憶手段は、各規約の違反に対応した警告メッセージを記憶しており、前記規約違反を検出するステップにおいて、規約違反を検出すると、前記警告メッセージを出力することを特徴とする。
【００２５】
本発明のオブジェクト指向プログラムの作成支援プログラムにおいて、前記役割を設定するステップにおいて、オブジェクト指向プログラムのコメント部分に役割に関する情報を挿入することにより、役割の設定を行うことを特徴とする。
【発明の効果】
【００２６】
本発明のオブジェクト指向プログラムの作成支援装置及び作成支援方法によれば、ユーザが予め各クラスに対して役割を設定するとともに、その役割に対応する規約を登録しておくことにより、作成されたプログラムが当該規約に適合したものであるかどうかを自動的にチェックすることができ、また、規約違反が検出された場合には、ユーザに警告を表示することができる。
【００２７】
このように、各クラスに明確な役割を定義し、その役割に対応する規約に適合するようにプログラムが作成されるように支援することにより、クラスを関連のある機能ごとに適切に分けることができ、また、クラス間の関連が最小限になるため、関連のない他の部分の変更による影響を受けにくい実装にすることができる。すなわち、拡張性、再利用性の高いプログラムを作成することが可能となる。
【発明を実施するための最良の形態】
【００２８】
以下、添付図面を参照しながら、本発明のオブジェクト指向プログラムの作成支援装置及び作成支援方法を実施するための最良の形態を詳細に説明する。図１〜図１４は、本発明の実施の形態を例示する図であり、これらの図において、同一の符号を付した部分は同一物を表わし、基本的な構成及び動作は同様であるものとする。
【００２９】
図１は、本発明の一実施形態にかかるオブジェクト指向プログラム作成支援装置について、その内部構成を概略的に示す機能ブロック図である。
図１において、本実施形態のオブジェクト指向プログラム作成支援装置は、役割情報記憶部１０４と、クラス情報記憶部１０５と、規約情報記憶部１０６と、役割設定部１０７と、クラス情報登録部１０８と、規約照合部１０９とを含んで構成されている。また、このオブジェクト指向プログラム作成支援装置が適用される対象となるプログラム作成環境には、入力部１０１と、プログラム編集部１０２と、表示部１０３とが含まれているものとする。
【００３０】
入力部１０１は、キーボードやマウスからの入力を受け付けるものであり、プログラム作成に関する操作は、プログラム編集部１０２に出力される。プログラム編集部１０２は、テキストエディタなどの一般的な文章作成用エディタ、あるいはプログラム作成専用のエディタである。表示部１０３はモニタなどであり、プログラム編集部１０２による出力結果をユーザ（通常、プログラム作成者のことである。以下において同じ。）に表示するものである。
【００３１】
役割情報記憶部１０４は、オブジェクト指向プログラムに含まれるクラスが有するべき１種類以上の役割とその役割に関する情報とを記憶している。クラス情報記憶部１０５は、オブジェクト指向プログラムに含まれる各クラスについて、クラス名とそのクラスの役割とを関連付けて記憶している。規約情報記憶部１０６は、役割情報記憶部１０４において定義されている役割に対応した規約と、その規約を違反した場合の警告メッセージとを記憶している。
【００３２】
役割設定部１０７は、オブジェクト指向プログラムに含まれる各クラスに対して、役割情報記憶部１０４において定義されているいずれかの役割を設定する。クラス情報登録部１０８は、オブジェクト指向プログラムを読み込み、各クラスのクラス名とその役割とを抽出し、これらを関連付けたクラス情報として、クラス情報記憶部１０５に記憶させる。規約照合部１０９は、オブジェクト指向プログラムに含まれる各クラスについて、クラス情報記憶部１０５から取得されるクラス情報に基づいて、規約情報記憶部１０６から規約情報を取得し照合することにより、規約違反を検出する。規約違反であるかどうかの判断は、クラスが、そのクラスに設定された役割に対応する規約に適合して作成されているかどうかを基準とする。
【００３３】
役割情報記憶部１０４及び規約情報記憶部１０６については、それぞれ、予めユーザが設定した役割情報及びこれに対応する規約情報を登録しておくものとする。一方、クラス情報記憶部１０５の内容は、クラス情報登録部１０８により追加、更新、削除等されるようになっている。
【００３４】
尚、図１では、本実施形態のオブジェクト指向プログラム作成支援装置とプログラム作成環境とを分離して示しているが、これは説明の便宜のためであり、他の適当な構成をとることもできる。例えば、一体のオブジェクト指向プログラム作成装置において（１つのコンピュータ上において実現することができる）、プログラム編集部１０２とオブジェクト指向プログラム作成支援部（１０４〜１０９）とが連携して動作するような構成をとしてもよい。
【００３５】
次に、上記のように構成された本実施形態のオブジェクト指向プログラム作成支援装置の動作について説明する。
【００３６】
図２は、本実施形態のオブジェクト指向プログラム作成支援装置の動作の流れを示すフローチャートである。尚、ここで示す動作は、実際には、図１に示すオブジェクト指向プログラム作成支援装置とプログラム編集部１０２とが連携した動作である場合も含んでいる。
【００３７】
図２において、まず、ユーザが、オブジェクト指向プログラムに含まれるクラスが有するべき役割を定義した役割情報を役割情報記憶部１０４に記憶させる（ステップ２０１）。また、上記で定義した各役割について、対応する規約情報を規約情報記憶部１０６に記憶させる（ステップ２０２）。
【００３８】
その後、ユーザは、図１に示すプログラム作成環境を用いてプログラムの作成を開始する（ステップ２０３）。プログラムの作成過程において、ユーザは、作成するクラスに対して、役割情報を設定する（ステップ２０４）。具体的には、クラスの編集中に入力部１０１により所定の操作を行うことにより、オブジェクト指向プログラム作成支援装置の役割設定部１０７が役割情報記憶部１０４から役割情報を取得し、表示部１０３に出力する。ユーザが入力部１０１により当該クラスに設定する役割を選択すると、プログラム編集部１０２は、当該クラス内に選択された役割を示すデータを挿入する。尚、１つのクラスに複数の役割を設定することができるようにしてもよい。
【００３９】
プログラム作成中に複数のクラスを作成する場合には、ユーザは各クラスに対して、ステップ２０４の役割情報の設定を行うものとする。尚、作成されたクラスに役割情報が設定されないまま、ユーザがクラス作成の作業を中断しようとした場合には、役割情報の設定を促す警告を表示するのが好ましい。あるいは、ユーザがプログラム作成を終了しようとしたときに、役割情報の設定されていないクラスがある場合には、同様の警告を表示するようにしてもよい。
【００４０】
プログラムの作成が終了すると（ステップ２０５）、クラス情報登録部１０８は、作成されたプログラムを読み込み、プログラムに含まれる各クラスについてクラス情報を抽出し、クラス情報記憶部１０５に登録する（ステップ２０６）。具体的には、各クラスのクラス名と、上記で挿入された役割を示すデータとを抽出し、これらを関連付けたクラス情報として登録する。
【００４１】
クラス情報の登録が終了すると、規約照合部１０９は、各クラスについて、クラス情報記憶部１０５からクラス情報を取得し（ステップ２０７）、クラス情報からそのクラスに設定されている役割を抽出した後、規約情報記憶部１０６から当該役割に対応する規約情報を取得する（ステップ２０８）。その後、そのクラスを解析し、当該規約情報に対する違反があるかどうかを判断する（ステップ２０９）。
【００４２】
ステップ２０９において、規約違反を検出した場合には、規約情報記憶部１０６に記憶されている所定の警告メッセージを、表示部１０３に出力するなどして、その事実をユーザに通知する（ステップ２１０）。ステップ２０９において、違反を検出しない場合には、そのままステップ２１１に処理を進める。
【００４３】
全てのクラスについて上記の規約違反の検出処理を行った場合には、処理を終了する。まだ規約違反の検出処理を行っていないクラスがある場合には、ステップ２０７に戻り、未処理のクラスについて上記同様の処理を行う。
【００４４】
以下に、上記において説明した本実施形態のオブジェクト指向プログラム作成支援装置の具体的な実施例を示す。尚、以下の各実施例では、プログラム言語としてＪａｖａを用いている。
【実施例１】
【００４５】
本実施形態のオブジェクト指向プログラム作成支援装置の具体的な実施例として、ＭＶＣモデルに従って作成されるオブジェクト指向プログラムに対する適用を例にとって説明する。
【００４６】
ＭＶＣモデルの概要
ここで、ＭＶＣ（Ｍｏｄｅｌ-Ｖｉｅｗ-Ｃｏｎｔｒｏｌｌｅｒ）モデルとは、主にオブジェクト指向プログラムの設計に用いられるモデルであり、処理の中核を担う「Ｍｏｄｅｌ」、表示・出力を司る「Ｖｉｅｗ」、入力を受け取ってその内容に応じてＶｉｅｗとＭｏｄｅｌを制御する「Ｃｏｎｔｒｏｌｌｅｒ」の３要素の組み合わせでシステムを構築するものである。
【００４７】
図３は、ＭＶＣモデルの概要を示す図である。
図３において、Ｍｏｄｅｌ３０１は、データや、データに対する操作などを含んだアプリケーションロジックである。Ｖｉｅｗ３０２は、Ｍｏｄｅｌ３０１のデータなどを外部に表示するものである。Ｃｏｎｔｒｏｌｌｅｒ３０３は、外部から入力を受け取り、Ｍｏｄｅｌ３０１やＶｉｅｗ３０２を制御するものである。
【００４８】
例えば、外部からの入力を受け取ったＣｏｎｔｒｏｌｌｅｒ３０３は、Ｍｏｄｅｌ３０１のデータを更新（３０４）するとともに、Ｖｉｅｗ３０２に対してＭｏｄｅｌ３０１のデータを表示（３０５）するように命令する。Ｖｉｅｗ３０２は、Ｍｏｄｅｌ３０１のデータを参照（３０６）し、これを外部に表示する。
【００４９】
このように、システムをＭｏｄｅｌ３０１、Ｖｉｅｗ３０２及びＣｏｎｔｒｏｌｌｅｒ３０３の３つの役割に分離することにより、開発作業の分業が容易になり、また、互いに仕様変更の影響を受けにくくて済むようになる。
【００５０】
特に、オブジェクト指向プログラムに適用する場合には、各クラスにＭｏｄｅｌ３０１、Ｖｉｅｗ３０２又はＣｏｎｔｒｏｌｌｅｒ３０３のいずれかの役割を割り当てることとなる。これにより、クラスの役割が明確となり、関連のある機能ごとに開発作業を適切に切り分けることができる。また、クラス間の関連が最小限になるため、関連のない他の部分の変更による影響を受けにくい実装にすることができる。すなわち、拡張性、再利用性の高いプログラムを作成することが可能となる。
【００５１】
クラスの役割情報
図４は、図１に示すオブジェクト指向プログラム作成支援装置の役割情報記憶部１０４に記憶される役割情報の例を示す図である。
図４に示すテーブルには、役割情報として、役割名４０１と、その役割の説明４０２とが含まれている。本例では、上記したＭＶＣモデルに従って、アプリケーションロジックを表すＭｏｄｅｌ４０３、Ｍｏｄｅｌを外部に表示するＶｉｅｗ４０４、Ｍｏｄｅｌ及びＶｉｅｗを制御するＣｏｎｔｒｏｌｌｅｒ４０５の３つの役割を示しているが、これら以外の（例えばユーザ定義の）役割を含んでいてもよい。
【００５２】
図５は、図１に示すオブジェクト指向プログラム作成支援装置の役割設定部１０７により、役割情報記憶部１０４に記憶された役割をクラスに設定する際の動作及び表示の例を示す図である。
【００５３】
本実施例では、クラスに役割を設定するためにＪａｖａｄｏｃのコメントを利用する。Ｊａｖａｄｏｃとは、Ｊａｖａプログラムの宣言部分とコメント部分を解析し、使用されているクラス、内部クラス、インタフェース、コンストラクタ、メソッド及びフィールドについて説明した一連のＨＴＭＬページを生成するツールである。Ｊａｖａｄｏｃは、対象プログラムに含まれる「/**」で始まるコメントを解析する。Ｊａｖａｄｏｃのコメントには、著者名を表す「@author」タグや、バージョンを表す「@version」タグなどを記述することができる。本実施例では、クラスの役割を表す情報として「@role」タグを定義している。また、１つのクラスにおいて複数の「@role」タグを記述することができるものとする。
【００５４】
図５において、「Component.java」ファイル内においてクラスを作成中のユーザは、「/**」で始まるコメント部分において「@role」タグを記述し、そのクラスの役割を記述することにより、このクラスに役割情報を設定することができる。本実施例では、「@role」タグを記述した後に、役割を入力するための特定の操作（例えば、Ctrl+Spaceキーの押下など）を行うと、設定可能な役割の一覧５０１が表示され、さらにその中で選択した役割の説明５０２が表示されるようになっている。これは、役割設定部１０７が、役割情報記憶部１０４から役割情報を取得し、表示部１０３に表示することにより実現される。
【００５５】
ユーザが表示されている役割一覧５０１から役割を選択し確定させる（例えば、Enterキーを押下する）と、「@role」タグのあとに、その選択された役割が入力される。例えば、役割「Ｍｏｄｅｌ」を選択し、Enterキーを押下すると、「@role Model」５０３と入力され、「@role」タグが記述されたこととなる。すなわち、役割設定部１０７により、このクラスに役割「Ｍｏｄｅｌ」が設定されたこととなる。
【００５６】
プログラムの例
図６は、本実施例において作成されたＪａｖａプログラムの例を示す図である。このプログラムは、「Window.java」ファイル６０１、「Manager.java」ファイル６０２、及び「Component.java」ファイル６０３から構成されている。尚、各ファイル６０１〜６０３には、上記したように役割設定部１０７により役割を示す「@role」タグがJavadocコメントとして挿入されている。
【００５７】
「Window.java」ファイル６０１は、「Window」クラス６０４を定義している。「Window」クラス６０４は、役割「View」６０５が設定されており、属性として「Component」クラス６１１の参照（６０６）を持っている。
【００５８】
「Manager.java」ファイル６０２は、「Manager」クラス６０７を定義している。「Manager」クラス６０７は、役割「Controller」６０８が設定されており、属性として「Window」クラス６０４の参照（６０９）と、「Component」クラス６１１の参照（６１０）とを持っている。
【００５９】
「Component.java」ファイル６０３は、「Component」クラス６１１を定義している。「Component」クラス６１１は、役割「Model」６１２が設定されており、属性として「Window」クラス６０４の参照（６１３）を持っている。
【００６０】
クラス情報
次に、オブジェクト指向プログラム作成支援装置のクラス情報登録部１０８により、作成されたプログラムからクラス情報を生成し、クラス情報記憶部１０５に登録する処理について詳細に説明する。
【００６１】
ユーザが作成したプログラムを保存すると、クラス情報登録部１０８が実行される。クラス情報登録部１０８は、まず、当該プログラムを読み込み、解析し、クラス情報を抽出する。上記において作成したＪａｖａプログラムから、クラス情報を含んだＪａｖａｄｏｃコメントを抽出するためには、Ｊａｖａｄｏｃのドックレットを用いる。
【００６２】
図７は、Ｊａｖａプログラムからクラス情報を抽出するドックレットの例「Doclet.java」を示す図である。
図７に示す「Doclet.java」が実行されると、まず、startメソッドが呼ばれる（７０１）。startメソッドは、「Doclet」クラスのオブジェクトを生成し（７０２）、「showClassInfo」メソッドを呼び出す（７０３）。「showClassInfo」メソッドは、まず、「classes」メソッドにより、パッケージやクラスなどの情報が格納された「RootDoc」オブジェクトから、クラスの情報を取得する（７０４）。次に、「tags」メソッドにより、クラスから、Ｊａｖａｄｏｃコメントの情報を取得する（７０５）。取得したＪａｖａｄｏｃコメントの情報に「@role」が含まれているかどうかを判断し（７０６）、含まれている場合には、パッケージを含む完全修飾名と、「@role」タグのテキスト(タグ名のあとに記述された部分)とを出力する（７０７）。
【００６３】
尚、Ｊａｖａｄｏｃのドックレットは、例えば、Ｗｉｎｄｏｗｓ（登録商標）のＤＯＳコマンドプロンプトにおいて、
「javadoc -doclet sample.Doclet -classpath %JAVA_HOME%\lib\tools.jar -private “読み込むプログラム”」
と入力すれば、実行することができる。「-doclet」は、Ｓｕｎ Ｍｉｃｒｏｓｙｓｔｅｍｓ社による標準ドックレットに代えて、ユーザ自身が作成したドックレットをＪａｖａｄｏｃに渡すためのオプションである。本実施例では、もちろん、クラス情報登録部１０８が以上の動作を自動的に行なう。
【００６４】
図８は、図６に示すＪａｖａプログラムに対して図７に示すドックレット「Doclet.java」を実行した場合の出力の例を示す図である。
図８において、「Doclet.java」は、「Window.java」ファイル６０１、「Manager.java」ファイル６０２及び「Component.java」ファイル６０３を順次読み込む。その後、プログラムに含まれている各クラスから、Ｊａｖａｄｏｃコメントの情報を取得する（Ｊａｖａｄｏｃ情報の構築）。
【００６５】
その結果、クラス情報として、クラス名「sample.Window」とその役割「Ｖｉｅｗ」、クラス名「sample.Manager」とその役割「Ｃｏｎｔｒｏｌｌｅｒ」、クラス名「sample.Component」とその役割「Ｍｏｄｅｌ」が出力されている。これらの情報が、クラス情報登録部１０８によりクラス情報記憶部１０５に登録されるクラス情報である。
【００６６】
図９は、図１に示すオブジェクト指向プログラム作成支援装置のクラス情報記憶部１０５に記憶されるクラス情報の例を示す図である。
図９に示すテーブルには、クラス情報として、クラス名９０１と、そのクラスの役割９０２とが含まれている。尚、クラス名９０１は、パッケージを含む完全修飾名として記憶されているものとする。本例では、上記でＪａｖａｄｏｃのドックレットにより抽出した３レコード分のクラス情報が記憶されている。
【００６７】
役割に関する規約情報
図１０は、図１に示すオブジェクト指向プログラム作成支援装置の規約情報記憶部１０６に記憶される規約情報の例を示す図である。
図１０に示すテーブルには、規約情報として、役割名１００１と、その役割に対応する規約１００２と、その規約を違反していた場合に出力する警告メッセージ１００３とが含まれている。本例では、図４に示す役割情報記憶部１０４において既に定義してあるＭｏｄｅｌ４０３、Ｖｉｅｗ４０４及びＣｏｎｔｒｏｌｌｅｒ４０５のそれぞれについて、対応する規約及び警告メッセージが記憶されている。
【００６８】
クラスの規約違反の検出
プログラムからクラス情報を取得し、クラス情報記憶部１０５に登録する処理が完了すると、続いて、規約照合部１０９は、クラス情報記憶部１０５及び規約情報記憶部１０６を参照しながら、各クラスの規約違反を検出する処理を行う。
【００６９】
図１１は、規約照合部１０９の処理手順の概要を示すフローチャートである。
図１１において、規約照合部１０９は、まず、クラス情報記憶部１０５からクラス情報を取得する（ステップ１１０１）。本例では、図９に示すクラス情報の３つのレコードが取得される。以下の処理は、取得したクラス情報の各レコードについて繰り返すものとする（ステップ１１０２）。
【００７０】
規約照合部１０９は、クラス情報から１レコード選択する（ステップ１１０３）。例えば、図９に示すクラス情報から、「sample.Component, Model」を選択したとする。次に、図１０に示す規約情報記憶部１０６において、選択したレコードの役割に対応する規約を検索する（ステップ１１０４）。「sample.Component, Model」の役割は「Ｍｏｄｅｌ」であるので、これに対応する規約として、「Ｃｏｎｔｒｏｌｌｅｒと関連を持たない」と、「Ｖｉｅｗと関連を持たない」とが得られる。
【００７１】
続いて、以下の処理を得られた規約ごとに繰り返すものとする（ステップ１１０５）。「sample.Component」クラスが含まれている「Component.java」ファイル６０３を取得し、そのプログラムを解析し、上記で取得した各規約に違反しているかどうかをチェックする（ステップ１１０６、１１０７）。規約違反が検出された場合には、その規約に対応する警告メッセージを出力する（ステップ１１０８）。その後、ステップ１１０５に戻り、繰り返し処理を行う。
【００７２】
例えば、「sample.Component」クラスのプログラムを解析し、「Ｃｏｎｔｒｏｌｌｅｒと関連を持たない」という規約に違反しているかどうかをチェックする。ここで、上記で取得したクラス情報から、役割「Ｃｏｎｔｒｏｌｌｅｒ」を持つクラスは「sample.Manager」であることが分かるので、「sample.Component」クラスが、「sample.Manager」クラスと関連を持っているかどうかをチェックすればよい。
【００７３】
ここで、本実施例において、あるクラスが他のクラスと関連を持つとは、（１）プログラム内に属性として他のクラスの参照を持つこと、（２）メソッド内に他のクラスのオブジェクトの参照を持つこと、（３）メソッドの引数として、他のクラスのオブジェクトの参照を持つこと、のいずれかに該当することを言う。
図６に示すように、「sample.Component」クラスは、「sample.Manager」クラスとは関連を持っていないことが分かる。
【００７４】
次に、「sample.Component」クラスの「Ｖｉｅｗと関連を持たない」という規約に違反しているかどうかをチェックする。上記同様に、クラス情報から、役割「Ｖｉｅｗ」を持つクラスは「sample.Window」クラスであることが分かるので、「sample.Component」クラスが、「sample.Window」クラスと関連を持っているかどうかをチェックすればよい。
【００７５】
図６に示すように、「sample.Component」クラスは、属性として「sample.Window」の参照（６１３）を持っているため、「sample.Window」クラスと関連を持っていることとなる。すなわち、「sample.Component」クラスは、「Ｖｉｅｗと関連を持たない」という規約を違反していることが分かる。
【００７６】
そこで、規約照合部１０９は、この規約に対応する警告メッセージ「Ｖｉｅｗと関連を持っています」を出力する。この警告メッセージは、表示部１０３などに表示されるようになっている。
【００７７】
以上で取得したクラス情報の取得したレコード「sample.Component, Model」に対する規約違反の検出が全て終了する。続いて、ステップ１１０２に戻り、クラス情報の他のレコードについて上記の処理を繰り返す。
【００７８】
図１２は、規約違反を検出した場合に表示部１０３に表示する警告メッセージの例を示す図である。図１２に示す画面では、警告メッセージ１２０１と、規約違反しているクラス名１２０２と、プログラム中の規約違反の箇所を示す行数１２０３とを表示している。警告メッセージの表示方法はもちろんこれに限定されるわけではない。
【実施例２】
【００７９】
本実施形態のオブジェクト指向プログラム作成支援装置の第２の実施例について説明する。本実施例は、オブジェクト指向プログラムのクラス間における継承関係に着目して、各クラスの役割情報及び規約情報を定めたものである。
【００８０】
図１３は、本実施例において、オブジェクト指向プログラム作成支援装置の役割情報記憶部１０４に記憶される役割情報の例を示す図である。図１３に示すテーブルには、役割情報として、役割名１３０１と、その役割の説明１３０２とが含まれている。
【００８１】
図に示す例では、それ以降に続くクラスのスーパークラスであるＳｕｐｅｒｃｌａｓｓ Ａ１３０３と、Ｓｕｐｅｒｃｌａｓｓ ＡのサブクラスであるＳｕｂｃｌａｓｓ ａ１，ａ２，…とが登録されている。
【００８２】
図１４は、本実施例において、オブジェクト指向プログラム作成支援装置の規約情報記憶部１０６に記憶される規約情報の例を示す図である。
図１４に示すテーブルには、規約情報として、役割名１４０１と、その役割に対応する規約１４０２と、その規約を違反していた場合に出力する警告メッセージ１４０３とが含まれている。
【００８３】
図に示す例では、上記でＳｕｐｅｒｃｌａｓｓ Ａのサブクラスであると定義したサブクラスＳｕｂｃｌａｓｓ ａ１，ａ２，…のそれぞれについて、対応する規約と警告メッセージとが記憶されている。
【００８４】
本実施例において、上記した以外の構成及び動作は、実施例１と同様とすることができる。こうして、本実施例では、オブジェクト指向プログラム作成支援装置は、オブジェクト指向プログラムのクラス間の継承関係について規約違反を検出し、ユーザに警告することにより、クラス同士が適切な継承関係を有するプログラムが作成されるように支援することができる。
【００８５】
尚、本実施例において、規約照合部１０９が継承関係に関する規約違反を検出するには、プログラム内においてクラスの継承関係を示す宣言文を検出し、これを規約と照合すればよい。例えば、「Class a1 extends A」といった宣言文が検出されれば、そのプログラムは図１４に示す規約に適合しているものと判断することができる。
【００８６】
以上、本発明のオブジェクト指向プログラムの作成支援装置及び作成支援方法について、具体的な実施の形態を示して説明したが、本発明はこれらに限定されるものではない。当業者であれば、本発明の要旨を逸脱しない範囲内において、上記各実施形態又は他の実施形態にかかる発明の構成及び機能に様々な変更・改良を加えることが可能である。
【００８７】
特に、クラスに設定する役割情報とそれに対応する規約情報については、ユーザの目的に合わせて様々な定義をすることができる。上記した例以外にも、例えば、クラスが有するべき属性や操作をクラスの役割情報として定義することもできる。
【産業上の利用可能性】
【００８８】
本発明のオブジェクト指向プログラムの作成支援装置及び作成支援方法は、あらゆるオブジェクト指向プログラムの作成を支援するために利用することができる。また、一般的なプログラム作成環境と連携して動作するプログラム作成支援プログラムとして実施することも可能である。
【図面の簡単な説明】
【００８９】
【図１】本発明の一実施形態にかかるオブジェクト指向プログラムの作成支援装置について、その内部構成を概略的に示す機能ブロック図である。
【図２】図１に示すオブジェクト指向プログラム作成支援装置の動作の流れを示すフローチャートである。
【図３】ＭＶＣモデルの概要を示す図である。
【図４】図１に示すオブジェクト指向プログラム作成支援装置の役割情報記憶部に格納される役割情報の例を示す図である。
【図５】図１に示すオブジェクト指向プログラム作成支援装置の役割設定部により、役割情報記憶部に記憶された役割をクラスに設定する際の動作及び表示の例を示す図である。
【図６】本発明のオブジェクト指向プログラムの作成支援装置を用いて作成されたＪａｖａプログラムの例を示す図である。
【図７】Ｊａｖａプログラムからクラス情報を抽出するドックレットの例「Doclet.java」を示す図である。
【図８】図６に示すＪａｖａプログラムに対して図７に示すドックレット「Doclet.java」を実行した場合の出力の例を示す図である。
【図９】図１に示すオブジェクト指向プログラム作成支援装置のクラス情報記憶部に記憶されるクラス情報の例を示す図である。
【図１０】図１に示すオブジェクト指向プログラム作成支援装置の規約情報記憶部に記憶される規約情報の例を示す図である。
【図１１】図１に示すオブジェクト指向プログラム作成支援装置の規約照合部の処理手順の概要を示すフローチャートである。
【図１２】図１に示すオブジェクト指向プログラム作成支援装置において、規約違反を検出した場合に表示部１０３に表示する警告メッセージの例を示す図である。
【図１３】図１に示すオブジェクト指向プログラム作成支援装置の役割情報記憶部に記憶される役割情報の例を示す図である。
【図１４】図１に示すオブジェクト指向プログラム作成支援装置の規約情報記憶部に記憶される規約情報の例を示す図である。
【符号の説明】
【００９０】
１０１  入力部
１０２  プログラム編集部
１０３  表示部
１０４  役割情報記憶部
１０５  クラス情報記憶部
１０６  規約情報記憶部
１０７  役割設定部
１０８  クラス情報登録部
１０９  規約照合部
３０１  Ｍｏｄｅｌ
３０２  Ｖｉｅｗ
３０３  Ｃｏｎｔｒｏｌｌｅｒ
４０１  役割名
４０２  役割の説明
５０１  クラスに設定可能な役割の一覧
５０２  役割の説明
６０１  Window.javaファイル
６０２  Manager.javaファイル
６０３  Component.javaファイル
９０１  クラス名
９０２  クラスに設定された役割
１００１  役割名
１００２  役割に対応する規約
１００３  規約違反の警告メッセージ
１２０１  警告メッセージ
１２０２  クラス名
１２０３  規約違反のあった行数
１３０１  役割名
１３０２  役割の説明
１４０１  役割名
１４０２  役割に対応する規約
１４０３  規約違反の警告メッセージ
【図１】
2005092519.tif 000003
【図２】
2005092519.tif 000004
【図３】
2005092519.tif 000005
【図４】
2005092519.tif 000006
【図５】
2005092519.tif 000007
【図６】
2005092519.tif 000008
【図７】
2005092519.tif 000009
【図８】
2005092519.tif 000010
【図９】
2005092519.tif 000011
【図１０】
2005092519.tif 000012
【図１１】
2005092519.tif 000013
【図１２】
2005092519.tif 000014
【図１３】
2005092519.tif 000015
【図１４】
2005092519.tif 000016