「契約による設計」を編集中
この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
1行目: | 1行目: | ||
− | '''契約による設計'''([[英語]]:Design By Contract、でざいん・ばい・こんとらくと)とは、[[ソースコード]]の中に[[プログラム]]が満たすべき[[仕様]](契約)についての記述を盛り込み、[[設計]]の安全性を高める[[プログラミング]] | + | '''契約による設計'''([[英語]]:Design By Contract、でざいん・ばい・こんとらくと)とは、[[ソースコード]]の中に[[プログラム]]が満たすべき[[仕様]](契約)についての記述を盛り込み、[[設計]]の安全性を高める[[プログラミング]]の技法のひとつである。'''契約プログラミング'''(Programming By Contract)や、Design by Contract の頭文字である'''DbC''' (でぃーびーしー) とよばれることもある。 |
− | |||
− | '''契約プログラミング'''(Programming By Contract)や、Design by Contract の頭文字である'''DbC''' (でぃーびーしー) とよばれることもある。 | ||
== 概要 == | == 概要 == | ||
− | たとえば、ある[[サブルーチン]] | + | たとえば、ある[[サブルーチン]]の[[引数]]があるとして、[[ぬるぽ]]や[[ぬるり]]を防ぐために引数の[[nullチェック]]や[[境界チェック]]を行う、などという[[コーディング規約]]に近いものを、[[プログラミング言語]]の[[仕様]]として半ば強制することで、[[静的コード解析]]やドキュメント生成、[[単体テスト]](のテンプレート生成)などを的確かつ効率的に行えるようにし、[[プログラム]]の品質を向上させようというものである。 |
== 条件の種類 == | == 条件の種類 == | ||
19行目: | 17行目: | ||
ここに記載する[[プログラミング言語]]はあくまで一例でありすべてではない。 | ここに記載する[[プログラミング言語]]はあくまで一例でありすべてではない。 | ||
− | === .NET Framework 4.0 === | + | === [[.NET Framework 4.0]] === |
[[.NET Framework 4.0]]では、[[コードコントラクト]]([[Code Contracts]])という名前の機能が追加され、[[プログラミング言語]]レベルではなく、[[ランタイム]]レベルで「契約による設計」に対応した。これにより[[.NET Framework]]系のすべての[[プログラミング言語]]が対応することとなった。 | [[.NET Framework 4.0]]では、[[コードコントラクト]]([[Code Contracts]])という名前の機能が追加され、[[プログラミング言語]]レベルではなく、[[ランタイム]]レベルで「契約による設計」に対応した。これにより[[.NET Framework]]系のすべての[[プログラミング言語]]が対応することとなった。 | ||
− | + | また、[[Visual Studio]]用のアドオンも提供されており、契約による設計のキモである[[静的チェック]]や[[ドキュメント]]の自動生成も行いえる。とくに[[静的チェック]]はとても重要な要素であり、これが使えないとただの[[コーディング規約]]程度の話で終わってしまい、契約による設計の魅力の99.9999%が失われる。 | |
+ | |||
+ | なお[[アドオン]]が使えない[[Visual Studio Express]]ではツール群が使えないので、ただの実行時のエラーチェックと化し、前述のように契約による設計の魅力の99.9999%が失われる。 | ||
[[コードコントラクト]]を利用するための[[ライブラリ]]は[[System.Diagnostics.Contracts 名前空間]]にあり、[[事前条件]]、[[事後条件]]、[[不変条件]]などの表すための[[C Sharp/静的クラス|静的クラス]]が用意されている。 | [[コードコントラクト]]を利用するための[[ライブラリ]]は[[System.Diagnostics.Contracts 名前空間]]にあり、[[事前条件]]、[[事後条件]]、[[不変条件]]などの表すための[[C Sharp/静的クラス|静的クラス]]が用意されている。 | ||
28行目: | 28行目: | ||
* http://msdn.microsoft.com/en-us/devlabs/dd491992 | * http://msdn.microsoft.com/en-us/devlabs/dd491992 | ||
− | === | + | === [[D言語]] === |
− | [[D言語]] | ||
− | |||
− | |||
− | === | + | === [[Eiffel]] === |
− | + | [[Eiffel]]は契約による設計を提唱・サポートした一番最初の[[プログラミング言語]]だそうだ。まったく知らない。 | |
− | |||
− | === | + | === [[Sather]] === |
− | [[Eiffel]] | + | [[Eiffel]]から派生した[[サブセット]]で独自の進化を遂げてものらしい。 |
まったく知らない。 | まったく知らない。 | ||
− | |||
− | |||
== 関連項目 == | == 関連項目 == |