java工程师成神之路从零开始学习(什么是面向对象)


以下内容都是我跟着《深入理解java核心技术》这本书,一边学习一边抄录的内容。单纯的只是为了学习、巩固自己的知识点。

1.1 面向过程与面向对象

1.什么是面向过程

  1. 面向过程是一种以过程为中心的编程思想。面向过程是具体化,流程化的。
  2. 开发范式:将问题拆分为一个一个步骤,然后实现每个步骤,再依次调用。
  3. 优点:执行效率高,其代码都是流程化的,可以明确的知道自己哪一步要做什么。
  4. 缺点:代码重用性低、扩展性差、后期维护难度较大。

2.什么是面向对象

  1. 面向对象是一种对现实世界理解和抽象的方法。运用封装、继承、多态等方法,通过抽象的方式进行软件开发。
  2. 开发范式:将问题分解成一个个步骤,对每个步骤进行相应的抽象,形成对象,通过不同对象之间的调用,组合解决问题。
  3. 优点:面向对象更加符合人类的思维方式。用这种方式编写的代码的扩展性、可维护 性都很高。由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。
  4. 缺点:性能比面向过程低。

1.2 面向对象的三大基础特征

1.封装

  • 把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的类或者对象隐藏信息。
  • 抽象是将一个类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节。
  • 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,可以不提供给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也就没有什么意义。
  • 隐藏对象的属性和实现细节,仅对外部提供公共访方式,将变化隔离,便于使用,提供复用性和安全性。

2.继承

  • 继承可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
  • 子类拥有父类非private的属性和方法。
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
  • 子类可以用自己的方式实现父类的方法。

3.多态

  • 多态是指一个类实例的相同方法在不同情形下有不同的表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。

1.3 面向对象的五大基本原则

1.单一职责原则(Single Responsibility Principle)

单一职责原则的核心思想是:一个类最好只做一件事,只有一个引起它变化的原因。(类的功能要单一)

2. 开放封闭原则(Open-Close Principle)

开放封闭原则的核心思想是:软件实体应该是可扩展且不可修改的。(对扩展是开放的,对修改是封闭的)

开放封闭原则主要体现在两个方面

  1. 对扩展开放,意味着当有新的需求或者变化时,可以对现有代码进行扩展,以适应新的情况。
  2. 对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对其进行任何尝试的修改。

3. 里氏替换原则(the Liskov Substitution Principle LSP)

里氏替换原则的核心思想是:子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有当自类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。

举个例子:你能够代替你爸去你爷爷家干活。

4.接口隔离原则(the Interface Segregation Principle ISP)

接口隔离原则的核心思想是:使用多个小的专门的接口,而不要使用一个大的总接口。

举个例子:一个手机拥有打电话,看视频,玩游戏等功能,把这几个功能拆分成不同的接口,比在一个接口里要好的多。

分离接口的手段主要有一下两种:

  1. 委托分离,通过增加一个新的类型来委托客户的请求,隔离客户和接口的直接以来,但是会增加系统的开销。
  2. 多重继承分离,通过接口多继承来实现客户的需求,这种事较好的方式。

5.依赖倒置原则(the Dependency Inversion Principle DIP)

依赖倒置原则的核心思想是:程序要依赖于抽象接口,而不是具体的实现。简单的说,就是要对抽象进行编程,不要对实现进行编程。
高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。就是你出国要

举个例子:说你是中国人,而不能说你是哪个村子的。比如说中国人是抽象的,下面有具体的xx省,xx市,xx县。你要依赖的抽象是中国人,而不是你是xx村的。

猜你喜欢

转载自blog.csdn.net/weixin_41317840/article/details/128714480
今日推荐