コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
最近の更新
未作成ページ
おまかせ表示
ヘルプ
MonoBook
検索
検索
ログイン
個人用ツール
ログイン
ログアウトした編集者のページ
もっと詳しく
投稿記録
トーク
「
契約による設計
」を編集中
ページ
議論
日本語
閲覧
編集
ソースを編集
履歴表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
編集
ソースを編集
履歴表示
全般
リンク元
関連ページの更新状況
特別ページ
ページ情報
2012年5月17日 (木) 03:10時点における
imported>Administrator
による版
(ページの作成:「'''契約による設計'''(Design By Contract、でざいん・ばい・こんとらくと)とは、
ソースコード
の中に
プログラム
が満たす...」)
(差分) ← 古い版 |
最新版
(
差分
) |
新しい版 →
(
差分
)
警告: このページの古い版を編集しています。
公開すると、この版以降になされた変更がすべて失われます。
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 けっして、ここには、値の入力は
しない
でください!
'''契約による設計'''(Design By Contract、でざいん・ばい・こんとらくと)とは、[[ソースコード]]の中に[[プログラム]]が満たすべき[[仕様]](契約)についての記述を盛り込み、[[設計]]の安全性を高める[[プログラミング]]の技法のひとつである。'''契約プログラミング'''(Programming By Contract)や、Design by Contract の頭文字であるDbC (でぃーびーしー) とよばれることもある。 たとえば、ある[[サブルーチン]]の[[引数]]があるとして、[[ぬるぽ]]や[[ぬるり]]を防ぐために引数の[[nullチェック]]や[[境界チェック]]を行う、などという[[コーディング規約]]に近いものを、[[プログラミング言語]]の[[仕様]]として半ば強制することで、[[静的コード解析]]などを的確に行えるようにし、[[プログラム]]の品質を向上させようというものである。 == 条件の種類 == 契約は、コードの利用条件が満たされることによって成立する。 それら条件は、満たすべきタイミングと主体によって、以下の3種類に分けられる。 ; [[事前条件]] (precondition) :[[サブルーチン]]の開始時に、これを呼ぶ側で保証すべき性質。 ; [[事後条件]] (postcondition) :[[サブルーチン]]が、終了時に保証すべき性質。 ; [[不変条件]] (invariant) :[[クラス]]などの[[オブジェクト]]がその外部に公開しているすべての操作の開始時と終了時に保証されるべき、オブジェクト毎に共通した性質。 コードを呼ぶ側が[[事前条件]]と[[不変条件]]を満たす義務を負うことで、呼ばれたコードはその条件が恒真であるとの前提を利益として得る。 引き換えに、呼ばれたコードは事後条件と不変条件を義務として負い、呼ぶ側の利益としてこれを保証する。 == 契約による設計をサポートする主な言語 == ここに記載するプログラミング言語はあくまで一例でありすべてではない。 === [[.NET Framework 4.0]] === [[.NET Framework 4.0]]では、[[コードコントラクト]]([[Code Contracts]])という名前の機能が追加され、[[プログラミング言語]]レベルではなく、[[ランタイム]]レベルで「契約による設計」に対応した。これにより[[.NET Framework]]系のすべての[[プログラミング言語]]が対応することとなった。 また、[[Visual Studio]]用のアドオンも提供されており、契約による設計のキモである[[静的チェック]]や[[ドキュメント]]の自動生成も行いえる。とくに[[静的チェック]]はとても重要な要素であり、これが使えないとただの[[コーディング規約]]程度の話で終わってしまい、魅力の9割が失われる。なお、アドオンが使えない[[Visual Studio Express]]では当然使えない。 [[コードコントラクト]]を利用するためのライブラリは[[System.Diagnostics.Contracts 名前空間]]にあり、[[事前条件]]、[[事後条件]]、[[不変条件]]などの表すための[[C Sharp/静的クラス|静的クラス]]が用意されている。 * http://msdn.microsoft.com/en-us/devlabs/dd491992 === [[D言語]] === === [[Eiffel]] === [[Eiffel]]は契約による設計を提唱・サポートした一番最初の[[プログラミング言語]]だそうだ。まったく知らない。 === [[Sather]] === [[Eiffel]]から派生した[[サブセット]]で独自の進化を遂げてものらしい。 まったく知らない。 == 関連項目 == * [[バートランド・メイヤー]](仏:Bertrand Meyer) - 契約による設計の提唱者、[[Eiffel]]を作った[[プログラマー]] * [[リスコフの置換原則]]([[Liskov substitution principle]]) * [[正当性]]([[Correctness]]) * [[表明]]([[Assertion]]) * [[コーディング規約]] * [[デザインパターン]] * [[設計]] * [[実装]] * [[仕様]] == 参考文献 == <references/> == 外部リンク == {{stub}}
編集内容の要約:
MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MonoBook:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の確認用の質問に回答してください (
詳細
):
1たす1は?(全角で入力してください)
キャンセル
編集の仕方
(新しいウィンドウで開きます)
本文の横幅制限を有効化/無効化