`

C# 4.0中的契约式编程

阅读更多
一切从质量谈起

许多人在考虑软件开发的新方法和新工具时,都是把提高生产率或产量 (productivity)作为主要的期望目标。但是产量不仅直接受益于新的方法途径,也受益于对质量的重视。

软件质量的一个主要部分是可靠性(reliability):系统要能够完成所规定的任务( 正确性 -- correctness),也要能够妥善处理异常情况(稳固性 -- robustness)。

一言蔽之,可靠性就是系统没有错误故障。软件开发不管用什么方法,一般都对可靠性有很高的要求。尤其在OO方法中,可靠性更为重要,这是因为OO方法中复用性(reusability)扮演着特殊的角色:复用的软件部件的正确性必须高于一般的软件,否则复用就是空谈。

已知的一些提高软件质量的方法:

  • Static typing(静态类型)能够帮助及早抓住源码中那些不一致的部分,从而避免使其成为故障之源。
  • Garbage collection(垃圾收集),可以减少进行内存管理时容易犯的错误。
  • 复用:通过复用由信誉良好的机构开发或者反复验证的软件部件,从而提高软件的质量。


但还有更多事情需要我们自己处理,比如说错误。错误处理一直是软件开发者所面临的最大困难之一。Bjarne Stroustrup在谈到其原因时说道,能够探察错误的一方不知道如何处理错误,知道如何处理错误的一方没有能力探察错误,而直接采用防御性代码来解决,会使得程序的正常结构被打乱,从而带来更多的错误。

C++、Java、C#等其他语言对错误处理问题的途径是异常机制。这种机制在正常的程序执行流之外开辟了专门的信道,专门用来在不同程序模块之间报告错误,解决上述错误探察与处理策略分散的矛盾。

然而,有了异常处理机制后,开发者开始有一种倾向,就是使用异常来处理所有的错误。结果是有相当多的人,都认为异常是错误处理的通用解决方案。《The Pragmatic Programmer》在讲到错误处理时,有一句箴言:
  
    “只在真正异常的状况下使用异常。”

    书中举了一个例子,如果你需要当前目录下的一个名叫“app.dat”的文件,而这个文件不存在,这不叫异常状况,这是你应该预料得到的、并且显式处理的情况。而如果你要到Windows目录下寻找user.dat文件,却没找到,那才叫做异常状况——因为每一个正常运行的Windows系统都应该有这个文件。

    究竟应该如何看待错误?怎样才能最好地错误处理?

    在这两个问题上,我们所见到的大部分语言都没有给出很好的回答。C秉承一贯风格,把所有的东西推给开发者考虑;Ada发明了异常,但是又为异常所累(知道阿里亚纳5火箭的处女航为什么失败吗?);C++企图将Ada的异常机制融合进自己的体系中,结果异常成了C++中最难以处理的东西;Java和4.0之前的C#显然都没有耐心重新考虑错误处理这桩事,而只是简单的将C++的异常机制完善化了事。

权利与义务

一般的观点,在软件体系中,程序库和组件库被类比为server,而使用程序库、组件库的程序被视为client。我们往往对库程序和组件的质量提出很严苛的要求,强迫它们承担本不应该由它们来承担的责任,而过分纵容client一方,甚至要求库程序去处理明显由于client错误造成的困境。



在《面向对象软件构造》一书中讲到:“对于一个大型系统来说,光保证它的各组成部分的质量是不够的。而最有价值的是确保在任何两个组成部分的交接处设计明晰的彼此义务和权利规范,即所谓契约。”

这不是说仅仅定义各组成部分的接口、参数顺序等等就可以了,还必须准确定义各组成部分的相互通讯方式,以及通讯需要的条件。这就是契约式设计技术所包含的内容了。


分享到:
评论

相关推荐

    LINQ 编程(C# 4.0)

    LINQ 编程(C# 4.0)LINQ 编程(C# 4.0)LINQ 编程(C# 4.0)LINQ 编程(C# 4.0)LINQ 编程(C# 4.0)LINQ 编程(C# 4.0)LINQ 编程(C# 4.0)LINQ 编程(C# 4.0)LINQ 编程(C# 4.0)LINQ 编程(C# 4.0)LINQ 编程...

    C#4.0语言规范 C#4.0语言规范C#4.0语言规范

    C#4.0语言规范C#4.0语言规范C#4.0语言规范C#4.0语言规范很好用

    C#4.0权威指南

    《C# 4.0权威指南》由国内资深微软技术专家亲自执笔,微软技术开发者社区和技术专家联袂推荐。内容新颖,基于最新的C# 4.0、net framework 4和visual studio 2010;写作方式有创新,用图解的方式对C#进行了完美的...

    C# 4.0 的4个新特性

    C# 4.0 的4个新特性C# 4.0 的4个新特性C# 4.0 的4个新特性C# 4.0 的4个新特性

    《C#4.0捷径教程》配套源码

    此为C#4.0捷径教程 一书的配套源码 好评如潮的C# 4.0实战图书 汲取.NET技术精髓的捷径 专章讲述习惯用法与设计模式 本书是经典教程的全面升级,通过许多精彩的示例介绍了C# 语言的每个新特性,深入浅出地讲解了C#...

    C#4.0权威指南.pd

    语法篇对C#的语法进行了系统而全面的讲解,包括标识符和关键字、变量和常量、类型以及类型转换、表达式和运算符、语句、方法、类、继承、多态、接口、结构、枚举、委托、事件、泛型、数组、集合、字符串和正则表达式...

    C#4.0本质论

    Essential C# 4.0已经是第三版,从发布以来受到广大.Net开发人员的关注。该书详细介绍C#在.Net Framework 4.0中的应用,介绍C# 4.0新特征,适合.Net开发人员作为参考书使用。

    [超全]C# 2010(C# 4.0)VS2010最新学习资料

    Professional C# 4.0 and .NET 4 (C#高级编程 第7版 英文版) Visual C# 2010 入门经典(Beginning Visual C# 2010) C#语言规范 4.0 官方中文版 Word O'Reilly C# 4.0 Pocket Reference, 3rd Edition O'Reilly ...

    C# 4.0 Unleashed 2011

    C# 4.0 Unleashed 2011

    C#4.0权威指南pdf

    易懂、易学、权威的C#教程 一部用图演绎C#4.0的经典,广度、深度和实践性完美结合 资深微软专家亲自执笔,微软开发者社区和技术专家联袂推荐

    C#4.0的一些新特性

    C#4.0的一些新特性 C#4.0的一些新特性

    AW - Essential C# 4.0, 3rd Edition Mar 2010+完美版

    Essential C# 4.0 完美版 附件里有两个pdf,内容完全一样,似乎清晰度不一样 984 pages Publisher: Addison-Wesley Professional; 3 edition (March 20, 2010) Language: English ISBN-10: 0321694694 ISBN-13:...

    全面揭秘 c# 4.0

    c#4.0揭秘 CSharp_4_0_Unleashed

    C# 4.0权威指南-姜晓东

    《C#4.0指南》由[0国0]内资深微软技术专家亲自执笔,微软技术开发者社区和技术专家联袂推荐。内容新颖,基于新的C# 4.0、net framework 4和visual studio 2010;写作方式有创新,用图解的方式对C#进行了完美的演绎;...

    C# 4.0 in a Nutshell

    C# 4.0 in a Nutshell

    【好书推荐】C# 4.0 in a Nutshell, 4th Edition

    对概念和例子独特地组织起来,在这个第4版里,涵盖了新版 C# 的深层次内容,如并联编程、代码契约、动态编程、安全性和对 COM 的相互操作等。你也可以找到最新的 LINQ 信息,包括 LINQ to SQL 和 Entity Framework ...

    C#4.0新特性中文帮助文档

    C#4.0新特性 C#4.0中文帮助文档 C#4.0

    [C#] C# 4.0 编程 第6版 (英文版)

    [奥莱理] C# 4.0 编程 第6版 (英文版) [奥莱理] Programming C# 4.0 6th Edition (E-Book) ☆ 图书概要:☆ With its support for dynamic programming, C# 4.0 continues to evolve as a versatile language on ...

    C# 4.0完全参考手册

    C# 4.0完全参考手册

    C# 4.0完全参考手册(C# 4.0:The Complete Reference) PDF扫描版

    编程人员往往喜欢精益求精,他们总是不断地想方设法提高...C#就是这样一种编程语言。 目录: 第Ⅰ部分 C#语言 第1章 C#的起源 第2章 C#概述 第3章 数据类型、字面量和变量 第4章 运算符 第Ⅱ部分 C#类库研究 附录

Global site tag (gtag.js) - Google Analytics