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

目录

一、多聚合,少继承.高内聚、低耦合

二、面向对象5个基本原则

1. 单一职责(职责划分能力)

2. 开放封闭原则(抽象能力)

3.里氏替换原则

4.依赖倒置原则

5.接口分离原则


一、多聚合,少继承.高内聚、低耦合

高内聚、低耦合

内聚:每个模块尽可能独立完成自己的功能,不依赖于模块外部的代码。

耦合:模块与模块之间接口的复杂程度,模块之间联系越复杂耦合度越高,牵一发而动全身。

目的:使得模块的“可重用性”、“移植性”大大增强

通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低

 

模块粒度:

      『函数』

           高内聚:尽可能类的每个成员方法只完成一件事(最大限度的聚合)

           低耦合:减少类内部,一个成员方法调用另一个成员方法

      『类』

           高内聚低耦合:减少类内部,对其他类的调用

      『功能块』

           高内聚低耦合:减少模块之间的交互复杂度(接口数量,参数数据)

个人总结:

1.使用接口来解耦合.耦合针对类,不针对接口?

参考:

http://www.cnblogs.com/edisonfeng/archive/2011/12/22/2298048.html

http://www.cnblogs.com/robnetcn/archive/2012/04/15/2449008.html

 

二、面向对象5个基本原则

1. 单一职责(职责划分能力)

定义: 

    应该有且仅有一个原因引起类的变更。个人认为也适应用于一个模块、一个接口、一个方法职责单一,甚至一个服务.

    单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则

 

职责是什么?

    一个类实现的功能或服务

 

职责划分(困难点):

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

 

职责扩散:

   一个职责变成了多个

 

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

 

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

 

其它:

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

 

个人理解:

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

 

思考:

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

 

参考:

https://www.douban.com/note/330096938/

http://www.cnblogs.com/dolphin0520/p/3919839.html

http://blog.csdn.net/shiyuan17/article/details/9087273

http://www.jdon.com/designpatterns/the-single-responsibility-principle.html

http://blog.csdn.net/yuanlong_zheng/article/details/7423000

<<大话设计模式>>

 

2. 开放封闭原则(抽象能力)

定义: 软件实体(类、模块、方法等)应该可以扩展,但是不可修改。

基本思想:

Open(Open for extension): 模块的行为必须是开放的、支持扩展的,而不是僵化的。

Closed(Closed for modification): 在对模块的功能进行扩展时,不应该影响或大规模地影响已有的程序模块。

 

优点:可扩展,灵活性

 

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

 

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

 

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

 

1)在设计方面充分应用“抽象”和“封装”的思想。

一方面也就是要在软件系统中找出各种可能的“可变因素”,并将之封装起来;

另一方面,一种可变性因素不应当散落在多个不同代码模块中,而应当被封装到一个对象中。

 

2)在系统功能编程实现方面应用面向接口的编程。

当需求发生变化时,可以提供该接口新的实现类,以求适应变化。

面向接口编程要求功能类实现接口,对象声明为接口类型。在设计模式中,装饰模式比较明显地用到了OCP。

 

总结

开放封闭原则要求设计人员能针针对程序中频发变化的那些部分做出抽象.

在我们最初编写代码的时,假设变化不发生。当变化发生时,我们就创建抽象隔离以后发生的同类变化。

面对需求,对程序的改动是通过新增代码进行的,而不是更改现有的代码。--此处的需求应该是新需求即新功能.

 

个人理解:

  1). 开放封闭原则是针对模块这种可包含多个功能的实体,进行功能上的扩展,

以后台新签为列,新签包括了很多功能,这个功能可以很容易的实现扩展,不需要再改变已有类(只是功能实现类不包含调用该功能的类--客户端)的基础上.

  2). 定义中的软件实体包括了方法,方法能使用该原则?方法应该是最小li度的功能,无法扩展只能修改?

 

例子:

 

参考:

http://www.2cto.com/kf/201609/550408.html

http://www.infoq.com/cn/news/2013/05/open-closed-principle-challenged

http://blog.csdn.net/ithzhang/article/details/7533627

http://www.cnblogs.com/TerryFeng/archive/2009/11/30/1613648.html

http://blog.163.com/lingjingtianbian@126/blog/static/46066361201372334512937/

http://blog.csdn.net/a980150976/article/details/40779497

<<大话设计模式>>

http://wenku.baidu.com/link?url=v01qX_AY6fMEzkavjqNq9niNxAEnaWFduNaW06juONk4EZXf9Za1h4sUuQBe3XNkNIl6Qq_meRHwY5ggMBjAFcfuSlXcCqHUq-MWR3PH5iy

 

3.里氏替换原则

 

参考:

http://www.studyofnet.com/news/482.html

http://wenku.baidu.com/link?url=v01qX_AY6fMEzkavjqNq9niNxAEnaWFduNaW06juONk4EZXf9Za1h4sUuQBe3XNkNIl6Qq_meRHwY5ggMBjAFcfuSlXcCqHUq-MWR3PH5iy

 

4.依赖倒置原则

依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合

5.接口分离原则

接口分离原则指在设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好。即,一个类要给多个客户使用,那么可以为每个客户创建一个接口,然后这个类实现所有的接口;而不要只创建一个接口,其中包含所有客户类需要的方法,然后这个类实现这个接口。

参考:

http://youyu4.iteye.com/blog/2159569

http://blog.csdn.net/zhengzhb/article/details/7296921

http://blog.csdn.net/u010255127/article/details/50955163

http://www.cnblogs.com/shao-shao/articles/3413644.html

http://blog.csdn.net/yumuhu/article/details/6240135

 

3. 待说明

    职责和功能的区别.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值