契约设计由来已久,各语言的支持方式与级别不尽相同,
契约元素包括:
前验条件(precondition)
后验条件(postcondition)
不变式(invariant)
这里只考虑前验条件的:
需求定义(require)
保证合法性(ensure)
函数的签名算是需求的最基本定义了。
对于合法性的保证,一般采用断言。
Java在1.4以前,大家只能靠简单的函数封装实现。
如,在函数开头:
if (param < 0)
throw new IllegalArgumentException("param < 0");
或进行简单封装:
Assert.notLessThan(param, 0);
从1.4开始,Java对断言提供语言级别的支持。加入了关键字assert。
如:
assert(param < 0);
因为是语言级别的支持,断言可在生产环境中被擦拭掉,以保证性能。
废话就说到这了,我想说的是,
是否应该在需求定义时就尽可能的保证合法性。
也就是在函数签名上保证合法性,而不是断言。
断言信息需要通过文档才能被调用者获悉。
而函数签名能够更明确。
如:
setSize(Integer size) {
assert(size > 0);
...
}
改为:
setSize(PositiveInteger size) {
...
}
当然,这样会多出很多类型定义。
而这些语言是否应给予更多便利支持?
泛型就是一种方式:
setUsers(Map users) {
for(Iterator iterator = users.entrySet.iterator(); iterator.hasNext();) {
Map.Entry entry = (Map.Entry)iterator.next();
assert(entry.getKey() instanceof String);
assert(entry.getValue() instanceof User);
}
...
}
这个断言是很费时的。
而用泛型:
setUsers(Map<String, User> users) {
...
}
泛型一定程度上减少了类型定义的烦琐。
分享到:
相关推荐
为了解决供应链合作中信息成本较大情况下实现信息共享激励的供应链弹性契约设计问题,采用经济分析及数学建模方法,研究了供应链合作双方在信息共享条件与信息不共享条件下,确定了弹性契约参数对双方运作绩效的改进。...
论文研究-风险投资中激励契约设计与学习机制研究.pdf, 控制权转移激励是委托代理激励契约的重要元素,但目前对动态学习机制下委托代理激励契约机制设计还缺乏深入研究....
论文研究-信息安全外包激励契约设计.pdf, 研究了信息安全外包背景下委托公司如何通过激励措施来协调管理安全服务提供商(MSSP)的努力水平从而有效地控制信息安全风险的...
Design by Contract (DbC) 契约式设计 方法学层面的思想 Eiffel语言的直接支持 Bertrand Meyer:DbC是构建面向对象软件系统方法的核心! James McKim:“只要你会写程序,你就会写契约”
演示了WCF服务怎样进行服务契约的设计,已经怎样生成客户端代理类和服务契约的重载等
论文研究-基于自执行契约设计的供应链动态博弈协调.pdf, 提出了供应链一般序贯博弈中旁支付自执行契约(SSEC)设计方法,以解决已有关于旁支付契约供应链协调的研究中...
WCF契约设计 代码、工程 还有视频 介绍了WCF部署的一些经典场景 WCF的一些核心概念 创建,配置以及调用WCF 服务等等
.NET4.0契约式设计,MSDN官方推荐学习视频,很好的资料。
概说511工程设计契约之意义工程设计契约者,乃.pptx
(微信小程序毕业设计)小契约(交友互动小程序)(源码+截图)(微信小程序毕业设计)小契约(交友互动小程序)(源码+截图)(微信小程序毕业设计)小契约(交友互动小程序)(源码+截图)(微信小程序毕业设计)小契约(交友...
构建WCF面向服务的应用程序系列课程:WCF契约设计
论文研究-不对称信息下供应链最优激励契约的设计.pdf,
(微信小程序毕业设计)小契约(交友互动小程序)(附源码+截图).zip(微信小程序毕业设计)小契约(交友互动小程序)(附源码+截图).zip(微信小程序毕业设计)小契约(交友互动小程序)(附源码+截图).zip(微信小程序毕业...
论文研究-基于 CVaR 的“公司 农户”型订单农业供应链协调契约机制.pdf, 基于订单农业特点,构建了由风险中性的公司与风险规避的农户组成的“公司 农户”型订单农业供应...
构建WCF面向服务的应用程序系列课程(2):WCF契约设计
在本次的课程中,我们将向大家介绍设计服务契约,数据契约和消息契约的实用 指导,向大家展示什么时候,以及如何使用它们。同时,在本次课程中您将学习到如何处理复杂类型的序列化,如何使用契约,以及在哪里处理...
(2):WCF契约设计-WCF课件-《构建WCF面向服务的应用程序》
泛微契约锁 官方操作文档
论文研究-会计信息与经理人激励契约设计.pdf,
冒险契约易语言辅助