2.9
面向对象编程思想
?
学前疑问
你是不是也曾遇到过这样的困扰:当程序功能越来越复杂,代码量从几百行扩展到几千行后,突然发现自己陷入了一种“牵一发而动全身”的困境——修改一个小功能,却意外引发多个地方的错误?
1
(1)什么是面向过程
传统的面向过程的编程思想总结起来就八个字——自顶向下,逐步细化!
→ 将要实现的功能描述为一个从开始到结束按部就班的连续的“步骤”。
→ 依次逐步完成这些步骤,如果某一个步骤的难度较大,又可以将该步骤再次细化为若干个子步骤,以此类推,一直到结尾并得到我们想要的结果。
就是把要开发的系统分解为若干个步骤,每个步骤就是函数,当所有步骤全部完成以后,则这个系统就开发完毕了!
举个栗子:大家以来传智教育报名学习这件事情,可以分成哪些步骤?开始 → 学员提出报名,提供相关材料 → 学生缴纳学费,获得缴费凭证 → 教师凭借学生缴费凭证进行分配班级 → 班级增加学生信息 → 结束所谓的面向过程,就是将上面分析好了的步骤,依次执行就行了!
(2)什么是面向对象
思考:上面的整个报名过程,都有哪些动词?
提出、提供、缴纳、获得、分配、增加
有动词就一定有实现这个动作的实体!
所谓的模拟现实世界,就是使计算机的编程语言在解决相关业务逻辑的时候,与真实的业务逻辑的发生保持一致,需要使任何一个动作的发生都存在一个支配给该动作的一个实体(主体),因为在现实世界中,任何一个功能的实现都可以看做是一个一个的实体在发挥其各自的“功能”(能力)并在内部进行协调有序的调用过程!
(3)举个栗子:使用面向对象实现报名系统开发
第一步:分析哪些动作是由哪些实体发出的
学生提出报名
学生提供相关资料
学生缴费
机构收费
教师分配教室
班级增加学生信息
于是,在整个过程中,一共有四个实体:学生、机构、教师、班级!在现实中的一个具体的实体,就是计算机编程中的一个对象!
第二步:定义这些实体,为其增加相应的属性和功能
属性就是实体固有的某些特征特性信息,在面向对象的术语中,属性就是以前的变量。
比如:
一个人的属性有:身高、体重、三围、姓名、年龄、学历、电话、籍贯、毕业院校等;
一个手机的属性有:价格、品牌、操作系统、颜色、尺寸等。
功能就是就是实体可以完成的动作,在面向对象的术语中,功能就是封装成了函数或方法。
第三步:让实体去执行相应的功能或动作
教师登记学生信息
(4)面向对象编程思想迁移
以前写代码,首先想到的是需要实现什么功能——调用系统函数,或者自己自定义函数,然后按部就班的执行就行了!
以后写代码,首先想到的是应该由什么样的主体去实现什么样的功能,再把该主体的属性和功能统一的进行封装,最后才去实现各个实体的功能。
注意:面向对象并不是一种技术,而是一种思想,是一种解决问题的最基本的思维方式!
所以,面向对象的核心思想是:不仅仅是简单的将功能进行封装(封装成函数),更是对调用该功能的主体进行封装,实现某个主体拥有多个功能,在使用的过程中,先得到对应的主体,再使用主体去实现相关的功能!
(5)面向对象要比面向过程好?
一个面试题:面向过程和面向对象的区别?
① 都可以实现代码重用和模块化编程,面向对象的模块化更深,数据也更封闭和安全。
② 面向对象的思维方式更加贴近现实生活,更容易解决大型的复杂的业务逻辑。
③ 从前期开发的角度来看,面向对象比面向过程要更复杂,但是从维护和扩展的角度来看,面向对象要远比面向过程简单!
④ 面向过程的代码执行效率比面向对象高。
今日学习完毕,课后作业:
场景描述:
假设你需要开发一个简单的学生成绩统计程序,主要功能是读取一组分数,然后计算平均分。未来,这个程序有可能需要扩展,例如增加计算中位数、排序或图形化显示成绩分布图等功能。
题目:
在项目初期,从长期可维护性和扩展性的角度出发,选择哪种编程范式作为基础架构更为合适?( )
A. 面向过程编程
B. 面向对象编程
C. 两者差别不大,任意选择即可
D. 应根据首次开发的功能是否复杂来决定