面向对象的编程思想
一、什么是面向对象?
面向对象编程的核心思想是把构成问题的各个事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在解决问题的过程中经历的步骤和行为。对象作为程序的基本单位,将程序和数据封装在一起,以提高程序的重用性,灵活性和可扩展性。类是创建对象的模板,一个类可以创建多个对象。对象是类的实例化。
(将现实世界中的事物抽象为对象,每个对象都拥有自己的属性和行为。属性描述了对象的状态,而行为则定义了对象可以执行的操作。例如,我们可以将一个汽车抽象为一个对象,它拥有颜色、品牌、速度等属性,以及启动、加速、刹车等行为。)
类是抽象的,不占用存储空间;而对象是具体的,占用存储空间。
二、面向对象有三大特性:封装,继承,多态
封装(Encapsulation):
封装是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。简单来说,就是将一个对象共有的属性和行为抽离出来封装成一个类。
继承(Inheritance):
继承是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。简单来说,继承允许我们创建一个新的类,它继承了另一个类的属性和行为,子类可以拥有父类所有可以访问的字段和方法。同时,通过继承,我们可以建立类与类之间的层次关系,形成一个类的家族树。
多态(Polymorphism):
多态是同一个行为具有多个不同表现形式或形态的能力。简单来说,是同一个接口,使用不同的实例而执行不同操作。(例如:黑白打印机和彩色打印机相同的打印行为却有着不同的打印效果)
多态还分为静态多态和动态多态,静态多态的体现主要是方法重载,动态多态体现在方法重写,父类接收不同子类的实例,接口接收不同实现类的实例。
- 对象类型和引用类型之间存在着继承(类)/ 实现(接口)的关系;
- 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
- 如果子类重写了父类的方法,最终执行的是子类覆盖的方法,如果没有则执行的是父类的方法。
三、说一说类、对象、成员变量和成员方法的关系和理解
类:一组相关的属性和行为的集合,是一个抽象的概念。可以将类看做是创建对象蓝图,使用事物的属性特征和行为特征来描述该类事物,对象根据这个蓝图去具体实现某个东西。
现实中,描述一类事物:
属性:就是该事物的状态信息。
行为:就是该事物能够做什么。
对象:是一类事物的具体表现形式,具体存在的个体。对象是类的一个实例,必然具备该类事物的属性和行为。
成员变量:事物的属性
成员方法:事物的行为
上面我们说了这几个概念,那么到底应该怎么理解呢?
类就是对一些具有共性特征,并且行为相似的个体的描述。
例1:比如小李和老张都有姓名、年龄、身高、体重等一些属性,并且两人都能够进行聊天、运动等相似的行为。
由于这两个人具有这些共性的地方,所以我们把它抽象出来,定义为一个类——人类,而小李、老王正是这个类中的个体(对象),而每一个个体才是真正具体的存在,光提到人类,你只知道应该有哪些属性行为,但你不知道他具体的一些属性值,比如你知道他属于 “人类” 所以他应该拥有姓名,年龄等属性,但你并不知道他具体叫什么,年龄多大了。而小李和老王这两个具体的对象,却能够实实在在的知道老王今年30岁了、身高175等值。
例2:比如来说,给一张“伞”的蓝图,我们设计出了晴雨伞,剑伞等等,你会发现,这些伞都有相同的行为呀----遮雨。
所以可以得出结果:
- 类是对象的抽象(模板、蓝图),而对象是类的具体实例。类描述了一组有相同属性和相同方法的对象。
- 类是抽象的,不占用内存,而真正根据类实例化出具体的对象,就需要占用内存空间了。
面向过程和面向对象的优缺点和区别
A:面向过程
优点:性能上它是优于面向对象的,因为类在调用的时候需要实例化,开销过大。
缺点:不易维护、复用、扩展
用途:单片机、嵌入式开发、Linux/Unix等对性能要求较高的地方
B:面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:一般来说性能比面向过程低
低耦合:简单的理解就是说,模块与模块之间尽可能的独立,两者之间的关系尽可能简单,尽量使其独立的完成成一些子功能,这避免了牵一发而动全身的问题。这一部分我们会在面向对象学习结束后进行系统的整理和总结。
总结:只通过教科书后的例题是无法体会到面向过程所存在的问题的,在一些小例程中,面向过程感觉反而会更加的简单,但是一旦面临较大的项目,我们需要编写N个功能相似的函数,函数越来越多,代码量越来越多,你就知道这是一场噩梦了。
区别:
面向过程:强调步骤。
面向对象:强调对象,这里的对象就是洗衣机
举例:
洗衣服:
面向过程:把衣服脱下来–>找一个盆–>放点洗衣粉–>加点水–>浸泡10分钟–>揉一揉–>清洗衣服–>拧干–>晾起来
面向对象:把衣服脱下来–>打开全自动洗衣机–>扔衣服–>按钮–>晾起来
参考链接:
什么是面向对象的编程思想?_什么是面向对象编程思想-CSDN博客
什么是面向对象?(通俗易懂) - BWH_Steven - 博客园 (cnblogs.com)
面向对象的思想(通俗易懂)_写出你对面向对象思想的理解-CSDN博客
深入浅出理解面向对象编程-百度开发者中心 (baidu.com)
什么是面向对象,它的三个基本特征:封装、继承、多态-CSDN博客