A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小江哥 黑马粉丝团   /  2018-12-8 17:19  /  2130 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1. 什么是 向对象 ?
思考: 设计 五棋游戏 的 编程思路

1.    对于型程序,其逻辑和功能都很复杂,如果按照业务逻辑 去想,我们往往从下⼿
2.    换式,想想五棋游戏中有哪些元素? 这些元素 都做了什么?
2.    向对象概念
1.    棋⼿、棋盘都可以作为个整体,来记录些与之相关联的数据,完成些与之相关联的操作,我们可以将这个整体称为 对象
2.    向对象编程 (OOP,Object Oriented Programming)可以理解为将具有相互关系的数据/操作封装成对象,以对象的度去处理问题,让对象来完成相应处理
3.    向对象和 向过程
按照业务逻辑 编写五棋程序,过程应该是这样的:
1. 先显示棋盘()
2. 执⿊棋⼿下⼦()
3. 接着刷新界⾯()
4. 然后判断⿊⼦是否胜出()
5. 执⽩棋⼿下⼦()
6. 接着刷新界⾯()
7. 然后判断⽩⼦是否胜出()
按照业务逻辑 从上到下 设计程序 的式,叫做 向过程编程 (ProcedureOriented
Programming,POP,向过程程序设计)
向过程编程 最易被初学者接受,其往往⽤⼀⻓段代码来实现指定功能,步接步,环环相扣对于型项,如果使⽤⾯向过程编程,则很容易导致代码结构过于紧密、耦合度,易出现代码冗余,并且 不利于团队开发
以对象的视 编写五棋程序,过程是这样的:
向对象编程 的优点
将数据和业务抽象为 对象,有利于程序整体结构的分析和设计,使设计思路更加清晰
业务以对象为单位,对象各完成作,减少了代码耦合度,有助于业务升级 和 代码重构
便作划分,有利于提团队开发的效率
类和对象
对象
对象的组成类
类和对象的关系
1.    对象
对象 是承载数据,执操作的 个具体 ”事物”,如具体某,具体某只狗...
思考: 五棋游戏中,有个对象?
2.    对象的组成
对象中包含两个组成部分:
属性: 于记录与对象相关的数据,如姓名,年龄,身,肤
法: 于实现与对象相关的操作,如吃饭,睡觉,⻜⾏,歌唱等
向对象演练
下图中,有哪些对象/属性/法?

* 对象: 向⽇葵1
* 属性: ⾎量(100)
*⽅法:放阳光
* 对象: 向⽇葵2
* 属性: ⾎量(100)
*⽅法:放阳光
...
* 对象:豌⾖1
*属性:颜⾊(绿)、发型(1)、⾎量(100)
*⽅法:发炮, 摇头
* 对象:豌⾖2
*属性:颜⾊(蓝)、发型(2)、⾎量(100)
*⽅法:发炮, 摇头
...
* 对象:坚果1
* 属性: ⾎量(100)
*⽅法:阻挡
* 对象:坚果2
* 属性: ⾎量(50)
*⽅法:阻挡
...
* 对象:僵⼫1
3.    类
物以类聚,以群分
很多事物存在 相同的操作/为,都进吃饭、睡觉,狗都会跑会叫等等描述共同为的集合,称为类 (class)
类是总结事物特征的 抽象概念,对象是 具体存在的某个实物
以下哪些是类,哪些是对象?
奔驰汽⻋奔驰smart
张三的那辆奔驰smart狗
⼤⻩狗
李四家那只⼤⻩狗
⽔ 果 苹 果 红苹果
红富⼠苹果
类是总结事物特征的 抽象概念,对象是 具体存在的某个实物
4.    类和对象的关系
在编程中,类就是创建对象的模板 或者说 制造⼿册,来定义对象公共的为类总结了对象的共同特征,有利于复代码创建拥有相同特征的对象
每个对象必须有个对应的类

