Java面向对象—概述


一、面向对象的概述

1.什么是面向对象
​ Java语言就是面向对象的语言。要使用Java进行面向对象编程,首先建立一个面向对象的思想。面向对象是一种直观而且程序结构简单的程序设计方法。它比较符合人类认识现实世界的思维。
基本思想:把问题看成若干对象的组成,这些对象之间是独立的,但是他们之间又可以相互配合,连接和协调,从而共同完成整个程序实现的任务。

2、什么是对象?
​ 对象就是用来描述客观事物的一个实体。用面向对象的方法解决问题,需要对现实世界中的对象进行分析与归纳,找出哪些对象与解决问题的关联。
例如:华为手机、小米手机、苹果手机,把这些手机看成对象。
但是他们的之间具有不同特征。具体来说就是品牌、价格、性能不同。

3、什么是类?
上面所提到的手机对象之间具有一些共同的特征(属性):都有触摸屏,都有扬声器等、
还有一些共同的功能(或行为):能打电话,能拍照等。
把这些共同的特征和共同的行为组织到一个单元中,就得到类。
类是具有相同的属性和方法的一组对象集合。类定义了对象将会拥有一些特征(属性)和行为(方法)。

类与对象的关系就如同模具和用整个模具制作出的物品之间的关系。
一个类给出了他的全部对象的的一个统一的定义,而他的每个对象则都是符合这种定义的一个实体。
因此类和对象的关系就是抽象和具体的关系。类是多个对象进行综合的抽象的结果,是实体对象的概念模型,而一个对象是一个类的实例。

  • 面向对象思想从概念上讲分为以下三种:OOA、OOD、OOP
    OOA:面向对象分析(Object Oriented Analysis)
    OOD:面向对象设计(Object Oriented Design)
    OOP:面向对象程序(Object Oriented Programming )

举例子理解面向对象和面向过程:
假如有一天你想吃宫保鸡丁了,怎么办呢?你有两个选择
1、自己买材料,鸡肉,调料,胡萝卜,黄瓜等等然后切菜切肉,开炒,盛到盘子里。

2、去饭店或者点外卖,直接张开嘴:就能吃到宫保鸡丁

看出来区别了吗?1是面向过程,2是面向对象。
面向对象有什么优势呢?首先你不需要知道宫保鸡丁是怎么做的,降低了耦合性。如果你突然想吃鱼香肉丝了,对于1你可能不太容易了,还需要重新买菜,买调料什么的。对于2,太容易了,大喊:老板!那个宫保鸡丁换成鱼香肉丝吧,提高了可维护性。总的来说就是降低耦合,提高维护性!

  • 面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。
  • 面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,我们不用管,我们会用就可以了。
  • 面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们使用的就是面向对象了。

二、面向对象与面向过程的区别

面向过程
优点:性能比面向对象好,因为类调用时需要实例化,开销比较大,比较消耗资源。
缺点:不易维护、不易复用、不易扩展

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

三、面向对象的三大特征

  • 封装:核心思想就是“隐藏细节”、“数据安全”,将对象不需要让外界访问的成员变量和方法私有化,只提供符合开发者意愿的公有方法来访问这些数据和逻辑,保证了数据的安全和程序的稳定。所有的内容对外部不可见。
  • 继承:子类可以继承父类的属性和方法,并对其进行拓展。将其他的功能继承下来继续发展 。提高代码复用性;继承是多态的前提。
  • 多态:同一种类型的对象执行同一个方法时可以表现出不同的行为特征。通过继承的上下转型、接口的回调以及方法的重写和重载可以实现多态。方法的重载本身就是一个多态性的体现。

四、面向对象的五大基本原则

  1. 单一职责原则(SRP)
    一个类应该有且只有一个改变它的理由,这意味着一个类应该只有一项工作。

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

  3. 里氏替换原则(LSP)
    子类可以替换父类出现在父类能够出现的任何地方。
    在对象x为类型T时q(x)成立,那么当S是T的子类时,对象y为类型S时q(y)也应成立。(即对父类的调用同样适用于子类)

  4. 依赖倒置原则(DIP)
    高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。具体实现应该依赖于抽象,而不是抽象依赖于实现。
    可以这样理解,上面我举例子的时候先说了兔子和绵羊,然后才推出食草动物。但如果我们继续认识了牛、马等食草动物,我们会发现我们需要不断调整食草动物额描述,这样程序会变得僵化,所以我们不应该让子类依赖于实体,不应该让父类模块依赖于子类模块。所以我们需要将食草动物设计为抽象类,即抽象类或接口。这样下层只需要实现相应的细节而不会影响父类。

  5. 接口隔离原则(ISP)
    设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好。就比如一个手机拥有打电话,看视频,玩游戏等功能,把这几个功能拆分成不同的接口,比在一个接口里要好的多。总结不应该强迫客户端实现一个它用不上的接口,或者说客户端不应该被迫依赖它们不使用的方法,使用多个专门的接口比使用单个接口要好的多!

总结

  • 抽象会使复杂的问题更加简单化。
  • 从以前面向过程的执行者,到将对应的事交给对应的对象去做,变成了张张嘴的指挥者。
  • 面向对象更符合人类的思维,面向过程则是机器的思想
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是鹏鹏哦

你的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值