`
javatar
  • 浏览: 1705487 次
  • 性别: Icon_minigender_1
  • 来自: 杭州699号
社区版块
存档分类
最新评论

契约设计的一些想法

 
阅读更多
契约设计由来已久,各语言的支持方式与级别不尽相同,
契约元素包括:
前验条件(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) {
  ...
}
泛型一定程度上减少了类型定义的烦琐。
分享到:
评论

相关推荐

    心理契约量表中文版.doc

    总体来看,心理契约量表中文版不仅帮助组织评估员工对公司的看法,而且揭示了潜在的员工不满和组织问题。这个量表的出现对于中国职场文化背景下的研究和实践具有特别的意义。由于中国文化背景中强调集体主义和长期...

    IDEO_设计改变一切

    - IDEO将设计思考作为一种系统化的创新方法,通过培训和实践帮助企业建立创新组合,改造组织,形成适应新社会契约的组织结构。 - IDEO的项目案例和创新方法论被广泛传播,对全球的创新和设计领域产生了深远影响。 ...

    中学生情绪管理团体活动设计.doc

    这些活动的设计基于心理学领域的理性情绪疗法(Rational Emotive Therapy, RET),该疗法由心理学家艾利斯(Albert Ellis)提出,强调不合理的想法是情绪困扰的根源。RET的目的是通过辨识和挑战那些非理性的思维方式...

    Scala程序设计(第2版)

    23.5 契约式设计带来更好的设计 446 23.6 帕特农神庙架构 448 23.7 本章回顾与下一章提要 453 第24章 元编程:宏与反射 454 24.1 用于理解类型的工具 455 24.2 运行时反射 455 24.2.1 类型反射 ...

    班触:学习计划好使用对象和合同Touch of Class: Learning to Program Well with Objects and Contracts

    面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件,而契约式设计(Design by Contract, DbC)是一种软件开发方法,它要求开发者明确每个部分(对象、方法)的“契约”,即输入输出的期望条件。...

    独立董事独立性丶关联激励与行为均衡.pdf

    独立董事必须保持独立性,这与激励契约设计产生了冲突。过低的薪酬可能削弱其工作积极性,而过高的薪酬可能导致独立董事过于依赖公司,影响其独立性,形成所谓的“激励悖论”。 【独立性与激励的内在矛盾分析】 ...

    AVALON框架

    这一框架的起源可以追溯到ApacheJServ项目,该项目的核心成员Stefano Mazzocchi及其团队在1999年初意识到,在ApacheJServ项目中使用的一些设计模式具有广泛的适用性,不仅限于该项目本身,还可以扩展应用于构建...

    高效程序员的10个习惯

    - **促进建设性对话**:创建一个开放、包容的环境,让大家能够自由地分享想法而不担心被攻击。 #### 二、跟踪变化 在项目开发的过程中,需求和技术环境常常发生变化。有效跟踪这些变化对于保持项目的顺利进行至关...

    Real World Windows 8 Development

    本书从基础讲起,通过实践的方式详细讲解了Windows 8应用开发的各个方面,包括界面设计、用户交互、数据存储、应用导航、系统契约等,并且提供了大量的实例和技巧帮助开发者打造符合最新标准的现代应用程序。...

    高中历史之教学教研历史学科核心素养佳题共欣赏疑义相与析_评2016年全国卷_选择题_李林川素材pdf

    3. **学术观点与教材知识**:文章提及不同学者对历史的理解,如卢梭的社会契约论、伽达默尔的诠释学理论,以及钟启泉关于核心素养课程发展的讨论,这些都反映了历史学科的学术动态。同时,对高考题目的学术依据进行...

    东财20秋《绩效管理B》单元作业三答卷.docx

    以上内容涵盖了绩效管理中的多个核心知识点,包括平衡计分卡的应用、360度考评方法、学习成长绩效指标的构建、标杆管理的不同类型、绩效评价主体的组合方式、绩效契约的重要性、KPI设计的原则、关键绩效指标的设定...

    员工激励与薪酬福利制度.ppt

    薪酬不仅仅是企业对员工付出劳动的回报,更是企业与员工之间的一种契约关系,体现了员工的知识、技能、经验和工作表现的市场价值。 薪酬设计的核心理念在于区分成本与投资。传统的看法可能将薪酬视为企业的成本,但...

    企业知识型员工的激励研究报告.doc

    研究主要集中在以下几个方面:组织行为对知识型员工的激励因素分析,探讨心理契约在激励中的作用,研究知识型员工的价值观导向,薪酬制度设计,以及从人生心理发展周期角度探讨激励策略。然而,中国文化和环境与西方...

    初三减压团体训练方案.doc

    承诺保护彼此的隐私,不仅体现了对个人尊严的尊重,更营造了一个安全、开放的交流环境,让学生们能够卸下防备,真实地表达自己的想法和感受。 为了打破团队初期的陌生感和隔阂,活动设计了“大风吹”这一热身游戏。...

    企业知识型员工流失风险管理.docx

    给人一种琢磨不透的感觉,时间一长,这种感觉很简单让学问型员工产生一种对企业命运和自身仍呆在该企业的前程担忧,从而很简单萌发到有明确的战略规划、清楚的发展目标和更好发展前景的企业去的想法。 (5)员工...

    apprenticeships.me:开发和设计学徒救助! :wrench:

    早在文艺复兴时期,非常普遍,并成为学徒与船长之间的法律契约。 这是学徒开始学习其领域必不可少的技能并最终成为大师的一种方式。 尽管随着时间的流逝,正式的大学路线变得越来越流行,但是软件行业出现了一个...

    新时代大学英语Unitlesson New wordsPPT学习教案.pptx

    同时,教师还应引导学生掌握一些有效的词汇记忆技巧,如词根词缀记忆法、联想记忆法等,帮助学生快速记忆和复习所学的词汇,从而达到事半功倍的效果。 综上所述,【新时代大学英语Unit lesson New words】的学习...

Global site tag (gtag.js) - Google Analytics