定义类
定 义 类 定义
1.    定义类
定义个类,格式如下:
类名 的命名规则按照"驼峰"
2.    定义
类是定义对象的共同为的,也就是说 在类中定义对象的
定义法:
法的格式和函数类似,也可以设置参数和返回值,但是 需要设置第个参数为 self
注意定义法需要在类的缩进中
demo:定义个Car类
创建对象
创建对象调⽤⽅
定义/使属性创建多个对象
1.    创建对象
python中,可以根据已经定义的类去创建出对象创建对象的格式为:
创建对象demo:
2.    调⽤⽅
创建对象的格式为:
注意:虽然定义法时设置第个参数 self ,但是调⽤⽅法时不要传递对应 self 的参数
对象调⽤⽅法demo:
提示:pycharm测试之前学习过的各种数据类型变量,可以发现都会提示若⼲⽅法,这说明了什么?
3.    定义/使属性
定义/设置属性 格式:
属性和变量类似,次赋值时会定义属性:
4.    创建多个对象
类作为对象的模具,根据类可以创建多个对象
提问:如果对象有个 独⼀⽆⼆为,不是共同的,这个法定义在哪
python语法要求 法必须定义在类中,如果某个为只有个对象拥有,也需要为该对象单独设计个类。
self
self 关键字的使
法中定义属性
1. self
提问:如果对象的法中需要使该对象的属性,怎么办? 关键字self 主要于对象法中,表示调法的对象
法中使 self ,可以获取到调当前法的对象,进获取到该对象的属性和法提问:调对象的法时,为什么不需要设置self对应的实参?
某个对象调法时,python解释器会把这个对象作为第个参数传递给法,所以开发者只需要在定义法时 “预留” 第个参数为 self 即可
. 法中定义属性
使 self 操作属性 和对象的变量名操作属性效果上相同,如果属性在赋值时还没有定义,则会
动定义属性并赋值
      init  ()
      init () 基本使
      init () 定义参数
1.         init  ()基本使
如何让创建出来的对象包含些默认属性,并且有初始值?
      init () 法叫做 对象的初始化法,在创建个对象后默认会被调,不需要⼿动调开发者可以实现这个法,并在该法中定义属性并设置初始值
2.         init  ()定义参数
如果对象默认属性的初始值不样,怎么办?
      init (self) 除了默认参数self ,还可以设置任意个数的定义参数,例如         init (self,x,y,z)
init法 设置的定义参数必须和创建对象时传递的参数保持致,例如 tom = Cat(x,y,z)
开发者可以 设置定义参数,为对象的默认属性提供 不同的初始值
开发中,般会在       init () 中定义对象的属性
self.name = new_name self.age = new_age
def introduce(self):
print("名字是:%s,年龄是:%d" % (self.name, self.age))
# 创建了个对象
tom = Cat("汤姆",30)
# 添加属性
# tom.name = "汤姆" # tom.age = 30
# 获取属性print(tom.name)print(tom.age)
tom.introduce() # 相当于tom.introduce(tom) print("="*30)
lan_mao = Cat("蓝猫", 20) # lan_mao.name = " 蓝 猫" # lan_mao.age = 20 lan_mao.introduce()
              
      str   ()
如果直接print打印对象,会看到创建出来的对象在内存中的地址
当使 print(xx)  输出对象的时候,只要对象定义了      str (self) 法,就会打印该
return的信息描述
在python中法名如果是  xxxx () 的,那么就有特殊的功能,因此叫做“魔法”
class Cat:
"""定义⼀个猫类"""
definit (self,new_name, new_age):
"""在创建完对象之后 会⾃动调⽤, 它完成对象的初始化的功能"""# self.name = "汤姆"
#self.age = 20 self.name = new_name
self.age = new_age# 它是⼀个对象中的属性,在对象中存储,即只要这个对象还存在,那么这个变量就
# num = 100 # 它是⼀个局部变量,当这个函数执⾏完之后,这个变量的空间就没有了,因此其他⽅法不
defstr (self):
"""返回⼀个对象的描述信息"""# print(num)
return "名字是:%s , 年龄是:%d" % (self.name, self.age)
def eat(self):
print("%s在吃⻥...." % self.name)
def drink(self):
print("%s在喝可乐..." % self.name)
def introduce(self):
# print("名字是:%s, 年龄是:%d" % (汤姆的名字, 汤姆的年龄)) # print("名字是:%s, 年龄是:%d" % (tom.name, tom.age))
print("名字是:%s, 年龄是:%d" % (self.name, self.age))
# 创建了⼀个对象
tom = Cat("汤姆", 30)print(tom)



1 个回复

倒序浏览
一个人一座城0.0 来自手机 中级黑马 2018-12-8 20:56:00
沙发
看看不说话
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马