转载

Java 基础(一) -- 面向对象

面向过程(Process-oriented programming)是一种以事件为中心的编程思想。就是分析出解决问题所需要的步骤,然后用函数把这些步骤全部实现,然后按照顺序依次调用。

什么是面向对象(oop)

面向对象是以对象为中心的编程思想

举例理解

汽车发动、汽车到站。汽车启动是一个事件,汽车到站是另一个事件,面向过程的思想是我们关心的是事件,而不是汽车本身。针对这两个事件形成两个函数,依次调用。 对于面向对象的思想来说,我们关心的是汽车这类对象,两个事件只是这类对象所具有的行为。并且这些行为并没有顺序。 面向过程的思维方式是分析综合,面向对象的思维方式是构造。

面向过程和面向对象的优缺点

面向过程

优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。

缺点:没有面向对象易维护、易复用、易扩展

面向对象

优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护

缺点:性能比面向过程低

面向对象的三大基本特征

封装

封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别,将抽象得到的数据和行为(或功能)相结合, 形成一个有机的整体 ,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。

封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。

继承

继承是面向对象的基本特征之一,继承机制允许创建分等级层次的类。 继承就是子类继承父类的特征和行为 ,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

类似下面这个图:

Java 基础(一) -- 面向对象
我们在上面已经封装了兔子这个类,其他动物也一样可以进行封装。在封装过程中我们发现兔子、绵羊这两个类具有相似的功能或特性如吃草,所以我们可以 抽取共有特征和方法形成高一层的类

,如这里的食草动物、食肉动物。继承之间是子父类的关系。继承机制可以很好的描述一个类的生态,也提高了代码复用率,在Java中的Object类是所有类的超类,常称作上帝类。

多态

多态同一个行为具有多个不同表现形式或形态的能力。是指一个类实例(对象)的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

面向对象的五大基本原则

单一职责原则(SRP)

一个类应该有且只有一个去改变它的理由,这意味着一个类应该只有一项工作。

比如在职员类里,将工程师、销售人员、销售经理这些情况都放在职员类里考虑,其结果将会非常混乱,在这个假设下,职员类里的每个方法都要if else判断是哪种情况,从类结构上来说将会十分臃肿。

开放封闭原则(OCP)

对象或实体应该对扩展开放,对修改封闭。

更改封闭即是在我们对模块进行扩展时,勿需对源有程序代码和DLL进行修改或重新编译文件!这个原则对我们在设计类的时候很有帮助,坚持这个原则就必须尽量考虑接口封装,抽象机制和多态技术

里氏替换原则(LSP)

在对象 x 为类型 T 时 q(x) 成立,那么当 S 是 T 的子类时,对象 y 为类型 S 时 q(y) 也应成立。(即对父类的调用同样适用于子类) 白话翻译: 一个软件如果使用的是一个父类的话, 那么一定适用于其子类, 而察觉不出父类对象和子类对象的区别。 也即是说,在软件里面, 把父类替换成它的子类, 程序的行为不会有变化, 简单地说, 子类型必须能够替换掉它们的父类型。

依赖倒置原则(DIP)

高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。具体实现应该依赖于抽象,而不是抽象依赖于实现。

举个例子,今天认识了兔子和羊,然后推出了食草动物。但如果明天又认识牛、马等食草动物,我们会发现我们需要不断调整食草动物的描述,这明显就不合理。因此我们不应该让子类依赖于实体,不应该让父类模块依赖于子类模块。因此当把食草动物设计为抽象类( 抽象类或接口 )这样下层只需要实现相应的细节而并不影响父类。

接口隔离原则(ISP)

不应强迫客户端实现一个它用不上的接口,或是说客户端不应该被迫依赖它们不使用的方法,使用多个专门的接口比使用单个接口要好的多!

比如,为了减少接口的定义,将许多类似的方法都放在一个接口中,最后会发现,维护和实现接口的时候花了太多精力,而接口所定义的操作相当于对客户端的一种承诺,这种承诺当然是越少越好,越精练越好,过多的承诺带来的就是你的大量精力和时间去维护!

原文  https://juejin.im/post/5d8734d86fb9a06ad005abc9
正文到此结束
Loading...