敏捷开发大家谈(五)--敏捷开发的设计原则

二、敏捷开发的设计原则

关于敏捷开发的设计原则:
单一职责原则SRP:Single Responsibility Principle
开放封闭原则OCP:Open-Close Principle
Liskov替换原则LSP:Liskov Substitution Principle
依赖倒置原则DIP:Dependency Invertion Principle
接口隔离原则ISP:Interface Separate Principle
关于包的设计原则:
重用发布等价原则REP:Reuse Equivalence Principle
共同重用原则CRP:Common Resue Principle
共同封闭原则CCP:Common Close Principle
无环依赖原则ADP:Acyclic Dependency Principle
稳定依赖原则SDP:Stabilization Dependency Principle
稳定性度量公式:I=Ce/(Ca+Ce) (I:不稳定度,Ce:输入耦合度,Ca:输出耦合度)
I取值范围在【0,1】,I=0表示具有最大稳定度;iI=1标识具有最大不稳定度
稳定抽象原则SAP:Stabilization Abstract Principle

 

GOF说--基于对象组合的设计会有更多的对象(而有较少的类)。
如果单纯的看这里,你会明白似乎类较少符合面向对象的逻辑。
但是且慢,我们知道面向对象有一条原则叫单一职责原则--SRP。
这样好像类多又是面向对象思想的体现。
其实最重要的是GOF中的这句话--且系统的行为将依赖对象间的关系而不是被定义在某个类中。
所以类的多少并不是问题的关键,是否职责单一也不是大问题,
最重要的是你现在的那些职责是都多少是不能被别的职责通过某种方式所代替的。
在BOB大叔那里定义职责是变化的原因,因此就可以认为这些变化的原因应该是不可代替的,
也可以说你不能由这个原因推导出别的原因。
只要这个原因间可以做到相互关联,那么你就可以把由于这些变化而引起变化的类组合起来,
而不是把他们规定在新的类中。


开放封闭原则OCP:Open-Close Principle

一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。

因此在进行面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。

该原则同样适合于非面向对象设计的方法,是软件工程设计方法的重要原则之一。

我们以收音机的例子为例,讲述面向对象的开闭原则。

我们收听节目时需要打开收音机电源,对准电台频率和进行音量调节。

但是对于不同的收音机,实现这三个步骤的细节往往有所不同。

比如自动收缩电台的收音机和按钮式收缩在操作细节上并不相同。

因此,我们不太可能针对每种不同类型的收音机通过一个收音机类来实现(通过重载)这些不同的操作方式。

但是我们可以定义一个收音机接口,提供开机、关机、增加频率、降低频率、增加音量、降低音量六个抽象方法。

不同的收音机继承并实现这六个抽象方法。

这样新增收音机类型不会影响其它原有的收音机类型,收音机类型扩展极为方便。

此外,已存在的收音机类型在修改其操作方法时也不会影响到其它类型的收音机。
图1是一个应用OCP生成的收音机类图的例子:

Liskov替换原则LSP:Liskov Substitution Principle

子类应当可以替换父类并出现在父类能够出现的任何地方。

我们以学生为例,夜校生为学生的子类,因此在任何学生可以出现的地方,夜校生均可出现。

这个例子有些牵强,

一个能够反映这个原则的例子时圆和椭圆,圆是椭圆的一个特殊子类。

因此任何出现椭圆的地方,圆均可以出现。但反过来就可能行不通。
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/3433/viewspace-269190/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/3433/viewspace-269190/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值