(57)【要約】装置（Ｄ）は、クラスの高レベルの表現からコンパイル可能かつ実行可能なアプリケーション（ＡＰ）を構築するためのものであり、各クラスがデータを格納する、及び／又は少なくとも１つのパブリック関数を実施する、及び／又は少なくとも１つの他のクラスの少なくとも１つの選択されたパブリック関数を稼働させることができる。この装置（Ｄ）は、構築すべきアプリケーション（ＡＰ）を記述する仕様（ＡＳ）を表す仕様クラスの形式的な表現から選択されたプログラミング言語で「新しい」クラス表現を生成し、各クラスの形式的な表現が、クラス宣言、データ宣言、関数宣言、及び４つの基本型の中から選択された制限された一群の命令型から成る高レベルの記号言語で書かれ、４つの基本型がそれぞれ、選択されたクラスの選択され格納されたデータにアクセスするための命令、選択された演算子から、及び場合によってはいくつかの所与の入力パラメータから選択されたデータを算出するための命令、選択されたクラスデータが選択された条件を満たすかどうかをテストするための命令、及び場合によっては少なくとも１つの選択されたデータパラメータを含む任意のクラスの選択されたパブリック関数の稼働を引き起こすための命令から成り、（ii）仕様（ＡＳ）に対応するコンパイル可能かつ実行可能なアプリケーション（ＡＰ）を構築するために、これらの新しいクラス表現をアセンブルするように構成された生成手段（ＧＭ）を備える。
2011507064.tif 000002
【特許請求の範囲】
【請求項１】
各クラスがデータを格納する、及び／又は少なくとも１つのパブリック関数を実施する、及び／又は少なくとも１つの他のクラスの少なくとも１つの選択されたパブリック関数を稼働させることができる、クラス（Ｃｉ）の高レベルの表現からコンパイル可能かつ実行可能なアプリケーション（ＡＰ）を構築するための方法であって、（ｉ）クラス宣言、データ宣言、関数宣言、及び４つの基本型の中から選択された制限された一群の命令型から成る高レベルの記号言語で書かれたクラス（Ｃｉ）の形式的な表現で、構築すべきアプリケーション（ＡＰ）を記述する仕様（ＡＳ）を表すステップであって、４つの基本型がそれぞれ、選択されたクラスの選択され格納されたデータにアクセスするための命令、選択された演算子から、及び場合によってはいくつかの所与の入力パラメータから選択されたデータを算出するための命令、選択されたデータが選択された条件を満たすかどうかをテストするための命令、及び場合によっては少なくとも１つの選択されたデータパラメータを含む任意のクラスの選択されたパブリック関数の稼働を引き起こすための命令から成る、ステップ、次いで（ii）前記仕様クラス（Ｃｉ）の前記形式的な表現から選択されたプログラミング言語で「新しい」クラス表現を生成するステップ、及び（iii）前記仕様（ＡＳ）に対応するコンパイル可能かつ実行可能なアプリケーション（ＡＰ）を構築するために、前記新しいクラス表現をアセンブルするステップから成ることを特徴とする方法。
【請求項２】
請求項１に記載の方法であって、クラスの各パブリック関数が前記制限された一群の４つの基本的な命令型の中から選択された型を有する少なくとも１つの命令のシーケンスによって記述されることを特徴とする方法。
【請求項３】
請求項１乃至２のいずれか１項に記載の方法であって、前記制限された一群の命令型が前記命令の４つの基本型を含むことを特徴とする方法。
【請求項４】
請求項１乃至２のいずれか１項に記載の方法であって、前記制限された一群の命令型が前記４つより少ない命令の基本型を含むことを特徴とする方法。
【請求項５】
請求項１乃至４のいずれか１項に記載の方法であって、構築すべきアプリケーション（ＡＰ）を記述する仕様（ＡＳ）を受信するたびに、（ｉ）前記仕様（ＡＳ）の自動的な分析を実行して、それを表す前記クラスを決定し、次いで（ii）これらの決定された仕様クラス（Ｃｉ）の前記形式的な表現を自動的に決定することを特徴とする方法。
【請求項６】
請求項１乃至５のいずれか１項に記載の方法であって、前記新しいクラス表現が生成される前記クラスの形式的な表現の少なくとも一部を格納し、前記受信された仕様（ＡＳ）を表している前記クラスの前記形式的な表現を決定するために、これらの格納されたクラスの形式的な表現にアクセスすることを特徴とする方法。
【請求項７】
各クラスがデータを格納する、及び／又は少なくとも１つのパブリック関数を実施する、及び／又は少なくとも１つの他のクラスの少なくとも１つの選択されたパブリック関数を稼働させることができる、クラス（Ｃｉ）の高レベルの表現からコンパイル可能かつ実行可能なアプリケーション（ＡＰ）を構築するための装置（Ｄ）であって、（ｉ）構築すべきアプリケーション（ＡＰ）を記述する仕様（ＡＳ）を表す仕様クラス（Ｃｉ）の形式的な表現から選択されたプログラミング言語で「新しい」クラス表現を生成し、各クラスの形式的な表現が、クラス宣言、データ宣言、関数宣言、及び４つの基本型の中から選択された制限された一群の命令型から成る高レベルの記号言語で書かれ、４つの基本型がそれぞれ、選択されたクラスの選択され格納されたデータにアクセスするための命令、選択された演算子から、及び場合によってはいくつかの所与の入力パラメータから選択されたデータを算出するための命令、選択されたクラスデータが選択された条件を満たすかどうかをテストするための命令、及び場合によっては少なくとも１つの選択されたデータパラメータを含む任意のクラスの選択されたパブリック関数の稼働を引き起こすための命令から成り、及び（ii）前記仕様（ＡＳ）に対応するコンパイル可能かつ実行可能なアプリケーション（ＡＰ）を構築するために、前記新しいクラス表現をアセンブルするように構成された生成手段（ＧＭ）を備えることを特徴とする装置。
【請求項８】
請求項７に記載の装置であって、クラスの各パブリック関数が前記制限された一群の４つの基本的な命令型の中から選択された型を有する少なくとも１つの命令のシーケンスによって記述されることを特徴とする装置。
【請求項９】
請求項７乃至８のいずれか１項に記載の装置であって、前記制限された一群の命令型が前記４つの基本型の命令を含むことを特徴とする装置。
【請求項１０】
請求項７乃至８のいずれか１項に記載の装置であって、前記制限された一群の命令型が前記４つより少ない命令の基本型を含むことを特徴とする装置。
【請求項１１】
請求項７乃至１０のいずれか１項に記載の装置であって、構築すべきアプリケーションを記述する仕様（ＡＳ）を受信するたびに、前記仕様（ＡＳ）を分析して、それを表すクラスを決定するように構成された分析手段（ＡＭ）を備える装置。
【請求項１２】
請求項７乃至１１のいずれか１項に記載の装置であって、前記新しいクラス表現が生成される前記クラスの形式的な表現の少なくとも一部を格納するための格納手段（ＳＭ）を備えることを特徴とする装置。
【請求項１３】
請求項１１及び１２の組み合わせに記載の装置であって、前記受信された仕様（ＡＳ）を表している前記クラスの前記格納された形式的な表現を抽出するために、前記分析手段（ＡＭ）が前記格納手段（ＳＭ）にアクセスするように構成されたことを特徴とする装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クラスによって表される仕様から、オブジェクト指向プログラミングの範囲内でコンパイル可能かつ実行可能なアプリケーションを構築することに関する。
【背景技術】
【０００２】
「クラス」という用語は、ここではクラス名、及び格納されたデータの少なくとも１つの定義（又は表現）、及び／又は少なくとも１つの命令によって記述される少なくとも１つのパブリック関数によって表される表現を意味する。
【０００３】
さらに、「アプリケーション仕様」という表現は、ここでは所望のアプリケーションが満たすべき少なくとも１つの要件を定義する少なくとも１つのセンテンスを意味する。より正確には、アプリケーション要件は、アプリケーションが何を行うか、及びその機能的及び非機能的特徴が何であるかを記述する。これらの要件は、好ましくは自然言語で表されるが、任意の形式的又は非形式的な本文の表現の形で表すことができる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
多くの著者は（ソフトウェア）アプリケーションを書くための方法をいくつか記載しているが、これらの方法は、完全に手動式であり、又は例えばＪａｖａ  ＳＤＫ、Ｅｃｌｉｐｓｅ、Ｖｉｓｕａｌ  Ｓｔｕｄｉｏなどのソフトウェア開発環境によって決まる。そのため、これらの方法は、それらの仕様から実行可能なアプリケーションを自動的に構築することができない。
【課題を解決するための手段】
【０００５】
本発明の目的は上述した欠点を克服することであり、より正確には、（そのそれぞれがデータを格納する、及び／又は少なくとも１つのパブリック関数を実施する、及び／又は少なくとも１つの他のクラスの少なくとも１つの選択されたパブリック関数を稼働させることができる）クラスの高レベルの表現によって表される仕様から実行可能なアプリケーションを構築できるようにすることである。
【０００６】
このために、本発明は、クラスからコンパイル可能かつ実行可能なアプリケーションを構築するための方法であって、
・クラス宣言、データ宣言、関数宣言、及び４つの基本型の中から選択された制限された一群の命令型から成る高レベルの記号言語で書かれたクラスの形式的な表現で、構築すべきアプリケーションを記述する仕様を表すステップであって、４つの基本型がそれぞれ、選択されたクラスの選択され格納されたデータにアクセスするための命令（Ａ）、選択された演算子から、及び場合によってはいくつかの所与の入力パラメータから選択されたデータを算出するための命令（Ｃ）、選択されたクラスデータが選択された条件を満たすかどうかをテストするための命令（Ｔ）、及び場合によっては少なくとも１つの選択されたデータパラメータを含む任意のクラスの選択されたパブリック関数の稼働を引き起こすための命令（Ｇ）から成る、ステップ、次いで
・仕様クラスのこれらの高レベルの形式的な表現から選択されたプログラミング言語で「新しい」クラス表現を生成するステップ、及び
・仕様に対応するコンパイル可能かつ実行可能なアプリケーションを構築するために、これらの新しいクラス表現をアセンブルするステップ
を備える方法を提供する。
【０００７】
本発明による方法は、別々に考えられる、又は結合される追加の特徴を含むことができ、とりわけ、
・クラスの各パブリック関数は、制限された一群の４つの基本的な命令型Ａ、Ｃ、Ｔ、及びＧの中から選択された型を有する少なくとも１つの命令のシーケンスによって記述することができ、
・制限された一群の命令型は、命令Ａ、Ｃ、Ｔ、及びＧの４つの基本型を含む可能性があり、
・変形体では、制限された一群の命令型は、命令Ａ、Ｃ、Ｔ、及びＧの４つより少ない基本型を含む可能性があり、
・構築すべきアプリケーションを記述する仕様を受信するたびに、この仕様の自動的な分析を実行して、それを表すクラスを決定することができ、次いで、これらの決定された仕様クラスの形式的な表現を自動的に決定することができ、
・前記新しいクラス表現が生成されるクラスの形式的な表現の少なくとも一部を格納することができ、受信した仕様を表しているクラスの形式的な表現を決定するために、これらの格納されたクラスの形式的な表現にアクセスすることができる。
【０００８】
また、本発明は、クラスの高レベルの表現からコンパイル可能かつ実行可能なアプリケーションを構築するための装置であって、
・構築すべきアプリケーションを記述する仕様を表す仕様クラスの形式的な表現から選択されたプログラミング言語で「新しい」クラス表現を生成し、各クラスの形式的な表現が、クラス宣言、データ宣言、関数宣言、及び４つの基本型の中から選択された制限された一群の命令型から成る高レベルの記号言語で書かれ、４つの基本型がそれぞれ、選択されたクラスの選択され格納されたデータにアクセスするための命令（Ａ）、選択された演算子から、及び場合によってはいくつかの所与の入力パラメータから選択されたデータを算出するための命令（Ｃ）、選択されたクラスデータが選択された条件を満たすかどうかをテストするための命令（Ｔ）、及び場合によっては少なくとも１つの選択されたデータパラメータを含む任意のクラスの選択されたパブリック関数の稼働を引き起こすための命令（Ｇ）から成り、
・仕様に対応するコンパイル可能かつ実行可能なアプリケーションを構築するために、これらの新しいクラス表現をアセンブルする
ように構成された生成手段を備える装置も提供する。
【０００９】
本発明による装置は、別々に考えられる、又は結合される追加の特徴を含むことができ、とりわけ、
・クラスの各パブリック関数は、制限された一群の４つの基本的な命令型Ａ、Ｃ、Ｔ、及びＧの中から選択された型を有する少なくとも１つの命令のシーケンスによって記述することができ、
・構築すべきアプリケーションを記述する仕様を受信するたびに、この仕様を分析して、それを表すクラスを決定するように構成された分析手段を備えることができ、
・新しいクラス表現が生成されるクラスの形式的な表現の少なくとも一部を格納するための格納手段を備えることができ、
・分析手段は、受信された仕様を表すクラスの格納された形式的な表現を抽出するために、格納手段にアクセスするように構成することができる。
【００１０】
本発明の他の特徴及び利点は、以下の詳細な明細書及び添付の図面を検討すれば明らかになり、唯一の図面は本発明による装置の実施形態の例を図示する。
【００１１】
添付の図面は本発明を完成させるだけではなく、必要に応じて、その定義への貢献にも役立ち得る。
【図面の簡単な説明】
【００１２】
【図１】図１は本発明による装置例の図である。
【発明を実施するための形態】
【００１３】
本発明は、クラスによって表される仕様のテキストから実行可能なアプリケーションを構築するための装置及び関連の方法を提供することを目的とする。
【００１４】
本発明は、クラスの形式的な表現でアプリケーションの要件を表すテキストで書かれた仕様によって記述される任意のタイプのアプリケーションに対処する。
【００１５】
「クラス」という用語は、ここでは１つのクラス名、及び格納されたデータの少なくとも１つの定義（又は表現）、及び／又は少なくとも１つの命令のシーケンスによって記述される少なくとも１つのパブリック関数によって定義される（又は表される）表現を意味することに留意されたい。
【００１６】
唯一の図に図示されるように、本発明による装置Ｄは少なくとも生成モジュール（又はコードジェネレータ）ＧＭを備える。
【００１７】
この生成モジュール（又はコードジェネレータ）ＧＭは、実行可能なアプリケーションＡＰを仕様ＡＳから構築しなければならないとき、そのたびに介入する。
【００１８】
「アプリケーション仕様」という表現は、ここでは所望のアプリケーションが満たすべき少なくとも１つの要件を定義する少なくとも１つのセンテンスを意味することに留意されたい。より正確には、アプリケーション要件は、アプリケーションＡＰが何を行うか、及びその機能的及び非機能的特徴が何であるかを記述する。これらの要件は好ましくは自然言語で表されるが、任意の形式的又は非形式的な本文の表現の形で表すことができる。
【００１９】
本発明によれば、すべてのアプリケーション仕様ＡＳが、ステートメントの選択された型から成る高レベルの記号言語で書かれたクラスＣｉの形式的な表現で表される。
【００２０】
これらの選択されたステートメント型は３つの宣言型及び制限された一群の命令型を備える。
【００２１】
３つの宣言型はクラス宣言、データ宣言、及び関数宣言である。
【００２２】
制限された一群のそれぞれの命令型は、それぞれ以下から成る４つの基本型の中から選択される。
・選択されたクラスの選択され格納されたデータにアクセスするための命令。この型は、アクセス関数から成る命令を備えるため、Ａ（「アクセス」）と呼ぶことができる。
・選択された演算子、及び場合によってはいくつかの所与の入力パラメータから選択されたデータを算出するための命令。この型は、計算関数から成る命令を備えるため、Ｃ（「計算」（又は「算出」））と呼ぶことができる。
・選択されたクラスデータが選択された条件を満たすかどうかをテストするための命令。この型はテスト関数から成る命令を備えるため、Ｔ（「テスト」）と呼ぶことができる。
・場合によっては少なくとも１つの選択されたデータパラメータを含む（又は言い換えれば任意のクラスのイベントを生成するための）任意のクラスの選択されたパブリック関数（又はメソッド）の稼働を引き起こすための命令。この型は、イベント生成から成る命令を備えるため、Ｇ（「生成」）と呼ぶことができ、このイベントは、オブジェクト指向の世界では、パラメータ付きの関数の呼出に翻訳される。
【００２３】
例えば、クラスＣｉがその名前（「ｃｌａｓｓ＿ｎａｍｅ」）で指定され、クラスデータがその名前（「ｄａｔａ＿ｎａｍｅ」）で指定される場合、
・アクセス関数は、Ａ（ｃｌａｓｓ＿ｎａｍｅ，ｄａｔａ＿ｎａｍｅ）、又はドット付き表記が使用される場合、Ａ（ｃｌａｓｓ＿ｎａｍｅ．ｄａｔａ＿ｎａｍｅ）と書くことができる。
・計算関数は、Ｃ（ｒｅｓｕｌｔ，ｏｐｅｒａｎｄ１，ｏｐｅｒａｔｏｒ，ｏｐｅｒａｎｄ２）と書くことができ、この場合、ｏｐｅｒａｎｄ１及びｏｐｅｒａｎｄ２は、クラスデータ又は関数呼出の結果である。
・テスト関数は、Ｔ（ｃｏｎｄｉｔｉｏｎ，ａｃｔｉｏｎ＿ｉｆ＿ｔｒｕｅ，ａｃｔｉｏｎ＿ｉｆ＿ｆａｌｓｅ）と書くことができ、この場合、「ａｃｔｉｏｎ＿ｉｆ＿ｔｒｕｅ」は、関連の条件が真である（又は満たされる）場合、実行されるべきアクションを指定し、「ａｃｔｉｏｎ＿ｉｆ＿ｆａｌｓｅ」は、関連の条件が偽である（又は満たされない）場合、実行されるべきアクションを指定し、「条件」は、クラスデータに対する論理条件又は関数呼出の結果を表し、
・生成関数は、Ｇ（ｃｌａｓｓ＿ｎａｍｅ，ｆｕｎｃｔｉｏｎ＿ｎａｍｅ，ｐａｒａｍｅｔｅｒ）、又はドット付き表記が使用される場合、Ｇ（ｃｌａｓｓ＿ｎａｍｅ，ｆｕｎｃｔｉｏｎ＿ｎａｍｅ（ｐａｒａｍｅｔｅｒｓ））と書くことができ、この場合、「ｆｕｎｃｔｉｏｎ＿ｎａｍｅ」は、クラス「ｃｌａｓｓ＿ｎａｍｅ」のパブリック関数（又はメソッド）を指定する。
【００２４】
クラスＣｉは少なくとも３つの異なるカテゴリに属し得る。第１のカテゴリは少なくとも１つのデータを格納するクラスを備える。第２のカテゴリは少なくとも１つの特定の命令のシーケンスによって定義されるクラスを備える。第３のカテゴリは少なくとも１つのデータを格納し、少なくとも１つの特定の命令のシーケンスによって定義されるクラスを備える。
【００２５】
本発明によれば、「特定の命令」は、述部として表され、４つの上述した基本的な命令型（Ａ、Ｃ、Ｔ、Ｇ）のうちの１つを有する命令である。
【００２６】
アプリケーション仕様ＡＳを表す（又は構成する）クラスＣｉは、装置のユーザによってこのアプリケーション仕様ＡＳのテキストから決定することができる。この場合、ユーザは、３つの上述した宣言型（クラス、データ、関数）から決定された各クラスＣｉの形式的な表現を構築し、４つの上述した基本的な命令型の中から選択された制限された一群の命令型に属する命令を使用することによって各クラスの各関数を表す。例えば、装置Ｄは、４つの基本的なもの（Ａ、Ｃ、Ｔ、Ｇ）の中から少なくとも１つの命令型を選択するように、ユーザに提案することができる。
【００２７】
変形体では、装置Ｄは、１組のクラスＣｉ（ｉ＝１からＮ）の形式的な表現を格納するための格納手段ＳＭを備えることができる。この場合、ユーザは、格納手段ＳＭにおいて、ユーザに従ってアプリケーション仕様ＡＳを構成する（又は表す）クラスＣｉの形式的な表現を決定（又は選択）することができる。
【００２８】
クラスＣｉの形式的な表現を格納することができ、当業者から知られている任意のタイプの格納手段ＳＭを使用することができ、とりわけ、データベース、フラッシュメモリ、ＣＤ、ＵＳＢキー、ＲＯＭ又はＲＡＭ、フラットファイルシステム、及び任意の他の種類のリポジトリとすることができる。
【００２９】
別の変形体において、装置Ｄは、アプリケーション仕様ＡＳが受信されるたびに、それを構成する（又は表す）クラスＣｉを決定するために、このアプリケーション仕様ＡＳのテキストを分析するための分析モジュールＡＭを備えることができる。いったん分析モジュールＡＭがアプリケーション仕様ＡＳを構成するクラスＣｉを決定すると、ユーザは、３つの上述した宣言型（クラス、データ、関数）から決定された各クラスＣｉの形式的な表現を構築し、４つの上述した基本的な命令型の中から選択された制限された一群の命令型に属する命令を使用することによって各クラスの各関数を表す。例えば、装置Ｄは、４つのもの（Ａ、Ｃ、Ｔ、Ｇ）の中から少なくとも１つの命令型を選択するように、ユーザに提案することができる。
【００３０】
さらに別の変形体で、装置Ｄは、上述した格納手段ＳＭ、及びそれを構成するクラスＣｉを決定するために、受信されたアプリケーション仕様ＡＳのテキストを分析するためだけではなく、これらの決定されたクラスＣｉの形式的な表現を抽出するために、格納手段ＳＭにアクセスするための分析モジュールＡＭを備えることができる。この変形体において、分析モジュールＡＭは、２つのサブモジュールに分割することができ、第１のものはテキスト分析を実行するためのものであり、第２のものは仕様テキストで第１のサブモジュールによって決定されたクラスの形式的な表現を格納手段ＳＭから抽出するためのものである。さらに、この変形体では、分析モジュールＡＭは、セマンティック分析によってクラスをより容易に抽出するために、外部オントロジ（external ontology）又は外部辞書又は用語辞典に結合することができる。
【００３１】
アプリケーション仕様ＡＳを構成するクラスＣｉの形式的な表現が、ユーザによっていったん定義される、又は分析モジュールＡＭによって格納手段ＳＭから抽出されると、生成モジュールＧＭは、「新しい」クラス表現、即ちソースコードで表したクラスを、これらの形式的な表現から選択されたプログラミング言語で生成し、次いで受信されたアプリケーション仕様ＡＳに対応する所望のコンパイル可能かつ実行可能なアプリケーションＡＰを構築するために、これらのソースコードクラスをアセンブルするように構成される。
【００３２】
例えば、選択されたプログラミング言語はＪａｖａ、Ｃ＋＋又はＣ＃とすることができる。
【００３３】
本発明によるプログラミングプロセスは、「低減命令セットプログラミング（reduced instruction set programming）」（ＲＩＳＰ）と呼ぶことができ、生物学的蛋白質の概念と比較することができる。蛋白質は、ポリペプチドを共に定義する選択された数の所与のペプチドで構成され、そのそれぞれは、４つのアミノ酸（アデニン（Ａ）、グアニン（Ｇ）、シトシン（Ｃ）、及びチミン（Ｔ））の選択された整列された配列で構成されることに留意されたい。例えば、ポリペプチド（又は蛋白質）は、以下の配列（ＡＣＴＧ−ＡＡＣＧ−ＡＣＣＧ−ＡＣＴＧ−・・・）によって部分的に定義することができる。さらに、蛋白質は、分子又はイオン交換を介してその間をつなげる。そのため、蛋白の分野と類似して、本発明によるクラスＣｉはペプチドに対応し、クラスデータは分子に対応し、生成されたイベントは分子の交換（関数がパラメータで呼び出されるとき）又はイオン交換（関数がパラメータ無しで呼ばれるとき）に対応する。従って、実行可能なアプリケーションＡＰ（生成モジュールＧＭによって生成された）は、Ｘ個の特定の命令のグループの整列された配列の一種であり、それらの型は、選択された制限された一群のＭ個の基本的な命令型に選択される。Ｍは少なくとも１に等しい整数である。例えばＭ＝４（生物学的なペプチドの場合と同様）である。
【００３４】
そのため、アプリケーションは、完全でコンパイル可能なアプリケーションＡＰを構築するために、生成モジュール（又はコードジェネレータＧＭ）によって入力とみなされる１組の命令である。
【００３５】
ここで、本発明による装置Ｄによって実行されるプログラミングプロセスを示すために、簡単な、部分的な、非制限的な例について説明する。
【００３６】
この非制限的な例は、現金自動預け払い機（又はＡＴＭ）の使用に関連する。現金自動預け払い機（ＡＴＭ）は、金融機関（銀行など）の顧客に、事務員又は銀行の出納係の必要無しに、公のスペースにおいて、金融取引へのアクセスを提供するコンピュータ化された通信装置と定義することができることに留意されたい。ほとんどのモデムＡＴＭで、顧客は、一意のカード番号及び満了日など何らかのセキュリティ情報を含む、磁気ストライプを含むプラスチックカード、又はチップを含むプラスチックスマートカードを挿入することによって識別される。セキュリティは、顧客が個人識別番号（ＰＩＮ）を入力することによって提供される。ＡＴＭを使用するとき、顧客は、その銀行口座にアクセスして現金を引き出し（又はクレジットカードキャッシュアドバンス）、その口座残高をチェックすることができる。
【００３７】
以下、アプリケーション仕様ＡＳの目的は、顧客が引き出しを行えるようにすることであると仮定する。こうしたアプリケーション仕様ＡＳは、例えば、以下のセンテンスによって定義することができる。
・顧客がカードをＡＴＭに入れる。
・ＡＴＭは、顧客に暗号（ＰＩＮコード）を入力するよう要求する。
・顧客がコードを入力する。
・ＡＴＭ（カードリーダー）は、コードをチェックする。
・３回の試行後、コードが不正の場合、ユーザにカードが戻される。
・コードが適切である場合、ＡＴＭは、顧客に引き出し金額を入力するように要求する。
・顧客は、必要な金額を入力する。
・ＡＴＭは、引き出し金額が許可されるかどうか、カードをチェックする。
・ＡＴＭは、銀行残高によって引き出しが可能かどうか、銀行インターフェイスを介して顧客の口座に尋ねる。
・上記の条件がＯＫである場合、分配スロットを介して紙幣を配ることができる。
【００３８】
この簡単な仕様テキストの分析によって、以下のクラスＣｉ、カード、カードリーダー、銀行インターフェイス、ＡＴＭ、スロットを決定することができる。これらのクラスＣｉの間のイベントの交換によって、アプリケーションＡＰを実施することができる。決定されたクラスＣｉの「ＡＣＴＧ表記」における形式的な表現の一例は、以下の通りとすることができる。
card { 
data: 
secret_code=1234;
}
card_reader {
data: 
code_input;
functions: 
introduce_card () {
G(dialogue, "カード読み取り中です");
G(card_reader, check_code) ;
}
check_code () {
G(dialogue, "PINコードを入力してください"); 
C(code_input, input()); 
T(code_input==A(card, secret_code), G(ATM, 
ask_amount), code_KO); 
} 
code _KO() { 
G(dialogue, "不正なコード"); 
G(card_reader, check_code); 
} 
return _card() { 
G(dialogue, "カードを取り出し、お金をお受け取りください"); 
G(slot, distribute, A(ATM, withdrawal_amount)); 
} 
} 
slot { 
data: 
nb_of_banknotes; 
functions: 
distribute(parameter) { 
C(nb_of_banknotes=parameter/A(banknote, value)); 
G(dialoque, "あなたのお金です(nbのbanknotes =
"+nb_of_banknotes+")"); 
} 
}
【００３９】
ＡＣＴＧ表記から、コードジェネレータＧＭは、クラス「カードリーダー」について、Ｊａｖａにおける以下の新しいクラスを自動的に生成することができる。
class card_reader {
//data: 
int code_input; 
// instances (generated) 
dialogue thedialogue; 
card thecard; 
ATM theATM; 
slot theslot; 
//constructor (generated) 
public card _reader() { 
thedialogue = new dialogue(); 
thecard = new card(); 
theATM = new ATM(); 
theslot = new slot(); 
} 
//methods: 
public void introduce_card() {
thedialogue.display("カード読み取り中です"); 
this.check_code(); 
} 
public void check _code() { 
thedialogue.display("PINコードを入力してください"); 
code_input = input(); 
if(code -input==thecard.secret_code) 
theATM.ask_amount(); 
else this.code_KO(); 
} 
public void code_KO() { 
thedialogue.display("不正なコード"); 
this.check_code(); 
} 
public void return _card() { 
thedialogue.display("カードを取り出し、お金をお受け取りください"); 
theslot.distribute(theATM.withdrawal_amount); 
}
}
【００４０】
実際には、コードジェネレータＧＭは、仕様ＡＳを表すすべてのクラスＣｉ（ここでは、これらのクラスは、カード、カードリーダー、銀行インターフェイス、ＡＴＭ、スロットである）の新しいＪａｖａクラスを自動的に生成する。
【００４１】
装置Ｄ、及びより正確には、その生成モジュールＧＭ及び場合によってはその格納手段ＳＭ、及び／又は分析モジュールＡＭは、好ましくはソフトウェアモジュールである。しかし、これらはそれぞれ、電子回路又はハードウェアモジュール、又はハードウェアモジュール及びソフトウェアモジュールの組み合わせで構成されてもよい。
【００４２】
また、本発明は、仕様ＡＳを構成するクラスＣｉから実行可能なアプリケーションＡＰを構築するための方法の観点で考えることもできる。
【００４３】
こうした方法は、唯一の図を参照して上述したものなど、装置Ｄによって実施することができる。従って、その主な特徴のみ以下で言及する。
【００４４】
本発明によるこの方法は、
・３つの宣言型、クラス宣言、データ宣言、関数宣言、及び４つの基本型の中から選択された制限された一群の命令型から成る高レベルの記号言語で書かれたクラスＣｉの形式的な表現で、構築すべきアプリケーションＡＰを記述する仕様ＡＳを表すステップであって、４つの基本型がそれぞれ、選択されたクラスの選択され格納されたデータにアクセスするための命令（Ａ）、選択された演算子から、及び場合によってはいくつかの所与の入力パラメータから選択されたデータを算出するための命令（Ｃ）、選択されたクラスデータが選択された条件を満たすかどうかをテストするための命令（Ｔ）、及び場合によっては少なくとも１つの選択されたデータパラメータを含む任意のクラスの選択されたパブリック関数の稼働を引き起こすための命令（Ｇ）から成る、ステップ、次いで
・仕様クラスＣｉのこれらの形式的な表現から選択されたプログラミング言語で「新しい」クラス表現を生成するステップ、及び
・この仕様ＡＳに対応するコンパイル可能かつ実行可能なアプリケーションＡＰを構築するために、これらの新しいクラス表現をアセンブルするステップ
から成る。
【００４５】
仕様ＡＳのテキストの分析が（分析モジュールＡＭによって）自動的に行われ、仕様クラスの形式的な表現が格納手段ＳＭから（分析モジュールＡＭによって）自動的に抽出されるとき、本発明は、その仕様ＡＳのテキストから直接、コンパイル可能かつ実行可能なアプリケーションＡＰを生成するための手段と考えることができる。
【００４６】
本発明は、遺伝的アルゴリズム、ニューラルネットワーク、及びｐｏｐｕｌａｔｉｏｎｉｓｔ  ａｎｔ−ｐｒｏｇｒａｍｍｉｎｇなど、当分野で知られている生物学的な手法とは強く異なる新しい手法を提供する。
【００４７】
遺伝的アルゴリズム（又は進化的アルゴリズム）は、メタ発見的アルゴリズムのファミリに属し、その目的は、妥当な時間以内に問題を解決する正確な方法が知られていないとき、最適化問題に対して近い解答を許容可能な時間以内に取得することであるに留意されたい。遺伝子及び突然変異の概念を使用することによって、遺伝的アルゴリズムは、Ｃｈ．Ｄａｒｗｉｎによって１９世紀中に開発された自然選択及び進化の概念を使用し、これらの概念を所与の問題に対する潜在的な解答の集団に適用する。そのため、連続的な「ジャンプ」によって許容可能な解答により近くなる。
【００４８】
本発明は、遺伝子、突然変異、自然選択、その他の進化の概念を使用するのではなく、その目的は、最適化することではなく、オブジェクト指向のプログラミングの範囲内の実行可能なアプリケーションの生成を容易にすることである。
【００４９】
人工ニューラルネットワークとは、設計が真の神経細胞（ヒト又はヒト以外）の機能からのインスピレーションを非常に概略的に得た計算モデルである。ニューラルネットワークは、一般に、統計タイプの学習方法によって最適化され、従って、これらはまず、統計的なアプリケーションのファミリに属し、これを、柔軟性があり、部分的に構築されている広範な機能空間を生成できるようにする１組のパラダイムで豊かにし、第２に、人工知能的方法のファミリに属し、これを、形式的な論理的推論よりも知覚に基づいて決断を下すことができるようにして豊かにしている。
【００５０】
本発明は神経細胞の概念も統計の概念も使用せず、人工知能的方法でもなく、その目的は決定を発砲するのではなく、オブジェクト指向プログラミングの範囲内で実行可能なプログラムの生成を容易にすることである。
【００５１】
ｐｏｐｕｌａｔｉｏｎｉｓｔ  ａｎｔ−ｐｒｏｇｒａｍｍｉｎｇは、蟻の狩猟挙動からインスピレーションを得た組み合わせ最適化問題の発見的方法である。これによって、組み合わせ最適化問題に対する多段の解答のための反復モンテカルロ法の使用の基礎を成す原則へのより深い洞察力が可能になる。こうした洞察力は、アルゴリズムの設計者に、新しいカテゴリ、表現的用語、及び当面の問題の特色を効果的に扱うためのツールを提供するためのものである。これは、元の組み合わせ問題が低減される多段決定問題の最適なポリシーを検索する。
【００５２】
本発明は、蟻、コロニー、その他の最適化の概念を使用するのではなく、その目的は、組み合わせ最適化問題の発見ではなく、オブジェクト指向のプログラミングの範囲内で実行可能なアプリケーションの生成を容易にすることである。
【００５３】
本発明は単に例にすぎず、上記の方法及び装置の実施形態に限定されるものではなく、以下の特許請求の範囲内で当業者が考え得るすべての代替実施形態を含む。
【図１】
2011507064.tif 000003
【国際調査報告】
2011507064.tif 000004
2011507064.tif 000005