《敏捷软件开发-原则、方法与实践》-Robert C. Martin读书笔记(转)

Review of Agile Software Development: Principles, Patterns, and Practices
本书主要包含4部分内容,这些内容对于今天的软件工程师都非常的重要,它们是:
●Agile方法:主要讲述了如何去使用Agile方法,其中有很大一部分内容是告诉你为什么要这样做。
●面向对象设计原则:本书包含了11个面向对象设计原则,涵盖了包的设计和类的设计。
●设计模式:本书中讲述了23个设计模式,并都有具体的实例。讲解的重点在如何在实际的应用中去使用模式,如何根据当前问题的上下文以及约束力去选择最适合的模式,以及何时避免使用模式。
●UML:本书不是关于UML的,但是为了让读者更好的理解书中的内容,作者使用了一些UML图来展示设计思路。同时,本书中也对如何有效的使用UML做了深入的阐述。本书中有两个附录专门对UML进行了简介。
--个人觉得面向对象设计原则是本书的精华。
摘抄自《敏捷软件开发-原则、方法与实践》-Robert C. Martin
(1)SRP 单一职责原则
就一个类而言,应该仅有一个引起它变化的原因。
职责即为"变化的原因".
(2)OCP 开放封闭原则
软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改。
对于扩展是开放的,对于更改是封闭的.
关键是抽象.将一个功能的通用部分和实现细节部分清晰的分离开来.
开发人员应该仅仅对程序中呈现出频繁变化的那些部分作出抽象.拒绝不成熟的抽象和抽象本身一样重要.
(3)LSP Liskov替换原则
子类型必须能替换掉他们的基本类型
(4)DIP 依赖倒置原则
抽象不应该依赖于细节。细节应该依赖于抽象。
Hollywood原则: "Don't call us, we'll call you".程序中所有的依赖关系都应该终止于抽象类和接口。针对接口而非实现编程。
任何变量都不应该持有一个指向具体类的指针或引用。
任何类都不应该从具体类派生。
任何方法都不应该覆写他的任何基类中的已经实现了的方法。
(5)ISP 接口隔离原则
不应该强迫客户依赖于他们不用的方法。接口属于客户,不属于他所在的类层次结构。
多个面向特定用户的接口胜于一个通用接口。
(6)REP 重用发布等价原则
重用的粒度就是发布的粒度.
(7)CCP 共同重用原则
一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。
相互之间没有紧密联系的类不应该在同一个包中。
(8)CRP 共同封闭原则
包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包影响,则将对包中的所有类产生影响,而对其他的包不造成任何影响.
(9)ADP 无依赖原则
在包的依赖关系中不允许存在环. 细节不应该被依赖.
(10)SDP 稳定依赖原则
朝着稳定的方向进行依赖.
应该把封装系统高层设计的软件(比如抽象类)放进稳定的包中,不稳定的包中应该只包含那些很可能会改变的软件(比如具体类)。
(11)SAP 稳定抽象原则
包的抽象程度应该和其他稳定程度一致.
一个稳定的包应该也是抽象的,一个不稳定的包应该是抽象的.
(12)DAP(Default Abstraction Principle)缺省抽象原则
在接口和实现接口的类之间引入一个抽象类,这个类实现了接口的大部分操作.
(13)IDP(Interface Design Principle)接口设计原则
规划一个接口而不是实现一个接口。
(14)BBP(Black Box Principle)黑盒原则
多用类的聚合,少用类的继承。
(15)DCSP(Don't Concrete Supperclass Principle)不要构造具体的超类原则
避免维护具体的超类。
转载:http://cnjava.blog.51cto.com/1208887/535716
《敏捷软件开发-原则、方法与实践》-Robert C. Martin读书笔记(转)的更多相关文章
- 敏捷软件开发 原则 模式 与实践 - OCP原则
最近在读BOB大叔的敏捷软件开发,特别是TDD那一章节,启示真的不少,从测试驱动开发,讲到驱动表明程序设计的意图,从设计意图讲到对象依赖的解耦,从解耦建立Mock对象. 其实是对每个模块都编写单元测试 ...
- 软件开发-MSF方法(《构建之法》读书笔记2)
MSF-微软解决方案框架,是一套大型系统开发指南,它描述了如何用组队模型.过程模型和应用模型来开发Client/Server结构的应用程序,是在微软的工具和技术的基础上建立并开发分布式企业系统应用的参 ...
- 敏捷软件开发vs传统软件开发
摘要 本文介绍了传统软件开发(着重介绍了传统软件开发中常用的瀑布模型)和敏捷软件开发,以及敏捷开发和传统开发的对比. 一.传统软件开发 比较常用的几种传统软件开发方法:瀑布式开发.迭代式开发.螺旋开发 ...
- 敏捷软件开发:原则、模式与实践——第14章 使用UML
第14章 使用UML 在探索UML的细节之前,我们应该先讲讲何时以及为何使用它.UML的误用和滥用已经对软件项目造成了太多的危害. 14.1 为什么建模 建模就是为了弄清楚某些东西是否可行.当模型比要 ...
- 敏捷软件开发:原则、模式与实践——第12章 ISP:接口隔离原则
第12章 ISP:接口隔离原则 不应该强迫客户程序依赖并未使用的方法. 这个原则用来处理“胖”接口所存在的缺点.如果类的接口不是内敛的,就表示该类具有“胖”接口.换句话说,类的“胖”接口可以分解成多组 ...
- 敏捷软件开发:原则、模式与实践——第10章 LSP:Liskov替换原则
第10章 LSP:Liskov替换原则 Liskov替换原则:子类型(subtype)必须能够替换掉它们的基类型(base type). 10.1 违反LSP的情形 10.1.1 简单例子 对L ...
- 敏捷软件开发:原则、模式与实践——第13章 写给C#程序员的UML概述
第13章 写给C#程序员的UML概述 UML包含3类主要的图示.静态图(static diagram)描述了类.对象.数据结构以及它们之间的关系,藉此表现出了软件元素间那些不变的逻辑结构.动态图(dy ...
- 敏捷软件开发:原则、模式与实践——第11章 DIP:依赖倒置原则
第11章 DIP:依赖倒置原则 DIP:依赖倒置原则: a.高层模块不应该依赖于低层模块.二者都应该依赖于抽象. b.抽象不应该依赖于细节.细节应该依赖于抽象. 11.1 层次化 下图展示了一个简单的 ...
- 敏捷软件开发:原则、模式与实践——第9章 OCP:开放-封闭原则
第9章 OCP:开放-封闭原则 软件实体(类.模块.函数等)应该是可以扩展的,但是不可修改. 9.1 OCP概述 遵循开放-封闭原则设计出的模块具有两个主要特征: (1)对于扩展是开放的(open f ...
随机推荐
- ExecutorService的execute和submit方法
三个区别: 1.接收的参数不一样 2.submit有返回值,而execute没有 Method submit extends base method Executor.execute by creat ...
- MySQL 5.1参数
MySQL 5.1.73参数 Variable_name Valueauto_increment_increment 1auto_increment_offset 1autocommit ONa ...
- 20-spring学习-Spring MVC基本操作
本次实现数据的CRUD功能,数据依然以VO类形式进行数据接收. 一,建立Message.java类操作,负责数据的接收操作. package com.SpringMVC.vo; public clas ...
- 【 Linux 】单台服务器上并发TCP连接数(转)
单台服务器上并发TCP连接数 问题:一台服务器到底能够支持多少TCP并发连接呢? 1. 文件描述符限制: 对于服务器来说,每一个TCP连接都要占用一个文件描述符,一旦文件描述符使用完,新的 ...
- Scrapy见面第五天
这算是我第一次使用框架吧,说来羞愧. 此前用Request带上cookie实现.(略微)完好了QQ空间的爬虫(传送门),接下来想实现分布式去爬. 事实上仅仅要能实现待爬QQ队列的共享,分布式的主要问题 ...
- hive 分位数函数 percentile(col, p)
注意在偶数情况下,中位数会存在小数,特别注意! hive里面倒是有个percentile函数和percentile_approx函数,其使用方式为percentile(col, p).percenti ...
- 使用 SSHFS 挂载远程的 Linux 文件系统及目录
1. 安装 sudo apt-get install sshfs 2. 创建 SSHFS 挂载目录 sudo mkdir /mnt/cong 3.使用 SSHFS 挂载远程的文件系统 sudo ssh ...
- node.js 操作excel 表格与XML文件常用的npm
在日常工作中会经常用到把一些excel表格文件转化为json,xml,js等格式的文件,下面就是我在日常中用到的这些npm. 1.node-xlsx: node-xlsx可以把excel文件转化为上面 ...
- ubuntu16.04字体设置
我在ubuntu下主要有2个应用,一个是终端,一个是firefox浏览器 1.在终端下,我喜欢“Courier 10 pitch regular”,字号是14.Courier是一种专门为程序员设计的字 ...
- Atitit.线程 死锁 跑飞 的检测与自动解除 与手动解除死锁 java c# .net php javascript.
Atitit.线程 死锁 跑飞 的检测与自动解除 与手动解除死锁 java c# .net php javascript. 1. 现象::主程序卡住无反应,多行任务不往下执行 1 2. 原因::使用j ...