一个类即对一类具有同属性的对象的抽象,蓝图,原型。在类中定义了这些对象都具有的属性,共同的方法。
一个对象即是一个类的实例化后的对象,比如人类(class),实例化成小明(object),实例化后的对象具有类共同的属性,也可以具有自己特别的属性。
在类中对数据的赋值,内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法。
一个类可以派生出多个子类,子类可以使用父类的属性和方法。
一个基类派生出多个子类,这些子类继承了父类同样的属性和方法,同时也对父类的方法做出了不同的实现。
编程分为两种基本方式:面向过程,面向对象。
简单来说,当我们按照解决一件事的思路,逐条滤清内容和设计程序,直到将问题解决,那么这是面向过程编程。
面向对象是从实体(对象object)出发,设计出相应的包含属性和方法的模板(类class),完成对真实世界的描述,并相互产生互动解决问题。
面对人狗大战的游戏,首先我们确定两个游戏当中的角色:狗,人。同时他们分别具有自己的属性(血量,体力等)以及行为(咬人,打狗)
# 所以可以看到人和狗,两个对象在游戏中所具备的基本属性如上。那么我在玩游戏的时候,游戏的方式,可以自定义名字,并通过type或gender来区别杀伤力,给游戏带来可玩性,那么我们需要一个模板来根据我们的输入的参数来自定义实体:
# 这样我便通过两个实体,根据要求创建模板,外界输入相应的参数进行创建即可;也就是说通过对象,根据条件创建类,外界输入想要的参数进行创建实体参与互动即可。
但显然这里虽然有入参name和type,并没有对其进行能力值区分,接下来我们区分下:
# 模板得到了改良,通过模板创建的对象具有类共同的属性同时也具有自身不同的属性 。对象已经可以得到创建,那么接下来应该是落实到对象之间的互动:
# 狗咬人
这样对象通过模板创建,再相互产生互动。
紧接着我们会发现一个问题,如果互动代码按照这样书写,可是人能发起的动作如果按照为狗发起动作的代码来执行,也是可以的,这样就会造成执行出问题,我们再对代码进行修改:
# 我们将“人打狗”这个动作的代码封装进了对人对象的创建中,做成一个‘闭包’,这样人能发起动作只能针对狗子。
# 创建一个狗子对象,创建一个人对象,互动。
按照同样的方式再将“狗咬人”封装进入狗子的创建代码中,即可完成。
一些基本的概念按照白话输出后,我们引入类class和对应的方法,将上面的代码进行改造:
# 定义狗子的类
# 定义人的类
其实两者的基本逻辑是一样的,其中还涉及到了闭包的原理。再调用二者,创建两个实例,进行互动:
注:数据结构很重要