Day 29(06/29)面向对象

一 面向对象的程序设计的由来

见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html

回到顶部

二 什么是面向对象的程序设计及为什么要有它

面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。

优点是:极大的降低了程序的复杂度

缺点是:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也得是大改,改一个组件,牵一发而动全身。

应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等。

面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物,必须把自己当成上帝,上帝眼里世间存在的万物皆为对象,不存在的也可以创造出来。面向对象的程序设计好比如来设计西游记,如来要解决的问题是把经书传给东土大唐,如来想了想解决这个问题需要四个人:唐僧,沙和尚,猪八戒,孙悟空,每个人都有各自的特征和技能(这就是对象的概念,特征和技能分别对应对象的数据属性和方法属性),然而这并不好玩,于是如来又安排了一群妖魔鬼怪,为了防止师徒四人在取经路上被搞死,又安排了一群神仙保驾护航,这些都是对象。然后取经开始,师徒四人与妖魔鬼怪神仙交互着直到最后取得真经。如来根本不会管师徒四人按照什么流程去取。

面向对象的程序设计的

优点是:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。

缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。于是我们经常看到一个游戏人某一参数的修改极有可能导致阴霸的技能出现,一刀砍死3个人,这个游戏就失去平衡。

应用场景:需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方

面向对象的程序设计并不是全部。对于一个软件质量来说,面向对象的程序设计只是用来解决扩展性。

回到顶部

三 类和对象

回到顶部

3.1 什么是对象,什么是类

  提示:python的class术语与c++有一定区别,与 Modula-3更像。

  python中一切皆为对象,且python3统一了类与类型的概念,类型就是类,所以,不管你信不信,你已经使用了很长时间的类了

1 >>> dict #类型dict就是类dict
2 <class ‘dict‘>
3 >>> d=dict(name=‘egon‘) #实例化
4 >>> d.pop(‘name‘) #向d发一条消息,执行d的方法pop
5 ‘egon‘

  基于面向对象设计一个款游戏:英雄联盟,每个玩家选一个英雄,每个英雄都有自己的特征和和技能,特征即数据属性,技能即方法属性,特征与技能的结合体就一个对象。

  从一组对象中提取相似的部分就是类所有对象都具有的特征和技能的结合体

  在python中,用变量表示特征,用函数表示技能,因而类是变量与函数的结合体,对象是变量与方法(指向类的函数)的结合体

  

  补充几个有意思的点:

  garen_hero.Q()称为向garen_hero这个对象发送了一条消息,让他去执行Q这个函数,完成一个功能,类似的有:

  garen_hero.W()

  garen_hero.E()

  garen_hero.R()

  一个英雄可以攻击另外一个英雄,这就是对象之间的交互

  garen_hero.attack(Riven)

回到顶部

3.2 类相关知识

3.2.1 初识类

在python中声明函数与声明类很相似

声明函数

1 def functionName(args):
2      ‘函数文档字符串‘
3       函数体 

声明类

 1 ‘‘‘
 2 class 类名:
 3     ‘类的文档字符串‘
 4     类体
 5 ‘‘‘
 6
 7 #我们创建一个类
 8 class Data:
 9     pass 

 经典类与新式类

在本节开头介绍得出结论,类是数据与函数的结合,二者称为类的属性

class Garen:        #定义英雄盖伦的类,不同的玩家可以用它实例出自己英雄;
    camp=‘Demacia‘  #所有玩家的英雄(盖伦)的阵营都是Demacia;
    def attack(self,enemy):   #普通攻击技能,enemy是敌人;
        enemy.life_value-=self.aggressivity #根据自己的攻击力,攻击敌人就减掉敌人的生命值。

ps:http://www.cnblogs.com/linhaifeng/articles/6182264.html  (详见老师博客)
时间: 2024-10-19 18:18:22

Day 29(06/29)面向对象的相关文章

06.01_面向对象(面向对象思想概述)

###06.01_面向对象(面向对象思想概述)(了解)* A:面向过程思想概述 * 第一步 * 第二步 * B:面向对象思想概述 * 找对象(第一步,第二步) * C:举例 * 买煎饼果子 * 洗衣服 * D:面向对象思想特点 * a:是一种更符合我们思想习惯的思想 * b:可以将复杂的事情简单化 * c:将我们从执行者变成了指挥者 * 角色发生了转换* E:面向对象开发 * 就是不断的创建对象,使用对象,指挥对象做事情.* F:面向对象设计 * 其实就是在管理和维护对象之间的关系.* G:面向

2017.06.29数据挖掘基础概念第二.三章

