Design by Contract (DbC) memperlakukan hubungan antara sebuah metode dan pemanggilnya sebagai perjanjian formal, yang ditentukan oleh tiga hal: prakondisi (apa yang harus dijamin oleh pemanggil), postkon-disi (apa yang dijamin metode sebagai balasannya), dan invarian (apa yang tetap benar untuk objek setiap saat).
Tiga kewajiban
PRECONDITION → caller's duty: inputs/state the method requires to run correctly
POSTCONDITION → method's duty: what it promises on return (if precondition held)
INVARIANT → always-true property of the object, before and after every method
