level 8
「对象」大概是不少同学接触编程时学到的第一个知识。
它的存在感很低,低到许多老师都只是用一句话将它带过:对象,一种具体制作或者存在的东西。
难以理解,似乎又不用去理解。
但它又极为重要,Python是面向对象的编程,许多操作都会与对象息息相关。
理解什么是对象,对于编程学习打下坚实基础也会有极大的帮助。
众所周知,极客战记是一款主打在游戏中实战掌握编程概念的游戏化编程学习网站,它不仅适合成年 人,也十分适合小朋友,而为了能让小朋友更好地理解「对象」这个晦涩的概念,极客战记在游戏里可是藏下了许许多多的设计细节,来帮助小朋友理解与掌握。
2020年03月01日 14点03分
1
level 8
什么是对象?
先对「对象」有个简单的概念,什么是对象,什么都可以是对象,对象最主要的特征就是有自己的属性 和函数。
举个例子,在极客战记中英雄就是一个对象,你也是一个对象,你的属性就是你的身高体重,你的函数 就是你能做的事情。
英雄的属性就是英雄的血量,英雄的坐标等等。
不仅是活的东西,你要是愿意,一棵树也能是对象,一个杯子也能是对象,它们也有着自己的属性,高 度尺寸等等。
在极客战记的沙漠地图中,关卡为了检验同学们对对象属性的了解,设下了这样一个代码要求:当英雄血量小于30时做某事。
if hero.health < 30:
这就是属性的用法,因为hero是对象的名字,health——血量,是对象英雄hero的属性,所以我们可以 直接通过hero.health,来得到英雄此时此刻的血量数据。
而在极客战记的森林地图中,则又藏着一个巧妙的设计,在这一地图中,同学们如果需要收集一个名叫 item的物品,那就必须走到它的坐标上;或是如果我们需要在英雄当前的位置上移动,那就需要对英雄 当前的位置坐标进行调整。
那么在关卡的引导下,同学们学到的写法是这样的:
# 捡东西
hero.moveXY(item.pos.x,item.pos.y)
# 在英雄当前位置上移动
hero.moveXY(hero.pos.x+5,hero.pos.y+10)
2020年03月01日 14点03分
2
level 8
发现了吗?
我们如果要调用英雄的xy坐标属性,我们得这么写:hero.pos.x或是hero.pos.y
而不是像刚刚血量的概念一样:使用hero.x和hero.y
这说明了什么呢?
为了能够让大家理解对象的概念,许多培训机构总是让大家把「万物都是对象」这句话挂在口边,然而 实际上,举的例子就像是「你是对象,树是对象」一样干瘪无力。
为什么调用xy坐标是hero.pos.x而不是hero.x呢?
这就说明了:
hero.pos——位置,是英雄的属性;
pos.x——x坐标,是位置的属性。
位置是英雄的一个属性,但位置自己也是一个对象,它也有着两个属性,x和y
这样的对象情况,才是最符合现实编程的情况,不是树是对象,也不是你是对象,更不是「一种具体制 作或者存在的东西」这样莫名的概念。
极客战记用了这样的例子来生动形象地展示给小朋友,什么是真正的对象:
一个对象可能会包含一个又一个的对象作为属性;
而一个对象也总不会是生动的,不会总是树,总是英雄,更经常是一组数组,一组变量,就像英雄的位 置。
通过了这样的实战,使小朋友更生动直接地理解了对象的真正概念,掌握了相应的应用。
2020年03月01日 14点03分
3
level 8
编程学习不是死读书就能读透的,它更需要的是实战与练习,许多晦涩的概念不是死记就能成为你的坚 实基础,更多的还是需要多写多感悟。
所以,在不少编程专业大学生简历上总能看到:大学四年所学了代码行数之类的数据,过于迷信这种行 数的数据有些夸张,但它的存在,的确说明了一个事实:实战多的一定比实战少的更受欢迎。
因此,我们为了让小朋友与成年人都能轻松通过游戏打下牢固的编程基础,像本文所介绍的「对象」这样的实战设计不在少数,越往后使用,你还能发现一些诸如通过移动方式,来学习阻塞和非阻塞,通过宠物和英雄来学习多线程和单线程等精彩设计。
2020年03月01日 14点03分
6