副标题: 原则、模式与实践
作者: (美)Robert C·Martin 邓辉 孟岩 审
译者: 邓辉
出版社: 清华大学出版社
出版年: 2003-09-01
页数: 476
定价: 59.00元
ISBN: 9787302071976
作者: (美)Robert C·Martin 邓辉 孟岩 审
译者: 邓辉
出版社: 清华大学出版社
出版年: 2003-09-01
页数: 476
定价: 59.00元
ISBN: 9787302071976
内容简介 · · · · · ·
《敏捷软件开发:原则模式与实践》由享誉全球的软件开发专家和软件工程大师Robert C.Martin将向您展示如何解决软件开发人员、项目经理及软件项目领导们所面临的最棘手的问题。这本综合性、实用性的敏捷开发和极限编程方面的指南,是由敏捷开发的创始人之一所撰写的。1.讲述在预算和实践要求下,软件开发人员和项目经理如何使用敏捷开发完成项目;2.使用真实案例讲解如何用极限编程来设计、测试、重构和结对编程;3.包含了极具价值的可多次使用的C++和JAVA源代码;4.重点讲述了如何使用UML和设计模式解决面向客户系统的问题。
目录 · · · · · ·
第Ⅰ部分 敏捷开发
第一章 敏捷实践
1.1 敏捷联盟
1.2 原则
1.3 结论
参考文献
第二章 极限编程概述
2.1 极限编程实践
2.2 结论
参考文献
第三章 计划
3.1 初始探索
3.2 发布计划
3.3 迭代计划
3.4 任务计划
3.5 迭代
3.6 结论
参考文献
第四章 测试
4.1 测试驱动的开发方法
4.2 验收测试
4.3 结论
参考文献
第五章 重构
5.1 素数产生程序一个简单的重构示例
5.2 结论
参考文献
第六章 一次编程实践
6.1 保龄球比赛
6.2 结论
第Ⅱ部分 敏捷设计
第七章 什么是敏捷设计
7.1 软件出了什么错
7.2 设计的臭味——腐化软件的气味
7.3 “Copy”程序
7.4 保持尽可能好的设计
7.5 结论
参考文献
第八章 单一责任原则(SRP)
8.1 单一职责原则(SRP)
8.2 结论
参考文献
第九章 开放—封闭原则(OCP)
9.1 开放—封闭原则(OCP)
9.2 描述
9.3 关键是抽象
9.4 结论
参考文献
第十章 Liskov替换原则(LSP)
10.1 Liskov替换原则(LSP)
10.2 一个违反LSP的简单例子
10.3 正方形和矩形,更微妙的违规
10.4 一个实际的例子
10.5 用提取公共部分的方法代替继承
10.6 启发式规则和习惯用法
10.7 结论
参考文献
第十一章 依赖倒置原则(DIP)
11.1 依赖倒置原则(DIP)
11.2 层次化
11.3 一个简单的例子
11.4 熔炉示例
11.5 结论
参考文献
第十二章 接口隔离原则(ISP)
12.1 接口污染
12.2 分离客户就是分离接口
12.3 接口隔离原则(ISP)
12.4 类接口与对象接口
12.5 ATM用户界面的例子
12.6 结论
参考文献
第Ⅲ部分 薪水支付案例研究
第十三章 COMMAND模式和ACTIVE OBJECT模式
第十四章 TEMPLATE METHOD模式和STRATEGY模式:继承与委托
第十五章 FACADE模式和MEDIATOR模式
第十六章 SINGLETON模式和MONOSTATE模式
第十七章 NULL OBJECT模式
第十八章 薪水支付案例研究:第一次迭代开始
第十九章 薪水支付案例研究:实现
第Ⅳ部分 打包薪水支付系统
第二十章 包的设计原则
第二十一章 FACTORY模式
第二十二章 薪水支付案例研究(第2部分)
第Ⅴ部分 气象站案例研究
第二十三章 COMPOSITE模式
第二十四章 OBSERVER模式——回归为模式
第二十五章 ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式
第二十六章 PROXY模式和STAIRWAY TO HEAVEN模式:管理第三方API
第二十七章 案例研究:气象站
第Ⅵ部分 ETS案例研究
第二十八章 VISITOR模式
第二十九章 STATE模式
第三十章 ETS框架
附录
附录A UML表示法Ⅰ:CGI示例
附录B UML表示法Ⅱ:统计多路复用器
附录C 两个公司的讽刺小品
附录D 源代码就是设计
索引
· · · · · · (收起)
第一章 敏捷实践
1.1 敏捷联盟
1.2 原则
1.3 结论
参考文献
第二章 极限编程概述
2.1 极限编程实践
2.2 结论
参考文献
第三章 计划
3.1 初始探索
3.2 发布计划
3.3 迭代计划
3.4 任务计划
3.5 迭代
3.6 结论
参考文献
第四章 测试
4.1 测试驱动的开发方法
4.2 验收测试
4.3 结论
参考文献
第五章 重构
5.1 素数产生程序一个简单的重构示例
5.2 结论
参考文献
第六章 一次编程实践
6.1 保龄球比赛
6.2 结论
第Ⅱ部分 敏捷设计
第七章 什么是敏捷设计
7.1 软件出了什么错
7.2 设计的臭味——腐化软件的气味
7.3 “Copy”程序
7.4 保持尽可能好的设计
7.5 结论
参考文献
第八章 单一责任原则(SRP)
8.1 单一职责原则(SRP)
8.2 结论
参考文献
第九章 开放—封闭原则(OCP)
9.1 开放—封闭原则(OCP)
9.2 描述
9.3 关键是抽象
9.4 结论
参考文献
第十章 Liskov替换原则(LSP)
10.1 Liskov替换原则(LSP)
10.2 一个违反LSP的简单例子
10.3 正方形和矩形,更微妙的违规
10.4 一个实际的例子
10.5 用提取公共部分的方法代替继承
10.6 启发式规则和习惯用法
10.7 结论
参考文献
第十一章 依赖倒置原则(DIP)
11.1 依赖倒置原则(DIP)
11.2 层次化
11.3 一个简单的例子
11.4 熔炉示例
11.5 结论
参考文献
第十二章 接口隔离原则(ISP)
12.1 接口污染
12.2 分离客户就是分离接口
12.3 接口隔离原则(ISP)
12.4 类接口与对象接口
12.5 ATM用户界面的例子
12.6 结论
参考文献
第Ⅲ部分 薪水支付案例研究
第十三章 COMMAND模式和ACTIVE OBJECT模式
第十四章 TEMPLATE METHOD模式和STRATEGY模式:继承与委托
第十五章 FACADE模式和MEDIATOR模式
第十六章 SINGLETON模式和MONOSTATE模式
第十七章 NULL OBJECT模式
第十八章 薪水支付案例研究:第一次迭代开始
第十九章 薪水支付案例研究:实现
第Ⅳ部分 打包薪水支付系统
第二十章 包的设计原则
第二十一章 FACTORY模式
第二十二章 薪水支付案例研究(第2部分)
第Ⅴ部分 气象站案例研究
第二十三章 COMPOSITE模式
第二十四章 OBSERVER模式——回归为模式
第二十五章 ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式
第二十六章 PROXY模式和STAIRWAY TO HEAVEN模式:管理第三方API
第二十七章 案例研究:气象站
第Ⅵ部分 ETS案例研究
第二十八章 VISITOR模式
第二十九章 STATE模式
第三十章 ETS框架
附录
附录A UML表示法Ⅰ:CGI示例
附录B UML表示法Ⅱ:统计多路复用器
附录C 两个公司的讽刺小品
附录D 源代码就是设计
索引
· · · · · · (收起)
豆瓣成员常用的标签(共216个) · · · · · ·
喜欢读"敏捷软件开发"的人也喜欢 · · · · · ·
按有用程度 按页码先后 最新笔记
-
第三部分 薪水支付案例研究
Wuqifu (喜欢买书的软件工程师~)
Command模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。 命令模式就是把一些具体的命令封装成一些具体的类,这些类实现同一个接口或者是抽象类。把这些类组织到一起来统一执行,完成一个具体的业务流程。它的优点是:解耦了发送者与接收者之间的联系。发送者调用一个操作,接收者接受请求执行具体类相应的动作。因为使用Command模式解耦,发送者无... (更多)Command模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。命令模式就是把一些具体的命令封装成一些具体的类,这些类实现同一个接口或者是抽象类。把这些类组织到一起来统一执行,完成一个具体的业务流程。它的优点是:解耦了发送者与接收者之间的联系。发送者调用一个操作,接收者接受请求执行具体类相应的动作。因为使用Command模式解耦,发送者无需知道接受者任何接口。比如说,对文件进行操作,如打开、关闭、打印。正常的操作就是用户点击“打开”按纽,就执行打开命令,在按纽的单击事件中写个方法就可以了。但如要应用Command模式,就要把其抽象出接口,把这三个操作封装成单独的类。Template Method模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。Template Method模式使得子类可以不改变算法的结构即可重新定义该算法的某些特定步骤。(继承)Strategy模式:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。Strategy模式使得算法可以独立于使用它们的客户而变化。(委托)Facade模式:为子系统中的一组接口提供一个一致的界面。Facade模式定义了一个高层接口,这个高层接口使得这一子系统更加容易使用。Mediator模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。Singleton模式:保证一个类仅有一个实例,并提供一个全局访问点。通过使用私有构造函数,静态变量和一个静态访问方法来实现。MonoState模式:构造函数声明为public,而将类中所有的字段声明为static。MonoState并不限制创建对象的个数,但是它的状态却只有一个状态。NULL Object模式:提供一个给定类型的NULL Object对象,用以代替这个对象为null的情况,简化代码。 (收起)2011-12-23 21:34:19 回应
-
第二部分 敏捷设计
Wuqifu (喜欢买书的软件工程师~)
腐化的设计 僵化性(Rigidity):难以对系统进行修改 脆弱性(Fragility):改动一个地方,程序许多地方出现问题 牢固性(Immobility):很难解开系统的纠结 粘滞性(Viscosity):做错误的事情容易,做正确的事情困难 不必要的复杂性(Needless Complexity):过度设计,为过多的可能性做准备 不必要的重复(Needless Repetition):重复的代码,开发人员忽视的抽象 晦涩性(Opacity):难以阅读、理解,没有用清晰、富有.. (更多)腐化的设计僵化性(Rigidity):难以对系统进行修改脆弱性(Fragility):改动一个地方,程序许多地方出现问题牢固性(Immobility):很难解开系统的纠结粘滞性(Viscosity):做错误的事情容易,做正确的事情困难不必要的复杂性(Needless Complexity):过度设计,为过多的可能性做准备不必要的重复(Needless Repetition):重复的代码,开发人员忽视的抽象晦涩性(Opacity):难以阅读、理解,没有用清晰、富有表达力的代码来体现意图需求总是处在持续变动中,加速了代码腐化运用抽象来封装变化Open-Closed PrincipleOOP设计原则:一,SRP 单一职责原则(Single Responsibility Princip)就一个类而言,应该仅有一个引起它变化的原因高内聚、低耦合Facade模式、PROXY模式二,OCP 开放-封闭原则(Open-Closed Principle)软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改对扩展开放(Open for extension):对模块进行扩展,使其满足那些改变的新行为对更改封闭(Closed for modification):不必改动模块的源代码或二进制文件抽象、多态Strategy模式、Template Method模式,三,LSP Liskov替换原则(Liskov Substitution Principle)子类型必须能够替换掉它们的基类型IS-A继承从使用者角度来审视API契约式设计(Design By Contract):通过为每个方法声明前置条件和后置条件来指定契约LSP是使OCP成为可能的主要原则之一子类型的正确含义是“可替换的”四,DIP 依赖倒置原则(Depend Invert Princip)高层模块不应该依赖于低层模块,二者都应该依赖于抽象抽象不应该依赖于实现细节,实现细节应该依赖于抽象如果高层模块独立于低层模块,那么高层模块就可以非常容易地被重用。该原则是FrameWork设计的核心原则:依赖于抽象Don't call us,we will call you.低层模块实现了在高层模块中声明的接口,这些接口被高层模块调用把不稳定的具体类隐藏在抽象接口后面,可以隔离它们的不稳定性OOP设计倒置了依赖关系结构,使得细节和策略都依赖于抽象Template Method模式,Bridge模式五,ISP 接口隔离原则(Least Knowledge Principle)不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。客户程序看到的应该是多个具有内聚接口的抽象基类客户程序应该仅仅依赖于它们实际调用的方法Facade模式 (收起)2011-12-22 00:52:36 回应
-
第413页
最近一直在扩充UML知识,看UML自然就想去找点开发过程的书开眼,于是早前备下的《敏捷软件开发:原则、模式与实践》便得以不如废纸。 看到孟岩的代序,增了大量激情,由他的推荐我跳到413页UML的附录,开始学习,目前学习中。 最近几天一直在静下心来读书,希望能坚持。 (更多)最近一直在扩充UML知识,看UML自然就想去找点开发过程的书开眼,于是早前备下的《敏捷软件开发:原则、模式与实践》便得以不如废纸。看到孟岩的代序,增了大量激情,由他的推荐我跳到413页UML的附录,开始学习,目前学习中。最近几天一直在静下心来读书,希望能坚持。 (收起)2011-04-04 13:06:02 回应
-
第三部分 薪水支付案例研究
Wuqifu (喜欢买书的软件工程师~)
Command模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。 命令模式就是把一些具体的命令封装成一些具体的类,这些类实现同一个接口或者是抽象类。把这些类组织到一起来统一执行,完成一个具体的业务流程。它的优点是:解耦了发送者与接收者之间的联系。发送者调用一个操作,接收者接受请求执行具体类相应的动作。因为使用Command模式解耦,发送者无... (更多)Command模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。命令模式就是把一些具体的命令封装成一些具体的类,这些类实现同一个接口或者是抽象类。把这些类组织到一起来统一执行,完成一个具体的业务流程。它的优点是:解耦了发送者与接收者之间的联系。发送者调用一个操作,接收者接受请求执行具体类相应的动作。因为使用Command模式解耦,发送者无需知道接受者任何接口。比如说,对文件进行操作,如打开、关闭、打印。正常的操作就是用户点击“打开”按纽,就执行打开命令,在按纽的单击事件中写个方法就可以了。但如要应用Command模式,就要把其抽象出接口,把这三个操作封装成单独的类。Template Method模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。Template Method模式使得子类可以不改变算法的结构即可重新定义该算法的某些特定步骤。(继承)Strategy模式:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。Strategy模式使得算法可以独立于使用它们的客户而变化。(委托)Facade模式:为子系统中的一组接口提供一个一致的界面。Facade模式定义了一个高层接口,这个高层接口使得这一子系统更加容易使用。Mediator模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。Singleton模式:保证一个类仅有一个实例,并提供一个全局访问点。通过使用私有构造函数,静态变量和一个静态访问方法来实现。MonoState模式:构造函数声明为public,而将类中所有的字段声明为static。MonoState并不限制创建对象的个数,但是它的状态却只有一个状态。NULL Object模式:提供一个给定类型的NULL Object对象,用以代替这个对象为null的情况,简化代码。 (收起)2011-12-23 21:34:19 回应
-
第二部分 敏捷设计
Wuqifu (喜欢买书的软件工程师~)
腐化的设计 僵化性(Rigidity):难以对系统进行修改 脆弱性(Fragility):改动一个地方,程序许多地方出现问题 牢固性(Immobility):很难解开系统的纠结 粘滞性(Viscosity):做错误的事情容易,做正确的事情困难 不必要的复杂性(Needless Complexity):过度设计,为过多的可能性做准备 不必要的重复(Needless Repetition):重复的代码,开发人员忽视的抽象 晦涩性(Opacity):难以阅读、理解,没有用清晰、富有.. (更多)腐化的设计僵化性(Rigidity):难以对系统进行修改脆弱性(Fragility):改动一个地方,程序许多地方出现问题牢固性(Immobility):很难解开系统的纠结粘滞性(Viscosity):做错误的事情容易,做正确的事情困难不必要的复杂性(Needless Complexity):过度设计,为过多的可能性做准备不必要的重复(Needless Repetition):重复的代码,开发人员忽视的抽象晦涩性(Opacity):难以阅读、理解,没有用清晰、富有表达力的代码来体现意图需求总是处在持续变动中,加速了代码腐化运用抽象来封装变化Open-Closed PrincipleOOP设计原则:一,SRP 单一职责原则(Single Responsibility Princip)就一个类而言,应该仅有一个引起它变化的原因高内聚、低耦合Facade模式、PROXY模式二,OCP 开放-封闭原则(Open-Closed Principle)软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改对扩展开放(Open for extension):对模块进行扩展,使其满足那些改变的新行为对更改封闭(Closed for modification):不必改动模块的源代码或二进制文件抽象、多态Strategy模式、Template Method模式,三,LSP Liskov替换原则(Liskov Substitution Principle)子类型必须能够替换掉它们的基类型IS-A继承从使用者角度来审视API契约式设计(Design By Contract):通过为每个方法声明前置条件和后置条件来指定契约LSP是使OCP成为可能的主要原则之一子类型的正确含义是“可替换的”四,DIP 依赖倒置原则(Depend Invert Princip)高层模块不应该依赖于低层模块,二者都应该依赖于抽象抽象不应该依赖于实现细节,实现细节应该依赖于抽象如果高层模块独立于低层模块,那么高层模块就可以非常容易地被重用。该原则是FrameWork设计的核心原则:依赖于抽象Don't call us,we will call you.低层模块实现了在高层模块中声明的接口,这些接口被高层模块调用把不稳定的具体类隐藏在抽象接口后面,可以隔离它们的不稳定性OOP设计倒置了依赖关系结构,使得细节和策略都依赖于抽象Template Method模式,Bridge模式五,ISP 接口隔离原则(Least Knowledge Principle)不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。客户程序看到的应该是多个具有内聚接口的抽象基类客户程序应该仅仅依赖于它们实际调用的方法Facade模式 (收起)2011-12-22 00:52:36 回应
书评 · · · · · · (共21条) 我来评论这本书
热门评论 最新评论
这本书里有一个爱情故事!
-
- LipingTaBaBa 孟岩为这本书写了一个代序.这个代序很长,有两页半,其中一页半用来讲述孟岩本人和这本书的感情纠葛. 我为大家复述一下这段感人至深的故事.下面孟先生代表孟岩,小doocaubm和Asd代表什么,请您自己判断. 2001年秋天,北京,孟先生那时候已经颇有些成就了,见识也颇有些广泛了,但是他碰见doocaubm的时...... (3回应)2009-02-13 4/9有用
感觉很好
-
- williamxu(流年似水) 很早就想看这本书了。在旧书摊买了本旧版的英文影印的,但最终还是看了新出的c#版的。新版把旧版的代码翻成了c#,在内容上做了一些取舍,增加了uml的相关章节。但是感觉作者c#的功力不够,翻得代码有些问题,有些概念也不清楚。如直接把成员变量暴露出去,在需要时再改成属性,这完全是错误的。 但是它的内容很好符合了书名:原则、......2010-02-06 1/1有用来自 人民邮电出版社2008版
非常好的敏捷设计书籍
-
- Wuqifu(喜欢买书的软件工程师~) 这本书是我见过的讲述敏捷设计、开发书籍中最棒的一本!尤其是前半部分中OOP设计原则的讲述,非常佩服Bob大叔对设计原则的总结。后半部分感觉涉及到细节太繁琐了就没看完,不过这无损于这本名著的光芒!这本书可以和其它讲述设计模式的相关书籍一起阅读,相得益彰。 读书笔记: 第一部分 敏捷宣言 个体和交互 胜过 过程和......2011-12-26
我已经记不清这是第几次在豆瓣上将此书从在读改为已...
-
- 横刀天笑(最近有什么好书可以推荐看看啊?) 手上这本书已经伤痕累累了,封面也只剩下一厘米左右就要完全脱落。大学的时候就购买了这本书,然后尘封了一段时间。毕业后才正式看,也不知道看了几遍,只知道在豆瓣上我一次又一次的将此书从读过改为在读,一段时间后又改为已读,如此往复,不知道这是第几遍了,但我知道这不是最后一次。每一次拿起来都有更多的收获。 在读这本书之前,我就......2010-10-17
需要经验和功底才能读懂的一本书
-
- 学游泳的鱼 读懂这本书还是需要一定功底的,需要相当的设计实践经验才能完全理解,书中也描述了一些设计模式,不过相比GOF的《设计模式》来说它是在一个更高设计原则的层次来描述经典模式的,总的来说值得阅读。......2010-09-26
股票软件开发,股票软件代理QQ921835074
-
- 软件开发 1.行情分析系统,全球股指、期货、港股、外汇行情于一体 2.自动交易系统:实现股票权证自动交易,自动止损,多帐户、多机构多仓批量操作 3.机构大单数据:个股资金流向与大单分析,数据实时更新 4.研究报告:国内突出的券商,各大研究机构的研究报告第一时间一网打尽 5.机构股票池:机构推荐的黑马......2010-02-25
"敏捷软件开发"的论坛 · · · · · ·
在哪儿买这本书? · · · · · ·
这本书的其他版本 · · · · · · ( 全部5 )
- Prentice Hall版 2002-10-25 / 30人读过 / 有售
- 中国电力出版社版 2003-7 / 128人读过
- 人民邮电出版社版 2008-1 / 76人读过 / 有售
- 人民邮电出版社版 2008-1 / 26人读过 / 有售
以下豆列推荐 · · · · · · (全部)
- 豆瓣评分>9的书(100人以上) (阿獠)
- 我的编程之路 (风中纸页)
- Jolt Award震撼大奖 (大蒜:只有坚持)
- 产品经理的模式语言 (量子熊猫)
- 设计模式 (TerryLee)
谁读这本书?
喜欢这本书的人常去的小组 · · · · · ·

- RubyOnRails (738)

- 设计模式 (916)

- Ruby (2898)

- 分享计算机书籍 (5323)

- 开源 (4094)

- Python编程 (19220)

- Erlang (1028)

- 程序员(不看公告发豆油的... (4662)
喜欢这本书的人关注的活动 · · · · · ·
订阅关于敏捷软件开发的评论:
feed: rss 2.0













