(57)【特許請求の範囲】
【請求項１】
複数のデータの夫々若しくは該複数のデータの夫々の特性を継承した継承データの夫々に関する処理を情報処理装置に実行させるプログラムであって、
該情報処理装置に、
前記データ若しくは継承データの特性又は該特性に関する条件の正当性を判定する規則の入力を受け付け、
前記複数のデータ間の関係又は前記データと前記継承データとの関係を示す関係図の入力を受け付け、
該関係図のデータ若しくは継承データの特性又は該特性に関する条件が前記規則に基づいているか否かを判定する
処理を実行させることを特徴とするプログラム。
【請求項２】
前記データ又は継承データの特性に対する束縛条件、前記データ又は継承データの特性に対する操作を開始する前に前記データ又は継承データの特性が満たすべき条件を示す事前条件及び前記データ又は継承データの特性に対する操作が終了した後に前記データ又は継承データの特性が満たすべき条件を示す事後条件の入力を受け付け、
前記束縛条件、事前条件及び事後条件を含む前記関係図を生成し、
前記束縛条件、事前条件又は事後条件が前記規則に基づいているか否かに応じて該関係図に所定の処理を行うことを特徴とする請求項１に記載のプログラム。
【請求項３】
前記規則は、リスコフ置換原則に準拠することを特徴とする請求項１又は請求項２に記載のプログラム。
【請求項４】
前記データと前記継承データとを関係づける情報を受け付け、
前記データと前記継承データとが関係づけられた場合、前記関係図及び規則に基づいて前記継承データの特性又は該特性に関する条件を生成することを特徴とする請求項１から請求項３のいずれか１つに記載のプログラム。
【請求項５】
生成した条件は複数の制約条件から構成され、
前記複数の条件の内、いずれか２つの条件間に包含関係を有するか否かを判定し、
前記複数の条件の内、いずれか２つの条件間に包含関係を有すると判定した場合、包含関係を有する条件の内、いずれか１つを削除することを特徴とする請求項４に記載のプログラム。
【請求項６】
前記データ及び継承データの特性、束縛条件、事前条件又は事後条件が同一であるか否かを判定し、
前記データ及び継承データの特性、束縛条件、事前条件又は事後条件が同一であると判定した場合、受け付けた関係図に用いられている継承データの特性、束縛条件、事前条件又は事後条件の色を所定の第１色に変更し、
前記データ及び継承データの特性、束縛条件、事前条件又は事後条件が同一でないと判定した場合、受け付けた関係図に用いられている継承データの特性、束縛条件、事前条件又は事後条件の色を前記第１色とは異なる第２色に変更することを特徴とする請求項２に記載のプログラム。
【請求項７】
前記データもしくは継承データの特性、束縛条件、事前条件又は事後条件が前記規則に基づいているか否かを判定し、
前記データもしくは継承データの特性、束縛条件、事前条件又は事後条件が前記規則に基づいていると判定した場合、受け付けた関係図に用いられているデータ若しくは継承データの特性、束縛条件、事前条件又は事後条件の色を所定の第３色に変更し、
前記データもしくは継承データの特性、束縛条件、事前条件又は事後条件が前記規則に基づいていないと判定した場合、受け付けた関係図に用いられているデータ若しくは継承データの特性、束縛条件、事前条件又は事後条件の色を前記第３色とは異なる第４色に変更することを特徴とする請求項２又は６に記載のプログラム。
【請求項８】
前記継承データの継承の種別が所定の種別であるか否かを判定し、
前記継承データの継承の種別が所定の種別である場合、前記束縛条件、事前条件又は事後条件が前記規則に基づいているか否かを判定することを特徴とする請求項２、６又は７に記載のプログラム。
【請求項９】
前記データ又は継承データは、プログラムを構成するための情報であり、
前記関係図のデータ又は継承データに基づいてプログラムを生成することを特徴とする請求項１から請求項８のいずれか１つに記載のプログラム。
【請求項１０】
前記規則に基づいてデータの特性、束縛条件、事前条件又は事後条件の入力を制限することを特徴とする請求項２，６，７又は８に記載のプログラム。
【請求項１１】
複数のデータの夫々若しくは該複数のデータの夫々の特性を継承した継承データの夫々の特性又は該特性に関する条件の正当性を判定する規則の入力を受け付ける受付部を備える情報処理装置であって、
前記複数のデータ間の関係又は前記データと前記継承データとの関係を示す関係図の入力を受け付ける図受付部と、
該関係図のデータ若しくは継承データの特性又は該特性に関する条件が前記規則に基づいているか否かを判定する判定部とを備えることを特徴とする情報処理装置。
【請求項１２】
複数のデータの夫々若しくは該複数のデータの夫々の特性を継承した継承データの夫々に関する処理を情報処理装置が実行する情報処理方法であって、
該情報処理装置は、
前記データ若しくは継承データの特性又は該特性に関する条件の正当性を判定する規則の入力を受け付け、
前記複数のデータ間の関係又は前記データと前記継承データとの関係を示す関係図の入力を受け付け、
該関係図のデータ若しくは継承データの特性又は該特性に関する条件が前記規則に基づいているか否かを判定する
処理を実行する情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データエンティティ、クラス、コンポネート又はサブシステム等のデータ又はデータの構成要素（特性）の正当性と継承理論の論理的整合性に関するプログラム、情報処理装置及び情報処理方法に関する。
【背景技術】
【０００２】
従来、ソフトウェア開発ではオブジェクト指向の開発手法が広く採用されており、その際、ＵＭＬ（Unified Modeling Language）（登録商標）で記述されたクラス図、コンポネート図、ＥＲ（エンティティ・リレーションシップ）図又はサブシステム図等の関係図が利用されている。関係図はデータ同士を関連や継承関係等を用いて関係づけることで設計内容の意図又は整合性を示す図である。【０００３】
例えば、特許文献１には、関連毎に上位クラスと、上位クラスの属性を継承する下位クラスとの継承関係があるか否かを示す継承関係情報を表示するプログラムが開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−１９６３５４号公報
【非特許文献】
【０００５】
【非特許文献１】「A Behavioral Notion of Subtyping BARBARAH. LISKOV And EAN NETTE M. WING」、[online]、May 1994、[平成26年6月9日検索]、インターネット＜URL：http://www.cse.ohio-state.edu/~neelam/courses/788/lwb.pdf:>
【非特許文献２】「On theory and practice of AssertionBased Software Development Herbert Toth」、JOURNAL OF OBJECT TECHNOLOGY Vol. 4、 No. 2、 March-April 2005
【非特許文献３】「A Semantic Foundation for Specification Matching Yonghao Chen and Betty H.C.Cheng」、[online]、Cambridge University Press, 2000、[平成26年6月9日検索]、インターネット＜URL ftp://ftp.cse.msu.edu/pub/serg/reuse/specmatch-cbse-title.pdf＞
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、従来のプログラム又は設計ツールでは関係図を自動生成する場合、ソフトウェアの正当性を担保するソフトウェア工学の定理又は法則を満たさない関係図が作成されるという問題が生じていた。【０００７】
一つの側面では、ソフトウェアの正当性を担保するソフトウェア工学の定理又は法則に従う関係図の作成を容易にすることができるプログラム、情報処理装置及び情報処理方法を提供することにある。
【課題を解決するための手段】
【０００８】
一態様のプログラムは、複数のデータの夫々若しくは該複数のデータの夫々の特性を継承した継承データの夫々に関する処理を情報処理装置に実行させるプログラムであって、該情報処理装置に、前記データ若しくは継承データの特性又は該特性に関する条件の正当性を判定する規則の入力を受け付け、前記複数のデータ間の関係又は前記データと前記継承データとの関係を示す関係図の入力を受け付け、該関係図のデータ若しくは継承データの特性又は該特性に関する条件が前記規則に基づいているか否かを判定する処理を実行させることを特徴とする。
【発明の効果】
【０００９】
一態様によれば、ソフトウェアの正当性を担保するソフトウェア工学の定理又は法則に従う関係図の作成を容易にすることができる。
【図面の簡単な説明】
【００１０】
【図１】情報処理装置のハードウェア群を示すブロック図である。
【図２】クラス情報ＤＢに格納されているデータの一例を示す図である。
【図３】属性情報ＤＢに格納されているデータの一例を示す図である。
【図４】操作情報ＤＢに格納されているデータの一例を示す図である。
【図５】関連情報ＤＢに格納されているデータの一例を示す図である。
【図６】関連端名情報ＤＢに格納されているデータの一例を示す図である。
【図７】仕様適合判定規則ＤＢに格納されているデータの一例を示す図である。
【図８】スーパークラス又はサブクラスの操作の事前条件及び事後条件の整合性判定に利用する仕様適合判定規則（規則）の一例を示した説明図である。
【図９】クラスの不変条件の表示、追加、削除及び修正が行えるクラス定義画面の一例を示す説明図である。
【図１０】クラスの属性を生成するための属性定義画面の一例を示す説明図である。
【図１１】クラスの属性を選択するための属性選択画面の一例を示す説明図である。
【図１２】操作情報を生成するための操作定義画面の一例を示す説明図である。
【図１３】クラスの操作情報を選択するための操作選択画面の一例を示す説明図である。
【図１４】関連情報を定義するための関連定義画面の一例を示す説明図である。
【図１５】関連端を定義するための関連端名定義画面の一例を示す説明図である。
【図１６】関連情報を選択するための関連選択画面の一例を示す説明図である。
【図１７】継承の種別と仕様適合判定規則を選択するための継承情報選択画面の一例を示す説明図である。
【図１８】クラス図生成画面の一例を示す説明図である。
【図１９】クラス図生成画面の一例を示す説明図である。
【図２０】クラス図生成画面の一例を示す説明図である。
【図２１】情報処理装置の処理手順を示したフローチャートである。
【図２２】情報処理装置の処理手順を示したフローチャートである。
【図２３】情報処理装置の処理手順を示したフローチャートである。
【図２４】クラス図生成画面の一例を示す説明図である。
【図２５】実施の形態２に係る情報処理装置の処理手順を示したフローチャートである。
【図２６】クラス図生成画面の一例を示す説明図である。
【図２７】コードを生成するためのＣ＋＋言語のヘッダファイルの一例を示す説明図である。
【図２８】クラス図に基づいて自動生成されたＣ＋＋言語のコードの一部であるサンプルコードの説明図である。
【図２９】実施の形態３に係る情報処理装置の処理手順を示したフローチャートである。
【図３０】実施の形態４に係る情報処理装置のハードウェア群を示すブロック図である。
【図３１】クラス図生成画面の一例を示す説明図である。
【図３２】操作画面の一例を示す説明図である。
【図３３】例外画面の一例を示す説明図である。
【図３４】制約画面の一例を示す説明図である。
【図３５】コード画面の一例を示す説明図である。
【図３６】実施の形態５に係る情報処理装置の処理手順を示したフローチャートである。
【図３７】実施の形態５に係る情報処理装置の処理手順を示したフローチャートである。
【発明を実施するための形態】
【００１１】
実施の形態１
以下本実施の形態を、図面を参照して説明する。以下の説明では各図中の上下左右を用いる。図１は情報処理装置１のハードウェア群を示すブロック図である。情報処理装置１は例えばコンピュータである。図１に示す情報処理装置１は、ＣＰＵ(Central Processing Unit)１１、記憶部１２、ＲＡＭ１３、入力部１４及び表示部１５を備える。
【００１２】
ＣＰＵ１１は、バスを介してハードウェア各部と接続されている。ＣＰＵ１１は例えば一もしくは複数のＣＰＵ又はマルチコアＣＰＵ等を備える。ＣＰＵ１１は、記憶部１２に記憶されたプログラム１２Ｐに従いハードウェアの各部を制御する。
【００１３】
記憶部１２は例えばハードディスクまたは大容量メモリ等である。記憶部１２にはＣＰＵ１１が処理を行う際に必要とする種々のデータ、プログラム１２Ｐ、クラス情報ＤＢ１２１、属性情報ＤＢ１２２、操作情報ＤＢ１２３、関連情報ＤＢ１２４、関連端名情報ＤＢ１２５及び仕様適合判定規則ＤＢ１２６を格納する。
【００１４】
ＲＡＭ１３は例えばＳＲＡＭ（Static Random Access Memory）、ＤＲＡＭ（Dynamic Random Access Memory）、フラッシュメモリ等である。ＲＡＭ１３は、記憶部としても機能し、ＣＰＵ１１による各種プログラムの実行時に発生する種々のデータを一時的に記憶する。
【００１５】
入力部１４はマウス、キーボード又はタッチパネル等の入力デバイスであり、受け付けた操作情報をＣＰＵ１１へ出力する。表示部１５は液晶ディスプレイ又は有機ＥＬ（Electro Luminescence）ディスプレイ等である。
【００１６】
図２はクラス情報ＤＢ１２１に格納されているデータの一例を示す図である。クラス情報ＤＢ１２１はクラスに関する情報を記憶するデータベースである。なお、本実施形態におけるクラス（データ）、クラスの特性を継承したサブクラス（継承データ）及びサブクラスが継承した元のクラスを示すスーパークラス（データ）は場合により代表してクラスとする。クラス情報ＤＢ１２１はクラス名列、属性列、ステレオタイプ列、抽象クラス列、クラス不変条件（束縛条件）列及びスーパークラス列を備える。
【００１７】
クラス名列にはクラスの名称が記憶される。属性列にはクラスの属性が記憶される。ステレオタイプ列にはステレオタイプが記憶される。ステレオタイプ列には例えばabstractが記憶される。抽象クラス列には抽象クラスの有無が記憶される。抽象クラス列には例えば○又は×が記憶される。○はクラスが抽象クラスであることを示す。×はクラスが抽象クラスでないことを示す。クラス不変条件列には自身のクラスが満たす束縛条件を示したクラス不変条件が記憶される。すなわちクラス不変条件とはオブジェクト、属性、関連端名、属性に関連付けられたオブジェクトの数を示す多重度、制約条件又は限定子等のクラスの構成要素（特性）に対する束縛条件である。例えば“社員”クラスのクラス不変条件は「[社員ＩＤ >= 0 && 社員ＩＤ <= 5000]及び[年齢>= 18 && 年齢 <= 65]」が記憶される。[社員ＩＤ >= 0 && 社員ＩＤ <= 5000]はクラスの属性“社員ＩＤ”が０以上５０００以内であることを示す。[年齢 >= 18 && 年齢 <= 65]はクラスの属性“年齢”が１８歳以上６５歳以内であることを示す。スーパークラス列は自身が継承したクラスを示すスーパークラスが記憶される。
【００１８】
ＣＰＵ１１は後述するクラス定義画面３に入力を受け付け、入力された情報をクラス情報ＤＢ１２１の各列に記憶する。
【００１９】
図３は属性情報ＤＢ１２２に格納されているデータの一例を示す図である。属性情報ＤＢ１２２はクラスの属性に関する情報を記憶するデータベースである。属性情報ＤＢ１２２は属性列、クラス名列、型列、制約条件列、不変条件列、初期値列及び可視性列を備える。属性情報ＤＢ１２２の属性列及びクラス名列はクラス情報ＤＢ１２１の属性列及びクラス名列と同様の構成であるため、簡潔のため記載を省略する。型列には例えばint又はvoid等が記憶される。制約条件列には例えば、static、derived、readOnly 、unique、ordered等が記憶される。staticはクラス属性であることを示す。derivedは既存の属性から算出可能である派生属性であることを示す。readOnlyは参照専用の属性であることを示す。uniqueは属性の値がユニークであることを保証することが求められる属性であることを示す。orderedは順序付けがされる属性であることを示す。不変条件列には属性の不変条件（束縛条件）が記憶される。初期値列はオブジェクト生成後の属性の初期値が記憶される。可視性例には、属性のアクセス制御の種別が記憶される。publicは公開情報であり、protectedは限定公開であり、privateは非公開である属性を示す。
【００２０】
ＣＰＵ１１は後述する属性定義画面４に入力を受け付け、入力された情報を属性情報ＤＢ１２２の各列に記憶する。
【００２１】
図４は操作情報ＤＢ１２３に格納されているデータの一例を示す図である。操作情報ＤＢ１２３は属性等を操作する操作情報を記憶するデータベースである。操作情報ＤＢ１２３は操作名列、クラス名列、引数列、型列、可視性列、種別列、ローカル事前条件列、実効事前条件列、コード列、ローカル事後条件列、実効事後条件列、戻り値列を備える。操作情報ＤＢ１２３のクラス名列、型列及び可視性列は属性情報ＤＢ１２２のクラス名列、型列及び可視性列と同様の構成であるため、簡潔のため記載を省略する。操作名列には操作情報の名称が記憶される。
【００２２】
引数列はさらに引数番号列、引数名列、型列及びデフォルト値列を備える。引数番号列には操作情報の引数の番号を示す引数番号が記憶される。引数名列には引数の名称が記憶される。型列には引数の型の名称が記憶される。デフォルト値列には引数のデフォルト値が記憶される。
【００２３】
種別列には操作情報の種別が記憶される。種別列には例えば、クラス関数、非仮想、仮想又は純粋仮想が記憶される。クラス操作は操作情報の種別がクラス操作であることを示す。非仮想は操作情報の種別が仮想でないことを示す。仮想は操作情報の種別が仮想であることを示す。純粋仮想は操作情報の種別が純粋仮想であることを示す。
【００２４】
ローカル事前条件列には後述する操作定義画面５に入力された事前条件が記憶される。事前条件とはデータ又は継承データの構成要素に対する操作を開始する前にデータ又は継承データの構成要素に成立する条件を示す。データとは例えば、データエンティティ、クラス、コンポネート又はサブシステム等である。継承データとはデータの構成要素を継承したデータを示す。
【００２５】
実効事前条件列には後述するスーパークラス図及び仕様適合判定規則に基づいて自動生成された事前条件が記憶される。例えば“役員”クラスのローカル事前条件列には事前条件[new年齢 >= 18 && new年齢 <= 65]が記憶される。
【００２６】
コード列には操作情報のコードが記憶される。ローカル事後条件列には後述する操作定義画面５に入力された事後条件が記憶される。事後条件とはデータ又は継承データの特性に対する操作が終了した後にデータ又は継承データの特性に成立する条件である。実効事後条件列には後述するスーパークラス図及び仕様適合判定規則に基づいて自動生成された事後条件が記憶される。例えば“役員”クラスの実効事後条件列には「[年齢 >= 18 && 年齢 <= 65 &&年齢 == new年齢]」が記憶される。「[年齢 >= 18 && 年齢 <= 65 &&年齢 == new年齢]」はクラスの属性“年齢”が１８歳以上６５歳以下かつ操作実行後のクラスの属性“年齢”が操作の入力引数の値で更新されていることを示す。戻り値列には操作情報の戻り値が記憶される。戻り値列には操作情報の戻り値が記憶される。
【００２７】
ＣＰＵ１１は後述する操作定義画面５に入力を受け付け、入力された情報を操作情報ＤＢ１２３の各列に記憶する。
【００２８】
図５は関連情報ＤＢ１２４に格納されているデータの一例を示す図である。関連情報ＤＢ１２４はクラス間の関連に関する関連情報を記憶するデータベースである。関連情報ＤＢ１２４は関連名列、クラス列、関連端名１、関連端名２、制約条件列、関連名方向列及びナビゲーション方向列を備える。関連情報ＤＢ１２４のクラス名列は属性情報ＤＢ１２２のクラス名列と同様の構成であるため、簡潔のため記載を省略する。関連名列には関連情報の名称が記憶される。関連端名１列には関連する２つのオブジェクトの内、関連に対応づけられた両側のクラスの片方の情報を示す関連端の名称が記憶される。関連端名２には他の関連端の名称が記憶される。制約条件列には関連に付与される制約条件が記憶される。制約条件列には例えば、static、derived、union、subset、redefine、reflective、symmetry、transitive、asymmetry又はimmutable等が記憶される。staticは関連が１つのみ生成されるクラス関連であることを示す。derivedは、他の関連から算出可能な派生関連である事を示す。unionは他の関連の論理和を表現する関連であることを示す。subsetは別の関連の部分集合を意味する関連である事を示す。redefineは関連が再定義されたことを示す。reflectiveは関連に対応づけられたオブジェクト同士が反射律を満たす関係にあることを示す。symmetryは関連に対応づけられたオブジェクト同士が対称律を満たす関係にあることを示す。transitiveは関連に対応づけられたオブジェクト同士が推移律を満たす関係にあることを示す。asymmetryは関連に対応づけられたオブジェクト同士が反対称律を満たす関係にあることを示す。immutableは関連に対応づけられたオブジェクトが不変であることを示す。
【００２９】
関連名方向列には関連名が示す読み方の方向を示す関連名方向が記憶される。関連名方向列には例えば、右関連名方向、左関連名方向又は関連なしが記憶される。右関連名方向とは関連端名１から関連端名２に向けて関連名が意味をなすことを示す。左関連名方向とは関連端名２から関連端名１に向けて関連名が意味をなすことを示す。関連名なしと関連の向きなしは関連名の情報に関連方向と関連名が設定されていないことを示す。ナビゲーション方向列には関連がどのようにナビゲーションされるかについての情報が記憶される。ナビゲーション方向列には関連端名１から関連端名２への第１片方向、関連端名２から関連端名１への第２片方向、関連端名１から関連端名２へのいずれにも可能な両方向にナビゲーションが可能であることのいずれかの情報であることを示す。
【００３０】
ＣＰＵ１１は後述する関連定義画面６に入力を受け付け、入力された情報を関連情報ＤＢ１２４の各列に記憶する。
【００３１】
図６は関連端名情報ＤＢ１２５に格納されているデータの一例を示す図である。関連端名情報ＤＢ１２５は関連端名に関する情報を記憶するデータベースである。関連端名情報ＤＢ１２５は関連端名列、クラス列、限定子列、制約条件列、可視性列及び多重度列を備える。関連端名情報ＤＢ１２５のクラス名列、制約条件列及び可視性列は属性情報ＤＢ１２２のクラス名列及び可視性列並びに関連情報ＤＢ１２４の制約条件列と同様の構成であるため、簡潔のため記載を省略する。関連端名列には関連端の名称が記憶される。限定子列は限定番号列、属性名列及び型列を備える。限定子は複数定義できるため、限定番号列には限定子の番号を示す限定子番号が記憶される。限定子の属性名には、限定子の名称が記憶される。型列には限定子の型が記憶される。多重度列には関連情報に対応づけられた関連端名のオブジェクトの数の範囲である多重度が記憶される。多重度列には例えば0..1又は0..*が記憶される。0..1は多重度が０から１の範囲であることを示す。0..*は多重度が０から無限大の範囲であることを示す。
【００３２】
ＣＰＵ１１は後述する関連端名定義画面７に入力を受け付け、入力された情報を関連端名情報ＤＢ１２５の各列に記憶する。
【００３３】
図７は仕様適合判定規則ＤＢ１２６に格納されているデータの一例を示す図である。仕様適合判定規則ＤＢ１２６は後述する仕様適合判定規則に関するデータを記憶するデータベースである。仕様適合判定規則ＤＢ１２６はクラス名列、スーパークラス列、継承列及び仕様適合判定規則列を備える。仕様適合判定規則ＤＢ１２６のクラス名列、スーパークラス列はクラス情報ＤＢ１２１のクラス名列及びスーパークラス列と同様の構成であるため、簡潔のため記載を省略する。仕様適合判定規則列は後述する仕様適合判定規則が記憶される。
【００３４】
ＣＰＵ１１は後述する規則生成画面８に入力を受け付け、入力された情報を仕様適合判定規則ＤＢ１２６の各列に記憶する。
【００３５】
クラス不変条件、事前条件及び事後条件はクラスとそのクラスから派生したサブクラスの階層にある任意のサブクラス間に“振る舞いタイプ置換可能”であることを保証するリスコフ置換原則に準拠する必要がある。リスコフ置換原則はクラスから継承により派生したサブクラスがスーパークラスから継承する属性の不変条件、クラス不変条件および操作の事後条件を強くすることはできるが弱くすることはできず、かつ派生したサブクラスがスーパークラスから継承する操作の事前条件は弱くすることはできるが強くすることはできない規則である。
【００３６】
図８はスーパークラス又はサブクラスの操作の事前条件及び事後条件の整合性判定に利用する仕様適合判定規則（規則）の一例を示した説明図である。図８はリスコフ置換原則を準拠するために利用できるスーパークラス又はサブクラスの操作の事前条件と事後条件の推論規則を表示している。これらの推論規則は仕様適合判定規則又はモジュラー推論規則とよばれる（非特許文献１、２及び３参照）。なお、サブクラスがリスコフ置換原則における仕様適合判定規則に準拠するか否かの判定を行うためにクラスの各操作の事前条件及び事後条件をより厳密に定義する必要がある。そこでローカル事前条件、実効事前条件、ローカル事後条件、実効事後条件という用語を使用し、事前条件と事後条件を峻別する。ローカル事前条件、実効事前条件、ローカル事後条件、実効事後条件についての詳細は非特許文献２を参照。なお図８の様適合判定規則間の矢印は仕様適合判定規則間の厳密度を意味し、矢印の向きに進むにつれて仕様適合判定規則の厳密度が弱くなることを意味している。仕様適合判定規則間の厳密度の詳細は非特許文献３を参照。
【００３７】
仕様適合判定規則２１は（Ｃpre⇔ＳＣpre）∧（ＳＣpost⇔Ｃpost）であり、exact pre/postと呼ばれる仕様適合判定規則である。（Ｃpre⇔ＳＣpre）∧（ＳＣpost⇔Ｃpost）はスーパークラスの操作の実効事前条件及びサブクラスがスーパークラスから継承する操作のオーバーライドの有無に関わらず、操作の実効事前条件が共に論理的等価であることを要求し、かつスーパークラスの操作の実効事後条件とサブクラスの操作の実効事後条件とが共に論理的等価であることを要求する。つまり、サブクラスの操作の実効事前条件及びスーパークラスの操作の実効事前条件は必要十分条件の関係にある事を要求する。さらに、サブクラスの操作の実効事後条件及びスーパークラスの操作の実効事後条件も必要十分条件の関係にある事を要求する。
【００３８】
仕様適合判定規則２２は（Ｃpre⇔ＳＣpre）∧（ＳＣpost⇒Ｃpost）であり、exact preと呼ばれる仕様適合判定規則である。（Ｃpre⇔ＳＣpre）∧（ＳＣpost⇒Ｃpost）は、スーパークラスの操作の実効事前条件とサブクラスがスーパークラスから継承する操作をオーバーライドの有無に関わらず、その操作の実効事前条件が論理的等価であり、かつサブクラスのこの操作の実効事後条件が、スーパークラスの当該操作の実効事後条件を論理的に含意することを要求する。つまり、サブクラスのこの操作の実効事前条件及びスーパークラスの該当操作の実効事前条件は必要十分条件の関係にあり、かつ、サブクラスのこの操作の実効事後条件が、スーパークラスの該当操作の実効事後条件の十分条件となることを要求する。
【００３９】
仕様適合判定規則２３は（Ｃpre⇒ＳＣpre）∧（ＳＣpost⇔Ｃpost）であり、exact preと呼ばれる仕様適合判定規則である。（Ｃpre⇒ＳＣpre）∧（ＳＣpost⇔Ｃpost）は、スーパークラスの操作の実効事前条件及びサブクラスがスーパークラスから継承する操作のオーバーライドの有無に関わらず、操作の実効事前条件がスーパークラスの操作の実効事前条件に論理的に含意される必要があり、かつサブクラスの操作の実効事後条件及びスーパークラスの操作の実効事後条件が論理的等価であることを要求する。つまり、サブクラスの操作の実効事後条件及びスーパークラスの操作の実効事後条件は必要十分条件の関係にある事を要求する。
【００４０】
仕様適合判定規則２４は（Ｃpre⇒ＳＣpre）∧（ＳＣpost⇒Ｃpost）であり、plug-inと呼ばれる仕様適合判定規則である。（Ｃpre⇒ＳＣpre）∧（ＳＣpost⇒Ｃpost）は、スーパークラスの操作の実効事前条件及びサブクラスがスーパークラスから継承する操作のオーバーライドの有無に関わらず、クラスの実効事前条件がスーパークラスの実効事前条件を論理的に含意し、かつ、スーパークラスの実効事後条件がクラスの事後条件を含意することを示す。つまり、スーパークラスの操作の実効事前条件は、サブクラスの操作の実効事前条件及び十分条件の関係にある事を要求し、かつ、サブクラスの操作の実効事後条件は、スーパークラスの操作の実効事後条件と十分条件の関係にある事を要求する。
【００４１】
仕様適合判定規則２５は（Ｃpre⇒ＳＣpre）∧（ＳＣpre∧ＳＣpost⇒Ｃpost）であり、weak-plug-inと呼ばれる仕様適合判定規則である。（Ｃpre⇒ＳＣpre）∧（ＳＣpre∧ＳＣpost⇒Ｃpost）は、スーパークラスの操作の実効事前条件とサブクラスがスーパークラスから継承する操作をオーバーライドの有無に関わらず、クラスの実効事前条件がスーパークラスの実効事前条件を論理的に含意し、かつ、サブクラスの実効事前条件を満たし、さらに、スーパークラスの実効事後条件がクラスの実効事後条件を含意する事を示す。つまり、スーパークラスのこの操作の実効事前条件は、サブクラスの操作の実効事前条件と十分条件の関係にある事を要求し、かつ、サブクラスの操作の実効事後条件は、スーパークラスの操作の実効事後条件と十分条件の関係にある事を要求し、かつ、同時にサブクラスの実効事前条件を真にすることを要求している
【００４２】
仕様適合判定規則２６は（Ｃpre⇒ＳＣpre）∧（Ｃpre∧ＳＣpost⇒Ｃpost）であり、satisfiesと呼ばれる仕様適合判定規則である。（Ｃpre⇒ＳＣpre）∧（Ｃpre∧ＳＣpost⇒Ｃpost）は、スーパークラスの操作の実効事前条件及びサブクラスがスーパークラスから継承する操作のオーバーライドの有無に関わらず、クラスの実効事前条件がスーパークラスの実効事前条件を論理的に含意し、スーパークラスの実効事前条件を満たし、並びにスーパークラスの実効事後条件がクラスの実効事後条件を含意する事を示す。つまり、スーパークラスの操作の実効事前条件は、サブクラスの操作の実効事前条件と十分条件の関係にある事を要求し、サブクラスの操作の実効事後条件は、スーパークラスの操作の実効事後条件と十分条件の関係にある事を要求し、並びにスーパークラスの実効事前条件を真にすることを要求している。
【００４３】
またリスコフ置換原則は属性の型及び多重度に対しても適用される。スーパークラスの属性の型がサブクラスの属性の型より狭いことを示す部分型であった場合、サブクラスの属性の型はリスコフ置換原則を満たす。スーパークラスの関連端の多重度がサブクラスの関連端の多重度より狭かった場合、サブクラスの関連端の多重度はリスコフ置換原則を満たす。
【００４４】
図９はクラスの不変条件の表示、追加、削除及び修正が行えるクラス定義画面３の一例を示す説明図である。クラス定義画面３は上部に設けられたクラス名欄３１と、クラス名欄３１の下部に設けられたステレオタイプ欄３１１と、ステレオタイプ欄３１１の下部に設けられたチェックボタン３２と、チェックボタン３２の左下及び右下に設けられたスーパークラス不変条件欄３３及び自クラス不変条件欄３４と、スーパークラス不変条件欄３３及び自クラス不変条件欄３４の下に設けられた追加クラス不変条件欄３５と、下端に設けられたボタン３６とを備える。クラス名欄３１はクラスの名称の入力を受け付けるための欄である。チェックボタン３２は抽象クラスの有無をチェックするボタンである。スーパークラス不変条件欄３３はスーパークラスの不変条件を表示するための欄である。自クラス不変条件欄３４は自身のクラスの不変条件を表示するための欄である。追加クラス不変条件欄３５は自身のクラスにクラス不変条件を追加するための欄である。ボタン３６は生成した情報をクラス情報ＤＢ１２１に記憶するためのボタンである。なお、本実施形態では図示しなかったが、ＣＰＵ１１はボタン３６と同様の機能を持つボタンに「適用」を表示してもよい。
【００４５】
以下、クラス定義画面３の作用及び動作について説明する。ユーザがクラス名欄３１をクリックした場合、ＣＰＵ１１はクラスの名称の入力を受け付ける。ユーザがクラスの名称を入力した場合、ＣＰＵ１１は入力したクラスの名称を生成する。
【００４６】
ユーザがステレオタイプ欄３１１をクリックした場合、ＣＰＵ１１はステレオタイプの入力を受け付ける。ユーザがステレオタイプを入力した場合、ＣＰＵ１１は入力したステレオタイプを生成する。
【００４７】
ユーザがチェックボタン３２をクリックした場合、ＣＰＵ１１は抽象クラスの有無を生成する。
【００４８】
ＣＰＵ１１はクラス情報ＤＢ１２１を参照する。ＣＰＵ１１は自身のクラスに対応するスーパークラスを特定する。ＣＰＵ１１は特定したスーパークラスのクラス不変条件を特定する。ＣＰＵ１１は特定したスーパークラスのクラス不変条件をスーパークラス不変条件欄３３に表示する。
【００４９】
ＣＰＵ１１はクラス情報ＤＢ１２１を参照する。ＣＰＵ１１は自身のクラスのクラス不変条件を特定する。ＣＰＵ１１は特定した自身のクラスのクラス不変条件を自クラス不変条件欄３４に表示する。
【００５０】
ユーザが追加クラス不変条件欄３５をクリックした場合、ＣＰＵ１１はクラス不変条件の入力を受け付ける。ユーザがクラス不変条件の入力をした場合、ＣＰＵ１１は入力したクラス不変条件を生成する。
【００５１】
ユーザがボタン３６をクリックした場合、ＣＰＵ１１は生成したクラスの名称、ステレオタイプ、抽象クラスの有無及びクラス不変条件をクラス情報ＤＢ１２１に記憶する。
【００５２】
図１０はクラスの属性を生成するための属性定義画面４の一例を示す説明図である。属性定義画面４は上部に設けられた属性名欄４１と、属性名欄４１の下部に設けられた型欄４２と、型欄４２の下部に５つ設けられたチェックボタン４３と、チェックボタン４３の下部に左右方向に３つ設けられたラジオボタン４４と、ラジオボタン４４の下部に設けられた初期値欄４５と、初期値欄４５の下部に設けられた不変条件欄４６と、下端に設けられたボタン４７とを備える。以下、属性定義画面４のラジオボタン４４及び不変条件欄４６はクラス定義画面３のチェックボタン３２及び追加クラス不変条件欄３５の構成、作用及び動作と同様であるため、簡潔のため記載を省略する。
【００５３】
属性名欄４１は属性の名称の入力を受け付ける欄である。型欄４２は属性の型の入力を受け付ける欄である。チェックボタン４３は制約条件を選択するためのボタンである。初期値欄４５は初期値を入力するための欄である。ボタン４７は生成した情報を属性情報ＤＢ１２２に記憶するためのボタンである。
【００５４】
以下、属性定義画面４の作用及び動作について説明する。ユーザが属性名欄４１をクリックした場合、ＣＰＵ１１は属性の名称の入力を受け付ける。ユーザが属性の名称を入力した場合、ＣＰＵ１１は入力した属性の名称を生成する。ユーザが型欄４２をクリックした場合、ＣＰＵ１１は属性の型の入力を受け付ける。ユーザが属性の型を入力した場合、ＣＰＵ１１は入力した属性の型を生成する。
【００５５】
ユーザがチェックボタン４３の内、左上部、中上部、右上部、左下部及び中下部の夫々のボタンをクリックした場合、ＣＰＵ１１は制約条件としてstatic、derived、readOnly、unique及びorderedの夫々を生成する。ユーザが初期値欄４５をクリックした場合、ＣＰＵ１１は属性の初期値の入力を受け付ける。ユーザが属性の初期値を入力した場合、ＣＰＵ１１は入力した属性の初期値を生成する。ユーザが不変条件欄４６をクリックした場合、ＣＰＵ１１は属性の不変条件の入力を受け付ける。ユーザが不変条件の入力をした場合、ＣＰＵ１１は入力した不変条件を生成する。
【００５６】
ユーザがラジオボタン４４の内、左部、中央部及び右部の夫々のボタンをクリックした場合、public、protected及びprivateの夫々の可視性を生成する。ユーザがボタン４７をクリックした場合、ＣＰＵ１１は生成した属性の名称、属性の型、制約条件、可視性、初期値及び不変条件を属性情報ＤＢ１２２に記憶する。
【００５７】
図１１はクラスの属性を選択するための属性選択画面４０の一例を示す説明図である。属性選択画面４０は上部に設けられたスーパークラスから継承している属性選択画面４８と、属性選択画面４８の下部に設けられた自クラス選択画面４９とを備える。スーパークラスから継承している属性選択画面４８は左部に設けられた番号欄４８１と、番号欄４８１の右部に設けられた属性名欄４８２と、属性名欄４８２の右部に設けられた型欄４８３と、型欄４８３の右部に設けられた初期値欄４８４と、初期値欄４８４の右部に設けられた不変条件欄４８５とを備える。
【００５８】
スーパークラスから継承している属性選択画面４８は自身のクラスがスーパークラスから継承している属性を選択する画面である。番号欄４８１は属性を識別するための番号が表示される欄である。属性名欄４８２は属性の名称が表示される欄である。型欄４８３は属性の型が表示される欄である。初期値欄４８４は属性の初期値が表示される欄である。不変条件欄４８５は属性の不変条件が表示される欄である。
【００５９】
自クラス選択画面４９は自身のクラスで追加定義した属性を選択する画面である。自クラス選択画面４９は番号欄４９１、属性名欄４９２と、型欄４９３と、初期値欄４９４及び不変条件欄４９５を備える。自クラス選択画面４９の構成はスーパークラスから継承している属性選択画面４８の構成と同等であるため、簡略のため記載を省略する。
【００６０】
以下、属性選択画面４０の作用及び動作について説明する。ＣＰＵ１１は属性情報ＤＢ１２２を参照し、自身のクラスがスーパークラスから継承している情報を属性選択画面４８に表示する。具体的にはＣＰＵ１１は属性情報ＤＢ１２２を参照し、番号欄４８１に１を表示し、属性名欄４８２に社員ＩＤを表示し、型欄４８３にintを表示し、初期値欄４８４に０を表示し、不変条件欄４８５に[社員ＩＤ >= 0 && 社員ＩＤ <= 5000]を表示する。以下、ＣＰＵ１１は同様の処理を繰り返し、スーパークラスから継承している属性選択画面４８を表示する。
【００６１】
ユーザがスーパークラスから継承している属性選択画面４８の各行を選択した場合、ＣＰＵ１１は属性情報ＤＢ１２２を参照し、スーパークラスから継承している属性選択画面４８の各行に対応する項目が表示された属性定義画面４を表示する。具体的にはユーザがスーパークラスから継承している属性選択画面４８の３行目を選択した場合、ＣＰＵ１１は属性情報ＤＢ１２２を参照し、属性名欄４１に年齢を表示し、型欄４２にintを表示し、ラジオボタン４４のpublicを選択し、不変条件欄４６に[年齢 >= 18 && 年齢 <= 65]を表示し、チェックボタン４３及びラジオボタン４４の入力を受け付けない図１０の属性定義画面４を表示する。
【００６２】
ユーザが不変条件欄４６に[年齢 >= 55 && 年齢 <= 65]を入力し、ボタン４７をクリックした場合、ＣＰＵ１１は不変条件[年齢 >= 55 && 年齢 <= 65]を生成し、属性情報ＤＢ１２２に記憶する。
【００６３】
ユーザが属性選択画面４８の４行目をクリックした場合、ＣＰＵ１１は属性情報ＤＢ１２２を参照し、属性名欄４１に部下[]を表示し、型欄４２に社員*を表示し、ラジオボタン４４のpublicを選択し、チェックボタン４３及びラジオボタン４４の入力を受け付けない属性定義画面４を表示する。
【００６４】
ユーザが属性名欄４１に下級役員を入力し、型欄４２に役員*を入力し、ボタン４７をクリックした場合、ＣＰＵ１１は下級役員[] 及び役員*を生成し、属性情報ＤＢ１２２に記憶する。ＣＰＵ１１は番号欄４９１に２を表示し、属性名欄４９２に下級役員[]を表示し、型欄４９３に役員*を表示した自クラス選択画面４９を表示する。以下、ＣＰＵ１１は同様の処理を繰り返し、自クラス選択画面４９を表示する。
【００６５】
図１２は操作情報を生成するための操作定義画面５の一例を示す説明図である。操作定義画面５は上部に設けられた操作名欄５１と、操作名欄５１の下部に設けられた引数欄５２と、引数欄５２内の上部に４つ設けられたナンバー欄５２１、引数名欄５２２、型欄５２３及びデフォルト値欄５２４と、引数欄５２の右下部に設けられた追加ボタン５２５及び削除ボタン５２６と、引数欄５２の下部に設けられた型欄５３と、型欄５３の下部に左右方向に３つ設けられたラジオボタン５４と、ラジオボタン５４の下部に左右方向に４つ設けられたラジオボタン５５と、ラジオボタン５５の下部に設けられたローカル事前条件欄５６１と、ローカル事前条件欄５６１の右上に設けられたチェックボックス５０１と、ローカル事前条件欄５６１の下部に設けられた実効事前条件欄５６２と、実効事前条件欄５６２の右部に設けられたチェックボックス５７２と、実効事前条件欄５６２の下部に設けられたコード欄５６３と、コード欄５６３の下部に設けられたローカル事後条件欄５６４と、ローカル事後条件欄５６４の下部に設けられた実効事後条件欄５６５と、実効事後条件欄５６５の右部に設けられたチェックボックス５７３と、実効事後条件欄５６５の下部に設けられた戻り値欄５６６と、下端に設けられたボタン５６７とを備える。
【００６６】
以下、操作定義画面５の型欄５３及びラジオボタン５４は属性定義画面４の型欄４２及びラジオボタン４４の構成、作用及び動作と同様であるため、簡潔のため記載を省略する。
【００６７】
操作名欄５１は操作情報（操作）の名称の入力を受け付けるための欄である。引数欄５２は操作情報の引数の入力を受け付けるための欄である。ナンバー欄５２１、引数名欄５２２、型欄５２３及びデフォルト値欄５２４の夫々は、引数を識別するための番号、名称、型及びデフォルト値の夫々の入力を受け付けるための欄である。追加ボタン５２５及び削除ボタン５２６の夫々は引数の追加及び削除の夫々を行うボタンである。ラジオボタン５５は操作情報の種別を選択するボタンである。ローカル事前条件欄５６１及びローカル事後条件欄５６４の夫々は自身のクラスの操作情報のローカル事前条件及びローカル事後条件の夫々を入力を受け付けるための欄である。コード欄５６３及び戻り値欄５６６の夫々は操作情報のコード及び戻り値の夫々の入力を受け付けるための欄である。実効事前条件欄５６２及び実効事後条件欄５６５は自動生成される実効事前条件及び実効事後条件を表示するための欄である。チェックボックス５７１はクラス不変条件のコードの生成の有無をチェックするためのボタンである。チェックボックス５７２は操作の実効事前条件のコードの生成の有無をチェックするためのボタンである。チェックボックス５７３は操作の実効事後条件のコードの生成の有無をチェックするためのボタンである。ボタン５６７は生成した情報を操作情報ＤＢ１２３に記憶するためのボタンである。
【００６８】
以下、操作定義画面５の作用及び動作について説明する。ユーザが操作名欄５１をクリックした場合、ＣＰＵ１１は操作情報の名称の入力を受け付ける。ユーザが操作情報の名称を入力した場合、ＣＰＵ１１は入力した操作情報の名称を生成する。ユーザが追加ボタン５２５をクリックした場合、ＣＰＵ１１は別のウィンドウに引数を識別するための引数番号、引数の名称、引数の型及びデフォルト値の入力を受け付ける。ユーザが引数番号、引数の名称、引数の型及びデフォルト値を入力した場合、ＣＰＵ１１は入力した引数番号、引数の名称、引数の型及びデフォルト値を生成し、引数欄５２のナンバー欄５２１、引数名欄５２２、型欄５２３及びデフォルト値欄５２４の夫々に引数番号、引数の名称、引数の型及び引数のデフォルト値を表示する。ユーザが引数欄５２の引数をクリックした後、削除ボタン５２６をクリックした場合、ＣＰＵ１１はクリックした引数を操作情報ＤＢ１２３から削除する。
【００６９】
ユーザがラジオボタン５５の内、左から１番目のボタンをクリックした場合、ＣＰＵ１１は操作情報の操作種別としてクラス操作を生成する。ユーザがラジオボタン５５の内、左から２番目のボタンをクリックした場合、ＣＰＵ１１は操作情報の操作種別として非仮想を生成する。ユーザがラジオボタン５５の内、左から３番目のボタンをクリックした場合、ＣＰＵ１１は操作情報の操作種別として仮想を生成する。ユーザがラジオボタン５５の内、左から４番目のボタンをクリックした場合、ＣＰＵ１１は操作情報の操作種別として純粋仮想を生成する。
【００７０】
ユーザがローカル事前条件欄５６１をクリックした場合、ＣＰＵ１１は操作情報のローカル事前条件の入力を受け付ける。ユーザが操作情報のローカル事前条件を入力した場合、ＣＰＵ１１は入力した操作情報のローカル事前条件を生成する。ＣＰＵ１１は後述するスーパークラス図及び仕様適合判定規則に基づいて自動生成された実効事前条件を実効事前条件欄５６２に表示する。ユーザがコード欄５６３をクリックした場合、ＣＰＵ１１は操作情報のコードの入力を受け付ける。ユーザが操作情報のコードを入力した場合、ＣＰＵ１１は入力した操作情報のコードを生成する。ユーザがローカル事後条件欄５６４をクリックした場合、ＣＰＵ１１は操作情報のローカル事後条件の入力を受け付ける。ユーザが操作情報のローカル事後条件を入力した場合、ＣＰＵ１１は入力した操作情報のローカル事後条件を生成する。ＣＰＵ１１は後述するスーパークラス図及び仕様適合判定規則に基づいて自動生成された実効事後条件を実効事後条件欄５６５に表示する。
【００７１】
ユーザが戻り値欄５６６をクリックした場合、ＣＰＵ１１は操作情報の戻り値の入力を受け付ける。ユーザが操作情報の戻り値を入力した場合、ＣＰＵ１１は入力した操作情報の戻り値を生成する。
【００７２】
ユーザがボタン５６７をクリックした場合、ＣＰＵ１１は生成した操作情報の名称、引数、型、可視性、操作種別、ローカル事前条件、実効事前条件、コード、ローカル事後条件、実効事後条件及び戻り値を操作情報ＤＢ１２３に記憶する。
【００７３】
図１３はクラスの操作情報を選択するための操作選択画面５０の一例を示す説明図である。操作選択画面５０はスーパークラスから継承された操作選択画面５８及び自クラス操作選択画面５９を備える。スーパークラスから継承された操作選択画面５８は左部に設けられた番号欄５８１と、番号欄５８１の右部に設けられた操作名欄５８２と、操作名欄５８２の右部に設けられた引数欄５８３と、引数欄５８３の右部に設けられた戻り値欄５８４とを備える。
【００７４】
スーパークラスから継承された操作選択画面５８は自身のクラスが継承しているスーパークラスの操作情報を選択する画面である。番号欄５８１は操作情報を識別するための番号が表示される欄である。操作名欄５８２は操作情報の名称が表示される欄である。引数欄５８３は操作情報の引数が表示される欄である。戻り値欄５８４は操作情報の引数が表示される欄である。
【００７５】
自クラス操作選択画面５９は自身のクラスで定義した操作を選択する画面である。自クラス操作選択画面５９は番号欄５９１、操作名欄５９２と、引数欄５９３と戻り値欄５９４とを備える。自クラス操作選択画面５９の構成は操作選択画面５８の構成と同等であるため、簡略のため記載を省略する。
【００７６】
以下、操作選択画面５０の作用及び動作について説明する。ＣＰＵ１１は操作情報ＤＢ１２３を参照し、自身のクラスが継承するスーパークラスの情報をスーパークラスから継承された操作選択画面５８に表示する。具体的にはＣＰＵ１１は操作情報ＤＢ１２３を参照し、番号欄５８１に１を表示し、操作名欄５８２にset年齢を表示し、引数欄５８３にnew年齢を表示し、戻り値欄５８４にintを表示する。
【００７７】
ユーザがスーパークラスから継承された操作選択画面５８の各行をクリックした後、ボタン５９０をクリックした場合、ＣＰＵ１１は操作情報ＤＢ１２３を参照し、スーパークラスから継承された操作選択画面５８の各行に対応する項目が表示された操作定義画面５を表示する。具体的にはユーザがスーパークラスから継承された操作選択画面５８の１行目をクリックした場合、ＣＰＵ１１は操作情報ＤＢ１２３を参照し、操作名欄５１にset年齢を表示し、ナンバー欄５２１に１を表示し、引数名欄５２２にnew年齢を表示し、型欄５２３にintを表示し、デフォルト値欄５２４に２０を表示し、型欄５３にvoidを表示し、publicのラジオボタン５４をオンにし、仮想のラジオボタン５５をオンにし、実効事前条件欄５６２に自動生成された実効事前条件を表示し、コード欄５６３にコードを表示し、実効事後条件欄５６５に自動生成された実効事後条件を表示した操作定義画面５を表示する。
【００７８】
ユーザがボタン５９０をクリックした場合、ＣＰＵ１１はスーパークラスの操作情報と同様の情報を生成し、自動生成された実効事前条件及び実効事後条件とともに生成された操作情報をサブクラスでオーバーライド操作として記憶する。ＣＰＵ１１は操作情報ＤＢ１２３を参照し、番号欄５９１に１を表示し、操作名欄５９２にset年齢を表示し、引数欄５９３にnew年齢を表示し、戻り値欄５９４にintを表示する。
【００７９】
図１４は関連情報を定義するための関連定義画面６の一例を示す説明図である。関連定義画面６は上端に設けられたタブ６７１及び６７２と、上部に設けられた関連名欄６１と、関連名欄６１の下部に設けられた制約条件欄６２と、制約条件欄６２の下部に設けられた制約条件欄６３と、制約条件欄６３の下部に設けられた制約条件欄６４と、制約条件欄６４の下部に設けられた関連名方向欄６５と、関連名方向欄６５の下部に設けられた参照方向欄６６と、下端に設けられたボタン６７とを備える。
【００８０】
制約条件欄６２は制約条件欄６２内の左上部、右上部、中央左部、中央右部及び左下部の夫々に設けられたチェックボタン６２１、６２２、６２３、６２４及び６２５の夫々が設けられている。制約条件欄６３は制約条件欄６３内の左上部、右上部、左下部及び右下部の夫々に設けられたチェックボタン６３１、６３２、６３３及び６３４の夫々が設けられている。
【００８１】
タブ６７１は関連定義画面６を表示するためのタブである。タブ６７２は後述する関連端名定義画面７を表示するためのタブである。関連名欄６１は関連情報の名称の入力を受け付ける欄である。制約条件欄６２、６３及び６４は制約条件を選択するための欄である。関連名方向欄６５は関連名情報の方向を示す関連名方向を選択するための欄である。参照方向欄６６は関連をナビゲーションして参照する方向を示す参照方向を選択するための欄である。ボタン６７は生成した情報を関連情報ＤＢ１２４に記憶するためのボタンである。
【００８２】
以下、関連定義画面６の作用及び動作について説明する。ユーザがタブ６７１をクリックした場合、ＣＰＵ１１は関連定義画面６を表示する。ユーザがタブ６７２をクリックした場合、ＣＰＵ１１は関連端名定義画面７を表示する。ユーザが関連名欄６１をクリックした場合、ＣＰＵ１１は関連名の入力を受け付ける。ユーザが関連名を入力した場合、ＣＰＵ１１は入力した関連名を生成する。
【００８３】
ユーザがチェックボタン６２１、６２２、６２３、６２４及び６２５の夫々のボタンをクリックした場合、ＣＰＵ１１は制約条件としてstatic、derived、union、subset及びredefineの夫々を生成する。
【００８４】
ユーザがチェックボタン６３１、６３２、６３３及び６３４の夫々をクリックした場合、ＣＰＵ１１は制約条件としてreflective、symmetry、transitive及びasymmetryの夫々を生成する。ユーザが制約条件欄６４をクリックした場合、ＣＰＵ１１は制約条件の入力を受け付ける。ユーザが制約条件を入力した場合、ＣＰＵ１１は入力した制約条件を生成する。
【００８５】
ユーザが関連名方向欄６５の左部、中央部及び右部のチェックボタンの夫々をクリックした場合、ＣＰＵ１１は関連方向として右関連名方向、左関連名方向及びなしの夫々を生成する。ユーザが参照方向欄６６の左部、中央部及び右部のチェックボタンの夫々をクリックした場合、ＣＰＵ１１は関連をナビゲーションする参照方向として右参照方向、左参照方向及び両方向の夫々を生成する。
【００８６】
ユーザがボタン６７をクリックした場合、ＣＰＵ１１は生成した関連情報の名称、制約条件、関連名方向及び参照方向を関連情報ＤＢ１２４に記憶する。
【００８７】
図１５は関連端を定義するための関連端名定義画面７の一例を示す説明図である。関連端名定義画面７は上部に設けられた関連端名欄７１と、関連端名欄７１の下部に設けられた制約条件欄７２と、制約条件欄７２の下部に設けられた制約条件欄７３と、制約条件欄７３の下部に３つ設けられたラジオボタン７４と、ラジオボタン７４の左下及び右下部に設けられた多重度欄７５１及び７５２と、多重度欄７５２の右部に設けられたチェックボタン７５３と、多重度欄７５１及び７５２の下部に設けられた限定子欄７６と、限定子欄７６の右下に設けられた追加ボタン７７及び削除ボタン７８と、下端に設けられたボタン７９とを備える。以下、関連端名定義画面７の制約条件欄７３及びラジオボタン７４は関連定義画面６の制約条件欄６４及び属性定義画面４のラジオボタン４４の構成、作用及び動作と同様であるため、簡潔のため記載を省略する。
【００８８】
制約条件欄７２は関連端名欄７１に関連端名の入力を受け付けるための欄である。制約条件欄７２は制約条件欄７２内の左上部、中上部、右上部、左部、中央部、中央右部、左下部及び中央下部の夫々に設けられたチェックボタン７２１、７２２、７２３、７２４、７２５、７２６、７２７及び７２８の夫々が設けられている。制約条件欄７２は制約条件を選択するための欄である。多重度欄７５１、７５２及びチェックボタン７５３は多重度の入力を受け付けるための欄である。限定子欄７６は限定子情報を表示するための欄である。限定子欄７６は左部、中央部及び右部の夫々に限定番号欄７６１、オブジェクト欄７６２及び型欄７６３の夫々を備える。限定番号欄７６１、オブジェクト欄７６２及び型欄７６３の夫々は、限定番号、限定子の名称及び限定子の型の夫々を表示するための欄である。追加ボタン７７及び削除ボタン７８の夫々は限定子の追加及び削除の夫々を行うボタンである。ボタン７９は生成した情報を関連情報ＤＢ１２４に記憶するためのボタンである。
【００８９】
以下、関連端名定義画面７の作用及び動作について説明する。ユーザが関連端名欄７１をクリックした場合、ＣＰＵ１１は関連端名の入力を受け付ける。ユーザが関連端名を入力した場合、ＣＰＵ１１は入力した関連端名を生成する。ユーザがチェックボタン７２１、７２２、７２３、７２４、７２５、７２６、７２７及び７２８の夫々をクリックした場合、ＣＰＵ１１は制約条件としてstatic、derived、immutable、unique、ordered、union、subset及びredefineの夫々を生成する。ユーザが多重度欄７５１をクリックした場合、ＣＰＵ１１は多重度の最小値の入力を受け付ける。ユーザが多重度欄７５２をクリックした場合、ＣＰＵ１１は多重度の最大値の入力を受け付ける。ユーザがチェックボタン７５３をクリックした場合、最大値が無限であることを示すアスタリスクを生成する。ＣＰＵ１１は入力された最小値、最大値及びアスタリスクの有無に基づいて多重度を生成する。具体的にはユーザが多重度欄７５１に０を入力し、多重度欄７５２に１を入力した場合、多重度0..1を生成する。ユーザが多重度欄７５１に０を入力し、チェックボタン７５３をクリックした場合、多重度0..*を生成する。
【００９０】
ユーザが追加ボタン７７をクリックした場合、ＣＰＵ１１は別のウィンドウにオブジェクトを識別するための限定番号、限定子の名称及び限定子の型の入力を受け付ける。ユーザが限定番号、限定子の名称及び限定子の型を入力した場合、ＣＰＵ１１は入力した限定番号、限定子の名称及び限定子の型を生成し、限定番号欄７６１、オブジェクト欄７６２及び型欄７６３の夫々に、限定番号、限定子の名称、限定子の型の夫々を表示する。ユーザが限定子欄７６のオブジェクトをクリックした後、削除ボタン７８をクリックした場合、ＣＰＵ１１はクリックしたオブジェクトを関連端名情報ＤＢ１２５から削除する。
【００９１】
ユーザがボタン７９をクリックした場合、ＣＰＵ１１は生成した関連端名の名称、制約条件、可視性の種別、多重度及び限定子を関連端名情報ＤＢ１２５に記憶する。
【００９２】
図１６は関連情報を選択するための関連選択画面６０の一例を示す説明図である。関連選択画面６０は上部に設けられたスーパークラスから継承された操作選択画面６８と、スーパークラスから継承された操作選択画面６８の下部に設けられた自クラス操作選択画面６９とを備える。スーパークラスから継承された操作選択画面６８は左部に設けられた番号欄６８１と、番号欄６８１の右部に設けられた関連名欄６８２と、関連名欄６８２の右部に設けられた関連名方向欄６８３と、関連名方向欄６８３の右部に設けられた参照方向欄６８４と、参照方向欄６８４の右部に設けられた関連端名欄６８５と、関連端名欄６８５の右部に設けられた多重度欄６８６と、多重度欄６８６の右部に設けられた相手クラス名欄６８７と、相手クラス名欄６８７の右部に設けられたプロパティ欄６８８とを備える。
【００９３】
スーパークラスから継承された操作選択画面６８は自身のクラスのスーパークラスから継承する関連情報を選択する画面である。番号欄６８１は関連情報を識別するための番号が表示される欄である。関連名欄６８２は関連情報の名称が表示される欄である。関連名方向欄６８３は関連名の方向が表示される欄である。参照方向欄６８４は参照方向が表示される欄である。関連端名欄６８５は関連端名が表示される欄である。多重度欄６８６は多重度が表示される欄である。相手クラス名欄６８７は関連先の相手のクラスの名称が表示される欄である。プロパティ欄６８８は制約条件を表示するための欄である。
【００９４】
自クラス操作選択画面６９は自身のクラスの操作を選択する画面である。自クラス操作選択画面６９は番号欄６９１、関連名欄６９２と、関連名方向欄６９３と、参照方向欄６９４と、関連端名欄６９５と、多重度欄６９６と、関連先の相手クラス名欄６９７と、プロパティ欄６９８とを備える。自クラス操作選択画面６９の構成はスーパークラスから継承された操作選択画面６８の構成と同等であるため、簡略のため記載を省略する。
【００９５】
以下、関連選択画面６０の作用及び動作について説明する。ＣＰＵ１１は関連情報ＤＢ１２４及び関連端名情報ＤＢ１２５を参照し、自身のクラスのスーパークラスから継承する関連情報をスーパークラスから継承された操作選択画面６８に表示する。具体的にはＣＰＵ１１は関連情報ＤＢ１２４及び関連端名情報ＤＢ１２５を参照し、番号欄６８１に１を表示し、関連名欄６８２に管理するを表示し、方向欄６８３に右関連名方向を表示し、参照方向欄６８４に両方向を表示し、関連端名欄６８５に部下を表示し、多重度欄６８６に0..*を表示し、相手クラス名欄６８７に社員を表示したスーパークラスから継承された操作選択画面６８を表示する。以下、ＣＰＵ１１は同様の処理を繰り返し、スーパークラスから継承された操作選択画面６８を表示する。
【００９６】
ユーザがスーパークラスから継承された操作選択画面６８の各行を選択した場合、ＣＰＵ１１は関連情報ＤＢ１２４を参照し、選択した関連情報に対応する項目が表示された関連選択画面６０を表示する。具体的にはユーザがスーパークラスから継承された操作選択画面６８の１行目を選択した場合、ＣＰＵ１１は関連情報ＤＢ１２４及び関連端名情報ＤＢ１２５を参照し、関連名欄６１に表示し、関連名方向欄６５の右関連名方向のラジオボタンをオンにし、参照方向欄６６の両方向のラジオボタンをオンにした関連定義画面６を表示する。ユーザがタブ６７２をクリックした場合、関連端名欄７１に部下を表示し、チェックボタン７２８をチェックし、publicのラジオボタン７４をオンにし、多重度欄７５１に0を表示し、チェックボタン７５３をチェックした関連端名定義画面７を表示する。
【００９７】
ユーザが図１５の関連端名欄７１に下級役員を入力し、ボタン７９をクリックした場合、ＣＰＵ１１は下級役員を生成し、関連端名情報ＤＢ１２５に記憶する。ＣＰＵ１１は番号欄６９１に１を表示し、関連名欄６９２に管理するを表示し、方向欄６９３に右関連名方向を表示し、参照方向欄６９４に両方向を表示し、関連端名欄６９５に下級役員を表示し、多重度欄６９６に0..*を表示し、相手クラス名欄６９７に役員を表示した自クラス操作選択画面６９を表示する。以下、ＣＰＵ１１は同様の処理を繰り返し、自クラス操作選択画面６９を表示する。
【００９８】
図１７は継承の種別と仕様適合判定規則を選択するための継承情報選択画面８の一例を示す説明図である。継承情報選択画面８は上部に設けられたラジオボタン８１と、ラジオボタン８１の下部に設けられたラジオボタン８２と、下端に設けられたボタン８３とを備える。ラジオボタン８２は上部に設けられたラジオボタン８２１と、ラジオボタン８２１の下部に左から順に３つ設けられたラジオボタン８２２、８２３及び８２４と、ラジオボタン８２２、８２３及び８２４の下部に左から順に３つ設けられたラジオボタン８２５、８２６及び８２７とを備える。以下、継承情報選択画面８のラジオボタン８１は、継承の種類を選択するボタンである。ラジオボタン８２は仕様適合判定規則を選択するためのボタンである。ラジオボタン８３は生成した情報を仕様適合判定規則ＤＢ１２６に記憶するためのボタンである。
【００９９】
以下、継承情報選択画面８の作用及び動作について説明する。ユーザがラジオボタン８２１、８２２、８２３、８２４、８２５、８２６、８２７の夫々をクリックした場合、ＣＰＵ１１は仕様適合判定規則としてmanual、exact pre/post、exact/pre、exact/post、weak plug-in、satisfies及びplug-inの夫々を選択する。
【０１００】
ユーザがボタン８３をクリックした場合、ＣＰＵ１１は選択した継承の種別及び仕様適合判定規則を仕様適合判定規則ＤＢ１２６に記憶する。
【０１０１】
以下では、各図を参照しつつ、複数のデータ間の関係又はデータと継承データとの関係を示す関係図の説明を行う。図１８はクラス図生成画面９の一例を示す説明図である。クラス図生成画面９は関係図の一例であるクラス図を生成するための画面である。クラス図とはスーパークラスと、スーパークラス又はサブクラスとの関係を示す図である。本実施形態では関係図の一例としてクラス図を示したがこれに限られるものではない。関係図はサブシステム図、コンポーネント図又はＥＲ（エンティティ・リレーションシップ）図でもよい。
【０１０２】
図１８に示すクラス図は図８の仕様適合判定規則２４に従う。クラス図生成画面９は左部に設けられたアイコン９０１及び９０２と、右部に設けられた生成画面９０とを備える。
【０１０３】
生成画面９０は上部に表示されたスーパークラス図９１と、左下部に表示されたサブクラス図９２と、スーパークラス図９１とサブクラス図９２との間を接続する継承矢印の上側及び下側の夫々に設けられた継承９４１及び仕様適合判定規則９５１とを備える。
【０１０４】
スーパークラス図９１はスーパークラスに関する内容を示す表である。スーパークラス図９１は上部に設けられたクラス名欄９１１と、中間に設けられた属性欄９１２と、属性欄９１２の下部に設けられた条件欄９１３と、接続された２つの矢印の上側に設けられた関連情報９１４と、左側及び右側の夫々の矢印の右部に設けられた関連端名９１５及び９１６と、左側及び右側の夫々の矢印の左部に設けられた多重度９１７及び９１８と、操作および操作の条件欄９１３の下部に設けられたクラス不変条件欄９１９とを備える。
【０１０５】
クラス名欄９１１はクラスの名称を表示するための欄である。属性欄９１２はクラスの属性に関する情報を表示するための欄である。操作および操作の条件欄９１３は操作情報と操作の事前条件及び事後条件に関する情報を表示するための欄である。クラス不変条件欄９１９はクラスの不変条件に関する情報を表示するための欄である。
【０１０６】
サブクラス図９２はクラスに関する内容を示す表である。サブクラス図９２はスーパークラス図９１と同様の位置にクラス名欄９２１、属性欄９２２、操作および操作の条件欄９２３、関連情報９２４、関連端名９２５及び９２６、多重度９２７及び９２８並びにクラス不変条件欄９２９を備える。
【０１０７】
以下、クラス図生成画面９の作用及び動作について説明する。ユーザがアイコン９０１をクリックした後、生成画面９０にアイコン９０１をドラッグした場合、ＣＰＵ１１はスーパークラス図９１の元となるクラス図を生成画面９０に生成する。ユーザがスーパークラス図９１の元となるクラス図をクリックした場合、クラス定義画面３、属性定義画面４、操作定義画面５、関連定義画面６及び関連端名定義画面７へ画面を遷移するための遷移画面（図示せず）が表示される。ユーザが遷移画面でクラス定義画面３、属性定義画面４、操作定義画面５、関連定義画面６及び関連端名定義画面７のいずれかを選択した場合、ＣＰＵ１１は選択した画面を表示し、入力を受け付ける。
【０１０８】
ユーザが各画面で入力を終了した後、クラス図生成画面９に戻った場合、ＣＰＵ１１はクラス情報ＤＢ１２１を参照し、クラス名欄９１１にクラス名及びステレオタイプを生成し、クラス不変条件欄９１９にクラス不変条件を生成する。
【０１０９】
ＣＰＵ１１は属性情報ＤＢ１２２を参照し、属性欄９１２に属性情報及び不変条件を生成する。ＣＰＵ１１は操作情報ＤＢ１２３を参照し、操作および操作の条件欄９１３に操作情報、ローカル事前条件及びローカル事後条件を生成する。ＣＰＵ１１は関連情報ＤＢ１２４を参照し、関連情報９１４に関連情報を生成する。ＣＰＵ１１は関連情報ＤＢ１２４及び関連端名情報ＤＢ１２５を参照し、関連端名９１５及び９１６に関連端名を生成し、多重度９１７及び９１８に多重度を生成する。
【０１１０】
ユーザがさらにアイコン９０１をクリックした後、生成画面９０にアイコン９０１をドラッグした場合、ＣＰＵ１１はサブクラス図９２を生成する。ユーザがアイコン９０２をクリックした後、スーパークラス図９１とサブクラス図９２との間にドラッグした場合、ＣＰＵ１１はサブクラス図９２からスーパークラス図９１へ継承矢印を生成する。
【０１１１】
ユーザが継承矢印をクリックした場合、ＣＰＵ１１は図１７の継承情報選択画面８を表示し、入力を受け付ける。ユーザが継承情報選択画面８で入力を終了した後、クラス図生成画面９に戻った場合、ＣＰＵ１１は仕様適合判定規則ＤＢ１２６を参照し、継承９４１にスーパークラスとクラスとの間の継承の種類を表示し、仕様適合判定規則９５１にスーパークラスとクラスとの間の仕様適合判定規則を生成する。
【０１１２】
ＣＰＵ１１のサブクラス図９２の生成方法は以下の通りである。ＣＰＵ１１は以下のようにサブクラス図９２を自動生成する。ＣＰＵ１１はクラス情報ＤＢ１２１を参照し、クラス不変条件欄９２９にスーパークラスの不変条件を生成する。ＣＰＵ１１は属性情報ＤＢ１２２を参照し、属性欄９２２にスーパークラスの属性情報を生成する。ＣＰＵ１１は操作情報ＤＢ１２３及び仕様適合判定規則ＤＢ１２６を参照し、条件欄９２３にスーパークラスの操作情報、仕様適合判定規則に従う実効事前条件及び実効事後条件を生成する。ＣＰＵ１１は関連情報ＤＢ１２４を参照し、関連情報９２４にスーパークラスの関連情報を継承した関連を生成する。ＣＰＵ１１は関連情報ＤＢ１２４及び関連端名情報ＤＢ１２５を参照し、関連端名９２５及び９２６にスーパークラスの関連端名を継承した関連端名を生成し、多重度９２７及び９２８にスーパークラスの多重度を継承した多重度を生成する。
【０１１３】
ユーザがサブクラス図９２をクリックした場合、遷移画面が表示される。ユーザが遷移画面でクラス定義画面３、属性定義画面４、操作定義画面５、関連定義画面６及び関連端名定義画面７のいずれかを選択した場合、ＣＰＵ１１は選択した画面を表示し、入力を受け付ける。
【０１１４】
ＣＰＵ１１は以下のようにユーザがサブクラス図９２の各要素を入力する。ユーザが各画面で入力を終了した後、クラス図生成画面９に戻った場合、ＣＰＵ１１はクラス情報ＤＢ１２１を参照し、クラス名欄９２１にクラス名及びステレオタイプを生成し、クラス不変条件欄９２９にクラス不変条件を生成する。ＣＰＵ１１は属性情報ＤＢ１２２を参照し、属性欄９２２にサブクラスの属性情報及び不変条件を生成する。ＣＰＵ１１は操作情報ＤＢ１２３を参照し、条件欄９２３にサブクラスの操作情報、実効事前条件及び実効事後条件を生成する。ＣＰＵ１１は関連情報ＤＢ１２４を参照し、関連情報９２４にサブクラスの関連情報を生成する。ＣＰＵ１１は関連情報ＤＢ１２４及び関連端名情報ＤＢ１２５を参照し、関連端名９２５及び９２６にサブクラスの関連端名を生成し、多重度９２７及び９２８にサブクラスの多重度を生成する。
【０１１５】
ＣＰＵ１１はサブクラスの特性がスーパークラスの特性と同一か否かを判定する。具体的にはＣＰＵ１１はサブクラス及びスーパークラスの属性と属性の不変条件、操作情報、クラス不変条件、実効事前条件、実効事後条件、関連名と関連の制約、関連端名又は多重度が同一か否かを判定する。ＣＰＵ１１はクラスの特性がスーパークラスの特性と同一であると判定した場合、スーパークラスの特性と同一であるクラスの特性に対応する文字色を所定の第１色に変更する。所定の第１色とは例えば灰色である。具体的にはＣＰＵ１１はサブクラス及びスーパークラスの属性、属性の不変条件、操作情報、クラス不変条件、実効事前条件、実効事後条件、関連名と関連の制約、関連端名又は多重度が同一であると判定した場合、スーパークラスの情報と同一である属性情報、属性の不変条件、操作情報、クラス不変条件、実効事前条件、実効事後条件、関連名、関連の制約、関連端名又は多重度の色を所定の第１色に変更する。
【０１１６】
ＣＰＵ１１はサブクラスの特性がスーパークラスの特性と同一でないと判定した場合、すなわちサブクラスで新規に追加定義された特性情報と判断した場合、スーパークラスの特性と同一でないサブクラスの特性に対応する文字色を所定の第２色に変更する。所定の第２色とは黒である。具体的にはＣＰＵ１１はサブクラス及びスーパークラスの属性情報、属性の不変条件、操作情報、クラス不変条件、実効事前条件、実効事後条件、関連名と関連の制約、関連端名又は多重度がサブクラスで新規に追加定義された特性情報と判定した場合、スーパークラスに存在しない属性、属性の不変条件、操作情報、クラス不変条件、実効事前条件、実効事後条件、関連名と関連の制約、関連端名又は多重度の色を所定の第２色に変更する。
【０１１７】
ＣＰＵ１１はサブクラスがスーパークラスから継承する特性又は特性に関する条件がリスコフ置換原則に従っているか否かを判定する。具体的にはＣＰＵ１１はサブクラスの属性、属性の不変条件、操作情報、クラス不変条件、実効事前条件、実効事後条件、関連名と関連の制約、関連端名又は多重度がリスコフ置換原則に従っているか否かを判定する。ＣＰＵ１１はサブクラスの特性がリスコフ置換原則に従っていると判定した場合、リスコフ置換原則に従っている特性に対応する文字色を所定の第３色に変更する。所定の第３色とは例えば青である。具体的にはＣＰＵ１１はクラス及びスーパークラスの属性、属性の不変条件、操作情報、クラス不変条件、実効事前条件、実効事後条件、関連名と関連の制約、関連端名又は多重度がリスコフ置換原則に従っていると判定した場合、リスコフ置換原則に従っている属性情報、属性の不変条件、操作情報、クラス不変条件、実効事前条件、実効事後条件、関連名と関連の制約、関連端名又は多重度の色を所定の第３色に変更する。
【０１１８】
ＣＰＵ１１はサブクラスの特性又は特性に関する条件がリスコフ置換原則に従っていないと判定した場合、リスコフ置換原則に従っていない特性に対応する文字色を所定の第４色に変更する。所定の第４色とは例えば赤である。具体的にはＣＰＵ１１はクラスの属性、属性の不変条件、操作情報、クラス不変条件、実効事前条件、実効事後条件、関連名と関連の制約、関連端名又は多重度がリスコフ置換原則に従っていないと判定した場合、リスコフ置換原則に従っていない属性情報、属性の不変条件、操作情報、クラス不変条件、実効事前条件、実効事後条件、関連名と関連の制約、関連端名又は多重度の色を所定の第４色に変更する。ＣＰＵ１１は生成したクラス図を表示部１５に表示する。
【０１１９】
以下、具体的なクラス図生成画面９の作用及び動作について説明する。ユーザがアイコン９０１をクリックした後、生成画面９０にアイコン９０１をドラッグした場合、ＣＰＵ１１はスーパークラス図９１の元のクラスとなるクラス図を生成画面９０に生成する。ユーザがスーパークラス図９１をクリックした場合、遷移画面（図示せず）が表示される。ユーザが遷移画面でクラス定義画面３、属性定義画面４、操作定義画面５、関連定義画面６及び関連端名定義画面７のいずれかを選択した場合、ＣＰＵ１１は選択した画面を表示し、入力を受け付ける。
【０１２０】
ユーザが各画面で入力を終了した後、クラス図生成画面９に戻った場合、ＣＰＵ１１はクラス情報ＤＢ１２１を参照し、クラス不変条件欄９１９に[社員ＩＤ >= 0 && 社員ＩＤ <= 5000][年齢 >= 18 && 年齢 <= 65]を生成する。
【０１２１】
ＣＰＵ１１は属性情報ＤＢ１２２を参照し、クラス名が社員であり、属性の名称が社員ＩＤであり、属性の型がintであり、不変条件が社員ＩＤ >= 0 && 社員ＩＤ <= 5000であり、初期値が０であり、属性の可視性がprotectedなので、# 社員ＩＤ : int = 0 [社員ＩＤ >= 0 && 社員ＩＤ <= 5000]を属性欄９１２に生成する。ＣＰＵ１１はクラス名が社員であり、属性の名称が名前であり、属性の可視性がprotectedであり、属性の型がchar*であり、制約条件がreadOnly及びuniqueであるため、# 名前 : char* [readOnly] [unique]を属性欄９１２に生成する。
【０１２２】
ＣＰＵ１１はクラス名が社員であり、属性の名称が社員ＩＤであり、属性の型がintであり、属性の可視性がprotectedであり、不変条件が[年齢 >= 18 && 年齢 <= 65]であるため、# 年齢 : int[年齢 >= 18 && 年齢 <= 65]を属性欄９１２に生成する。ＣＰＵ１１はクラス名が社員であり、属性の名称が部下であり、属性の型が社員*であり、可視性の種別がprivateであるため、-<<A>> 部下[] : 社員*を属性欄９１２に生成する。−は可視性がprivateを示している。<<A>>は関連属性を示している。なお、ＣＰＵ１１は例えば可視性の種別がpublicであった場合、+を属性欄９１２に生成する。ＣＰＵ１１は例えば可視性の種別がprotectedであった場合、#を属性欄９１２に生成する。ＣＰＵ１１はクラス名が社員ＩＤであり、属性の名称が上司であり、属性の型が社員*であり、関連属性であり、可視性の種別がprivateであるため、-<<A>> 上司 : 社員*を属性欄９１２に生成する。
【０１２３】
ＣＰＵ１１は操作情報ＤＢ１２３を参照し、クラス名が社員であり、操作情報の名称がset年齢であり、型がvoidであり、引数の名称がnew年齢であり、デフォルト値が２０であり、可視性の種別がpublicであり、操作情報の種別が仮想であるため、+<<Virtual>>set年齢(int new年齢 = 20):voidを条件欄９１３に生成する。ＣＰＵ１１は実効事前条件が[new年齢 >= 18 && new年齢 <= 65]であり、実効事後条件が [年齢 >= 18 && 年齢 <= 65 && 年齢 == new年齢]であるため、条件欄９１３に実効事前条件[new年齢 >= 18 && new年齢 <= 65]及び実効事後条件[年齢 >= 18 && 年齢 <= 65 && 年齢 == new年齢]を生成する。
【０１２４】
ＣＰＵ１１は関連情報ＤＢ１２４を参照し、クラス名が社員であり、関連情報の名称が管理するであり、制約条件がsymmetryであり、関連名方向が右関連方向であり、参照方向が両方向であるため、スーパークラス図の上端に接続された２つの矢印を設け、関連情報９１４に右向き三角及び管理する[symmetry]の文字を生成する。
【０１２５】
ＣＰＵ１１は関連情報ＤＢ１２４及び関連端名情報ＤＢ１２５を参照し、クラス名が社員であり、第１関連端名に対応づけられた関連端名の名称が上司であり、可視性の種別がpublicであり、多重度が0..1であるため、関連端名９１５に-上司を生成し、多重度９１７に0..1を生成する。ＣＰＵ１１はクラス名が社員であり、第２関連端名に対応づけられた関連端名の名称が部下であり、可視性がpublicであり、多重度が0..*であるため、関連端名９１６に-部下を生成し、多重度９１８に0..*を生成する。
【０１２６】
ユーザがさらにアイコン９０１をクリックした後、生成画面９０にアイコン９０１をドラッグした場合、ＣＰＵ１１はサブクラス図９２の元となるクラス図を生成する。
【０１２７】
ユーザがアイコン９０２をクリックした後、スーパークラス図９１とサブクラス図９２との間にドラッグした場合、ＣＰＵ１１はサブクラス図９２からスーパークラス図９１へ継承矢印を生成する。
【０１２８】
ユーザがスーパークラスとサブクラス間の継承矢印をクリックした場合、ＣＰＵ１１は図１７の継承情報選択画面８を表示し、入力を受け付ける。ユーザが継承情報選択画面８で入力を終了した後、クラス図生成画面９に戻った場合、ＣＰＵ１１は仕様適合判定規則ＤＢ１２６を参照し、サブクラス名が役員であり、スーパークラス名が社員であり、継承の種類がpublicであり、仕様適合判定がplug-inであるため、継承９４１に<<public>>を生成し、仕様適合判定規則９５１に[plug-in]を生成する。
【０１２９】
ＣＰＵ１１はサブクラス図９２とスーパークラス図９１とを継承矢印で接続した場合、スーパークラス図９１に基づいて、スーパークラスの属性の情報から継承されるサブクラス図９２の構成要素を生成する。具体的には以下のようにサブクラス図９２を自動生成する。スーパークラスの属性の名称が社員ＩＤであり、属性の型がintであり、不変条件が社員ＩＤ >= 0 && 社員ＩＤ <= 5000であり、初期値が０であり、可視性の種別がprotectedであるため、# 社員ＩＤ : int = 0 [社員ＩＤ >= 0 && 社員ＩＤ <= 5000]を属性欄９２２に生成する。ＣＰＵ１１は属性の名称が名前であり、属性の型がchar*であり、関連属性であり、制約条件がreadOnly及びuniqueであり、可視性の種別がprotectedであるため、# 名前 : char* [readOnly] [unique]を属性欄９２２に生成する。
【０１３０】
ＣＰＵ１１はスーパークラスからサブクラスに継承される関連属性の名称である部下を下級役員でredefineしており、属性の型を社員*から役員*にredefineしており、可視性の種別がprivateであるため、-<<A>>下級役員：役員*[redefines 部下]を属性欄９２２に生成する。ＣＰＵ１１はスーパークラスからサブクラスに継承される関連属性の名称である上司を上級役員でredefineしており、属性の型を社員*から役員*にredefineしており、可視性がprivateであるため、-<<A>>上級役員：役員*[redefines 上司]を属性欄９２２に生成する。
【０１３１】
ＣＰＵ１１はサブクラスがスーパークラスから継承しオーバーライドする操作情報の名称がset年齢であり、型がvoidであり、引数の名称がnew年齢であり、デフォルト値が２０であり、可視性の種別がpublicであり、操作情報の種別が仮想であるため、+<<Virtual>>set年齢(int new年齢 = 20):voidを条件欄９２３に生成する。ＣＰＵ１１はスーパークラスの実効事前条件が[new年齢 >= 18 && new年齢 <= 65]であり、であり、仕様適合判定規則が[plug-in]であるため、サブクラスの操作と操作の条件欄９２３に実効事前条件[(new年齢 >= 18 && new年齢 <= 65) || (new年齢 >= 55 && new年齢 <= 65]]を生成する。ＣＰＵ１１はスーパークラスの実効事後条件[年齢 >= 18 && 年齢 <= 65 && 年齢 == new年齢]であり、仕様適合判定規則が[plug-in]であるため、操作と操作の条件欄９２３に実効事後条件  [(年齢 >= 18 && 年齢 <= 65 && 年齢 == new年齢) && (年齢 >= 55 && 年齢 <= 65 && 年齢 == new年齢)]を生成する。
【０１３２】
ユーザがスーパークラス図９１をクリックした場合、遷移画面が表示される。ユーザが遷移画面でクラス定義画面３、属性定義画面４、操作定義画面５、関連定義画面６及び関連端名定義画面７のいずれかを選択した場合、ＣＰＵ１１は選択した画面を表示し、入力を受け付ける。
【０１３３】
ユーザが各画面で入力を終了した後、クラス図生成画面９に戻った場合、ＣＰＵ１１はクラス情報ＤＢ１２１を参照し、クラス名欄９２１に役員を生成する。ＣＰＵ１１は属性情報ＤＢ１２２を参照し、クラス名が役員であり、属性の名称が年齢であり、属性の型がintであり、不変条件が[年齢 >= 55 && 年齢 <= 65]であり、初期値が０であるため、#年齢：int = 0[年齢 >= 55 && 年齢 <= 65]を属性欄９２２に生成する。ＣＰＵ１１はクラス不変条件欄９２９に[社員ＩＤ >= 0 && 社員ＩＤ <= 5000][年齢 >= 55 && 年齢 <= 65]を生成する。
【０１３４】
ＣＰＵ１１は属性情報ＤＢ１２２を参照し、クラス名が役員であり、属性の名称が下級役員であり、関連属性であり、属性の型が役員*であり、可視性の種別がprivateであるため、-<<A>>下級役員：役員*を属性欄９２２に生成する。
【０１３５】
ＣＰＵ１１は関連情報ＤＢ１２４を参照し、スーパークラスのクラス名が社員であり、関連情報の名称が管理するであり、制約条件がsymmetryであり、関連名方向が右関連方向であり、参照方向が両方向であるため、スーパークラス図の上端に接続された２つの矢印を設け、関連情報９１４に右向き三角及び管理する[symmetry]の文字を生成する。
【０１３６】
ＣＰＵ１１は関連情報ＤＢ１２４及び関連端名情報ＤＢ１２５を参照し、サブクラスがスーパークラスから継承する関連と関連端情報から第１関連端名に対応づけられた関連端名の名称である上司を上級役員でredefineしており、可視性の種別がprivateであり、多重度が0..1であるため、関連端名９２６に-上級役員[redefines 上司]を生成し、多重度９２８に0..1を生成する。ＣＰＵ１１はサブクラスがスーパークラスから継承する関連と関連端情報から、第２関連端名に対応づけられた関連端名の名称である部下を下級役員でredefineしており、可視性の種別がprivateであり、多重度が0..*であるため、関連端名９２５に-下級役員[redefines 部下]を生成し、多重度９２７に0..*を生成する。
【０１３７】
ＣＰＵ１１は属性欄９２２の# 社員ＩＤ : int = 0 [社員ＩＤ >= 0 && 社員ＩＤ <= 5000]、# 名前 : char* [readOnly] [unique]及び# 年齢 : int、-<<A>> 並びに関連情報９２４の右向き三角及び管理する[symmetry]がスーパークラス図９１の情報と同一であると判定する。ＣＰＵ１１は属性欄９２２の# 社員ＩＤ : int = 0 [社員ＩＤ >= 0 && 社員ＩＤ <= 5000]、# 名前 : char* [readOnly] [unique]及び# 年齢 : int、-<<A>> 並びに関連情報９２４の右向き三角及び管理する[symmetry]を所定の第１色に変更する。
【０１３８】
ＣＰＵ１１は属性欄９２２の[年齢 >= 55 && 年齢 <= 65]、クラス不変条件欄９２９の[年齢 >= 55 && 年齢 <= 65]がスーパークラス図９１の情報と同一でなくサブクラスで変更されたと判定する。ＣＰＵ１１は属性欄９２２の[年齢>= 55 &&年齢<= 65]及びクラス不変条件欄９２９の[年齢 >= 55 && 年齢 <= 65]を所定の第２色に変更する。
【０１３９】
ＣＰＵ１１は仕様適合判定規則がplug-inであり、操作と操作の条件欄９１３のスーパークラスの実効事前条件[new年齢 >= 18 && new年齢 <= 65]が、操作と操作の条件欄９２３のサブクラスの実効事前条件[(new年齢 >= 18 && new年齢 <= 65) || (new年齢 >= 55 && new年齢 <= 65]]を含意し、かつ操作と操作の条件欄９２３のサブクラスの実効事後条件[(年齢 >= 18 && 年齢 <= 65 && 年齢 == new年齢) && (年齢 >= 55 && 年齢 <= 65 && 年齢 == new年齢)]が操作と操作の条件欄９１３のスーパークラスの実効事後条件[年齢 >= 18 && 年齢 <= 65 && 年齢 == new年齢]を含意しているため、リスコフ置換原則に従っていると判定する。ＣＰＵ１１は下級役員[] : 役員*[redefines 部下]及び上級役員 : 役員*[redefines 上司]、関連端名９２５の-下級役員[redefines 部下]及び関連端名９２６の-上級役員[redefines 上司]、および、下級役員[] : 役員*[redefines 部下]及び上級役員 : 役員*[redefines 上司]、関連端名９２５の-下級役員[redefines 部下]及び関連端名９２６の-上級役員[redefines 上司]及び属性欄９２２の関連属性-<<A>>下級役員[]及び-関連属性-<<A>>上級役員[]がリスコフ置換原則に従っていると判断し、さらに、下級役員及び上級役員の型「役員*」はスーパークラスの部下及び上司の部分型「社員*」であるので、リスコフ置換原則に従っていると判定する。
【０１４０】
ＣＰＵ１１は操作と操作の条件欄９２３の+<<Virtual>>set年齢(int new年齢 = 20):void、実効事前条件[(new年齢 >= 18 && new年齢 <= 65) || (new年齢 >= 55 && new年齢 <= 65]]、実効事後条件[(年齢 >= 18 && 年齢 <= 65 && 年齢 == new年齢) && (年齢 >= 55 && 年齢 <= 65 && 年齢 == new年齢)]、下級役員[] : 役員*[redefines 部下]、上級役員 : 役員*[redefines 上司]、関連端名９２５の-下級役員[redefines 部下]及び関連端名９２６の-上級役員[redefines 上司]、下級役員[] : 役員*[redefines 部下]、上級役員 : 役員*[redefines 上司]、関連端名９２５の-下級役員[redefines 部下]、関連端名９２６の-上級役員[redefines 上司]、属性欄９２２の関連属性-<<A>>下級役員[]、-関連属性-<<A>>上級役員[]、関連端名９２５の上級役員[redefines 上司]及び関連端名９２６の下級役員[redefines 部下]を所定の第３色に変更する。ＣＰＵ１１は生成したクラス図９を表示部１５に表示する。
【０１４１】
図１９はクラス図生成画面９の一例を示す説明図である。図１９に示すクラス図は図８の仕様適合判定規則２１に従う。以下、特に説明する構成、作用以外の構成及び作用は図１５と同等であり、簡潔のため記載を省略する。
【０１４２】
ユーザが各画面で入力を終了した後、クラス図生成画面９に戻った場合、ＣＰＵ１１はクラス情報ＤＢ１２１を参照し、クラス名欄９２１に役員２を生成する。
【０１４３】
ユーザが継承矢印をクリックした場合、ＣＰＵ１１は図１７の継承情報選択画面８を表示し、入力を受け付ける。ユーザが継承情報選択画面８で入力を終了した後、クラス図生成画面９に戻った場合、ＣＰＵ１１は仕様適合判定規則ＤＢ１２６を参照し、サブクラス名が役員２であり、スーパークラスが社員であり、継承の種別がpublicであり、仕様適合判定がexact pre/postであるため、サブクラス図９２からスーパークラス図９１へ継承矢印を引き、継承９４１に<<public>>を生成し、仕様適合判定規則９５１に[exact pre/post]を生成する。
【０１４４】
ＣＰＵ１１はサブクラス図９２とスーパークラス図９１とを継承矢印で接続した場合、スーパークラス図９１に基づいて、スーパークラスの情報から継承されるサブクラス図９２の構成要素を生成する。ＣＰＵ１１はスーパークラスの実効事前条件が[new年齢 >= 18 && new年齢 <= 65]であり、仕様適合判定規則が[exact pre/post]であるため、操作と操作の条件欄９２３にサブクラスの実効事前条件[new年齢 >= 18 && new年齢 <= 65]を生成する。ＣＰＵ１１はスーパークラスの実効事後条件[年齢 >= 18 && 年齢 <= 65 && 年齢 == new年齢]であり、仕様適合判定規則が[exact pre/post]であるため、操作と操作の条件欄９２３にサブクラスの実効事後条件[年齢 >= 18 && 年齢 <= 65 && 年齢 == new年齢]を生成する。
【０１４５】
ＣＰＵ１１は仕様適合判定規則がexact pre/postであり、操作と操作の条件欄９２３のサブクラスの実効事前条件[new年齢 >= 18 && new年齢 <= 65]が操作と操作の条件欄９１３の実効事前条件[new年齢 >= 18 && new年齢 <= 65]と同一であり、かつ操作と操作の条件欄９２３のサブクラスの実効事後条件[年齢 >= 18 && 年齢 <= 65 && 年齢 == new年齢]がスーパークラスの条件欄９１３の実効事後条件[年齢 >= 18 && 年齢 <= 65 && 年齢 == new年齢]と同一であるため、仕様適合判定規則に従っていると判定する。ＣＰＵ１１は属性欄９２２のサブクラスの関連属性-<<A>>下級役員[]｛redefine 部下｝及び-関連属性-<<A>>上級役員[]｛redefine 上司｝がリスコフ置換原則に従っていると判断する。下級役員及び上級役員の型「役員*」はスーパークラスの部下及び上司の部分型「社員*」であるので、リスコフ置換原則に従っていると判定する。
【０１４６】
ＣＰＵ１１は属性欄９２２の関連属性-<<A>>下級役員[]｛redefine 部下｝、-関連属性-<<A>>上級役員[]｛redefine 上司｝、操作と操作の条件欄９２３の+<<Virtual>>set年齢(int new年齢 = 20):void、実効事前条件[new年齢 >= 18 && new年齢 <= 65]、実効事後条件[年齢 >= 18 && 年齢 <= 65 && 年齢 == new年齢]、下級役員[] : 役員*[redefines 部下]、上級役員 : 役員*[redefines 上司]、関連端名９２５の-下級役員[redefines 部下]、関連端名９２６の-上級役員[redefines 上司]、下級役員[] : 役員*[redefines 部下]、上級役員 : 役員*[redefines 上司]、関連端名９２５の-下級役員[redefines 部下]、関連端名９２６の-上級役員[redefines 上司]、属性欄９２２の関連属性-<<A>>下級役員[]及び-関連属性-<<A>>上級役員[]、関連端名９２５の上級役員[redefines 上司]及び関連端名９２６の下級役員[redefines 部下]を所定の第３色に変更する。
【０１４７】
図２０はクラス図生成画面９の一例を示す説明図である。図２０に示すクラス図は図８の仕様適合判定規則２２に従う。以下、特に説明する構成、作用以外の構成及び作用は図１５と同等であり、簡潔のため記載を省略する。
【０１４８】
ユーザが各画面で入力を終了した後、クラス図生成画面９に戻った場合、ＣＰＵ１１はクラス情報ＤＢ１２１を参照し、クラス名欄９２１に役員２を生成する。ＣＰＵ１１は関連情報ＤＢ１２４及び関連端名情報ＤＢ１２５を参照し、サブクラスクラス名が役員であり、第１関連端名に対応づけられた関連端名の名称が上級役員｛redefine 上司｝であり、多重度が0..4であり、可視性の種別がprivateであるので関連端名９２６に-上級役員｛redefine 上司｝を生成する。また、第２関連端名に対応づけられた関連端名の名称が下級役員｛redefine 部下｝であり、多重度が0..4であり、可視性の種別がprivateであるので、関連端名９２５に-下級役員｛redefine 部下｝を生成する。
【０１４９】
ユーザが継承矢印をクリックした場合、ＣＰＵ１１は図１７の継承情報選択画面８を表示し、入力を受け付ける。ユーザが継承情報選択画面８で入力を終了した後、クラス図生成画面９に戻った場合、ＣＰＵ１１は仕様適合判定規則ＤＢ１２６を参照し、サブクラス名が役員２であり、スーパークラスが社員であり、継承の種別がpublicであり、仕様適合判定がexact postであるため、サブクラス図９２からスーパークラス図９１へ継承矢印を引き、継承９４１に<<public>>を生成し、仕様適合判定規則９５１に[exact post]を生成する。
【０１５０】
ＣＰＵ１１はサブクラス図９２とスーパークラス図９１とを継承矢印で接続した場合、スーパークラス図９１に基づいて、スーパークラスの情報から継承されるサブクラス図９２の構成要素を生成する。ＣＰＵ１１はスーパークラスの実効事前条件が[new年齢 >= 18 && new年齢 <= 65]であり、仕様適合判定規則が[exact post]であるため、操作および操作の条件欄９２３にサブクラスの実効事前条件[ (new年齢 >= 18 && new年齢 <= 65)||(年齢 >= 55 && 年齢 <= 65)]を生成する。ＣＰＵ１１はスーパークラスの実効事後条件[年齢 >= 18 && 年齢 <= 65 && 年齢 == new年齢]であり、仕様適合判定規則が[exact post]であるため、操作および操作の条件欄９２３にサブクラスの実効事後条件[年齢 >= 18 && 年齢 <= 65 && 年齢 == new年齢]を生成する。
【０１５１】
ＣＰＵ１１は仕様適合判定規則がexact postであり、操作および操作の条件欄９１３のスーパークラスの実効事前条件[new年齢 >= 18 && new年齢 <= 65]が、操作および操作の条件欄９２３のサブクラスの実効事前条件[ (new年齢 >= 18 && new年齢 <= 65)||(年齢 >= 55 && 年齢 <= 65)]を含意し、かつ操作および操作の条件欄９２３のサブクラスの実効事後条件[年齢 >= 18 && 年齢 <= 65 && 年齢 == new年齢]が操作および操作の条件欄９１３のスーパークラスの実効事後条件[年齢 >= 18 && 年齢 <= 65 && 年齢 == new年齢]と同一であるため、リスコフ置換原則に従っていると判定する。
【０１５２】
ＣＰＵ１１はサブクラスの操作および操作の条件欄９２３の+<<Virtual>>set年齢(int new年齢 = 20):void、サブクラスの実効事前条件[ (new年齢 >= 18 && new年齢 <= 65)||(年齢 >= 55 && 年齢 <= 65)]、サブクラスの事後条件[年齢 >= 18 && 年齢 <= 65 && 年齢 == new年齢]、下級役員[] : 役員*[redefines 部下]、上級役員 : 役員*[redefines 上司]、関連端名９２５の-下級役員[redefines 部下]、関連端名９２６の-上級役員[redefines 上司]、下級役員[] : 役員*[redefines 部下]、上級役員 : 役員*[redefines 上司]、関連端名９２５の-下級役員[redefines 部下]、関連端名９２６の-上級役員[redefines 上司]、属性欄９２２の関連属性-<<A>>下級役員[]、-関連属性-<<A>>上級役員[]、関連端名９２５の上級役員[redefines 上司]及び関連端名９２６の下級役員[redefines 部下]を所定の第３色に変更する。
【０１５３】
ＣＰＵ１１は仕様適合判定規則がexact postであり、多重度９２７の多重度が0..4であり、多重度９１６の多重度が0..1であり、サブクラスの多重度がスーパークラスの多重度より広いため、リスコフ置換原則に従っていないと判定する。ＣＰＵ１１は多重度９２７の0..4を所定の第４色に変更する。ＣＰＵ１１は生成したクラス図を表示部１５に表示する。
【０１５４】
次に、フローチャートを用いて情報処理装置１の処理手順を説明する。図２１〜２３は情報処理装置１の処理手順を示したフローチャートである。ＣＰＵ１１はクラス図生成画面９に入力を受け付ける（ステップＳ１）。ＣＰＵ１１は各種画面に入力を受け付ける（ステップＳ２）。具体的にはＣＰＵ１１はクラス定義画面３、属性定義画面４、操作定義画面５、関連定義画面６、関連端名定義画面７及び継承情報選択画面８に入力を受け付ける。
【０１５５】
ＣＰＵ１１は各種画面に入力された情報に基づいて各種情報を生成する（ステップＳ３）。具体的にはＣＰＵ１１はクラス定義画面３、属性定義画面４、操作定義画面５、関連定義画面６、関連端名定義画面７及び継承情報選択画面８に入力された情報に基づいてクラス名、属性情報、属性の不変条件、操作情報、クラス不変条件、ローカル事前条件、ローカル、実効事前条件、実効事後条件、関連端名又は多重度等を生成する。ＣＰＵ１１は生成した各種情報を記憶部１２に記憶する（ステップＳ４）。具体的にはＣＰＵ１１は生成したクラス名、属性情報、属性の不変条件、操作情報、クラス不変条件、ローカル事前条件、ローカル、実効事前条件、実効事後条件、事後条件、関連端名又は多重度等をクラス情報ＤＢ１２１、属性情報ＤＢ１２２、操作情報ＤＢ１２３、関連情報ＤＢ１２４、関連端名情報ＤＢ１２５又は仕様適合判定規則ＤＢ１２６に記憶する。
【０１５６】
ＣＰＵ１１は属性情報ＤＢ１２２を参照し、属性欄に属性及び不変条件を生成する（ステップＳ５）。ＣＰＵ１１はクラス情報ＤＢ１２１を参照し、クラス名欄にクラス名、ステレオタイプ、クラス不変条件欄にクラス不変条件を生成する（ステップＳ６）。ＣＰＵ１１は操作情報ＤＢ１２３を参照し、条件欄に操作情報、ローカル事前条件、ローカル事後条件、実効事前条件、実効事後条件及び例外を生成する（ステップＳ７）。なお、例外については実施の形態５で詳述する。ＣＰＵ１１は関連情報ＤＢ１２４を参照し、クラス図に関連情報を生成する（ステップＳ８）。ＣＰＵ１１は関連情報ＤＢ１２４及び関連端名情報ＤＢ１２５を参照し、クラス図に関連端名及び多重度を生成する（ステップＳ９）。
【０１５７】
ＣＰＵ１１は仕様適合判定規則ＤＢ１２６を参照し、クラス同士の間に継承矢印を生成し、継承９４１にサブクラス図とスーパークラスとの間の継承の種別を生成し、仕様適合判定規則９５１にサブクラスとスーパークラスとの間の仕様適合判定規則を生成する（ステップＳ１０）。
【０１５８】
ＣＰＵ１１はスーパークラス図とクラス図との間に継承矢印を生成したか否かを判定する（ステップＳ１１）。ＣＰＵ１１はスーパークラス図とクラス図との間に継承矢印を生成しなかったと判定した場合（Ｓ１１：ＮＯ）、処理をＳ１に移す。ＣＰＵ１１はスーパークラス図とクラス図との間に継承矢印を生成したと判定した場合（Ｓ１１：ＹＥＳ）、スーパークラス図及び仕様適合判定規則に基づいてクラス図の特性を生成する（ステップＳ１２）。
【０１５９】
ＣＰＵ１１はサブクラスの特性がスーパークラスの特性と同一か否かを判定する（ステップＳ１３）。具体的にはＣＰＵ１１はクラス及びスーパークラスの属性、操作情報、不変条件、事前条件、事後条件、関連端名又は多重度が同一か否かを判定する。ＣＰＵ１１はサブクラスの特性がスーパークラスの特性と同一であると判定した場合（Ｓ１３：ＹＥＳ）、スーパークラスの特性と同一であるサブクラスの特性に対応する文字色を所定の第１色に変更し（ステップＳ１４）、処理をＳ１６に移す。具体的にはＣＰＵ１１はクラス及びスーパークラスの属性、属性の不変条件、操作情報、クラス不変条件、実効事前条件、実効事後条件、関連名、関連端名又は多重度が同一であると判定した場合、スーパークラスの情報と同一である属性、属性の不変条件、操作情報、クラス不変条件、実効事前条件、実効事後条件、関連端名又は多重度の色を所定の第１色に変更する。
【０１６０】
ＣＰＵ１１はサブクラスの特性とスーパークラスの特性が同一であるか否かを判定する。ＣＰＵ１１はサブクラスの特性とスーパークラスの特性が同一でないと判定した場合、すなわちスーパークラスから継承している特性でないと判定した場合（Ｓ１３：ＮＯ）、スーパークラスの特性が同一でないサブクラスの特性に対応する文字色を所定の第２色に変更する（ステップＳ１５）。具体的にはＣＰＵ１１は属性、属性の不変条件、操作情報、クラス不変条件、実効事前条件、実効事後条件、関連端名又は多重度がスーパークラスから継承している特性でないと判定した場合、スーパークラスから継承している特性でない属性、属性の不変条件、操作情報、クラス不変条件、実効事前条件、実効事後条件、関連端名又は多重度の色を所定の第２色に変更する。
【０１６１】
ＣＰＵ１１はサブクラスの特性又は特性に関する条件がリスコフ置換原則に従っているか否かを判定する（ステップＳ１６）。具体的にはＣＰＵ１１はクラスの属性、属性の不変条件、操作情報、クラス不変条件、関連端名又は多重度がリスコフ置換原則に従っているかを判定し、実効事前条件、実効事後条件が仕様適合判定規則に従っているか否かを判定する。ＣＰＵ１１はサブクラスの特性がリスコフ置換原則に従っていると判定した場合（Ｓ１６：ＹＥＳ）、リスコフ置換原則に従っている特性に対応する文字色を所定の第３色に変更し（ステップＳ１７）、処理をＳ１９に移す。具体的にはＣＰＵ１１はサブクラスの属性、属性の不変条件、操作情報、クラス不変条件、関連端名又は多重度がリスコフ置換原則に従っている、さらに、実効事前条件、実効事後条件が仕様適合判定規則に従っていると判定した場合、リスコフ置換原則に従っている属性、属性の不変条件、操作情報、不変条件、実効事前条件、実効事後条件、関連端名又は多重度の色を所定の第３色に変更する。
【０１６２】
ＣＰＵ１１はサブクラスの特性又は特性に関する条件がリスコフ置換原則に従っていないと判定した場合（Ｓ１６：ＮＯ）、リスコフ置換原則に従っていない特性に対応する文字色を所定の第４色に変更する（ステップＳ１８）。具体的にはＣＰＵ１１はクラスの属性、操作情報、不変条件、事前条件、事後条件、関連端名又は多重度が仕様適合判定規則に従っていないと判定した場合、仕様適合判定規則に従っていない属性、属性の不変条件、操作情報、クラス不変条件、実効事前条件、実効事後条件、関連端名又は多重度の色を所定の第４色に変更する。ＣＰＵ１１は生成したクラス図を表示部１５に表示する（ステップＳ１９）、処理をＳ１に移し、処理を繰り返す。
【０１６３】
本実施形態によれば、ソフトウェア工学の定理又は法則を満たす関連図をＵＭＬで記述でき、かつソフトウェア工学の定理や法則を満たすか否かを判定が可能である。
【０１６４】
本実施形態によれば、属性の不変条件、クラス不変条件、実効事前条件又は実効事後条件がリスコフ置換原則に従っているか否かに応じて所定の処理を行うことで、ソフトウェア工学の定理又は法則を満たす関連図を容易に作成できる。
【０１６５】
本実施形態によれば、関係図がリスコフ置換原則に従っているか否かを判定するため、ソフトウェア工学の定理又は法則を満たす関連図を容易に作成できる。
【０１６６】
本実施形態によれば、スーパークラス図とサブクラス図との間に継承矢印を生成した場合、スーパークラス図及びリスコフ置換原則に基づいてサブクラス図の特性を生成する。このことにより、ソフトウェア工学の定理又は法則を満たすクラス図を自動生成することができる。
【０１６７】
本実施形態によれば、サブクラスの特性とスーパークラスの特性が同一であるか否かを判定するため、サブクラスとスーパークラスが違う特性を有するか否かを容易に判定することができる。
【０１６８】
本実施形態によれば、サブクラス図の特性等がリスコフ置換原則に従っているか否かに応じてサブクラス図の特性を所定の色に変更することで、ソフトウェア工学の定理又は法則を満たしているか否かを容易に判定することができる。
【０１６９】
なお、本実施形態におけるＣＰＵ１１は特性に対応する文字色を所定の色に変更したが、これに限られるものではない。ＣＰＵ１１は所定の音声を鳴らすようにしてもよい。あるいはＣＰＵ１１はメッセージを表示するようにしてもよい。
【０１７０】
また本実施形態においてスーパークラス図９１とサブクラス図９２との間に継承矢印を生成することにより関連付けたが、スーパークラス図同士又はクラス図同士の間に継承矢印を生成することにより関連づけてもよい。この場合、スーパークラス図同士又はクラス図同士の間で不変条件、型又は多重度等がリスコフ置換原則に基づいているか否かを判定してもよい。
【０１７１】
また本実施形態においてクラス図を修正した場合、ＣＰＵ１１はクラス図がリスコフ置換原則に従っているか否かを判定する。あるいはユーザが継承矢印を削除した場合、ＣＰＵ１１はクラス図がリスコフ置換原則に従っているか否かを判定し、クラス図を生成し直す。
【０１７２】
実施の形態２
以下本発明の実施の形態２をその実施の形態を示す図面に基づいて詳述する。図２４はクラス図生成画面９の一例を示す説明図である。以下、特に説明する構成、作用以外の構成及び作用は実施の形態１と同等であり、簡潔のため記載を省略する。
【０１７３】
ユーザが図７の規則生成画面８で入力を終了した後、クラス図生成画面９に戻った場合、ＣＰＵ１１は仕様適合判定規則ＤＢ１２６を参照し、クラス名が役員であり、スーパークラスが社員であり、継承の種別がprivateであり、仕様適合判定がplug-inであるため、サブクラス図９２からスーパークラス図９１へ継承矢印を引き、継承９４１に<<private>>を生成し、仕様適合判定規則９５１に[plug-in]を生成する。
【０１７４】
ＣＰＵ１１は継承の種別が所定の種別であるか否かを判定する。所定の種別とは例えばpublicである。ＣＰＵ１１は継承の種別が所定の種別であると判定した場合、スーパークラスからサブクラス間に継承される情報がリスコフ置換原則に従っているか否かを判定する。ＣＰＵ１１は継承の種別が所定の種別でないと判定した場合、クラスの情報が仕様適合判定規則に従っているか否かを判定せずに生成したクラス図を表示部１５に表示する。具体的にはＣＰＵ１１は継承の種別がprivateであるため、継承の種別がpublicでないと判定する。ＣＰＵ１１はクラスの情報がリスコフ置換原則に従っているか否かを判定せずに生成したクラス図を表示部１５に表示する。
【０１７５】
図２５は実施の形態２に係る情報処理装置１の処理手順を示したフローチャートである。Ｓ１〜１９の処理は上述の実施の形態１に係る情報処理装置１の処理手順と同様であるので、簡潔のため説明を省略する。ＣＰＵ１１は継承の種別が所定の種別であるか否かを判定する（ステップＳ２１）。ＣＰＵ１１は継承の種別が所定の種別であると判定した場合（Ｓ２１：ＹＥＳ）、処理をＳ１６に移す。ＣＰＵ１１は継承の種別が所定の種別でないと判定した場合（Ｓ２１：ＮＯ）、処理をＳ１９に移し、処理を終了する。
【０１７６】
本実施形態によれば、継承の種別に応じて仕様適合判定規則に従っているか否かを判定するか否かを判別する。このことにより継承の種別を変更してもソフトウェア工学の定理又は法則を満たしているか否かを容易に判定することができる。
【０１７７】
実施の形態３
以下本発明の実施の形態３をその実施の形態を示す図面に基づいて詳述する。図２６はクラス図生成画面９の一例を示す説明図である。以下、特に説明する構成、作用以外の構成及び作用は実施の形態２と同等であり、簡潔のため記載を省略する。
【０１７８】
ユーザが各画面で入力を終了した後、クラス図生成画面９に戻った場合、ＣＰＵ１１はクラス情報ＤＢ１２１を参照し、クラス名欄９１１にemployを生成し、クラス不変条件欄９１９に[employＩＤ >= 0 && employＩＤ <= 5000][age >= 18 && age <= 65]を生成する。
【０１７９】
ＣＰＵ１１は属性情報ＤＢ１２２を参照し、クラス名がemployであり、属性の名称がemployＩＤであり、属性の型がintであり、不変条件がemployＩＤ >= 0 && employＩＤ <= 5000であり、初期値が０であり、可視性がprotectedであるため、# employＩＤ : int = 0 [employＩＤ >= 0 && employＩＤ <= 5000]を属性欄９１２に生成する。ＣＰＵ１１はクラス名がemployであり、属性の名称がnameであり、属性の型がchar*であり、制約条件がreadOnly及びuniqueであり、可視性がprotectedであるため、# name : char* [readOnly] [unique]を属性欄９１２に生成する。
【０１８０】
ＣＰＵ１１はクラス名がemployであり、属性の名称がageであり、属性の型がintであり、不変条件が[age >= 18 && age <= 65]であり、可視性がprotectedであるため、# age : int[age >= 18 && age <= 65]を属性欄９１２に生成する。ＣＰＵ１１はクラス名がemployであり、属性の名称がworkerであり、属性の型がemploy*であり、関連属性であり、可視性の種別がprivateであるため、-<<A>> worker[] : employ*を属性欄９１２に生成する。ＣＰＵ１１はクラス名がemployＩＤであり、属性の名称がmanagerであり、属性の型がemploy*であり、関連属性であり、可視性の種別がprivateであるため、-<<A>> manager : employ*を属性欄９１２に生成する。
【０１８１】
ＣＰＵ１１は操作情報ＤＢ１２３を参照し、クラス名がemployであり、操作情報の名称がset年齢であり、型がvoidであり、引数の名称がnewAgeであり、デフォルト値が２０であり、可視性の種別がpublicであり、操作情報の種別が仮想であるため、+<<Virtual>>setAge(int newAge = 20):voidを操作および操作の条件欄９１３に生成する。ＣＰＵ１１は実効事前条件が[newAge >= 18 && newAge <= 65]であり、実効事後条件が [age >= 18 && age <= 65 && age == newAge]であるため、条件欄９１３に実効事前条件[newAge >= 18 && newAge <= 65]及び実効事後条件[Age >= 18 && Age <= 65 && Age == newAge]を生成する。
【０１８２】
ＣＰＵ１１は関連情報ＤＢ１２４を参照し、クラス名がemployであり、関連情報の名称がmanageであり、制約条件がsymmetryであり、関連名方向が右関連方向であり、参照方向が両方向であるため、スーパークラス図の上端に接続された２つの矢印を設け、関連情報９１４に右向き三角及びmanage[symmetry]の文字を生成する。
【０１８３】
ＣＰＵ１１は関連情報ＤＢ１２４及び関連端名情報ＤＢ１２５を参照し、クラス名がemployであり、第１関連端名に対応づけられた関連端名の名称がmanagerであり、可視性の種別がprivateであり、多重度が0..1であるため、関連端名９１５に-managerを生成し、多重度９１７に0..1を生成する。ＣＰＵ１１はクラス名がemployであり、第２関連端名に対応づけられたロールの名称がworkerであり、可視性の種類がprivateであり、多重度が0..*であるため、ロール９１６に-workerを生成し、多重度９１８に0..*を生成する。
【０１８４】
ＣＰＵ１１はサブクラス図９２とスーパークラス図９１とを継承シンボルの継承矢印で接続した場合、スーパークラス図９１に基づいてサブクラス図９２の特性を生成する。
【０１８５】
ＣＰＵ１１はサブクラスのクラス名がdirectorであり、操作情報の名称がsetAgeであり、型がvoidであり、引数の名称がnewAgeであり、デフォルト値が２０であり、可視性の種別がpublicであり、操作情報の種別が仮想であるため、+<<Virtual>>setAge(int newAge = 20):voidを操作と操作の条件欄９２３に生成する。ＣＰＵ１１はスーパークラスの実効事前条件が[newAge >= 18 && newAge <= 65]であり、仕様適合判定規則が[plug-in]であるため、操作と操作の条件欄９２３にサブクラスの実効事前条件[(newAge >= 18 && newAge <= 65) || (newAge >= 55 && newAge <= 65]]を生成する。ＣＰＵ１１はスーパークラスの実効事後条件[age >= 18 && age <= 65 && age == newAge]であり、仕様適合判定規則が[plug-in]であるため、条件欄９２３にサブクラスの実効事後条件  [(age >= 18 && age <= 65 && age == newAge) && (age >= 55 && age <= 65 && age == newAge)]を生成する。サブクラス図９２の他の構成要素はスーパークラス図９１と同等のため、記載を省略する。
【０１８６】
ＣＰＵ１１はサブクラス図９２の属性欄９２２、関連情報９２４、関連端名９１５及び９１６と並びに多重度９１７及び９１８の特性はスーパークラス図９１の情報と同一と判定する。ＣＰＵ１１はクラス名欄９２１、属性欄９２２、関連情報９２４、関連端名９１５及び９１６と並びに多重度９１７及び９１８の特性を所定の第１色に変更する。
【０１８７】
ＣＰＵ１１はサブクラス図９２のクラス名欄９２１の構成要素がスーパークラス図９１の情報と同一でないと判定する。ＣＰＵ１１はクラス名欄９２１の構成要素を所定の第２色に変更する。
【０１８８】
ＣＰＵ１１は条件欄９２３の操作情報、事前条件及び事後条件が仕様適合判定規則に従っていると判定する。ＣＰＵ１１は条件欄９２３の操作情報、事前条件及び事後条件を所定の第３色に変更する。ＣＰＵ１１は生成したクラス図９を表示部１５に表示する。
【０１８９】
図２７はコードを生成するためのＣ＋＋言語のヘッダファイル１０の一例を示す説明図である。図２８はクラス図９に基づいて自動生成されたＣ＋＋言語のコードの一部であるサンプルコード１１０の説明図である。
【０１９０】
ヘッダファイル１０はサンプルコード１１０をコンパイルするためのヘッダファイルである。図２７に示すように、ヘッダファイル１０はマクロ定義ＣＬＡＳＳ＿ＩＮＶＡＲＩＡＮ、ＰＲＥ＿ＣＯＮＤＩＴＩＯＮ及びＰＯＳＴ＿ＣＯＮＤＩＴＩＯＮを備える。Assert(message，conditon)はＣＰＵ１１が与えられたconditionが成立しているか否かを判定し、conditionが成立していないと判定した場合、messageを表示部１５に出力する関数である。ＣＬＡＳＳ＿ＩＮＶＡＲＩＡＮ(message，(condition))、ＰＲＥ＿ＣＯＮＤＩＴＩＯＮ(message，(condition))及びＰＯＳＴ＿ＣＯＮＤＩＴＩＯＮ(message，(condition))の夫々は、ＣＰＵ１１がクラス不変条件、実効事前条件及び実効事後条件の夫々に与えられた(condition)が成立しているか否かを判定し、クラス不変条件、実効事前条件及び実効事後条件に与えられた(condition)が成立していないと判定した場合、messageを表示部１５に出力する関数である。
【０１９１】
サンプルコード１１０は関数１１１を備える。関数１１１は上部に設けられたクラス不変関数１１２、クラス不変関数１１２の下に設けられた実効事前条件関数１１３、実効事前条件関数１１３の下に設けられたコード１１４、コード１１４の下に設けられたクラス不変関数１１５及びクラス不変関数１１５の下に設けられた実効事後条件関数１１６を備える。
【０１９２】
ユーザがコード生成ボタン（図示せず）をクリックした場合、ＣＰＵ１１はヘッダファイル及びクラスのコードを自動生成する。ＣＰＵ１１はクラス図に基づいてサンプルコード１１０を生成する（サンプルコード１１０は自動コード生成されたコードの一部を掲載）。具体的なヘッダファイル１０及びサンプルコード１１０の生成方法は以下の通りである。ＣＰＵ１１はＣＬＡＳＳ＿ＩＮＶＡＲＩＡＮ、ＰＲＥ＿ＣＯＮＤＩＴＩＯＮ及びＰＯＳＴ＿ＣＯＮＤＩＴＩＯＮを含めたマクロ定義をヘッダファイル１０に生成する。
【０１９３】
ＣＰＵ１１はクラス図の各ＤＢに基づいてクラスおよび関連のコードコードを生成する。本実施形態においてはＣＰＵ１１はクラス図のクラス情報ＤＢ１２１、属性情報ＤＢ１２２、関連情報ＤＢ１２４、関連端名情報ＤＢ１２５及び仕様適合判定規則ＤＢ１２６の夫々並びにヘッダファイルに基づいてコードを生成する。
【０１９４】
ＣＰＵ１１は操作情報ＤＢ１２３を参照し、クラスがdirectorであり、操作名がsetAgeであり、操作の型がvoidであり、入力引数がnewAgeであり、入力引数の型がintであり、操作の種類がvirtualであり、可視性がpublicであるため、図２８の関数１１１にpublic virtual void Director##setAge#(int newAge)を生成する。ＣＰＵ１１はヘッダファイル１０及び操作情報ＤＢ１２３を参照し、クラス不変条件が[employＩＤ >= 0 && employＩＤ <= 5000]及び[age >= 18 && age <= 65]であるため、ＣＬＡＳＳ＿ＩＮＶＡＲＩＡＮ（”Violation of Class Invariant:director.setAge”，(employＩＤ >= 0 && employＩＤ <= 5000 && age >= 18 && age <= 65)）をクラス不変条件のクラス不変関数１１２及び１１５を生成する。
【０１９５】
ＣＰＵ１１は実効事前条件が[(newAge >= 18 && newAge <= 65) || (newAge >= 55 && newAge <= 65]]であるため、ＰＲＥ＿ＣＯＮＤＩＴＩＯＮ（”Violation of Pre Condition:director.setAge”， (newAge >= 18 && newAge <= 65) || (newAge >= 55 && newAge <= 65)）を実効事前条件の実効事前条件関数１１３を生成する。ＣＰＵ１１は操作情報ＤＢ１２３のコードを参照し、age=newAgeをコード１１４に生成する。ＣＰＵ１１は実効事後条件が[(age >= 18 && age <= 65 && age == newAge) && (age >= 55 && age <= 65 && age == newAge)]であるため、ＰＯＳＴ＿ＣＯＮＤＩＴＩＯＮ（”Violation of Post Condition:director.setAge”， (age >= 18 && age <= 65 && age == newAge) && (age >= 55 && age <= 65 && age == newAge)）を実効事後条件の実効事後条件関数１１６を生成する。
【０１９６】
図２９は実施の形態３に係る情報処理装置１の処理手順を示したフローチャートである。ＣＰＵ１１はコード生成ボタンがクリックされたか否かを判定する（ステップＳ３１）。ＣＰＵ１１はコード生成ボタンをクリックされなかったと判定した場合（Ｓ３１：ＮＯ）、コード生成の処理を終了する。ＣＰＵ１１はコード生成ボタンをクリックされたと判定した場合（Ｓ３１：ＹＥＳ）、ASSERT.hヘッダファイル１０を生成する（ステップＳ３２）。ＣＰＵ１１はクラス図の各ＤＢ及びヘッダファイル１０に基づいてサンプルコード１１０を生成し（ステップＳ３３）、その後本体コード生成の処理を終了する。
【０１９７】
本実施形態によれば容易にクラス図からソースコードを生成することができる。
【０１９８】
実施の形態４
以下本発明の実施の形態４をその実施の形態を示す図面に基づいて詳述する。図３０は実施の形態４に係る情報処理装置１のハードウェア群を示すブロック図である。以下、特に説明する構成、作用以外の構成及び作用は実施の形態３と同等であり、簡潔のため記載を省略する。
【０１９９】
情報処理装置１を動作させるためのプログラムは、ディスクドライブ等の読み取り部１７にＣＤ−ＲＯＭ、ＤＶＤ（Digital Versatile Disc）ディスク、メモリーカード、又はＵＳＢ（Universal Serial Bus）メモリ等の可搬型記録媒体１７Ａを読み取らせて記憶部１２に記憶してもよい。また当該プログラムを記憶したフラッシュメモリ等の半導体メモリ１７Ｂを情報処理装置２内に実装しても良い。通信部１６は、例えば無線ＬＡＮカード又は携帯電話用通信モジュール等であり、通信網Ｎを介して他のサーバに接続されている。当該プログラムは、通信部１６によりインターネット等の通信網Ｎを介して接続される他のサーバ（図示せず）からダウンロードすることも可能である。以下にその内容を説明する。
【０２００】
図３０に示す情報処理装置１は、上述した各種ソフトウェア処理を実行するプログラムを、可搬型記録媒体１７Ａ又は半導体メモリ１７Ｂから読み取り、あるいは、通信網Ｎを介して他のサーバ（図示せず）からダウンロードする。当該プログラムは、プログラム１２Ｐとしてインストールされ、記憶部１２にロードして実行される。これより上述した情報処理装置１として機能する。
【０２０１】
実施の形態５
実施の形態１におけるＣＰＵ１１は仕様適合判定規則に従っていない特性に対応する文字色を所定の第４色に変更したが、本実施形態におけるＣＰＵ１１は仕様適合判定規則に従っていない特性の入力を制限する処理を行う。すなわちＣＰＵ１１は仕様適合判定規則に基づいてデータの特性、束縛条件、事前条件又は事後条件等の入力を制限する。
【０２０２】
また本実施形態における事前条件又は事後条件は一又は複数の制約条件から構成されている。なお、事前条件又は事後条件が設定されていない場合、後述する事前条件一覧５５１及び事後条件一覧５５３にundefinedを表示するようにしてもよい。ＣＰＵ１１は複数の条件が設定されている場合は、制約条件同士を比較し、制約条件間の論理空間の包含関係を適切に判定し、不変条件、事前条件又は事後条件を最適化する処理を行う。以下、特に説明する構成、作用以外の構成及び作用は実施の形態１と同等であり、簡潔のため記載を省略する。
【０２０３】
図３１はクラス図生成画面９の一例を示す説明図である。スーパークラス図９１は操作setCurrentTMPの「Pre-condition」の下に事前条件９１cと、操作setCurrentTMPの「Post-condition」の下に事後条件９１ａと、下部に設けられた操作Ｏｆｆの「Exception」の下に例外情報９１ｂとを備える。サブクラス図９２は操作setCurrentTMPの「Pre-condition」の下に事前条件９２c、操作setCurrentTMPの「Post-condition」の下に事後条件９２ａと、下部に設けられた操作Ｏｆｆの「Exception」の下に例外情報９２ｂとを備える。例外情報とは仕様判定規則に従う操作情報のシグネイチャの情報の１つであり、かつクラスの型情報の一部であり、例えばユーザがこれらの情報を変更したいと考えた場合、予め定義された操作のシグネイチャ情報又はクラスの型情報を他の情報に再定義することができる。本実施形態では例外情報を後述する例外画面５０２で削除又は追加することできる。このことによりクラスの型を定義した後でもユーザが必要とするクラスの型に変更することができる。
【０２０４】
図３２は操作画面５０１の一例を示す説明図である。実施の形態５に係る操作定義画面５はタブ２１１を備える。タブ２１１は操作定義画面５の内容表示を切り替えるためのタブである。タブ２１１は基本タブ、例外タブ、制約タブ及びコードタブを備える。基本タブは操作情報等を表示する操作画面５０１に切り替えるためのタブである。例外タブは例外情報等を入力するための例外画面５０２に切り替えるためのタブである。制約タブは事前条件及び事後条件等の制約条件を入力するための制約画面５０３に切り替えるためのタブである。コードタブはクラス図に基づいて生成するコード等を入力するためのコード画面５０４に切り替えるためのタブである。
【０２０５】
操作画面５０１は操作名欄５１と、引数欄５２と、追加ボタン５２５及び削除ボタン５２６と、型欄５３と、ラジオボタン５４と、ラジオボタン５５と、チェックボックス５７１と、チェックボックス５７２と、チェックボックス５７１及び５７２の下部に３つ設けられたラジオボタン５７４と、戻り値欄５６６と、下端に設けられたボタン５６７とを備える。ラジオボタン５７４は操作情報をインライン関数として定義するか否かを選択するラジオボタンである。ラジオボタン５７４は左に設けられたオフボタンと、クラス宣言内ボタンと、クラス宣言外ボタンとを備える。オフボタンは操作情報をインライン関数として定義しないことを示す。クラス宣言内ボタンは操作情報をクラス内でインライン関数として宣言することを示す。クラス宣言外ボタンは操作情報をクラス外でインライン関数として宣言することを示す。
【０２０６】
以下、操作画面５０１の動作を説明する。ユーザが入力部１４のマウスで基本タブをクリックした場合、ＣＰＵ１１は操作画面５０１を表示する。ＣＰＵ１１は仕様適合判定規則に基づいて操作画面５０１の各欄の一部に対して入力部１４による入力を制限するか否かを決定する。すなわち、仕様適合判定規則がexact pre/post、exact pre、exact post、plug-in、weak plug-in又はsatisfiesのいずれかであり、かつ選択されたクラス図がサブクラス図であり、かつ、スーパークラスから継承した操作である場合、ＣＰＵ１１は操作画面５０１の各欄の一部に対して入力部１４による入力を制限する。具体的には以下の通りである。仕様適合判定規則がplug-inであり、かつ選択されたクラス図がサブクラスであり、かつ、スーパークラスから継承した操作である場合、図３２に示すように、ＣＰＵ１１は操作名欄５１、引数欄５２、追加ボタン５２５、削除ボタン５２６、型欄５３、ラジオボタン５４、チェックボックス５７１、５７２、ラジオボタン５７４及び戻り値欄５６６に対して入力部１４による入力を制限する。すなわち、ＣＰＵ１１は操作情報に関する操作名、引数、型、可視性、インライン関数の有無、コード生成又は戻り値等の入力を制限する。例えば、ＣＰＵ１１はハッチングで示すように入力を制限する欄をグレーアウト又は半透明等で表示し、入力を受け付けないようにする。
【０２０７】
図３３は例外画面５０２の一例を示す説明図である。例外画面５０２は右上の角部に設けられたチェックボックス５７１と、上部に設けられたスーパークラス継承例外一覧５１１と、スーパークラス継承例外一覧５１１の下部に設けられた自クラス固有例外一覧５１４と、自クラス固有例外一覧５１４の右下部に設けられたボタン５１７及び５１８と、下端に設けられたボタン５６７とを備える。スーパークラス継承例外一覧５１１は上部に２つ設けられたナンバー欄５１２及び型欄５１３を備える。自クラス固有例外一覧５１４は上部に２つ設けられたナンバー欄５１５及び例外の型欄５１６を備える。
【０２０８】
以下、例外画面５０２の動作を説明する。ユーザが入力部１４のマウスで例外タブをクリックした場合、ＣＰＵ１１は例外画面５０２を表示する。ＣＰＵ１１は仕様適合判定規則に基づいて例外画面５０２の各欄の一部に対して入力部１４による入力を制限するか否かを決定する。すなわち、仕様適合判定規則がexact pre/post、exact pre、exact post、plug-in、weak plug-in又はsatisfiesのいずれかであり、かつ選択されたクラス図がサブクラス図であり、かつ、スーパークラスから継承した操作である場合、ＣＰＵ１１は例外画面５０２の各欄の一部に対して入力部１４による入力を制限する。具体的には以下の通りである。仕様適合判定規則がplug-inであり、かつ選択されたクラス図がサブクラスであり、かつ、スーパークラスから継承した操作である場合、図３３に示すように、ＣＰＵ１１はボタン５１７に対して入力部１４による入力を制限する。
【０２０９】
ＣＰＵ１１は操作情報ＤＢを参照し、スーパークラス継承例外一覧５１１にサブクラス「DeluxStove」の操作「Off」の型「classInvariantViolation」、「preConditionViolation」、「postConditionViolation」を表示する。ユーザが入力部１４のマウスでスーパークラス継承例外一覧５１１内の型「preConditionViolation」を選択し、かつボタン５１８をクリックする。ＣＰＵ１１は型「preConditionViolation」を操作情報ＤＢから削除し、図３１に示すサブクラス図の例外情報９２ｂ及び図３３に示すスーパークラス継承例外一覧５１１から型「preConditionViolation」を削除する。
【０２１０】
なお、仕様適合判定規則がexact pre/post、exact pre、exact post、plug-in、 weak plug-in又はsatisfiesであり、かつ選択されたクラス図がサブクラスであり、かつ、スーパークラスから継承した操作である場合、ＣＰＵ１１はボタン５１７に対して入力部１４による入力を制限する。
【０２１１】
図３４は制約画面５０３の一例を示す説明図である。制約画面５０３は上部に設けられた事前条件一覧５５１と、事前条件一覧５５１の右下部に設けられたボタン５３４及び５３５と、ボタン５３４及び５３５の下部に設けられた事前条件欄５５２と、事前条件欄５５２の下部に設けられた事後条件一覧５５３の右下部に設けられたボタン５３９及び５４０と、ボタン５３９及び５４０の下部に設けられた事後条件欄５５４と、下端に設けられたボタン５６７とを備える。事前条件一覧５５１は上部に３つ設けられたナンバー欄５３１、事前条件欄５３２及び定義クラス欄５３３を備える。事前条件一覧５５１は上部に３つ設けられたナンバー欄５３６、事後条件欄５３７及び定義クラス欄５３８を備える。
【０２１２】
以下、制約画面５０３の動作を説明する。ユーザが入力部１４のマウスで制約タブをクリックした場合、ＣＰＵ１１は制約画面５０３を表示する。ＣＰＵ１１は仕様適合判定規則に基づいて制約画面５０３の各欄の一部に対して入力部１４による入力を制限するか否かを決定する。仕様適合判定規則がplug-inであり、かつ選択されたクラス図がサブクラスであり、かつ、スーパークラスから継承した操作である場合、図３４に示すように、ＣＰＵ１１は事前条件欄５５２、及びボタン５４０に対して入力部１４による入力を制限する。
【０２１３】
なお、仕様適合判定規則がexact pre/postであり、かつ選択されたクラス図がサブクラスであった場合、事前条件欄５５２、ボタン５３４、ボタン５３５、ボタン５３９及びボタン５４０に対して入力部１４による入力を制限する。また仕様適合判定規則がexact preであり、かつ選択されたクラス図がサブクラスであり、かつ、スーパークラスから継承した操作である場合、事前条件欄５５２、ボタン５３４、ボタン５３５及びボタン５４０に対して入力部１４による入力を制限する。また仕様適合判定規則がexact postであり、かつ選択されたクラス図がサブクラスであり、かつ、スーパークラスから継承した操作である場合、事後条件欄５５４、ボタン５３４、ボタン５３９及びボタン５４０に対して入力部１４による入力を制限する。また仕様適合判定規則がsatisfiesであり、かつ選択されたクラス図がサブクラスであり、かつ、スーパークラスから継承した操作である場合、事後条件欄５５４、ボタン５３５及びボタン５４０に対して入力部１４による入力を制限する。また仕様適合判定規則がweak plug-inであり、かつ選択されたクラス図がサブクラスであり、かつ、スーパークラスから継承した操作である場合、事前条件欄５５２、ボタン５３４及びボタン５４０に対して入力部１４による入力を制限する。
【０２１４】
ＣＰＵ１１は図３１に示すスーパークラス図に基づいてサブクラス図の実効事前条件を事前条件一覧５５１に表示する。具体的にはＣＰＵ１１は操作情報ＤＢ１２３を参照し、「Stove」クラスから「setCurrentTMP」の実効事前条件「newTMP>=0」及び「newTMP<=300」を事前条件一覧５５１に表示する。ＣＰＵ１１はスーパークラス図に基づいて実効事後条件を事後条件一覧５５３に表示する。具体的にはＣＰＵ１１は操作情報ＤＢ１２３を参照し、「Stove」クラスの「setCurrentTMP」の実効事後条件「currentTMP>=0」、「currentTMP<=300」及び「currentTMP==newTMP」を事後条件一覧５５３に表示する。
【０２１５】
ユーザが入力部１４のマウスでボタン５３９をクリックした後、事前条件欄５５４に「currentTMP>=55」を入力部１４で入力した場合、ＣＰＵ１１は事後条件一覧５５３のナンバー欄５３６に４を表示し、事後条件欄５３７に「currentTMP>=55」を表示し、定義クラス欄５３８に「DeluxStove」を表示する。
【０２１６】
なお、本実施形態ではボタン５４０の入力を制限しているが、ボタン５４０の入力を制限していない仕様適合判定規則の場合、以下の動作が可能である。ユーザが事後条件一覧５５３内の制約条件のいずれかを入力部１４のマウスでクリックした後、ボタン５４０を入力部１４のマウスでクリックすることで事後条件一覧５５３内の制約条件を削除することができる。
【０２１７】
なお本実施形態ではボタン５３４の入力を制限しているため、図示していないが、ボタン５３４の入力を制限していない仕様適合判定規則の場合、以下の動作が可能である。ユーザが入力部１４のマウスでボタン５３４をクリックした後、事前条件欄５５２に操作を入力部１４で入力した場合、ＣＰＵ１１は事前条件一覧５５１のナンバー欄５３６に３を表示し、事前条件欄５３２に入力した制約条件又は条件を表示し、定義クラス欄５３３に「Stove」を表示する。
【０２１８】
また、本実施形態ではボタン５３５の入力を制限しているが、ボタン５３５の入力を制限していない仕様適合判定規則の場合、以下の動作が可能である。ユーザが事前条件一覧５５１内の制約条件のいずれかを入力部１４のマウスでクリックした後、ボタン５３５を入力部１４のマウスでクリックすることで事前条件一覧５５１内の制約条件を削除することができる。
【０２１９】
ＣＰＵ１１は図３１に示すスーパークラス図に基づいてサブクラス図の実効事前条件を事前条件一覧５５１に表示する。具体的にはＣＰＵ１１は操作情報ＤＢ１２３を参照し、「Stove」クラスから「setCurrentTMP」の実効事前条件「newTMP>=0」及び「newTMP<=300」を事前条件一覧５５１に表示する。ＣＰＵ１１はスーパークラス図に基づいて実効事後条件を事後条件一覧５５３に表示する。具体的にはＣＰＵ１１は操作情報ＤＢ１２３を参照し、「Stove」クラスの「setCurrentTMP」の実効事後条件「currentTMP>=0」、「currentTMP<=300」及び「currentTMP==newTMP」を事後条件一覧５５３に表示する。
【０２２０】
図３５はコード画面５０４の一例を示す説明図である。コード画面５０４は右上の角部に設けられたチェックボックス５７１と、上部に設けられた実効事前条件欄５４１と、実効事前条件欄５４１の下部に設けられたユーザコード欄５４２と、ユーザコード欄５４２の下部に設けられた実効事後条件欄５４３と、下端に設けられたボタン５６７とを備える。
【０２２１】
以下、コード画面５０４の動作を説明する。ＣＰＵ１１は事後条件一覧５５３に基づいて実効事後条件を自動生成する。具体的にはＣＰＵ１１は「currentTMP>=0」、「currentTMP<=300」、「currentTMP==newTMP」及び「currentTMP>=55」の間に論理積の&&記号を入れて条件を結合することにより実効事後条件「currentTMP>=0 && currentTMP<=300 && currentTMP==newTMP && currentTMP>=55」を生成する。
【０２２２】
次にＣＰＵ１１は生成した実効事後条件を最適化する。ＣＰＵ１１は生成した実効事後条件内の複数の制約条件をチェックし、条件間に包含関係を有するか否かを判定する。ＣＰＵ１１は条件間に包含関係を有すると判定した場合、リスコフ置換原則ではサブクラス図で事後条件の制約条件を強くできるので、ＣＰＵ１１は制約条件の包含関係から判定し、最も条件が強い条件を選定する。最も条件が強い条件とは他の条件よりも範囲が狭い条件である。ＣＰＵ１１は「currentTMP>=55」は「currentTMP>=0」に包含されると判定する。ＣＰＵ１１は生成した事後条件から「currentTMP>=0」を削除し、実効事後条件「currentTMP<=300 && currentTMP==newTMP && currentTMP>=55」に最適化する。すなわちＣＰＵ１１は制約条件に矛盾が生じないように実効事後条件を最適化する。
【０２２３】
ＣＰＵ１１は最適化した実効事後条件「currentTMP<=300 && currentTMP==newTMP && currentTMP>=55」を図３１に示す事後条件９２ａ、図３５に示す実効事後条件欄５４３に表示し、操作情報ＤＢ１２３に記憶する。
【０２２４】
次にＣＰＵ１１は生成した実効事前条件を最適化する。ＣＰＵ１１は生成した実効事前条件内の複数の制約条件をチェックし、条件間に包含関係を有するか否かを判定する。ＣＰＵ１１は条件間に包含関係を有すると判定した場合、リスコフ置換原則ではサブクラス図で事前条件の制約条件を弱くできるので、ＣＰＵ１１は制約条件の包含関係から判定し、最も条件が弱い条件を選定する。最も条件が弱い条件とは他の条件より範囲が広い条件である。例えば、ＣＰＵ１１は事前条件一覧５５１に「newTMP>=20」を新たに追加していた場合（例えば、仕様適合判定規則がsatisfiesである場合、ボタン５３４を入力部１４のマウスでクリックして「newTMP>=20」を追加していた場合）、「newTMP>=20」は「newTMP>=0」に包含されると判定する。ＣＰＵ１１は生成した事前条件から「newTMP>=20」を削除し、実効事前条件「newTMP>=0 && newTMP<=300」に最適化する。すなわちＣＰＵ１１は制約条件に矛盾が生じないように実効事後条件を最適化する。
【０２２５】
ＣＰＵ１１は最適化した実効事前条件「newTMP>=0 && newTMP<=300」を図３１に示す事前条件９２ｃ、図３５に示す事後条件欄５４１に表示し、操作情報ＤＢ１２３に記憶する。
【０２２６】
ユーザが入力部１４のマウスでコードタブをクリックした場合、ＣＰＵ１１はコード画面５０４を表示する。ＣＰＵ１１は仕様適合判定規則に基づいてコード画面５０４の各欄の一部に対して入力部１４による入力を制限するか否かを決定する。すなわち、仕様適合判定規則がexact pre/post、exact pre、exact post、plug-in、weak plug-in又はsatisfiesのいずれかであり、かつ選択されたクラス図がサブクラス図であり、かつ、スーパークラスから継承した操作である場合、ＣＰＵ１１はコード画面５０４の各欄の一部に対して入力部１４による入力を制限する。仕様適合判定規則がexact pre/post、exact pre、exact post、plug-in、weak plug-in 又はsatisfiesであり、かつ選択されたクラス図がサブクラスであり、かつ、スーパークラスから継承した操作である場合、図３５に示すように、ＣＰＵ１１は実効事前条件欄５４１及び実効事後条件欄５４３に対して手動で入力部１４による手動での入力を制限する。
【０２２７】
なお、本実施形態におけるユーザは継承情報選択画面８上で仕様適合判定規則として「manual」を選択できるようにしてもよい。ユーザが入力部１４のマウスで継承情報選択画面８上の「manual」を選択した場合、ＣＰＵ１１は以下の処理を行う。ＣＰＵ１１は操作画面５０１、例外画面５０２、制約画面５０３及びコード画面５０４の各欄に対して入力部１４による入力を許可する。またＣＰＵ１１は事前条件及び事後条件に対する最適化を禁止する。さらにＣＰＵ１１はリスコフ置換原則の判定を禁止し、表示画面上の各要素の色の変更を禁止する。
【０２２８】
図３６〜３７は実施の形態５に係る情報処理装置１の処理手順を示したフローチャートである。ステップＳ１〜１９の処理は上述の実施の形態１に係る情報処理装置１の処理手順と同様であるので、簡潔のため説明を省略する。ＣＰＵ１１はステップＳ１の処理を終了した後、クラス図生成画面９で入力部１４によりサブクラス図を選択したか否かを判定する（ステップＳ４１）。ＣＰＵ１１はクラス図生成画面９で入力部１４によりサブクラス図を選択しなかったと判定した場合（ステップＳ４１：ＮＯ）、処理をステップＳ２へ移す。ＣＰＵ１１はクラス図生成画面９で入力部１４によりサブクラス図を選択したと判定した場合（ステップＳ４１：ＹＥＳ）、仕様適合判定規則に基づいて操作画面５０１、例外画面５０２、制約画面５０３及びコード画面５０４の各欄の一部に対して入力部１４による入力を制限する（ステップＳ４２）。
【０２２９】
ＣＰＵ１１は仕様適合判定規則が「manual」であるか否かを判定する（ステップＳ４３）。ＣＰＵ１１は仕様適合判定規則が「manual」でないと判定した場合（ステップＳ４３：ＮＯ）、処理をステップＳ２へ移す。ＣＰＵ１１は仕様適合判定規則が「manual」であると判定した場合（ステップＳ４３：ＹＥＳ）、操作画面５０１、例外画面５０２、制約画面５０３及びコード画面５０４の各欄の入力を許可し（ステップＳ４４）、処理をステップＳ２へ移す。
【０２３０】
ＣＰＵ１１はステップＳ１２の処理が終了した後、生成した実効事前条件と実効事後条件内の複数の制約条件をチェックし、いずれか２つの条件間に包含関係を有するか否かを判定する（ステップＳ５１）。すなわちＣＰＵ１１は生成した実効事前条件および実効事後条件を最適化可能か否かを判定する。ＣＰＵ１１は生成した実効事前条件又は実効事後条件内の複数の制約条件の内、いずれか２つの条件が包含関係を有しないと判定した場合（ステップＳ５１：ＮＯ）、処理をステップＳ１３へ移す。ＣＰＵ１１は生成した事前条件および事後条件内の複数の制約条件の内、いずれか２つの条件間に包含関係を有すると判定した場合（ステップＳ５１：ＹＥＳ）、判定した包含関係から制約条件を選択し、他の条件を削除し（ステップＳ５２）、処理をステップＳ１３へ移す。すなわちＣＰＵ１１はステップＳ５１がＹＥＳだった場合、実効事前条件及び実効事後条件を最適化する。
【０２３１】
本実施形態によれば、ＣＰＵ１１は生成した実効事前条件および実効事後条件に制約条件間の包含を判定し、実効事前条件は、最も弱い条件を選定し最適化する。一方、実効以後条件は最も強い条件を選定し最適化する。
このことにより、ＣＰＵ１１は最適化した事前条件又は事後条件を表示できるため、ユーザは実効事前条件又は実効事後条件により表される論理式を容易に理解できる。
【０２３２】
本実施形態によれば、ＣＰＵ１１は仕様適合判定規則に基づいてデータの特性、束縛条件、事前条件又は事後条件の入力を制限するため、ユーザが間違ったデータの特性、束縛条件、事前条件又は事後条件の入力を行うことを防止することができる。
【０２３３】
今回開示された実施の形態はすべての点で例示であって、制限的なものではないと考えられるべきである。本発明の範囲は、上記した意味ではなく、請求の範囲によって示され、請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０２３４】
１  情報処理装置
１２Ｐ  プログラム
１２１  クラス情報ＤＢ
１２２  属性情報ＤＢ
１２４  関連情報ＤＢ
１２５  関連端名情報ＤＢ
１２６  仕様適合判定規則ＤＢ
【図１】
0006032691.tif 000002
【図２】
0006032691.tif 000003
【図３】
0006032691.tif 000004
【図４】
0006032691.tif 000005
【図５】
0006032691.tif 000006
【図６】
0006032691.tif 000007
【図７】
0006032691.tif 000008
【図８】
0006032691.tif 000009
【図９】
0006032691.tif 000010
【図１０】
0006032691.tif 000011
【図１１】
0006032691.tif 000012
【図１２】
0006032691.tif 000013
【図１３】
0006032691.tif 000014
【図１４】
0006032691.tif 000015
【図１５】
0006032691.tif 000016
【図１６】
0006032691.tif 000017
【図１７】
0006032691.tif 000018
【図１８】
0006032691.tif 000019
【図１９】
0006032691.tif 000020
【図２０】
0006032691.tif 000021
【図２１】
0006032691.tif 000022
【図２２】
0006032691.tif 000023
【図２３】
0006032691.tif 000024
【図２４】
0006032691.tif 000025
【図２５】
0006032691.tif 000026
【図２６】
0006032691.tif 000027
【図２７】
0006032691.tif 000028
【図２８】
0006032691.tif 000029
【図２９】
0006032691.tif 000030
【図３０】
0006032691.tif 000031
【図３１】
0006032691.tif 000032
【図３２】
0006032691.tif 000033
【図３３】
0006032691.tif 000034
【図３４】
0006032691.tif 000035
【図３５】
0006032691.tif 000036
【図３６】
0006032691.tif 000037
【図３７】
0006032691.tif 000038