Design by Contract

Design   by   Contract(DBC)大概可以译为“按契约设计”,是由Bertrand   Meyer首先正式提出并在Eiffel语言中实现的编程方法学。DBC最大的特点就是:通过(内建的或附加的)语言特性强制程序的前条件(pre- condition)、后条件(post-condition)、不变式(invariant)得到保证,并从而使程序接口得到进一步的明确。

有两个敌对的学派,分别叫做Defensive   Programming(创始人Barbara   Liskov),和Design   by   Contract(创始人Bertrand   Meyer)。 
  
前者认为在每一个函数中需要加入尽可能多的条件检查,以确保这个函数是正常工作的。后者认为,需要为每一个函数精确指明调用者(Client   客户端)需要满足的条件,以及函数的实现本身( Contractor   承包商)需要满足的条件,就可以了。 
  
换言之,就是针对每一个方法规定一个初始条件,一个末态条件。初始条件是客户端需要满足的,末态条件是承包商需要满足的。这两个条件和在一起,就叫做合约。 

就如同一个工程合约一样,工程的客户需要提供和约上的条件,比如资金,地皮,等等,承包商则按照约定施工,最后通过工程验收。如果客户没有提供合约上面制定的条件,就是客户违约,承包商无需进行施工。相反,如果客户提供了合适的条件,而承包商不能建造工程并通过验收的话,就是承包商违约,需要追究承包商的责任。 
在这里,调用函数者就是客户端,它通过提供函数必需的参数调用此函数。如果客户端提供的参数是不合适的,函数不必进行运算,只需给出异常即可。 
  
相反,如果客户确实提供了必要的参数,而函数的实现无法给出满足末态条件的结果,函数的实现就是有问题的,需要修改。 
  
每一个函数的初始条件和末态条件加在一起,就是合约(Contract)。这种从合约出发进行设计的方法论,就叫做Design   by   Contract。

你可能感兴趣的:(编程,工作)