java中的OO概念和OO设计原则

版权声明:站在巨人的肩膀上学习。 https://blog.csdn.net/zgcr654321/article/details/83304009

OO概念:

OO(Object Oriented,面向对象)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观体有直接对应关系,一个对象类定义了具有相似性质的一组对象。面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性,来认识、理解、刻划客观世界和设计、构建相应的软件系统。

面向对象的特征:

抽象,先不考虑细节;

封装,隐藏内部实现;

继承,复用现有代码;

多态,改写对象行为。

OO设计原则:

SRP(Single Responsibility Principle 单一职责原则):

所谓单一职责,就是一个设计元素只做一件事。SRP原则的核心含义是只能让一个类有且只有一个职责,永远不要让一个类存在多个改变的理由。换句话说,如果一个类需要改变,改变它的理由永远只有一个,如果存在多个改变它的理由,就需要重新设计该类。

OCP (Open Close Principle 开闭原则):

“Closed for Modification; Open for Extension”——“对变更关闭;对扩展开放”。即在进行面向对象设计中,设计类或其他程序单位时,应该遵循对扩展开放对修改关闭的原则。对扩展开放,扩展提供新的或改变原有的功能,但扩展功能不修改原有的代码,使软件在变化中保持稳定,这样易于维护。

LSP(Liskov Substitution Principle 里氏替换原则):

子类应当可以替换父类并出现在父类能够出现的任何地方。如圆和椭圆,圆是椭圆的一个特殊子类。因此任何出现椭圆的地方,圆均可以出现。但反过来就可能行不通。

运用替换原则时,我们尽量把类B设计为抽象类或者接口,让C类继承类B(接口B)并实现操作A和操作B,运行时,类C实例替换B,这样我们即可进行新类的扩展(继承类B或接口B),同时无须对类A进行修改。

如果有两个具体的类A和B之间的关系违反了里氏替换原则,那么在以下两种重构方案中选择一种:

创建一个新的抽象类C,作为两个具体类的超类,将A和B共同的行为移到C中,从而解决A和B行为不完全一致的问题;

从B到A的继承关系改写为委派关系,子类型必须能替换掉他们的基本类型。

DIP(Dependence Inversion Principle 依赖倒置原则):

即要依赖于抽象,不要依赖于具体。客户端依赖于抽象耦合。抽象不应当依赖于细节;细节应当依赖于抽象;要针对接口编程,不针对实现编程针对接口编程意味着应当使用接口和抽象类进行变量的类型声明,参量的类型声明,数据类型的转换等任何变量都不应该覆盖它的任何基类中的已经实现的方法。

ISP(Interface Segregation Principle 接口分隔原则):

使用多个专门的接口比使用单一的接口要好。客户端只需要某一些方法的话,那么就应当向客户端提供这些需要的方法,而不要提供不需要的方法提供接口意味着向客户端作出承诺,多个面向特定用户的接口胜于一个通用接口。

如果你拥有一个针对多个客户的类,为每一个客户创建特定业务接口,然后使该客户类继承多个特定业务接口将比直接加载客户所需所有方法有效。

猜你喜欢

转载自blog.csdn.net/zgcr654321/article/details/83304009
oo