(57)【要約】【課題】一般的なオブジェクト指向ソフトウェア開発においても、プログラミング作業を効率化し、品質を向上させることを目的とする。【解決手段】クラス定義とインスタンス定義とを入力する入力部１１０と、クラス定義を編集するクラス定義編集部１１１と、編集されたクラス定義情報に基づいて、ソースコードを生成するクラス定義記述生成部１１２と、インスタンス定義を編集するインスタンス定義編集部１１３と、インスタンス定義情報とクラス定義情報とに基づいて、ソースコードを生成するインスタンス定義記述生成部１１５と、インスタンス定義がクラス定義に従っているかどうかを検査するインスタンス定義検査部１１４とを備えたことを特徴とする。【選択図】        図１
2004287695.tif 000002
【特許請求の範囲】
【請求項１】
プログラム開発のためのクラス定義情報とインスタンス定義情報とを入力する入力部と、
上記入力部により入力されたクラス定義情報を編集し、記憶装置に記憶するクラス定義編集部と、
上記クラス定義編集部により編集されたクラス定義情報を上記記憶装置と上記クラス定義編集部とのいずれかから入力し、入力されたクラス定義情報に基づいて、プログラミング言語によるクラス定義記述を生成するクラス定義記述生成部と、
上記入力部により入力されたインスタンス定義情報を編集し、上記記憶装置に記憶するインスタンス定義編集部と、
上記インスタンス定義編集部により編集されたインスタンス定義情報を上記記憶装置と上記インスタンス定義編集部とのいずれかから入力し、上記クラス定義編集部により編集されたクラス定義情報を上記記憶装置と上記クラス定義編集部とのいずれかから入力し、入力されたインスタンス定義情報とクラス定義情報とに基づいて、上記プログラミング言語で記述されたインスタンス定義記述を生成するインスタンス定義記述生成部と、
上記インスタンス定義編集部により編集されたインスタンス定義情報と上記インスタンス定義記述生成部により生成されたインスタンス定義記述との内少なくとも１つに基づいて、上記入力部により入力されたインスタンス定義情報におけるインスタンス定義が上記入力部により入力されたクラス定義情報におけるクラス定義に従っているかどうかを検査するインスタンス定義検査部と、
上記クラス定義記述生成部により生成されたクラス定義記述と上記インスタンス定義記述生成部により生成されたインスタンス定義記述との内少なくとも１つを出力し、さらに、上記インスタンス定義検査部により検査された結果、上記インスタンス定義が上記クラス定義に従っていない場合に、ユーザに再度インスタンス定義情報の入力を促す出力部と
を備えたことを特徴とするプログラム開発支援装置。
【請求項２】
上記クラス定義記述生成部は、クラス定義記述として、Ｃ言語とＣ＋＋言語とのいずれかのプログラミング言語で記述されたソースコードを生成し、
上記インスタンス定義記述生成部は、インスタンス定義記述として、上記クラス定義記述生成部により生成されたソースコードのプログラミング言語と同じプログラミング言語でソースコードを生成することを特徴とする請求項１記載のプログラム開発支援装置。
【請求項３】
上記出力部は、上記ユーザに対し、ＵＭＬ（ＵｎｉｆｉｅｄＭｏｄｅｌｉｎｇ  Ｌａｎｇｕａｇｅ）のコラボレーション図とオブジェクト図との内少なくとも１つを用いて、上記入力部を介してインスタンス定義情報の入力を促し、
上記インスタンス定義編集部は、上記出力部により促され上記入力部を介して入力されたインスタンス定義情報を編集することを特徴とする請求項２記載のプログラム開発支援装置。
【請求項４】
上記インスタンス定義情報は、上記出力部により促されたコラボレーション図とオブジェクト図との内少なくとも１つに基づいて、上記インスタンス定義情報におけるインスタンスとインスタンス間のリンクが定義された情報であることを特徴とする請求項３記載のプログラム開発支援装置。
【請求項５】
上記出力部は、上記ユーザに対し、一覧表形式で表示された編集可能な編集画面に基づいて、上記入力部を介してインスタンス定義情報の入力を促し、
上記インスタンス定義編集部は、上記出力部により促され上記入力部を介して入力されたインスタンス定義情報を編集することを特徴とする請求項２記載のプログラム開発支援装置。
【請求項６】
上記インスタンス定義情報は、上記出力部により促された一覧表形式で表示された編集可能な編集画面に基づいて、上記インスタンス定義情報におけるインスタンスとインスタンスとの間のリンクとインスタンスの初期値とが定義された情報であることを特徴とする請求項５記載のプログラム開発支援装置。
【請求項７】
上記入力部は、複数のクラス定義情報を入力し、
上記インスタンス定義編集部は、上記入力部により入力された複数のクラス定義情報における複数のクラスを複数のグループにグループ化して上記グループ毎に１つの一覧表形式の編集画面を構成することを特徴とする請求項６記載のプログラム開発支援装置。
【請求項８】
上記インスタンス定義記述生成部は、上記インスタンス定義編集部によりグループ化されたグループ毎に対応するソースコードを生成することを特徴とする請求項７記載のプログラム開発支援装置。
【請求項９】
上記インスタンス定義検査部は、上記クラス定義情報と上記インスタンス定義情報とに基づいて、他のいずれのインスタンスからもリンクが定義されていないインスタンスを検出し、検出されたインスタンスを上記出力部を介してユーザに出力することを特徴とする請求項２記載のプログラム開発支援装置。
【請求項１０】
上記インスタンス定義検査部は、上記クラス定義情報と上記インスタンス定義情報とに基づいて、リンクによる参照先の不正な重複を検出し、検出された不正な重複を上記出力部を介してユーザに出力することを特徴とする請求項２記載のプログラム開発支援装置。
【請求項１１】
プログラム開発のためのクラス定義情報とインスタンス定義情報とを入力する入力工程と、
上記入力工程により入力されたクラス定義情報を編集し、記憶装置に記憶するクラス定義編集工程と、
上記クラス定義編集工程により編集されたクラス定義情報を上記記憶装置から入力し、入力されたクラス定義情報に基づいて、プログラミング言語によるクラス定義記述を生成するクラス定義記述生成工程と、
上記入力工程により入力されたインスタンス定義情報を編集し、上記記憶装置に記憶するインスタンス定義編集工程と、
上記インスタンス定義編集工程により編集されたインスタンス定義情報を上記記憶装置から入力し、上記クラス定義編集工程により編集されたクラス定義情報を上記記憶装置から入力し、入力されたインスタンス定義情報とクラス定義情報とに基づいて、上記プログラミング言語で記述されたインスタンス定義記述を生成するインスタンス定義記述生成工程と、
上記インスタンス定義編集工程により編集されたインスタンス定義情報と上記インスタンス定義記述生成工程により生成されたインスタンス定義記述との内少なくとも１つに基づいて、上記入力工程により入力されたインスタンス定義情報におけるインスタンス定義が上記入力工程により入力されたクラス定義情報におけるクラス定義に従っているかどうかを検査するインスタンス定義検査工程と、上記クラス定義記述生成工程により生成されたクラス定義記述と上記インスタンス定義記述生成工程により生成されたインスタンス定義記述との内少なくとも１つを出力し、さらに、上記インスタンス定義検査工程により検査された結果、上記インスタンス定義が上記クラス定義に従っていない場合に、ユーザに再度インスタンス定義情報の入力を促す出力工程と
を備えたことを特徴とするプログラム開発支援方法。
【請求項１２】
プログラム開発のためのクラス定義情報とインスタンス定義情報とを入力する入力処理と、
上記入力処理により入力されたクラス定義情報を編集し、記憶装置に記憶するクラス定義編集処理と、
上記クラス定義編集処理により編集されたクラス定義情報を上記記憶装置から入力し、入力されたクラス定義情報に基づいて、プログラミング言語によるクラス定義記述を生成するクラス定義記述生成処理と、
上記入力処理により入力されたインスタンス定義情報を編集し、上記記憶装置に記憶するインスタンス定義編集処理と、
上記インスタンス定義編集処理により編集されたインスタンス定義情報を上記記憶装置から入力し、上記クラス定義編集処理により編集されたクラス定義情報を上記記憶装置から入力し、入力されたインスタンス定義情報とクラス定義情報とに基づいて、上記プログラミング言語で記述されたインスタンス定義記述を生成するインスタンス定義記述生成処理と、
上記インスタンス定義編集処理により編集されたインスタンス定義情報と上記インスタンス定義記述生成処理により生成されたインスタンス定義記述との内少なくとも１つに基づいて、上記入力処理により入力されたインスタンス定義情報におけるインスタンス定義が上記入力処理により入力されたクラス定義情報におけるクラス定義に従っているかどうかを検査するインスタンス定義検査処理と、
上記クラス定義記述生成処理により生成されたクラス定義記述と上記インスタンス定義記述生成処理により生成されたインスタンス定義記述との内少なくとも１つを出力し、さらに、上記インスタンス定義検査処理により検査された結果、上記インスタンス定義が上記クラス定義に従っていない場合に、ユーザに再度インスタンス定義情報の入力を促す出力処理とをコンピュータに実行させるためのプログラム。
【請求項１３】
プログラム開発のためのクラス定義情報とインスタンス定義情報とを入力する入力処理と、
上記入力処理により入力されたクラス定義情報を編集し、記憶装置に記憶するクラス定義編集処理と、
上記クラス定義編集処理により編集されたクラス定義情報を上記記憶装置から入力し、入力されたクラス定義情報に基づいて、プログラミング言語によるクラス定義記述を生成するクラス定義記述生成処理と、
上記入力処理により入力されたインスタンス定義情報を編集し、上記記憶装置に記憶するインスタンス定義編集処理と、
上記インスタンス定義編集処理により編集されたインスタンス定義情報を上記記憶装置から入力し、上記クラス定義編集処理により編集されたクラス定義情報を上記記憶装置から入力し、入力されたインスタンス定義情報とクラス定義情報とに基づいて、上記プログラミング言語で記述されたインスタンス定義記述を生成するインスタンス定義記述生成処理と、
上記インスタンス定義編集処理により編集されたインスタンス定義情報と上記インスタンス定義記述生成処理により生成されたインスタンス定義記述との内少なくとも１つに基づいて、上記入力処理により入力されたインスタンス定義情報におけるインスタンス定義が上記入力処理により入力されたクラス定義情報におけるクラス定義に従っているかどうかを検査するインスタンス定義検査処理と、上記クラス定義記述生成処理により生成されたクラス定義記述と上記インスタンス定義記述生成処理により生成されたインスタンス定義記述との内少なくとも１つを出力し、さらに、上記インスタンス定義検査処理により検査された結果、上記インスタンス定義が上記クラス定義に従っていない場合に、ユーザに再度インスタンス定義情報の入力を促す出力処理とをコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、プログラム開発支援装置またはプログラム開発支援方法に関するものである。また、プログラム開発支援に関する装置を動作させるプログラムまたは上記プログラムを記録したコンピュータ読み取り可能な記録媒体に関するものである。特に、オブジェクト指向のソフトウェア開発において、設計モデルに基づいてソースコードを生成する装置に関するものである。
【０００２】
【従来の技術】
オブジェクト指向開発においては、ＵＭＬ（Ｕｎｉｆｉｅｄ  Ｍｏｄｅｌｉｎｇ  Ｌａｎｇｕａｇｅ）を用いて設計モデルを記述し、その内容に基づいてプログラミングを行うことが一般的である。設計モデルの内容はプログラミング言語の記述レベルに近く、クラス、属性、操作といったクラス仕様に関するモデル要素は、プログラミング言語上のデータ構造、データメンバ、関数といった言語上の要素に明確に対応付けられるという特徴がある。
【０００３】
オブジェクト指向プログラムをコンピュータを利用して自動生成するソフトウエア開発の作業効率を大幅に向上させることを目的として以下の手段が公知になっている。オブジェクト指向プログラムの自動生成装置は、モデルから最終製品であるプログラムを自動生成する。静的部分のプログラムの生成は、開発対象システムの構造を表現する図、即ちクラス図等から静的部分の定義を抽出するステップを含む。動的部分のプログラムの生成は、開発対象システムの振る舞いを表現する図、即ちステートチャート図等から動的部分の定義を抽出するステップと、ステートチャート図等からステートマシンツリーを構築するステップを含む。プログラム生成ステップでは、静的部分のプログラムコードの自動生成と共に動的部分のプログラムコードの自動生成が行われ、更にこれらのプログラムコードを結合して最終製品のプログラムコードの完全な自動生成が行われる（特許文献１参照）。
【０００４】
オブジェクト指向設計支援システムなどにおける、インスタンスの図形入出力インタフェース構築を容易にすることを目的として以下の手段が公知になっている。図形エディタの画面操作で、クラスに対応するユーザ図形を作図して、結線ポイントや図形属性のスロットを指定しておく。これにより、図形入出力、結合、表示変形等のプログラムを自動生成し、インスタンスの図形入力、図形結線によるインスタンスの結合、インスタンスのスロット更新によるアニメーション記述を可能にする（特許文献２参照）。
【０００５】
【特許文献１】
特開２００２−１１６９１１号公報
【特許文献２】
特開２００１−１８４２１３号公報
【０００６】
【発明が解決しようとする課題】
設計モデルにはクラス仕様だけでなく、静的インスタンス仕様を含むこともある。Ｃ＋＋のようなオブジェクト指向言語で記述されたソフトウェアではインスタンスの生成はしばしば動的に行なわれるが、静的に定義することも可能である。特に、機器組み込みソフトウェアのように動的なインスタンス生成が適さない分野では、静的なインスタンス定義ができることが重要である。
【０００７】
設計モデルを元にしたプログラミング作業を効率化するため、設計モデルからのソースコードの自動生成が従来から行なわれてきた。例えばＲａｔｉｏｎａｌＳｏｆｔｗａｒｅ  Ｃｏｒｐ．のオブジェクト指向モデリングツールであるＲａｔｉｏｎａｌ  Ｒｏｓｅ（登録商標）は、ＵＭＬの図の１つであるクラス図で記述したクラス定義情報から、クラスのデータ構造やクラス間の関係といったクラス仕様の静的な側面を表現するソースコードを生成できるとしている。
【０００８】
しかしながらＲａｔｉｏｎａｌ  Ｒｏｓｅ（登録商標）では、プログラムの実行アルゴリズムのようなクラス仕様の動的な側面を表現するソースコードを生成することはできない。
【０００９】
また、特許文献１における先行技術では、クラス仕様の静的な側面と動的な側面の両方を表現するソースコードを生成する。この先行技術では、クラス図のような構造を表す図から、クラスの静的な仕様を表現するソースコードを生成する第１プログラム生成手段と、ステートチャート図のような振る舞いを表す図から、クラスの動的な仕様を表現するソースコードを生成する第２プログラム生成手段と、第１プログラム生成手段が生成したソースコードと第２プログラム生成手段が生成したソースコードを結合する第３プログラム生成手段から構成される。
【００１０】
しかしながらこの先行技術では、クラス仕様を表現するソースコードは生成できるものの、インスタンス仕様を表現するソースコードを生成することはできない。
【００１１】
次に、特許文献２における先行技術では、設計情報を元にクラス仕様とインスタンス仕様を表現するソースコードを生成する。この先行技術では、通常の図形エディタを拡張した適用型図形エディタを用いて、対話操作で入出力法の設定を行なう。適用型図形エディタでは、オペレータが基本図形を組み合わせて任意の図形を定義すると、クラスに対応させて記憶する。またオペレターがユーザ図形の結線ポイントを指定すると、描画した図形の結線で両端のインスタンス間を自動的にポインタで結合するメソッドを生成する。さらに、オペレータが表示図形の属性、たとえば、図形要素の長さ、色、柄、文字列などを表した表示スロットを指定すると、表示スロットの値を更新して表示図形を変形するメソッドを生成する。
【００１２】
しかしながらこの先行技術は、電子装置などのシミュレーションを行なうソフトウェアを効率よく構成することを目的としたものであり、オブジェクト指向技術に基づいて開発されたソフトウェア全般に適用できるものではない。例えばこの先行技術では、インスタンス間を自動的に結合することが記載されているが、この先行技術でいう結合とは電子回路の結線をシミュレートするための表示・結線・発火といった一群のメソッドを組み合わせたものであり、結合対象となるすべてのクラスがこれらのメソッドを持つと仮定している。この仮定はこの先行技術が想定しているようなシミュレーションを行なうソフトウェアに特有のものであって、一般的なソフトウェア全般に適用できるものではない。
【００１３】
本発明は、一般的なオブジェクト指向ソフトウェア開発においても、設計モデルを元にしたプログラミング作業を効率化するとともに、手作業による誤りを防止してソフトウェアの品質を向上させることを目的とする。
【００１４】
【課題を解決するための手段】
この発明に係るプログラム開発支援装置は、プログラム開発のためのクラス定義情報とインスタンス定義情報とを入力する入力部と、
上記入力部により入力されたクラス定義情報を編集し、記憶装置に記憶するクラス定義編集部と、
上記クラス定義編集部により編集されたクラス定義情報を上記記憶装置と上記クラス定義編集部とのいずれかから入力し、入力されたクラス定義情報に基づいて、プログラミング言語によるクラス定義記述を生成するクラス定義記述生成部と、
上記入力部により入力されたインスタンス定義情報を編集し、上記記憶装置に記憶するインスタンス定義編集部と、
上記インスタンス定義編集部により編集されたインスタンス定義情報を上記記憶装置と上記インスタンス定義編集部とのいずれかから入力し、上記クラス定義編集部により編集されたクラス定義情報を上記記憶装置と上記クラス定義編集部とのいずれかから入力し、入力されたインスタンス定義情報とクラス定義情報とに基づいて、上記プログラミング言語で記述されたインスタンス定義記述を生成するインスタンス定義記述生成部と、
上記インスタンス定義編集部により編集されたインスタンス定義情報と上記インスタンス定義記述生成部により生成されたインスタンス定義記述との内少なくとも１つに基づいて、上記入力部により入力されたインスタンス定義情報におけるインスタンス定義が上記入力部により入力されたクラス定義情報におけるクラス定義に従っているかどうかを検査するインスタンス定義検査部と、
上記クラス定義記述生成部により生成されたクラス定義記述と上記インスタンス定義記述生成部により生成されたインスタンス定義記述との内少なくとも１つを出力し、さらに、上記インスタンス定義検査部により検査された結果、上記インスタンス定義が上記クラス定義に従っていない場合に、ユーザに再度インスタンス定義情報の入力を促す出力部とを備えたことを特徴とする。
【００１５】
【発明の実施の形態】
実施の形態１．
以下、図面を参照してこの発明の実施形態を説明する。
図１は、実施の形態１に係わるオブジェクト指向開発支援装置の構成を示す図である。
図１において、オブジェクト指向開発支援装置１０１（プログラム開発支援装置の一例である）は、入力部１１０と、設計モデル１２１に含まれるクラス定義情報１２２を編集するクラス定義編集部１１１と、クラス定義情報１２２からプログラミング言語によるクラス定義記述１３１を生成するクラス定義記述生成部１１２と、設計モデル１２１に含まれるインスタンス定義情報１２３を編集するインスタンス定義編集部１１３と、不正なインスタンス定義を検出し報告するインスタンス定義検査部１１４と、クラス定義情報とインスタンス定義情報からプログラミング言語で記述されたインスタンス定義記述１４１を生成するインスタンス定義記述生成部１１５と、出力部１１６を備えている。
【００１６】
記憶装置１２０は、設計モデル１２１を記憶する。設計モデル１２１は、クラス定義情報１２２とインスタンス定義情報１２３とを有している。記憶装置１３０は、クラス定義記述１３１を記憶する。記憶装置１４０は、インスタンス定義記述１４１を記憶する。記憶装置１２０は、図１では、オブジェクト指向開発支援装置１０１の外部に位置しているが、オブジェクト指向開発支援装置１０１の内部にあっても構わない。同様に、記憶装置１３０は、図１では、オブジェクト指向開発支援装置１０１の外部に位置しているが、オブジェクト指向開発支援装置１０１の内部にあっても構わない。同様に、記憶装置１４０は、図１では、オブジェクト指向開発支援装置１０１の外部に位置しているが、オブジェクト指向開発支援装置１０１の内部にあっても構わない。
【００１７】
入力部１１０は、プログラム開発のためのクラス定義情報とインスタンス定義情報とを入力する。
【００１８】
クラス定義編集部１１１は、上記入力部１１０により入力されたクラス定義情報を編集し、記憶装置１２０に記憶する。
【００１９】
クラス定義記述生成部１１２は、上記クラス定義編集部１１１により編集されたクラス定義情報を上記記憶装置１２０と上記クラス定義編集部１１１とのいずれかから入力し、入力されたクラス定義情報に基づいて、プログラミング言語によるクラス定義記述を生成する。
【００２０】
インスタンス定義編集部１１３は、上記入力部１１０により入力されたインスタンス定義情報を編集し、上記記憶装置１２０に記憶する。
【００２１】
インスタンス定義記述生成部１１５は、上記インスタンス定義編集部１１３により編集されたインスタンス定義情報を上記記憶装置１２０と上記インスタンス定義編集部１１３とのいずれかから入力し、上記クラス定義編集部１１１により編集されたクラス定義情報を上記記憶装置１２０と上記クラス定義編集部１１１とのいずれかから入力し、入力されたインスタンス定義情報とクラス定義情報とに基づいて、上記プログラミング言語で記述されたインスタンス定義記述を生成する。
【００２２】
インスタンス定義検査部１１４は、上記インスタンス定義編集部１１３により編集されたインスタンス定義情報と上記インスタンス定義記述生成部１１５により生成されたインスタンス定義記述との内少なくとも１つに基づいて、上記入力部１１０により入力されたインスタンス定義情報におけるインスタンス定義が上記入力部１１０により入力されたクラス定義情報におけるクラス定義に従っているかどうかを検査する。
【００２３】
出力部１１６は、上記クラス定義記述生成部１１２により生成されたクラス定義記述と上記インスタンス定義記述生成部１１５により生成されたインスタンス定義記述との内少なくとも１つを出力し、さらに、上記インスタンス定義検査部１１４により検査された結果、上記インスタンス定義が上記クラス定義に従っていない場合に、ユーザに再度インスタンス定義情報の入力を促す。出力部１１６は、例えば、図示していない画面表示部に上記インスタンス定義が上記クラス定義に従っていないことと再度インスタンス定義情報の入力をすべきことを表示して視覚を通してユーザに再度インスタンス定義情報の入力を促す。或いは、画面表示ではなくプリンタ等の印刷装置を用いて紙等に印刷してユーザに再度インスタンス定義情報の入力を促しても構わない。
【００２４】
出力部により出力されたクラス定義記述１３１とインスタンス定義記述１４１は、図１のように別途記憶装置１３０，１４０にそれぞれ記憶され保存される。或いは、出力部１１６は、例えば、図示していない画面表示部に上記クラス定義記述１３１とインスタンス定義記述１４１を表示して視覚を通してユーザに確認できるように出力してもよい。また、両方であってもよい。
【００２５】
図２は、実施の形態１における設計モデルの作成からコード生成までの流れを示したフローチャート図である。
ステップ２０１において、クラス定義編集部１１１は、入力部１１０を介してオペレータにクラス定義を情報（クラス定義情報）として入力させ、編集し、結果として得られるクラス定義情報１２２を記憶装置１２０に設計モデル１２１の一部として格納する。ここでクラス定義編集部１１１は、ＵＭＬでグラフィカルに表現されたクラス定義を編集する図形エディタ形態のものであってもよいし、文字列で表現されたクラス定義を編集するテキストエディタ形態のものであってもよいし、両者を組み合わせた形態のものであってもよい。
【００２６】
ステップ２０２において、クラス定義記述生成部１１２は、ステップ２０１で作成されたクラス定義情報１２２を記憶装置１２０に記憶された設計モデル１２１から抽出し、例えば、Ｃ言語（プログラム言語の一例である）またはＣ＋＋言語（プログラム言語の一例である）で記述されたクラス定義記述１３１を含んだソースファイルを生成する。別の方法としては、クラス定義情報１２２を設計モデル１２１から抽出するのではなく、クラス定義編集部１１１から取り出してもよい。なお、ステップ２０２はステップ２０１よりも後に行なわれればよく、必ずしも図２のフローチャートに示すようなステップ２０１の直後に行なわれる必要はない。
【００２７】
ステップ２０３において、インスタンス定義編集部１１３は、入力部１１０を介してオペレータにインスタンス定義を情報（インスタンス定義情報）として入力し、編集し結果として得られるインスタンス定義情報１２３を記憶装置１２０に設計モデル１２１の一部として格納する。ここでインスタンス定義編集部１１３は、コラボレーション図形式またはインスタンスの一覧表形式またはこの２つを組み合わせた形式のユーザインタフェースを提供する。一覧表形式のユーザインタフェースを用いる場合、インスタンス定義編集部１１３はクラス定義情報１２２を記憶装置１２０に記憶された設計モデル１２１から抽出して、クラス名・属性名・関連ロール名を示し、インスタンスの初期値として各属性および各関連ロールに対して与える設定値を入力する欄を設ける。
【００２８】
ステップ２０４において、インスタンス定義編集部１１３で編集された結果のインスタンス定義に対し、インスタンス定義検査部１１４が検査を行なう。インスタンス定義検査部１１４がインスタンス定義の不整合を検出した場合はユーザインタフェースを通してオペレータに報告し、再びステップ２０３に戻り、インスタンス定義を修正する。インスタンス定義検査部１１４は、検査すべきインスタンス定義をインスタンス定義編集部１１３から取得し、また検査対象のインスタンスが属するクラスについてのクラス定義情報をインスタンス定義編集部１１３または設計モデル１２１から取得することによって、インスタンスの定義がクラス定義に従っているかどうかを検査する。なお、ステップ２０４はステップ２０５の後で行なうことも可能で、必ずしも図２のフローチャートに示すようなステップ２０３の直後に行なわれる必要はない。ステップ２０４をステップ２０５の後で行なう場合は、インスタンス定義検査部１１４は検査対象となるインスタンス定義をインスタンス定義記述生成部１１５から取得する。また必要なクラス定義はインスタンス定義記述生成部１１５または設計モデル１２１から取得する。
【００２９】
ステップ２０５において、インスタンス定義記述生成部１１５がインスタンス定義情報１２３を設計モデル１２１から抽出し、Ｃ言語またはＣ＋＋言語で記述されたインスタンス定義記述１４１を含んだソースファイルを生成する。別の方法としては、インスタンス定義情報１２３を設計モデル１２１から抽出するのではなく、インスタンス定義編集部１１３から取り出してもよい。
ここで、上記クラス定義記述生成部１１２は、クラス定義記述として、上述したようにＣ言語とＣ＋＋言語とのいずれかのプログラミング言語で記述されたソースコードを生成するが、上記インスタンス定義記述生成部１１５は、インスタンス定義記述として、上記クラス定義記述生成部１１２により生成されたソースコードのプログラミング言語と同じプログラミング言語でソースコードを生成する。
【００３０】
図３は、ステップ２０１において作成されたクラス図の例を示す図である。
図３におけるクラス図は、設計モデル１２１のうちクラス定義にかかわる部分を表現したものである。この例では、クラスとしてＢｏｏｋ、Ｐｅｒｓｏｎ、ＢｏｙおよびＧｉｒｌの４つのクラスが定義されている。ＵＭＬ表記では、クラスはそれぞれボックスの図形で表現され、ボックスを分割した上段の欄がクラス名を表す。また、クラスＢｏｏｋは属性としてＴｉｔｌｅを、操作としてＲｅａｄを持っている。ここで属性とはオブジェクトの状態を表すものであり、操作とはオブジェクトを外部から利用するためのインタフェースを定義したものである。ＵＭＬでは、属性はボックスの中段、操作はボックスの下段に記述される。クラスＢｏｏｋはｏｗｎｅｒという関連ロール名でクラスＰｅｒｓｏｎへ１対１の関連を持っている。ＵＭＬでは、関連は実線の矢印で表記される。また、クラスＰｅｒｓｏｎのから特化したクラスとしてクラスＢｏｙおよびクラスＧｉｒｌが定義されている。ＵＭＬでは、汎化／特化の関係は端に三角形がついた実線で表記される。なお、図３ではクラスＰｅｒｓｏｎ、ＢｏｙおよびＧｉｒｌの属性および操作の記載を省略している。
【００３１】
図４は、図３に示した設計モデル１２１の例に含まれるクラスＢｏｏｋについての、クラス定義情報１２２の例を示す図である。
図４におけるクラス定義情報１２２では、設計モデルのクラスについて情報が定義されている。属性については、属性名Ｔｉｔｌｅとその型であるｓｔｒｉｎｇが定義されている。操作については、操作名Ｒｅａｄ、引数リスト（ｉｎｔ  ｐａｇｅＢｅｇｉｎ，  ｉｎｔ  ｐａｇｅＥｎｄ）、および戻り値の型ｂｏｏｌが定義されている。関連については、関連ロール名ｏｗｎｅｒと関連先クラスの名前Ｐｅｒｓｏｎが定義されている。また、関連の多重度としてクラスＢｏｏｋ側とクラスＰｅｒｓｏｎ側が１対１であることが定義されている。なお、この例では１つのクラスにのみ注目しているが、実際には設計モデル中に含まれるすべてのクラスについて同様の形式でクラス定義情報が定義されている。
【００３２】
図５は、クラス定義記述１３１の例を示す図である。
図５は、図２におけるステップ２０２において、図４に示したクラスＢｏｏｋに対応するクラス定義情報１２２の例に基づいて、クラス定義記述生成部１１２が生成したＣ＋＋言語によるクラス定義記述１３１の例である。図５の例ではクラスの名前としてＢｏｏｋが生成されている。またクラスのメンバ変数として、属性に対応するｓｔｒｉｎｇ型のＴｉｔｌｅと、関連に対応するＰｅｒｓｏｎ型へのポインタｏｗｎｅｒが生成されている。また、クラスの操作に対応した関数の記述として、メンバ関数Ｒｅａｄが生成されている。なお、この例ではＣ＋＋言語を用いたソースコードを示しているが、Ｃ言語においても、構造体と関数プロトタイプ宣言を用いることで同様の表現は可能である。
【００３３】
図６は、ステップ２０３において作成されたオブジェクト図の例を示す図である。
図６では、設計モデル１２１のうちインスタンス定義にかかわる部分を表現したものである。この例では、インスタンスとしてａＢｏｏｋ１、ａＢｏｏｋ２、ｈａｎａｋｏおよびｔａｒｏの４つのインスタンスが定義されている。ａＢｏｏｋ１とａＢｏｏｋ２はＢｏｏｋクラスのインスタンス、ｈａｎａｋｏはＧｉｒｌクラスのインスタンス、そしてｔａｒｏはＢｏｙクラスのインスタンスである。ａＢｏｏｋ１からｈａｎａｋｏへ、またａＢｏｏｋ２からｔａｒｏへ向かってリンクが定義されている。ここでリンクとはインスタンス間が結合していることを表すものである。
【００３４】
図７は、インスタンス定義情報１２３の例を示す図である。
図７では、図６に示した設計モデル１２１の例に含まれるクラスＢｏｏｋについての、インスタンス定義情報１２３の例を示している。ここではインスタンスとしてａＢｏｏｋ１とａＢｏｏｋ２の２つのインスタンスが定義されている。インスタンスａＢｏｏｋ１については属性Ｔｉｔｌｅの初期値として”Ｇｉｒｌ’ｓ  Ｂｏｏｋ”が、リンクｏｗｎｅｒの初期値としてリンク先のインスタンスｈａｎａｋｏが定義されている。またインスタンスａＢｏｏｋ２については属性Ｔｉｔｌｅの初期値として”Ｂｏｙ’ｓ  Ｂｏｏｋ”が、リンクｏｗｎｅｒの初期値としてリンク先のインスタンスｔａｒｏが定義されている。
以上のように、上記出力部１１６は、上記ユーザに対し、例えば、画面表示を用いてＵＭＬのコラボレーション図、オブジェクト図等を用いて、上記入力部１１０を介してインスタンス定義情報の入力を促し、上記インスタンス定義編集部１１３は、上記出力部１１６により促され上記入力部１１０を介して入力されたインスタンス定義情報を編集する。
【００３５】
以上のように、前記インスタンス定義編集部１１３は、ＵＭＬのコラボレーション図またはオブジェクト図に相当する図を用いてインスタンスとインスタンス間のリンクを定義することを特徴とする。
【００３６】
図７は、また、ステップ２０３でインスタンス定義情報１２３を作成する際に、インスタンス定義編集部１１３が一覧表形式のユーザインタフェースを用いる場合における一覧表の構成例でもある。
前記インスタンス定義編集部１１３は、インスタンスを一覧表形式で表示し編集ができる編集画面を用いてインスタンスとインスタンス間のリンクとインスタンスの初期値を定義することを特徴とする。
インスタンス定義編集部１１３が図７に示す一覧表を構成するには、まず図４に示すクラス定義情報から属性名の一覧を取り出し属性項目として一覧表に加える。図７の例では属性Ｔｉｔｌｅの項目が一覧表に作成される。次に図４に示すクラス定義情報から関連ロール名の一覧を取り出しリンク項目として一覧表に加える。図７の例では、リンクｏｗｎｅｒの項目が一覧表に作成される。一覧表が構成されると、オペレータは必要なだけインスタンス項目を追加して、インスタンス名、属性の初期値、リンクの初期値を記入する。図７の例では、ａＢｏｏｋ１とａＢｏｏｋ２の２つのインスタンス項目が追加され、それぞれのインスタンスについて属性とリンクの初期値が記入されている。
すなわち、上記出力部１１６は、上記ユーザに対し、例えば、表示画面を用いて、一覧表形式で表示された編集可能な編集画面に基づいて、上記入力部１１０を介してインスタンス定義情報の入力を促し、上記インスタンス定義編集部１１３は、上記出力部１１６により促され上記入力部１１０を介して入力されたインスタンス定義情報を編集する。
そして、図７の例では、上記インスタンス定義情報が、例えば、上記出力部１１６により促された一覧表形式で表示された編集可能な編集画面に基づいて、上記インスタンス定義情報におけるインスタンスとインスタンスとの間のリンクとインスタンスの初期値とが定義された情報として記載されている。
【００３７】
インスタンス定義編集部１１３が図７に示す一覧表を構成する別の方法として、図４に示すクラス定義情報と図６に示すオブジェクト図を組み合わせる方法もある。この方法では図４に示すクラス定義情報から属性名と関連ロール名の一覧を取り出し、また図６に示すオブジェクト図からクラスＢｏｏｋのインスタンス名一覧と各インスタンスのリンク先を取り出し一覧表を構成する。その結果、属性の初期値を除いた部分がインスタンス定義編集部１１３によって構成されるため、オペレータは属性の初期値だけを記入すればよい。
【００３８】
図８は、インスタンスの定義に不整合がある設計モデル１２１に含まれるオブジェクト図の例を示す図である。
図９は、図８のオブジェクト図に基づいて作成された不整合があるインスタンス定義情報１２３の例を示す図である。
図２におけるステップ２０４においてインスタンス定義検査部１１４は、図９に示したクラスＢｏｏｋのインスタンス定義情報と、図４に示したクラスＢｏｏｋのクラス定義情報を参照して、２つの不整合があることを検出する。不整合の１つはインスタンスｈａｎａｋｏに対して２つのインスタンスａＢｏｏｋ１とａＢｏｏｋ２がリンクを持っている点で、もう１つはインスタンスｔａｒｏｈへのリンクを持っているインスタンスが存在しない点である。図４に示したクラス定義情報にあるようにクラスＢｏｏｋとクラスＰｅｒｓｏｎとの間は１対１の関連であるため、インスタンスｈａｎａｋｏへのリンクを持つことができるインスタンスはただ１つだけである。またインスタンスｔａｒｏへは、クラスＢｏｏｋのいずれかのインスタンスがリンクを持っていなければならない。このような不整合を検出した場合、図２のフローに示したようにステップ２０３に戻ってインスタンス定義情報を修正するようオペレータに促し、オペレータはインスタンス定義情報を修正することになる。
【００３９】
以上のように、上記インスタンス定義検査部１１４は、上記クラス定義情報と上記インスタンス定義情報とに基づいて、他のいずれのインスタンスからもリンクが定義されていないインスタンスを検出し、検出されたインスタンスを上記出力部１１６を介してユーザに出力する。言いかえれば、前記インスタンス定義検査部１１４は、クラス定義情報とインスタンス定義情報に基づいて、他のどのインスタンスからもリンクによって参照されていないインスタンスを検出して報告する。
また、上記インスタンス定義検査部１１４は、上記クラス定義情報と上記インスタンス定義情報とに基づいて、リンクによる参照先の不正な重複を検出し、検出された不正な重複を上記出力部１１６を介してユーザに出力する。言いかえれば、前記インスタンス定義検査部１１４は、クラス定義情報とインスタンス定義情報に基づいて、リンクによる参照先の不正な重複を検出して報告する。
【００４０】
図１０は、インスタンス定義記述１４１の例を示す図である。
図１０では、図２におけるステップ２０５において、図７に示したクラスＢｏｏｋに対応するインスタンス定義情報１２３の例に基づいて、インスタンス定義記述生成部１１５が生成したＣ＋＋言語によるインスタンス定義記述１４１の例である。図１０の例ではクラスＢｏｏｋのインスタンスａＢｏｏｋ１とａＢｏｏｋ２についての静的オブジェクト定義の記述が生成されている。それぞれのインスタンスに対して、図７に示したインスタンス定義情報１２３の例で定義された、属性およびリンクの初期値がデータメンバの初期値としてソースコード上に展開されている。
【００４１】
以上のように、上記入力部１１０は、複数のクラス定義情報を入力する。本実施の形態１では、複数のクラス定義情報として、Ｂｏｏｋ、Ｐｅｒｓｏｎ、Ｂｏｙ、Ｇｉｒｌを入力しているが、実際は、さらに多くのクラス定義情報を入力する。
そして、上記インスタンス定義編集部１１３は、上記入力部１１０により入力された複数のクラス定義情報における複数のクラスを複数のグループにグループ化して上記グループ毎に１つの一覧表形式の編集画面を構成する。本実施の形態１では、複数のクラス定義情報の内、Ｂｏｏｋ、Ｐｅｒｓｏｎ、Ｂｏｙ、Ｇｉｒｌを１つのグループとして、そのインスタンス定義情報としてａＢｏｏｋ１、ａＢｏｏｋ２、ｈａｎａｋｏ、ｔａｒｏを１つの一覧表形式の編集画面を構成する。その他のクラス定義情報は、それぞれグループ化され、同様にグループ毎に１つの一覧表形式の編集画面を構成する。
そして、インスタンス定義記述生成部１１５は、上記インスタンス定義編集部１１３によりグループ化されたグループ毎に対応するソースコードを生成する。
【００４２】
以上のように、前記インスタンス定義編集部１１３は、複数のクラスをグループ化してグループ毎に１つの一覧表形式の編集画面を構成できることを特徴とする。
【００４３】
また、前記インスタンス定義記述生成部１１５は、複数のクラスをグループ化してグループ毎に分割されたソースコードを生成することを特徴とする。
【００４４】
以上のように本実施の形態１は、一般的なオブジェクト指向ソフトウェア開発を対象として、設計モデルに含まれるクラス定義情報からクラス定義を表現するソースコードを生成し、また設計モデルに含まれるインスタンス定義情報から静的インスタンス定義を表現するソースコードを生成することによって、設計モデルを元にしたプログラミング作業を効率化するとともに、手作業による誤りを防止してソフトウェアの品質を向上させる。
【００４５】
以上のように、オブジェクト指向開発において、設計モデルからソースコードを生成する際に、クラス定義の記述とインスタンス定義の記述をそれぞれ機械的に生成することによって、ソースコードの開発効率と品質を向上させることができる。
【００４６】
ここで、以上の説明において、各実施の形態の説明において「〜部」として説明したものは、一部或いはすべてコンピュータで動作可能なプログラムにより構成することができる。これらのプログラムは、例えば、Ｃ言語により作成することができる。或いは、ＨＴＭＬやＳＧＭＬやＸＭＬを用いても構わない。或いは、ＪＡＶＡ（登録商標）を用いて画面表示を行っても構わない。
【００４７】
以上の説明において、各実施の形態の説明において「〜部」として説明したものを、一部或いはすべてコンピュータで動作可能なプログラムにより構成する場合、オブジェクト指向開発支援装置１０１は、図示されていないが、システムユニット、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）表示装置、キーボード（Ｋ／Ｂ）、マウス、コンパクトディスク装置（ＣＤＤ）、プリンタ装置、スキャナ装置を備えている。ＣＲＴ表示装置、Ｋ／Ｂ、マウス、ＣＤＤ、プリンタ装置、スキャナ装置は、システムユニットにケーブルで接続されている。
また、オブジェクト指向開発支援装置１０１は、図示されていないが、プログラムを実行するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を備えている。ＣＰＵは、バスを介してＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）（記憶装置の一例である）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）（記憶装置の一例である）、通信ボード、ＣＲＴ表示装置、Ｋ／Ｂ、マウス、ＦＤＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、磁気ディスク装置（記憶装置の一例である）、ＣＤＤ、プリンタ装置、スキャナ装置と接続されている。通信ボードは、インターネット或いは専用回線等に接続されている。
ここで、通信ボードは、インターネットに限らず、さらに、ＬＡＮ（ローカルエリアネットワーク）、或いはＩＳＤＮ等のＷＡＮ（ワイドエリアネットワーク）に接続されていても構わない。
磁気ディスク装置には、オペレーティングシステム（ＯＳ）、ウィンドウシステム、プログラム群、ファイル群が記憶されている。プログラム群は、ＣＰＵ、ＯＳ、ウィンドウシステムにより実行される。
プログラムにより構成する場合、上記プログラム群には、各実施の形態の説明において「〜部」として説明したものにより実行されるプログラムが記憶されている。ファイル群には、上記実施の形態の説明において「コラボレーション図、オブジェクト図、一覧表」等として説明したものが記憶されている。
また、各実施の形態の説明において「〜部」として説明したものは、ＲＯＭに記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェア或いは、ハードウェア或いは、ソフトウェアとハードウェアとファームウェアとの組み合わせで実施されても構わない。
また、上記各実施の形態を実施させるプログラムは、また、磁気ディスク装置、ＦＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ）、光ディスク、ＣＤ（コンパクトディスク）、ＭＤ（ミニディスク）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のその他の記録媒体による記録装置を用いて記憶されても構わない。
また、出力部は、ＣＲＴ表示装置、その他の表示装置、プリンタ装置等の出力装置を用いても構わない。
【００４８】
【発明の効果】
この発明によれば、一般的なオブジェクト指向ソフトウェア開発を対象として、設計モデルに含まれるクラス定義情報からクラス定義を表現するソースコードを生成し、また設計モデルに含まれるインスタンス定義情報から静的インスタンス定義を表現するソースコードを生成することによって、設計モデルを元にしたプログラミング作業を効率化するとともに、手作業による誤りを防止してソフトウェアの品質を向上させるという効果がある。
【図面の簡単な説明】
【図１】実施の形態１に係わるオブジェクト指向開発支援装置の構成を示す図である。
【図２】実施の形態１における設計モデルの作成からコード生成までの流れを示したフローチャート図である。
【図３】ステップ２０１において作成されたクラス図の例を示す図である。
【図４】図３に示した設計モデル１２１の例に含まれるクラスＢｏｏｋについての、クラス定義情報１２２の例を示す図である。
【図５】クラス定義記述１３１の例を示す図である。
【図６】ステップ２０３において作成されたオブジェクト図の例を示す図である。
【図７】インスタンス定義情報１２３の例を示す図である。
【図８】インスタンスの定義に不整合がある設計モデル１２１に含まれるオブジェクト図の例を示す図である。
【図９】図８のオブジェクト図に基づいて作成された不整合があるインスタンス定義情報１２３の例を示す図である。
【図１０】インスタンス定義記述１４１の例を示す図である。
【符号の説明】
１０１  オブジェクト指向開発支援装置、１１０  入力部、１１１  クラス定義編集部、１１２  クラス定義記述生成部、１１３  インスタンス定義編集部、１１４  インスタンス定義検査部、１１５  インスタンス定義記述生成部、１１６  出力部、１２１  設計モデル、１２２  クラス定義情報、１２３  インスタンス定義情報、１３１  クラス定義記述、１３２  インスタンス定義記述。
【図１】
2004287695.tif 000003
【図２】
2004287695.tif 000004
【図３】
2004287695.tif 000005
【図４】
2004287695.tif 000006
【図５】
2004287695.tif 000007
【図６】
2004287695.tif 000008
【図７】
2004287695.tif 000009
【図８】
2004287695.tif 000010
【図９】
2004287695.tif 000011
【図１０】
2004287695.tif 000012