学面向对象先学会星际


我最开始玩的是红警,那时候一般只造一个兵营和一个机械厂,然后疯狂点兵,等着1个1个慢慢造出来(我只打电脑)。
后来接触星际了,开始非常的不习惯,因为它没有一个固定的界面,可以造各种单位,而是要先选取一个建筑,然后在屏幕右下角选兵来造。

后来又发现,星际里,都是要先选一个东西,然后右下角出现这个东西可以进行的操作,习惯了之后,觉得星际这样的设计更加合理,更加符合世界的本来面貌。

恰好那时学了java这门课,一直不太明白面向对象程序设计是什么意思,和面向过程有什么区别,突然我想到了星际,这不就是面向对象程序设计的经典案例吗?

让我们来看看java和星际的共同点。

面向对象程序设计的核心概念就是类和对象,星际里,一种单位就是一个类,这个单位的实例就是对象,
比如zealot是个类,而游戏中你造出的一个zealot就是一个对象。

类有数据成员和成员函数,星际里的一个单位,也有属性和它的方法,还是以zealot为例,他的属性有血量、攻击力、盔甲、是否被辐射等等很多很多,他的方法有移动,攻击,hold等等,就是右下角里显示的。
这些属性都是只读的,体现了类的封装性,你不可以直接修改zealot的血量,除非你通过方法,比如你A他,或者给他补血。

类的另一个重要特征是继承性,星际里,很多单位都有共同属性,比如血量,盔甲,是否中绿毒等等,还有很多共同方法,如move,stop等等。将这些特征抽象出来,组成一个基类,有这些特征的单位继承这个基类,当然这个基类在游戏中是不会出现实例的。
类还可以组合,如航母包括本体和小飞机,tank包括底座和炮台。

类还有多态性,比如对函数重载来说,同时点右键,却可以是移动,或攻击或修理,这取决于点中的单位是什么,好比调用相同名称的函数,具体是哪一个由参数决定。还有运行时的多态,比如相同的方法,不同的对象执行他有不同的含义,好比同是A键,有些单位是attack,mm却是补血。

红警是不是用面向过程语言写的我不敢肯定,但是他的操作方式无疑很符合面向过程的思想,他不是先选一个单位,然后进行操作,而是直接先选操作,然后看操作什么单位。相当于这个操作是个全局函数,参数是各个单位。显然,这是将操作与数据脱离了的,因为操作不属于任何一个类。

总结:星际这款游戏体现了面向对象思想的精髓,如果你打算学习java等面向对象语言,我建议你先学会打星际 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值