概念理解1:面向对象 面向接口
2017-09-19 本文已影响0人
志华_0925
面向对象
把一组数据结构合和处理它们的方法组成对象(object),把相同行为的对象归纳为类,通过类的封装隐藏内部细节,通过继承实现类的特化,通过多态实现基于对象类型的动态分派。
继承和组合
继承(Inheritance)是一种联结类与类的层次模型。指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;继承是一种 is-a 关系。
组合(Composition)体现的是整体与部分、拥有的关系,即 has-a 的关系。
在继承 结构中,父类的内部细节对于子类是可见的。所以我们通常也可以说通过继承的代码复用是一种白盒式代码复用 。(如果基类的实现发生改变,那么派生类的实现也将随之改变。这样就导致了子类行为的不可预知性)
组合 是通过对现有的对象进行拼装(组合)产生新的、更复杂的功能。因为在对象之间,各自的内部细节是不可见的,所以我们也说这种方式的代码复用是 黑盒式代码复用 。
继承 ,在写代码的时候就要指名具体继承哪个类,所以,在编译期就确定了关系。(从基类继承来的实现是无法在运行期动态改变的,因此降低了应用的灵活性)
组合,在写代码的时候可以采用面向接口编程。所以,类的组合关系一般在运行期确定。
依赖倒置 控制反转 依赖注入 面向接口编程
目标:实现高内聚低耦合
依赖:一个对象,往往需要跟其他对象打交道,既包括获知其他对象的状态,也包括仰赖其他对象的行为,而一旦这样的事情发生时,我们便称该对象依赖于另一对象。
依赖倒置: 解耦和最重要的原则就是依赖倒置原则,高层模块不应该依赖底层模块,他们都应该依赖抽象(程序里的抽象就是接口)。抽象不应该依赖于细节(具体实现),细节应该依赖于抽象。
控制反转: 控制反转跟依赖倒置是如出一辙的两个概念,当存在依赖倒置的时候往往也存在着控制反转。控制反转跟依赖倒置都是一种编程思想,依赖倒置着眼于调用的形式,而控制反转则着眼于程序流程的控制权。
依赖注入:依赖注入与依赖倒置、控制反转的关系仍旧是一本万殊。依赖注入,就其广义而言,即是通过“注入”的方式,来获得依赖,通常用于框架开发。
面向接口编程:无论是依赖倒置、控制反转、还是依赖注入,都已经蕴含着“面向接口编程”的思想。面向接口,就意味着面向抽象。
“面向对象”与“面向接口”并非两种不同的方法学,“面向接口”其实是“面向对象”的内在要求,是其一部分内涵的集中表述。我们对于理想软件的期待常被概括为“高内聚,低耦合”,这也是整个现代软件开发方法学所追求的目标。面向对象方法学作为现代软件开发方法学的代表,本身就蕴含着“高内聚,低耦合”的思想精髓,从这个意义上来说,“面向对象”这个表述更加侧重于“高内聚”,“面向接口”的表述则更加侧重于“低耦合”。