たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

契約による設計

Client (Caller) とSupplier (Callee)
Obligationとbenefits

Design by Contract (契約による設計) はプログラミング技法のひとつ。
Eiffelには言語レベルで直接実装されている1 呼び出し側 (Client, メイン側) と呼び出され側 (Supplier, コルーチン・関数側) の間に保証されるべき条件を契約とみなし、契約を検証可能なコードとして記述する手法。
ClientとSupplierは義務と利益 (Obligation & Benefits) を持っているとみる。 Client目線では、義務を果たした状態でSupplierを呼び出せば利益が得られるという契約が結ばれている。
Supplier目線では、呼び出し側が常に正しい状態で呼び出してくれると保証されており、代わりに正しい利益をClientへ返す義務を負っている。
関数呼び出し時に満たすべき条件 (Precondition) コードによりClientの義務が確認されSupplierは利益を得る。関数が戻り値を返す際に満たすべき条件 (Postcondition) コードによりClientの利益が保証されSupplierは義務を果たすことになる。

The Power of Design by Contract™, Eiffel Software
ET: Design by Contract (tm), Assertions and Exceptions


  1. Eiffel directly implements the ideas of Design by Contract™ ref