【刷题】Java面向对象概述

面向过程与面向对象

面向过程(POP)

  • Procedure Oriented Programming,面向过程是一种以过程为中心的编程思想,分析出解决问题所需的步骤,而后用函数把这些步骤实现,并按顺序调用。它是一种基础的顺序的思惟方式,面向对象方法的基础实现中也包含面向过程思想。

面向对象(OOP)

  • Object Oriented Programming,面向对象是按人们认识客观世界的系统思惟方式,采用基于对象(实体)的概念创建模型,模拟客观世界分析、设计、实现软件的办法。经过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应。在软件开发过程当中,宏观上,用面向对象来把握事物间复杂的关系,分析系统。微观上,仍然使用面向过程。”面向对象“是以“对象”为中心的编程思想。

区别

三大基本特征:封装、继承、多态

  

一、封装

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

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

  • 面向对象就是使用程序处理事情时以对象为中心去分析;与面向过程不一样,面向过程关心处理的逻辑、流程等问题,而不关心事件主体。而面向对象即面向主体,因此咱们在解决问题时应该先进行对象的封装(对象是封装类的实例,好比张三是人,人是一个封装类,张三只是对象中的一个实例、一个对象)。好比咱们平常生活中的小兔子、小绵羊均可以封装为一个类。编程

  • 好比兔子的属性有两只耳朵、四只腿、一双眼睛、三瓣嘴等;行为(功能)有跑、跳、吃素等。
    安全

二、继承

  • 继承是面向对象的基本特征之一,继承机制容许建立分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具备父类的实例域和方法,或子类从父类继承方法,使得子类具备父类相同的行为。相似下面这个图:
    编程语言

  • 咱们在上面已经封装了兔子这个类,其余动物也同样能够进行封装。在封装过程当中咱们发现兔子、绵羊这两个类具备类似的功能或特性如吃草,因此咱们能够抽取共有特征和方法造成高一层的类,如这里的食草动物、食肉动物。继承之间是子父类的关系。继承机制能够很好的描述一个类的生态,也提升了代码复用率,在Java中的Object类是全部类的超类,常称做上帝类。模块化

三、多态

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

  • 多态的优势:工具

      1. 消除类型之间的耦合关系
      1. 可替换性
      1. 可扩充性
      1. 接口性
      1. 灵活性
      1. 简化性
          
  • 多态存在的三个必要条件:oop

    • 继承
    • 重写(子类继承父类后对父类方法进行从新定义)
    • 父类引用指向子类对象
        
  • 简言之,多态实际上是在继承的基础上的。好比说今天咱们要去动物园参观动物,那么你说咱们去参观兔子、参观绵羊、参观狮子、参观豹子都是对的,但你不能说咱们去参观汽车。在这个例子中,子类具备多态性:除了使用本身的身份,还能充当父类。设计

五大基本原则

  

一、单一职责原则(SRP)

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

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

二、开放封闭原则(OCP)

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

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

三、里氏替换原则(LSP)

  在对象 x 为类型 T 时 q(x) 成立,那么当 S 是 T 的子类时,对象 y 为类型 S 时 q(y) 也应成立。(即对父类的调用一样适用于子类)

四、依赖倒置原则(DIP)

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

  能够这样理解,上面我举例子的时候先说了兔子和绵羊,而后才推出食草动物。但若是咱们继续认识了牛、马等食草动物,咱们会发现咱们须要不断调整食草动物的描述,这样程序会变得僵化,因此咱们不该该让子类依赖于实体,不该该让父类模块依赖于子类模块。因此咱们须要将食草动物设计为抽象类,即抽象类或接口。这样下层只须要实现相应的细节而不会影响父类。

五、接口隔离原则(ISP)

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

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

  这些基本原则须要咱们在使用面向对象编程中慢慢领会、总结。

面向对象常见问题

JAVA为何是面向对象的,为何还用int等基础类型

  • 面向对象的特征:封装,继承,多态。JAVA语言符合这些特征。

  • 为何还用int等基础类型

    • 由于在每一个封装体里,基本仍是面向过程的代码思想,所以仍是须要这些基础数据类型。

面向对象软件开发的优势有哪些?

  • 更符合人们思考习惯的思想,更多体现的是指挥者,指挥对象作事情,与面向过程的执行者区别;
  • 能够将复杂问题简单化,保证了较高的开发效率,保证了程序的鲁棒性和可维护性。
  • 易维护、易复用、易扩展,因为面向对象有封装、继承、多态性的特性,能够设计出低耦合的系统。
  • 代码开发模块化,更易维护和修改。
  • 加强代码的可靠性和灵活性。
  • 增长代码的可理解性。

封装的定义和好处有哪些?

  • 一是用private把类的细节与外界隔离起来,从而实现数据项和方法的隐藏,而要访问这些数据项和方法惟一的途径就是经过类自己,类才有资格调用它所拥有的资源(方法,数据项属性等等)。第一个好处就是数据的安全性提升了。

  • 二是经过隐藏隔离,只容许外部对类作有限的访问,开发者能够自由的改变类的内部实现,而无需修改使用该类的那些程序。只要那些在类外部就能被调用的方法保持其外部特征不变,内部代码就能够自由改变,各取所需,利于分工。提升了代码的可用性和可维护性

  • 三就是提升了代码的重用性,封装成工具类之后可以减小不少繁琐的步骤。

多态

  • 多态是编程语言给不一样的底层数据类型作相同的接口展现的一种能力。一个多态类型上的操做能够应用到其余类型的值上面。

继承

  • 继承给对象提供了从基类获取字段和方法的能力。继承提供了代码的重用性,也能够在不修改类的状况下给现存的类添加新特性。

抽象的定义?抽象和封装的不一样点?

抽象是把想法从具体的实例中分离出来的步骤,所以,要根据他们的功能而不是实现细节来建立类。Java支持建立只暴漏接口而不包含方法实现的抽象的类。这种抽象技术的主要目的是把类的行为和实现细节分离开。
抽象和封装是互补的概念。一方面,抽象关注对象的行为。另外一方面,封装关注对象行为的细节。通常是经过隐藏对象内部状态信息作到封装,所以,封装能够当作是用来提供抽象的一种策略。

参考连接

END

相关文章
相关标签/搜索