什么是面向对象?

什么是面向对象?

面向对象(OOP)的概述

面向对象(Object Oriented)是软件开发方法软件开发方法/971447),一种编程范式。面向对象用结构、应用平台、分布式系统发展到一定阶段后的产物。

面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。

很早很早以前的编程是面向过程的,比如实现一个算术运算1+1 = 2,通过这个简单的算法就可以解决问题。但是随着时代的进步,人们不满足现有的算法了,因为问题越来越复杂,不是1+1那么单纯了,比如一个班级的学生的数据分析,这样就有了对象这个概念,一切事物皆对象。将现实的事物抽象出来,注意抽象这个词是重点啊,把现实生活的事物以及关系,抽象成类,通过继承,实现,组合的方式把万事万物都给容纳了。实现了对现实世界的抽象和数学建模。这是一次飞跃性的进步。

举个最简单点的例子来区分面向过程和面向对象

有一天你想吃米线了,怎么办呢?你有两个选择

1、自己买材料,米线、肉,调料,配料等等然后切肉、煮米线、烧水,盛到盘子里。

2、去面馆:老板!来一份米线!

看出来区别了吗?1是面向过程,2是面向对象。

面向对象有什么优势呢?

首先你不需要知道米线是怎么做的,降低了耦合性。如果你突然不想吃米线了,想吃高级菜,对于面向过程来说你可能不容易做,还需要重新买菜,买调料什么的。而对于面向对象,只需要去饭馆,叫老板!那个米线换成其他的吧。提高了可维护性。总的来说就是方便,需要的时候取出来用就好了!

面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们使用的就是面向对象了。

面向过程和面向对象的区别

面向过程

特点:面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。

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

面向对象

特点:面向对象是模型化的,面向对象只需抽象出一个类,比如一个封闭的盒子,在这里面你拥有拥有解决问题的方法。需要什么方法或功能直接使用就可以了。

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

面向对象思想和面向过程思想

两种思想的不同之处。

打扫教师的卫生:

*面向过程:*思考打扫教室的卫生的步骤,椅子放到桌子上—> 扫地上垃圾—> 拖地 —> 椅子放下来—> 擦窗户—> 擦玻璃

​ 安排任务:谁做什么

*面向对象:*思考打扫教室卫生有哪些任务:地面、桌椅、门窗

​ 安排:谁适合做对应的任务。地面的劳动强度较大,就派强壮的同学去做;擦桌子需要细心,派女同学去做;门窗比较高,派高个子同学去做。

​ 找的人具备业务能力,不需要教他,安排下去就不用管了。

总结
  • 面向过程:亲力亲为,侧重于分析和处理
  • 面向对象:所有的事情交给相应的对象(具备能力)去完成,侧重于分析完成任务需要哪些(什么样)对象。

面向对象三大特性五大原则

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ff5TBZsX-1658924043804)(C:\Users\hanhan\Desktop\未命名绘图.png)]

:一组相关的属性和行为的集合,是一个抽象的概念。

对象:该类事物的具体表现形式,具体存在的个体。

成员变量:事物的属性。成员变量的默认值(与数组元素的默认值相同)

数据类型默认值
整型0
浮点型0.0
布尔型 Booleanfalse
字符型不可见字符(‘\u0000’)
引用类型null

成员方法:事物的行为

怎么理解这些呢?

类就是对一些具有共性特征,并且行为相似的个体的描述。

比如小李和老张都有姓名、年龄、身高、体重等一些属性,并且两人都能够进行聊天、运动等相似的行为。

由于这两个人具有这些共性的地方,所以我们把它抽象出来,定义为一个类——人类,而小李、老王正是这个类中的个体(对象),而每一个个体才是真正具体的存在,光提到人类,你只知道应该有哪些属性行为,但你不知道他具体的一些属性值,比如你知道他属于 “人类” 所以他应该拥有姓名,年龄等属性,但你并不知道他具体叫什么,年龄多大了。而小李和老王这两个具体的对象,却能够实实在在的知道老王今年30岁了、身高175等值。

所以可以得出结果:类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而真正根据类实例化出具体的对象,就需要占用内存空间了。

1.3 成员变量和局部变量有什么区别?

1:在类中的位置不同

  • 成员变量:类中方法外
  • 局部变量:代码块,方法定义中或者方法声明上(方法参数)

2:在内存中的位置不同

  • 成员变量:在堆中
  • 局部变量:在栈中

3:生命周期不同

  • 成员变量:随着对象的创建而存在,随着对象的消失而消失
  • 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

4:初始化值不同

  • 成员变量:有默认值(构造方法对它的值进行初始化)
  • 局部变量:没有默认值,必须定义,赋值,然后才能使用

总结

  • 抽象会使复杂的问题更加简单化。
  • 从以前面向过程的执行者,变成了张张嘴的指挥者。
  • 成员变量:有默认值(构造方法对它的值进行初始化)
  • 局部变量:没有默认值,必须定义,赋值,然后才能使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值