[纸上谈兵]面向对象的5个编码原则

一、多聚合,少继承.高内聚、低耦合
高内聚、低耦合
内聚:每个模块尽可能独立完成自己的功能,不依赖于模块外部的代码。
耦合:模块与模块之间接口的复杂程度,模块之间联系越复杂耦合度越高,牵一发而动全身。
目的:使得模块的“可重用性”、“移植性”大大增强
通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低

模块粒度:
      『函数』
           高内聚:尽可能类的每个成员方法只完成一件事(最大限度的聚合)
           低耦合:减少类内部,一个成员方法调用另一个成员方法
      『类』
           高内聚低耦合:减少类内部,对其他类的调用
      『功能块』
           高内聚低耦合:减少模块之间的交互复杂度(接口数量,参数数据)
个人总结:
1.使用接口来解耦合.耦合针对类,不针对接口?
参考:

二、面向对象5个基本原则
1. 单一职责(职责划分能力)
定义: 
    应该有且仅有一个原因引起类的变更。个人认为也适应用于一个模块、一个接口、一个方法职责单一,甚至一个服务.
    单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则

职责是什么?
    一个类实现的功能或服务

职责划分(困难点):
     我认为职责可以拆分成子职责.根据模型结构划分职责(也可以直接说功能)

职责扩散:
   一个职责变成了多个

优点: 代码可读性较好、复用性比较高等

缺点: 繁琐(过多的类)、维护困难等

其它:
  软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离.判断是否分离出来的依据为如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多一个的职责.

个人理解:
以后台个人新签功能为例,主要功能包括添加客户信息,添加合同住人信息,填写租赁信息

思考:
突然有一天APP增加了个人新签功能.

参考:
<<大话设计模式>>

2.  开放封闭原则(抽象能力)
定义: 软件实体(类、模块、方法等)应该可以扩展,但是不可修改。
基本思想:
Open(Open for extension): 模块的行为必须是开放的、支持扩展的,而不是僵化的。
Closed(Closed for modification): 在对模块的功能进行扩展时,不应该影响或大规模地影响已有的程序模块。

优点:可扩展,灵活性

缺点:过度抽象,导致本该简单的设计复杂化.

2.如何遵守开放-封闭原则

实现开放-封闭的核心思想就是对抽象编程,而不对具体编程,因为抽象相对稳定。让类依赖于固定的抽象,这样的修改就是封闭的;而通过面向对象的继承和对多态机制,可以实现对抽象体的继承,通过覆写其方法来改变固有行为,实现新的扩展方法,所以对于扩展就是开放的。

1)在设计方面充分应用“抽象”和“封装”的思想。
一方面也就是要在软件系统中找出各种可能的“可变因素”,并将之封装起来;
另一方面,一种可变性因素不应当散落在多个不同代码模块中,而应当被封装到一个对象中。

2)在系统功能编程实现方面应用面向接口的编程。
当需求发生变化时,可以提供该接口新的实现类,以求适应变化。
面向接口编程要求功能类实现接口,对象声明为接口类型。在设计模式中,装饰模式比较明显地用到了OCP。

总结
开放封闭原则要求 设计人员能针针对程序中频发变化的那些部分做出抽象.
在我们最初编写代码的时,假设变化不发生。当变化发生时,我们就创建抽象隔离以后发生的同类变化。
面对需求,对程序的改动是通过新增代码进行的,而不是更改现有的代码。--此处的需求应该是新需求即新功能.

个人理解:
  1). 开放封闭原则是针对模块这种可包含多个功能的实体,进行功能上的扩展,
以后台新签为列,新签包括了很多功能,这个功能可以很容易的实现扩展,不需要再改变已有类(只是功能实现类不包含调用该功能的类--客户端)的基础上.
  2). 定义中的软件实体包括了方法,方法能使用该原则?方法应该是最小li度的功能,无法扩展只能修改?

例子:

参考:
http://blog.163.com/lingjingtianbian@126/blog/static/46066361201372334512937/
<<大话设计模式>>

3. 里氏替换原则

参考:

4. 依赖倒置原则

5. 接口分离原则

参考:

3. 待说明
    职责和功能的区别.

猜你喜欢

转载自blog.csdn.net/c364902709/article/details/56069337