软件架构week2

106 阅读3分钟

编程的本质是用计算机来解决现实世界中的问题。所以编程的过程就是对现实世界的领域问题进行分析抽象得到计算机的模型,对该模型的分析设计得到软件系统。

编程的核心要素, 人, 业务领域和计算机。对计算机理解的机器语言,其从机器语言到汇编、高级的程序语言更易于让人理解。业务领域可以得到不同流程,人将设计中涉及的元素抽象成更好理解的对象,具有属性和方法。

面向对象具有三个特点:封装、继承和多态。

软件架构设计中的两个主要设计原则。一是开闭原则,对扩展是开放的,对修改时封闭的。二是依赖倒置原则,软件架构的高层不依赖底层的实现而是依赖抽象和接口。

在具体的软件设计中,里氏原则及替换原则可以来指导子类和抽象类的继承设计,来衡量继承是否合理。也就是如果子类能替换父类,就是合理的继承。如果父类能够运行的程序,子类应该也能够运行,子类如果不能运行,则是不合理的继承。里氏原则是一种在场景中动态检查类行为关系的方法。

不符合LSP的情况

1. 不符合IS-A关系的继承,一定不符合LSP

2. 派生类中的退化

3. 派生类中抛出基类不会产生的异常

改进违反LSP(里氏)的方法

1. 提取共性的抽象

2. 改成组合

     2.1 通过组合父类的方法来使用父类的方法

     2.2 通过extend继承父类,把父类的方法暴露给子类(白盒复用)

     2.3 当基类发生改变时,可能会层层影响其下的子类

     2.4 继承是静态的,无法在运行时改变组合

     2.5 类的数量增长

OOD原则四: 单一职责原则(SRP single Responsibility Principle)又称“内聚性原则(cohesion)

即一个模块的组成元素之间的功能相关性,一个类,只能有一个引起它的变化的原因。一个职责是一个变化的原因。

违反SRP(单一原则)的后果:

1. 脆弱性

       修改一个功能,另外一个可能会意外受损

2. 不可移植性

 改进违反SRP的方法:

通过拆减将类进行分离,通常在一个项目中一个类越来越大,代码越来越多,功能比较复杂,

那么它通常职责不单一。

如果类中的方法相互关联,不能分离,如何处理

OOD原则五:接口分离原则(ISP interface segregation principle)

       目标,不应该强迫客户程序依赖它们不需要要的方法

       实现的方法是多继承,一个类实现多个接口的方法。

ISP和SRP的比较:

1. ISP和SRP是相关的,都和”内聚性“有关

2. SRP指出应该如何设计一个类 ---- 只能有一种原因才能促使类发生改变

3. ISP指出应该如何设计一个接口 ---- 从客户的需要出发,强调不让客户看到他们不需要的方法