OOP的7大原则(收集整理)

[color=olive][size=medium][b]1. 开闭原则(the Open Closed Principle OCP)[/b] 一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。
因此在进行面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。(该原则同样适合于非面向对象设计的方法,是软件工程设计方法的重要原则之一)
以收音机的例子为例,讲述面向对象的开闭原则。我们收听节目时需要打开收音机电源,对准电台频率和进行音量调节。但是对于不同的收音机,实现这三个步骤的细节往往有所不同。比如自动收缩电台的收音机和按钮式收缩在操作细节上并不相同。因此,我们不太可能针对每种不同类型的收音机通过一个收音机类来实现(通过重载)这些不同的操作方式。但是我们可以定义一个收音机接口,提供开机、关机、增加频率、降低频率、增加音量、降低音量六个抽象方法。不同的收音机继承并实现这六个抽象方法。这样新增收音机类型不会影响其它原有的收音机类型,收音机类型扩展极为方便。此外,已存在的收音机类型在修改其操作方法时也不会影响到其它类型的收音机。
[b]2.里氏代换原则 LSP [/b]如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有对象o1都代换成o2时,程序P的行为没有变化,那么类型T2是T1的子类型。
LSP要求凡是基类使用的地方,子类型一定适用。
LSP是一条非常严格的原则,要求基类变为子类的时候,其程序行为不发生改变。在oop时并没有严格按照LSP来做。
[b]3.依赖倒转原则 DIP [/b]表述1:抽象不应当依赖于细节,细节应当依赖于抽象。
Abstractions should not depend upon details, details should depend upon abstractions.
表述2:要针对接口编程,不要针对实现编程。
Program to an interface, not an implementation.

[b]4.接口隔离原则 ISP [/b]使用多个专门的接口比使用单一的总接口要好。
一个类对另一个类的依赖性应当是建立在最小接口上的(LoD)。

[b]5.合成/聚合复用原则 CARP [/b]= 合成复用原则 Composite Reuse Principle CRP
要尽量使用合成/聚合,尽量不要使用继承。
继承的优点:①新类易实现. ②易修改或扩展
缺点:①继承复用破环包装,白箱复用.
②超类发生变化,子类不得不改变.
③继承的实现是静态的,不能在运行时改变.
优缺点的②是相互对应的。
[b]
6.迪米特法则 LoD [/b]= 最少知识原则 Least Konwledge Principle
一个对象应当对其他对象有尽可能少的了解。
表述:
①只与你直接的朋友们通信 Only talk to your immediate friends
②不要跟陌生人说话 Don's talk to strangers
③每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。
LoD的实质是控制对象之间的信息流量,流向及信息的影响。
①优先考虑将一个类设置成不变类.
②尽量降低类/成员的访问权限.
[b]
7.单一职责原则(Single Responsibility Principle)[/b]就是一个设计或实体应该只做一件事/只描述一个事物, 而不要弄得很混乱, 如果你专著于一件事, 一个模块,你会做得很出色。[/size][/color]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值