【架构】—回归本质(面向对象)
什么是对象
对象的描述?
对象是具有状态,行为和标识
状态:表明每个对象可以有自己的数据
行为:表明每个对象可以产生行为
标识:表明每个对象都区别于其他对象(唯一性)。
面向对象编程的三要素
封装
隐藏实现细节(访问 )
比如:Model 的 Get Set 方法,多 Model 中的属性进行了 Private 保护,如果想改变属性的值,那么就必须通过 set 方法来改变。
继承
LS-A 关系
解释:表示类中的包含关系.
比如:比如笔记本和台式机均定义为计算机,那么两者于计算机之间的关系为 LS-A,java 中常见的 extends 关键字。
HAS-A 关系(组合)
解释:表示一个从属关系
比如:比如计算机中的系统有 windows,linux, mac os 系统与计算机之前的关系即为 HAS-A 的关系。
多态
多态其实是分为编译时多态和运行时多态
后期绑定(虚函数)
解释:将一个方法调用同一个方法主体关联起来被称作绑定。若在程序执行前进行绑定(由编译器和来链接程序实现)称为前期绑定。在程序执行的过程中进行绑定就称为后期绑定,也叫做动态绑定和运行时绑定,即具有某种机制,以便在运行时能够判断对象的类型,以调用恰当的方法,编译器不知道对象的类型,但是方法调用机制能够找到正确的方法体,并加以调用。
Java 中除了静态方法 static 和 final(private 方法属于 final 方法)方法,成员变量(包括静态/非静态)之外,其他所有的方法都是后期绑定,且自动发生。final 关键字防止重写该方法,不进行动态绑定。
向上转形(Up Casting)
解释:由于继承关系的存在,对象既可以作为自己本身的类型使用,也可以作为其父类类型使用。这种将某个对象的引用视为对其父类类型引用的做法被称作向上转型(upcasting)
面向对象设计(OOD)原则
OCP(开/闭原则)
扩展是开放的
对于更改是封闭的
实现 OCP 的关键在于抽象,而抽象的威力在于多态和继承
OCP 作为 OO 的高层原则,主张使用“抽象(Abstraction)”和“多态(Polymorphism)”将设计中的静态结构改为动态结构,维持设计的封闭性。“抽象”是语言提供的功能。“多态”由继承语义实现。
DIP(依赖倒置原则)
高层模块不能依赖低层模块,而是依赖抽象
抽象不能依赖实现
实现依赖抽象
好莱坞原则:好莱坞原则简称 Don‘t call us, we‘ll call you,科普下在好莱坞,把简历递交给演艺公司后就只有回家等待。由演艺公司对整个娱乐项的完全控制,演员只能被动式的接受公司的差使,在需要的环节中,完成自己的演出。这和我们的依赖倒置原则不谋而合,所以依赖倒置原则也就叫好莱坞原则。
好莱坞原则的具体体现模式为模板方法模式,所有组件都是被动的,组件的初始化 &发生都是由容器负责。
LSP(里氏替换原则)
任何基类可以出现的地方,子类一定可以出现,子类可以替换父类。
LSP 是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。
当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有 is-A 关系,具备该关系的才能满足里斯替换原则。
SRP(单一职责原则)
一个职责是一个变化的原因。
一个类只能有一个引起它的变化的原因。
一个模块的组成元素之间的功能相关性(内聚性原则)
单一职责原则又称单一功能原则(内聚性原则),面向对象五个基本原则(SOLID)之一。它规定一个类应该只有一个发生变化的原因。
ISP(接口分离原则)
不应该强迫客户端程序依赖他们不需要的方法
接口分离原则指在设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好。即,一个类要给多个客户使用,那么可以为每个客户创建一个接口,然后这个类实现所有的接口;而不要只创建一个接口,其中包含所有客户类需要的方法,然后这个类实现这个接口。
版权声明: 本文为 InfoQ 作者【不二架构】的原创文章。
原文链接:【http://xie.infoq.cn/article/27d2a8ffee144d27545bfc4f1】。文章转载请联系作者。
评论