想要理解面向对象思想,核心就是把现实里的事物抽象成程序里的对象,每个对象包含自身特征和能做的行为,不再是单纯按步骤一行一行写流程,面向过程是先想第一步做什么第二步做什么,适合简单小逻辑,而面向对象是先划分事物,把数据和操作数据的方法打包在一起,程序拆分之后更容易看懂,后续修改和新增功能的时候不用大面积改动原有代码,代码复用性更好,大型项目多人协作的时候优势很明显,抓住类和对象封装继承多态这四个核心概念,就能慢慢吃透面向对象思想。
基础概念对照
1 类 类是模板,是一类事物的通用描述,只定义有什么属性和行为,不是具体个体,比如汽车就是一个类
2 对象 对象是类创建出来的具体实例,是真实存在的个体,比如一辆红色的宝马就是汽车类的对象
3 属性 用来描述对象的特征,汽车的颜色速度品牌都属于属性
4 方法 就是对象可以执行的动作,汽车可以启动刹车加速,这些就是方法
四大核心特性
封装
封装就是把对象的属性和方法打包放到一起,对外只开放必要的接口,内部细节隐藏起来。外部不需要知道内部怎么实现,只需要调用对外提供的方法。比如开车不用懂发动机内部结构,只需要踩油门刹车。封装可以减少外部误修改内部数据,降低出错概率。
继承
继承就是一个类可以复用另一个类已经写好的属性和方法,还可以自己新增独有的内容。比如先写交通工具类,里面有行驶停止的方法,汽车类继承交通工具类,就不用重复写行驶停止,再单独加上汽车特有的开关车灯功能。继承主要作用是减少重复代码。
多态
多态就是同一个行为,不同对象有不一样的实现方式。同样是叫这个动作,狗是汪汪叫,猫是喵喵叫。程序里统一调用同一个方法,传入不同子类对象,自动执行各自的逻辑,写代码的时候可以写通用逻辑,不用单独给每一类写分支判断。
抽象
抽象就是过滤掉无关信息,只保留当前业务需要的特征。比如做一个学生管理系统,学生只需要姓名学号班级,身高体重如果用不上就不用放进类里面,不去记录事物全部细节,只提取有用的部分。
面向对象和面向过程对比
面向过程看重步骤,关注怎么做,代码是一条一条流程,数据和操作分开。适合简单脚本,逻辑简单,改动的时候容易牵一发而动全身。
面向对象看重事物,关注谁来做,数据和方法打包在对象里,优先拆分实体。适合复杂业务,业务经常变动,方便扩展和维护。
学习理解的步骤
1 先学会识别事物,拿到需求之后先找出里面有哪些实体,比如商城系统里面用户商品订单都是实体
2 提炼每个实体的属性和行为,用户有姓名手机号,可以下单登录,商品有名称价格,可以修改库存
3 归纳通用模板,把相似实体整理成类,区分父类和子类,规划继承关系
4 做好封装,区分哪些内容对外可见,哪些内容内部隐藏
5 使用多态优化分支逻辑,减少大量 if 判断,让代码结构更干净
加深理解的额外小窍门
1 刚开始学习的时候多用生活例子类比,不要一上来死记语法,语法只是面向对象思想的实现工具。
2 不要强制所有代码都用面向对象,简单的小功能用面向过程反而更简洁。
3 写代码的时候先画简单的类关系,理清谁是谁,谁继承谁,再动手写代码。
4 区分清楚类和对象,类是图纸,对象是图纸造出来的实物,图纸不能直接上路,造出来的车才可以。
【常见问题】
问题 1 理解面向对象思想的时候,类和对象总是分不清怎么办
回答 1 理解面向对象思想的时候,类是模板图纸,对象是根据模板生成的具体实例,图纸规定汽车有轮子能跑,图纸本身不能开,造出来的那一台车才是对象,记住这个类比就能分清类和对象。
问题 2 理解面向对象思想,封装到底有什么实际用处
回答 2 理解面向对象思想,封装主要是隐藏内部复杂实现,保护内部数据不被随意篡改,对外只留出稳定调用方式,后续内部逻辑修改的时候,外部调用代码不用改动,降低维护成本。
问题 3 理解面向对象思想,是不是所有程序都适合用面向对象开发
回答 3 理解面向对象思想,不是所有程序都适合面向对象,逻辑很短一次性执行的简单脚本,面向过程更简单高效,业务复杂实体多、后续需要持续扩展维护的项目,面向对象思想优势才会体现出来。
【免责申明】
本面向对象思想讲解属于通用编程理论科普,不同编程语言对面向对象的支持程度和语法写法存在差异,思想是通用的,具体编码需要结合对应语言的语法规则练习。


