面向对象
面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。
这个定义比较抽象,我们通过举一个示例来说一下面向对象的思想。
人狗大战
- 需求
- 用代码模拟人、狗打架的小游戏
- 人和狗种类不同,因此双方的属性各不相同
思考一:
- 人和狗各有不同属性
- 使用字典方式储存属性较为方便,并可储存多种属性
根据上述思考,初步构思出来的代码如下
思考二:
- 按照上述方法,如果想要定义多个‘人’和‘狗’就需要反复设置多个字典,这样非常麻烦且费时
- 这时可推导出,想要快速、便捷的定义多个‘人’和‘狗’,那么我们可以把字典内的数据封装在函数内,利用传参的方式,这样可以较为方便的生成多个‘人’和‘狗’,只需要使用不同变量名调用函数时传不同的参数即可
优化后的代码如下:
思考三:
- ‘人’和‘狗’就类似于各自不同种类的对象
- 说到这里,我们就应该明白,‘人’和‘狗’因为种类不同,所以双方的属性也各不相同,也就是说不同的对象,属性(数据)各不相同
- 当多个对象的属性生成后,我们就要开始定义彼此打架的动作(功能)
- 人打狗的动作(脚踢)
- 狗咬人的动作
- 核心思路
- ‘人’和‘狗’就是不同的对象
- 通过将不同的属性封装在不同的函数内,就可以通过相同的函数快速生成不同属性的对象
- ‘人’和‘狗’打架的方式就是对象的功能
- 人的打架方式是踢,狗的打架方式是咬,也就是说不同的类有着不同的功能,而相同的类就可以有着彼此相同的功能
需求:
- 以上我们完成了不同种类的打架方式,但是在python中,如果没有特别的限制,我们就可以把人攻击的数据传在狗攻击函数内,这样就会产生混乱,要如何实现下列需求
- ‘人’只能调用人的攻击方式
- ‘狗’只能调用狗的攻击方式
优化一:
结论:
- 通过上列代码,我们将人的专属攻击方式,封装在了人的类别内,实现了人专属的属性和功能,当人在调用自身类别,并传入符合条件的参数时,就可以生成一个人(对象)特有的属性(数据)和攻击方式(功能)
- 同上,我们也可将狗的数据和攻击方式封装在狗特有的函数内,当我们生成多条狗的时候,每条狗也就有了,狗(对象)特有的属性(数据)和攻击方式(功能)
人狗大战推导就是面对对象的核心思想:数据与功能的绑定