书籍详情
Design by Contract原则与实践
作者:[美]Richard Mitchell,[美]Jim Mckim著;孟岩译
出版社:人民邮电出版社
出版时间:2003-01-01
ISBN:9787115115706
定价:¥33.00
购买这本书可以去
内容简介
本书凝聚作者多年的实践和教学经验,通过Eiffel和Java的实例阐述了DBC的主要原则,并教读者如何实践这些原则,撰写优质高效的契约。译者孟岩还特别撰写了《契约式设计的理解及其在C/C++中的应用》作为本书的附录,讨论了DBC在C/C++语言中的应用。什么是DbC?DesignbyContract(DBC,契约式设计)是面向对象软件大师BertrandMeyer对软件构造方法的一个重大贡献,无论是在形式化的数学证明中,还是在实践运用中,都被证明是大幅改善软件工程质量的有效手段。该方法在Eiffel编程语言中获得直接支持,并且可以通过辅助工具在Java语言中运用。国内第一本系统阐述“契约式设计”思想和方法的译作深刻理解和充分发挥契约在面向对象软件设计中的作用本书特色:通过Eiffel、Java实例透彻分析DbC思想方法。引入DbC六大原则和六大准则,指导你的应用实践。精辟分析DbC在C/C++语言中的应用。本书通过Eiffel和Java实例,阐述了“契约式设计(DesignbyContract)”的思想原则和应用方法,帮助读者掌握如何在面向对象软件设计过程中应用契约。全书分为12章。通过实例探讨了DbC的基本概念,引入了DbC的六大原则和六大准则,展示了六大原则的应用,分析了DbC和继承的关系,介绍了框定规则、DbC的好处和限制、观察者框架中的契约和先验条件检验;最后给出了一个Java范例,并探讨了契约在分析模型中的应用。附录部分是译者专门为C/C++程序员撰写的,提供用C/C++进行契约式设计的指导和建议。本书适合面向对象软件工程师和面向对象语言程序员阅读。第一章试读第8章精彩节选
作者简介
Richard Mitchell是InferData公司的高级顾问,专门从事面向对象分析和设计。他曾经担任英国Brighton大学计算机系教授,长期从事面向对象技术的研究和教学。Jim Mckim 是Rensselaer理工研究所工程与科学院教授兼院长,从事面向对象软件开发的教学和咨询已经有10年多时间。两位作者都曾经在Journal of Object-Oriented Programming和IEEE Comprting发表过很多关于:“契约式设计”和相关话题的文章。
目录
第1章 契约式设计初案
1.1 概述
1.2 顾客管理器范例
1.3 一些问题
1.4 CUSTOMER_MANAGER的契约
1.5 临时总结
1.6 运行时检测
1.7 可靠的文档
1.8 小结
1.9 一言以蔽之
1.10 练习
第2章 契约式设计的基本原则
2.1 关于本章
2.2 栈
2.3 区分命令和查询
2.4 命名规范
2.5 区分基本查询和派生查询
2.6 说明命令对基本查询的影响
2.7 用不变式确定恒定特性
2.8 类及其契约
2.9 基本查询是栈的一个概念模型
2.10 六大原则
2.11 练习
第3章 运用六大原则
3.1 关于本章
3.2 字典
3.3 特性分离与分类
3.4 后验条件
3.5 先验条件
3.6 不变式
3.7 关于字典的完整的契约级概括
3.8 小结
3.9 练习
第4章 契约的构造支持类——不可变列表
4.1 关于本章
4.2 支持线性结构
4.3 契约只涉及表达式
4.4 不可变列表
4.5 不可变列表的契约
4.6 小结
4.7 练习
第5章 六大原则在QUEUE设计中的运用
5.1 关于本章
5.2 队列
5.3 remove特性的契约
5.4 将count作为一个派生特性
5.5 initialize特性的契约
5.6 head特性的契约
5.7 put特性的契约
5.8 更多派生查询
5.9 小结
5.10 练习
第6章 契约式设计与继承
6.1 关于本章
6.2 超类和子类
6.3 重新定义契约
6.4 不变式和继承
6.5 以被确保的后验条件定义超类
6.6 两种继承
6.7 小结
6.8 练习
第7章 框定规则
7.1 关于本章
7.2 变化规格和框定规则
7.3 使用不可变列表为put撰写框定规则
7.4 使用“forall”为put撰写框定规则
7.5 框定规则的类别
7.6 练习
7.7 关于预处理器的补充说明
第8章 契约式设计的收益
8.1 关于本章
8.2 几种优点
8.3 更优秀的设计
8.4 提高可靠性
8.5 更出色的文档
8.6 简化调试
8.7 支持复用
8.8 契约式设计与防御性编程
8.9 契约的一些开销和限制
第9章 观察者框架中的契约
9.1 关于本章
9.2 观察者框架
9.3 不可变集合
9.4 观察者的系缚和解缚
9.5 通知(一个观察者)
9.6 通知(多个观察者)
9.7 性能问题
9.8 框定规则
9.9 保密
9.10 练习
第10章 观察者框架中的契约
10.1 关于本章
10.2 例子
10.3 满足并测试称验条件
10.4 测试与检验
10.5 一个简单的计数器类
10.6 从用户角度看示例程序
10.7 程序的内部结构
10.8 程序的招待情况
10.9 一个次要的细节
10.10 小结
10.11 练习
第11章 Java范例
11.1 关于本章
11.2 为什么选择Java
11.3 队列
11.4 字典
11.5 没有iContract的Java
11.6 测试先验条件
11.7 练习
第12章 契约式分析
12.1 关于本章
12.2 一个用例
12.3 分析模型中的契约
12.4 withdrawCash用例的契约
12.5 从分析到设计
12.6 问题域和系统模型
12.7 对象限制语言
12.8 小结
参考资料
契约式设计的理解及其在C/C++语言中的运用
什么是契约——Eiffel的观点
契约思想的一个反面案例
索引
1.1 概述
1.2 顾客管理器范例
1.3 一些问题
1.4 CUSTOMER_MANAGER的契约
1.5 临时总结
1.6 运行时检测
1.7 可靠的文档
1.8 小结
1.9 一言以蔽之
1.10 练习
第2章 契约式设计的基本原则
2.1 关于本章
2.2 栈
2.3 区分命令和查询
2.4 命名规范
2.5 区分基本查询和派生查询
2.6 说明命令对基本查询的影响
2.7 用不变式确定恒定特性
2.8 类及其契约
2.9 基本查询是栈的一个概念模型
2.10 六大原则
2.11 练习
第3章 运用六大原则
3.1 关于本章
3.2 字典
3.3 特性分离与分类
3.4 后验条件
3.5 先验条件
3.6 不变式
3.7 关于字典的完整的契约级概括
3.8 小结
3.9 练习
第4章 契约的构造支持类——不可变列表
4.1 关于本章
4.2 支持线性结构
4.3 契约只涉及表达式
4.4 不可变列表
4.5 不可变列表的契约
4.6 小结
4.7 练习
第5章 六大原则在QUEUE设计中的运用
5.1 关于本章
5.2 队列
5.3 remove特性的契约
5.4 将count作为一个派生特性
5.5 initialize特性的契约
5.6 head特性的契约
5.7 put特性的契约
5.8 更多派生查询
5.9 小结
5.10 练习
第6章 契约式设计与继承
6.1 关于本章
6.2 超类和子类
6.3 重新定义契约
6.4 不变式和继承
6.5 以被确保的后验条件定义超类
6.6 两种继承
6.7 小结
6.8 练习
第7章 框定规则
7.1 关于本章
7.2 变化规格和框定规则
7.3 使用不可变列表为put撰写框定规则
7.4 使用“forall”为put撰写框定规则
7.5 框定规则的类别
7.6 练习
7.7 关于预处理器的补充说明
第8章 契约式设计的收益
8.1 关于本章
8.2 几种优点
8.3 更优秀的设计
8.4 提高可靠性
8.5 更出色的文档
8.6 简化调试
8.7 支持复用
8.8 契约式设计与防御性编程
8.9 契约的一些开销和限制
第9章 观察者框架中的契约
9.1 关于本章
9.2 观察者框架
9.3 不可变集合
9.4 观察者的系缚和解缚
9.5 通知(一个观察者)
9.6 通知(多个观察者)
9.7 性能问题
9.8 框定规则
9.9 保密
9.10 练习
第10章 观察者框架中的契约
10.1 关于本章
10.2 例子
10.3 满足并测试称验条件
10.4 测试与检验
10.5 一个简单的计数器类
10.6 从用户角度看示例程序
10.7 程序的内部结构
10.8 程序的招待情况
10.9 一个次要的细节
10.10 小结
10.11 练习
第11章 Java范例
11.1 关于本章
11.2 为什么选择Java
11.3 队列
11.4 字典
11.5 没有iContract的Java
11.6 测试先验条件
11.7 练习
第12章 契约式分析
12.1 关于本章
12.2 一个用例
12.3 分析模型中的契约
12.4 withdrawCash用例的契约
12.5 从分析到设计
12.6 问题域和系统模型
12.7 对象限制语言
12.8 小结
参考资料
契约式设计的理解及其在C/C++语言中的运用
什么是契约——Eiffel的观点
契约思想的一个反面案例
索引
猜您喜欢