第二章21.研究的属性类型标称属性:值是一些符号或事物的名称,代表某种类型.编码或状态二元属性:是一种标称属性,只有两个类别或状态,又称布尔属性序数属性:是一种属性,其可能的值之间具有有意义的序或秩评定,但是相续值之间的差是未知的数值属性:是定量的,即他是可度量的量,可用整数或实数值表示(区间和比率标度)22.数据散布常见的度量量(数据如何分散的方法/识别离群点)极差 四分位数.四分位数极差.五数概括图.方差和标准差23.审视数据的图形条形.饼图.线图.分位数图.分位数-分位数图.直方图和散点图

Work 2(演讲类) (2017.06.29)

2017.06.29数据挖掘基础概念第十,十一章

第十章63.什么是聚类分析 一个把数据对象划分成子集的过程.每一个子集市一个簇,使得簇中的对象彼此相似,但与其他簇中的对象不相似.由聚类分析产生的簇的集合称做一个聚类.64.数据挖掘对聚类的要求 1.可伸缩性 2.处理不同属性类型的能力 3.发现任意形状的簇 4.对于确定输入参数的领域知识的要求 5.出来噪声数据的能力 6.增量聚类和对输入次序不敏感 7.聚类高维数据的能力 8.基于约束的聚类 9.可解释性和可用性 10.划分准则 11.簇的分离性 12.相似性度量 13.聚类空间65.基本聚类

2017.06.29数据挖掘基础概念第六,八,九章

第六章51.关联规则的挖掘的两个过程1.找出所有的频繁项集2.由频繁项集产生强关联规则52.频繁项集挖掘方法 1.Apriori算法 2.挖掘频繁项集的模式增长方法 3.使用垂直数据格式挖掘频繁项集53.提高Apriori算法的效率 1.基于散列的技术 2.事务压缩 3.划分 4.抽样 5.动态项集计数 第八章54.如何进行分类 数据的分类是一个两阶段过程,包括学习阶段和分类阶段. 在第一阶段,建立描述预先定义的数据类或概念集的分类器 在第二阶段,使用模型进行分类,首先评估分类器的预测准确率55

2017.06.29 数据挖掘概念知识第一章

第一章1.数据仓库技术:1.数据清理 2.数据集成 3.联机分析处理2.数据挖掘(知识发现)过程P5详见图 1.数据清理 2.数据集成 3.数据选择 4.数据变换 5.数据挖掘 6.模式评估 7.知识表示3.大数据的特点: 1.量大 2.种类多 3.处理速度快 4价值密度低 5.复杂性4.类与概念描述方法过程: 1.数据特征化 2.数据区分 3.数据特征化和区分5.分类如何提供导出的模型: 导出的模型可以多种形式表示:分类规则.决策树.数学公式或神经网络6.一个模型是有趣的: 1.易于被人理解

2017.06.29数据挖掘基础概念第四章

第四章39.为什么在进行联机分析处理(OLAP)时,我们需要一个独立的数据仓库,而不是直接在日常操作的数据库上进行 1.提高两个系统的性能 2.操作数据库支持多事务的并发处理,需要并发控制和恢复机制,确保一致性和事务的鲁棒性 3.两者有着不同的数据的结构.内容和用法40.什么是数据仓库 数据仓库是一种数据库,它与单位的操作数据库分别维护,数据仓库系统允许将各种应用系统集成在一起,为统一的历史数据分析提供坚实的平台,对信息处理提供支持,是一个面向主题的.集成的.时变得.非易失的数据集合,支持管理者

2019.06.29 - 上个接口输出的参数需要给下个接口做输入的参数

1.UNintest框架代码执行顺序: 先执行setUp  - 然后执行test01方法  - 再执行tearDown方法 2.如果想要使用test01返回的参数作为test02传入的参数则有两种方式:①.不使用UNintest框架 直接写普通类 class xx(): 也不需要setUp和tearDown方法 直接在test01中调用base,然后去拼接URL.test01中直接return需要传入下个接口的参数 test02接口使用类名.test01()获得test01 return回来的的

.NET基础 (06)面向对象的实现

面向对象的实现1 C#中类可以有多个父类.可以实现多个接口吗2 简述C#中重写.重载和隐藏的概念3 为什么在构造方法中调用虚方法会导致问题4 在C#中如何声明一个类不能被继承 面向对象的实现 1 C#中类可以有多个父类.可以实现多个接口吗 C#中最多只能有一个父类,但可以实现多个接口. 2 简述C#中重写.重载和隐藏的概念 重写是指用Override关键字重新实现基类中的虚方法,在运行的过程中,无论通过那个类型的引用,真正类型的方法将被调用. 隐藏是指用new关键字重新实现基类中的方法,在运行的