【手続補正書】
【提出日】平成23年11月17日(2011.11.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第２のプログラミング言語で記述されたアプリケーションＡＰＩを拡大するための、第１のプログラミング言語で記述されたコントラクトＡＰＩ（ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｅ）を有するコンピュータ可読記録媒体であって、前記アプリケーションＡＰＩは１つまたは複数のコントラクトを含み、前記コンピュータ可読記録媒体はコンピュータ実行可能命令を備え、前記コンピュータ実行可能命令は、コンピューティングシステムの１つまたは複数のプロセッサにより実行されるときに前記コンピュータシステムに方法を実施させ、前記方法は、
前記第１のプログラミング言語で記述された前記コントラクトＡＰＩからのコントラクトを用いて前記アプリケーションＡＰＩを拡大するというユーザの意図を示す、前記第２のプログラミング言語で記述されたソフトウェアコードを受け取る動作であって、前記ソフトウェアコードは前記コントラクトＡＰＩへの参照を含み、前記コントラクトは前記アプリケーションＡＰＩの適切な使用を示す１つまたは複数のアサーションを含む動作と、
前記ソフトウェアコード内の前記参照に従って、前記コントラクトＡＰＩの一部にアクセスする動作と、
前記受け取ったソフトウェアコードおよび前記コントラクトＡＰＩの前記参照された部分を前記受け取ったソフトウェアコードの中間言語バージョンにコンパイルする動作であって、前記中間言語バージョンは前記第１のプログラミング言語および前記第２のプログラミング言語の両方に共通の中間言語におけるものであり、前記中間言語バージョンは前記アプリケーションＡＰＩの適切な使用を示す１つまたは複数のアサーションを含む動作と
を含むことを特徴とするコンピュータ可読記録媒体。
【請求項２】
１つまたは複数のソフトウェアツールを用いて前記コンパイルされた中間言語バージョンにアクセスする動作と、
１つまたは複数のランタイムチェックへの１つまたは複数の参照を前記コントラクトの内の少なくとも１つに挿入して、前記ランタイムチェックが前記対応する参照に従ってアプリケーションコードに注入されることを可能にする動作と
をさらに含むこと特徴とする請求項１に記載の方法を実施するよう構成されたＡＰＩのためのコンピュータプログラム。
【請求項３】
前記挿入されたランタイムチェックを含む前記中間言語バージョンを実行する動作と、
前記コントラクト内の前記アサーションの内の少なくとも１つが前記中間言語バージョンの実行中に違反されたと判定する動作と、
前記判定に基づき、前記アサーションの内の少なくとも１つが違反されたという表示を与える動作と、
をさらに含むこと特徴とする請求項２に記載の方法を実行するよう構成されたＡＰＩのためのコンピュータプログラム。
【請求項４】
前記挿入されたランタイムチェックを含む前記中間言語バージョンを実行する動作と、
前記コントラクト内の前記アサーションのいずれも前記中間言語バージョンの実行中に
違反されなかったと判定する動作と、
前記判定に基づき、前記アサーションのいずれも違反されなかったという表示を与える動作と
をさらに含むこと特徴とする請求項２に記載の方法を実施するよう構成されたＡＰＩのためのコンピュータプログラム。
【請求項５】
前記アプリケーションＡＰＩのコントラクトの内の少なくとも１つを静的にチェックして、前記コントラクトのアサーションのいずれかが違反されたかどうかを判定する動作をさらに含むこと特徴とする請求項１に記載の方法を実施するよう構成されたＡＰＩのためのコンピュータプログラム。
【請求項６】
前記アサーションは、呼び出し側がメソッドを呼び出すことを許可される前に満たされ
るべき項目を特定する１つまたは複数の前提条件を含むこと特徴とする請求項１に記載の
方法を実施するよう構成されたＡＰＩのためのコンピュータプログラム。
【請求項７】
前記アサーションは、前記メソッドの通常の終了および前記メソッドの例外的な終了の
内の少なくとも一方の際、前記メソッドのリターン時に有効である１つまたは複数の保証
を特定する１つまたは複数の事後条件を含むこと特徴とする請求項１に記載の方法を実施するよう構成されたＡＰＩのためのコンピュータプログラム。
【請求項８】
前記アサーションは、ロック宣言の内の少なくとも１つを含むこと特徴とする請求項１に記載の方法を実施するよう構成されたＡＰＩのためのコンピュータプログラム。
【請求項９】
前記アサーションは、少なくとも１つのチェックされる例外を含むこと特徴とする請求項１に記載の方法を実施するよう構成されたＡＰＩのためのコンピュータプログラム。
【請求項１０】
前記アサーションは、オブジェクト不変条件の内の少なくとも１つを含むこと特徴とする請求項１に記載の方法を実施するよう構成されたＡＰＩのためのコンピュータプログラム。
【請求項１１】
前記コントラクトは、前記コントラクトＡＰＩの結果として拡張可能であり、前記拡張性は、新しいメソッドを前記コントラクトＡＰＩに追加することを可能にして、１つまたは複数のクライアントが前記第２のプログラミング言語で記述された前記コントラクト内の前記新しいメソッドを使用することができるように、新しい種類のコントラクトを記述することを可能にすること特徴とする請求項１に記載の方法を実施するよう構成されたＡＰＩのためのコンピュータプログラム。
【請求項１２】
前記コントラクト内の前記アサーションの内の少なくとも１つは宣言型であること特徴とする請求項１に記載の方法を実施するよう構成されたＡＰＩのためのコンピュータプログラム。
【請求項１３】
前記拡大されたコントラクトに基づき、前記ソフトウェアアプリケーションのＡＰＩのドキュメンテーションを自動的に生成する動作さらに含むこと特徴とする請求項１に記載の方法を実施するよう構成されたＡＰＩのためのコンピュータプログラム。
【請求項１４】
前記コントラクトＡＰＩを使用して記述された前記コントラクトは複数のダウンストリームツールに対して維持されること特徴とする請求項１に記載の方法を実施するよう構成されたＡＰＩのためのコンピュータプログラム。
【請求項１５】
プロセッサを有するコンピュータシステムにおいて、アプリケーションＡＰＩを拡大するための方法であって、前記アプリケーションＡＰＩは１つまたは複数のコントラクトを含み、
前記プロセッサにより、コントラクトＡＰＩからのコントラクトを用いて前記アプリケーションＡＰＩを拡大するというユーザの意図を示すソフトウェアコードを、コンピュータユーザから受け取る動作であって、前記ソフトウェアコードは前記コントラクトＡＰＩへの参照を含み、前記コントラクトは前記アプリケーションＡＰＩの適切な使用を示す１つまたは複数のアサーションを含む動作と、
前記プロセッサにより、前記ソフトウェアコード内の前記参照に従って前記コントラクトＡＰＩの一部にアクセスする動作と、
前記プロセッサにより、前記受け取ったソフトウェアコードおよび前記コントラクトＡＰＩの前記参照された部分を、前記アプリケーションＡＰＩの適切な使用を示す１つまたは複数のアサーションを含む前記受け取ったソフトウェアコードの中間言語バージョンにコンパイルする動作と、
前記プロセッサにより、前記ソフトウェアコードの前記コンパイルされた中間言語バージョンを前記コンピュータユーザに提供する動作と
を含むことを特徴とする方法。
【請求項１６】
前記アサーションは、前提条件、事後条件、ロック宣言、チェックされる例外、使用プロトコル、およびオブジェクト不変条件の内の１つまたは複数を含むことを特徴とする請求項１５に記載の方法。
【請求項１７】
前記コントラクトは、前記コントラクトを完全汎用のプログラミング言語で記述することができるように拡張可能であることを特徴とする請求項１５に記載の方法。
【請求項１８】
ＡＰＩコントラクトを修正するためのコンピュータシステムであって、前記システムは、
コンパイラおよびリライタとして動作するプロセッサを有し、
前記コンパイラは、
ソフトウェアアプリケーションコードとどのように相互作用するかを特定する１つまたは複数のアサーションを識別する少なくとも１つのコントラクトを有するＡＰＩを含む、前記ソフトウェアアプリケーションコードを受け取るステップであって、前記コントラクトは１つの値と交換されるべきアプリケーションコードの一部を示す１つまたは複数の参照を含むよう拡張可能であり、前記コントラクトは汎用のプログラム言語で記述されるステップと、
１つまたは複数のアサーションを前記ソフトウェアアプリケーションコード内の対応するメソッドに統合するステップと
を実施するよう構成され、
前記リライタは、
前記コンパイラからバイナリを受け取るステップであって、前記バイナリは少なくとも１つの前記ソフトウェアアプリケーションコードと、前記少なくとも１つのコントラクトとを含むステップと、
前記コントラクト内の前記参照により示される前記アプリケーションコードの一部がある値と交換されるように、前記受け取ったバイナリを書き換えるステップと、
前記書き換えたバイナリを実行可能バイナリとして出力するステップと
を実施するよう構成される
ことを特徴とするシステム。
【請求項１９】
前記コンパイラは１つまたは複数の前記バイナリを受け取るよう構成されることを特徴とする請求項１８に記載のシステム。
【請求項２０】
前記アサーションは、前提条件、事後条件、ロック宣言、チェックされる例外、使用プロトコル、およびオブジェクト不変条件の内の少なくとも１つであることを特徴とする請求項１８に記載のシステム。