敏捷软件开发-第三周

第二部分 敏捷设计

什么是敏捷设计

单一职责原则(SRP)

就一个类而言,应该仅有一个引起它变化的原因

什么是职责:

- 在SRP中,我们把职责定义为“变化的原因”,如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。

开放-封闭原则(OCP)

软件实体(类,模块,函数)应该是可以扩展的,但是不可修改的

描述:
遵循开发-封闭原则设计出的模块具有两个主要的特征。

  1. 对于扩展是开发的 (open for extension)

    • 我们可以改变模块的功能
  2. 对于更改是封闭的(Close for modification)

    • 对模块的行为进行扩展,不必改动模块的源代码或者二进制代码。模块的二进制可执行版本,都无需改动

关键是抽象:
可以创建出固定能够描述一组任意个可能行为的抽象体。这个抽象体就是抽象基类。而这一组任意个可能的行为则表现为可能的派生类。

模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体。所以它对于更改可以是改变的。同时从这个抽象体派生,也可以扩展此模块的行为。

Liskov替换原则(LSP)

对于LSP的解释:
子类型(subtype)必须能够替换掉它们的基类型(base type)

依赖倒置原则(DIP)

  1. 高层模块不应该依赖于低层模块。二者都应该依赖于抽象

  2. 抽象不应该依赖于细节。细节应该依赖于抽象。

依赖于抽象:

1. 任何变量都不应该持有一个指向具体类的引用
2. 任何类都不应该从具体类从派生
3. 任何方法都不应该覆写它的任何基类中的已经实现了的方法。

如果一个具体类不太会改变。并且也不会创建其他类似的派生类,那么依赖于它并不会造成损害

接口隔离原则(ISP)