面向对象
概述
目前软件开发技术中两种主流思想:面向过程、面向对象
面向过程思想出现较早,C语言
面向对象思想出现较晚,C++语言,C#,Java,Python。。。。
面向过程
需要实现一个功能的时候,将人类的思维转变成为计算机的思维,然后重点去实现这个功能的每个步骤和过程,每一个步骤都需要亲力亲为
面向对象
需要实现一个功能的时候,并不需要考虑其计算机实现这个功能的细节,不考虑步骤和过程,只需要关心谁去做,做的最终结果即可
例如
生活中案例:吃饭
面向过程:自己动手(丰衣足食)
饿了->买菜->洗菜摘菜->切菜->升火->倒油->炒菜->吃饭->洗锅
面向对象:衣来伸手饭来张口
饿了—>(下馆子,叫外卖,找媳妇)->吃饭
编程中案例:三个数求平均值
面向过程:
a接收第一个数->b接收第二个数->c接收第三个数->d运算a+b->e运算d+c->f数数->g->运算e/f
面向对象:
a接收第一个数->b接收第二个数->c接收第三个数->找math对象使用avg(a,b,c)->得到结果
类和对象
面向对象编程的重要概念:类、对象
类
类是在创建这个对象时,所创建的本质是一个类,将类理解为对象的抽象化概念
例如:猴(类)----孙悟空(对象)
人(类)----六小龄童(对象)
面向对象的语言中,想要创建一个对象,就要先创建这个对象所属的类,“类”就是用来模拟现实事物的
类要模拟现实世界中的事物通常需要通过两个方面来模拟:
- 属性:事物的特征描述信息,例如人:(姓名,姓名,年龄,身高,肤色等)。用于描述事物某个特征
- 行为:事物的能力行动方案,例如人:(吃饭、睡觉、打豆豆等),用于描述事物能干什么
对象
对象是指类的具体表现,对象是类的具体的属性、行为的体现者:
总结
类:抽象的概念,是一张"蓝图"
对象:具体的实现,是一个真正的“作品”
类的构成
构成
类(class)由3个部分组成
- 类的名称:类名
- 类的属性:类内部的一组数据变量
- 类的方法:类内部的一些可以操作的函数(行为)
类的属性和方法称之为类的成员
函数:是一个代码片段集合
方法:类里面的函数称之为方法
人类的设计
- 事物的名称(类名):Person
- 属性:身高(height),姓名(name),年龄(age)
- 方法:跑(run),打架(fight)
类的抽象问题
如何编程显示生活呢?遇到的每个独立的事务都是一个对象
拥有相同或(类似)属性、行为的所有对象都可以抽象出一个类来描述
如:英雄(鲁班七号)分析:
鲁班—类(属性:身高、颜色。。方法:跑、攻击、技能)
炮弹—类(属性:形状、颜色、攻击力…方法:飞、爆炸…)
手雷—类(属性:。。。。方法。。。。)
飞船—类(属性:。。。。。方法。。。。)
刘博超在家里的躺椅上玩手机:
类的定义
定义一个类格式如下
class 类名:
成员(方法)
# class Person:经典类
# pass
# class Person():
# pass
class Person(object): 新式类
pass
定义一个人类
class Person(object):
def info(self):
print("人在塔在,德玛西亚!")
说明
- 定义类的时候有(两类)三种方式:新式类和两种经典类,上面代码中的最后一个Person为新式类 ,前两种是经典类
- object是Python中所有的类的最顶级父类
- 类的命名规则严格按照大驼峰命名法进行
- 上例中的info是一个实例方法,类里面的方法中的第一个参数一般都是self,self表示当前的实例对象自身,当然这个self换为其他的名称也行,其作用是一个变量,这个变量指向了类的实例的对象的引用
创建对象
至此发现一个问题:在面向对象的编程中如果想要创建对象,则必须先要有类,只有类创建好了,才能创建出需要的对象
创建对象格式
对象名1 = 类名()
对象名2 = 类名()
对象名3 = 类名()
luban = Person()
zhangfei = Person()
liubei = Person()
注意
-
如果在同一时刻的三个不同变量,赋予了相同的数据,那么这三个变量的引用是同一个引用,都指向了第一个数据存储的引用
-
同一时刻的三个不同变量,赋予了同一个类的三个实例对象,那么这一个类的三个实例对象引用肯定不相同
一个类实例出来的所有对象肯定不是同一个对象
实例
针对于基于某个类产生的对象,我们讲这个对象称之为类的实例
代码中的类
类是将一组函数或变量进行封装到一个变量中,类名就是这个变量名,类成员就是这个变量的引用中存放的内容
而类的实例就是对象,那么对象名就是一个新的变量名,对象名之后给的类可以理解为在内存中复制了一个类的引用中的内容
添加类成员
添加方法
在类的内部直接声明函数,而且函数第一个参数一般自动为self(这个参数具有特殊的含义功能)
添加属性的格式
此处的添加属性指的是给类实例的对象添加一个属性
对象名.属性名=属性值
获取属性的格式
对象名.属性名
注意
通过类创建对象,然后给对象添加属性,而后才能获取对象的已有属性