阅读更多
摘要: 你能想到当前竞技游戏《魔兽争霸》能与Java扯得上关系么?要是冷眼一扫,肯定认为我在扯谈。(《魔兽争霸》下文就简称魔兽)。好吧,那就看看我当年学习java技术的时候和魔兽扯上关系吧!
我想每一位软件开发者,同时也是一个游戏爱好者。谈起这个艺术性很强的游戏,让我想到了大学的生活,打魔兽成为大学业余生活最重要的部分。可一次思绪的飞动,让我把学习与这个游戏紧紧联系在了一起。
在java学习上以及struts框架学习上的一点经历与心得,想写出来和大家一起分享。
1:关键字一:英雄 java 面向对象
魔兽争霸这款游戏给我们带来英雄的这个概念,这使游戏的类型发生很大的变化,魔兽的诞生是游戏史上的一个里程碑,而如今正是这个王朝的鼎盛时期。(路人甲:“喂!你再说就跑调了啊!”)
在学习java初期,我接受了面向对象的思想。面向对象的根本思想就是“万事万物皆对象”。啥是对象?对象就是描述客观事物的实体,它将自己的属性和操作封装在自己的内部,而只对外提供访问接口。记得当时老师布置java专题的时候,我刚写好了一段程序调通了,小有成就后就跑到别人的机器上玩魔兽了(惭愧!当时都大三了,连电脑都没有!),我打不死族,进入游戏,看到地穴一个又一个生产出来食尸鬼,脑子里突然就想,这些小崽子是怎么出来的呢?这好象是有点像程序里A a=new A(); 一样,太神奇了,我恨不得说自己是天才。再找找死亡骑士看了看,他有属性和操作。属性:敏捷度、智力值、生命值、魔法值;操作(魔法技能):死亡缠绕、死亡契约、邪恶光环、操纵死尸。同样有属性和操作,这和类不是差不多么?而且魔兽里有这么多英雄,死亡骑士只是其中的一个,对象来自类的实例化,那它是不是由一个产生英雄的类实例化产生的(^_^我太有才了!)。
魔兽中的每个实体都可以看成一个个的对象。无论是死亡骑士、牛头人酋长等英雄,还是女猎、食尸鬼等小兵小蟹、甚至无敌药水、传送权杖等商品都可以看成对象,它们也都有自己的属性和操作。
面向对象思想的特点:封装、继承、多态。
下面简单说一下把这三个特点描述一下。
封装性,通常属性值都被设置为private,若要对属性进行读取和修改则要通过方法的get和set实现,而仅将对象所要对外公开的接口方法设置为public给用户使用。因此对象是一个封装良好的黑盒子,我们只能通过接口来访问它。
你在玩魔兽的时候,英雄的那些属性,譬如生命值、魔法值、攻击力值等,其实就是
被封装在每个英雄的类里的。那我们为什么可以读取这些属性呢?那是因为这些类提供给
了我们读取属性的接口。
多态性,多态性指的是相关的对象按照各自类型来实现方法的能力。继承性指的就是派生类(子类)继承抽象类(基类、父类),它是一种类特殊化的方式,用于联系派生类和抽象类。在这里我把这两个特点一起举例说明一下。在魔兽里,四个种族都有农民,而且属性和方法基本一样,那我们就可以为农民这个概念设置一个基类,然后将每族农民设为一个子类。每个子类方法的类型可能不一样。在运行时,通过判定对象所属的类型再去执行相应类型所对应的方法的。所以多态性与继承是紧密关联的。
2:关键字二:魔兽争霸 Struts
后来开始接触Struts了,作为初学者,学习的时候我也是买了一本书,慢慢看的。说实话,很多东西都是云里雾里,没有办法根本的去理解。在奋斗了N天后,终于还是有感觉了,可后面的事情却悄悄的发生了。
当时我还清楚的记得,对Bean的理解还不很深刻,甚至用今天的眼光往回看,还存在一定的误区。那时候确实是菜虫一个,概念还没有很好的建立,那是自然的事情。某一天,在看书回顾struts工作流程的时候,老是忘记就是扯不清楚。看书看累了想换换脑子,就随手关了Tomcat服务器,打开魔兽看比赛录象起来了。视角盯在一个人族基地里,看着人族农民伯伯来回穿梭金矿与基地之间,这样一来一回的流动,让我脑子产生了一些遐想。灵光一闪,这人族的农民不就是像struts里的actionForm类那样的功能么?起到客户数据与控制层Action类的衔接作用,actionForm类就是充当了这个封装传输的角色。
对看这篇文章的struts初学者们,在这里我还是先罗嗦一下,actionForm类到底是啥玩意儿(老鸟们就别丢鸡蛋了啊!)。在传说中的Struts框架中,伟大的actionForm类主要作为表现层(web页面)与动作类(Action类)之间的数据载体。每一个动作请求所携带的数据都可以通过actionForm类自动提交到相应的动作类里使用,他们之间的对应关系是通过配置文件struts-config.xml配置来决定的。
大家看看下面的图1所示,真是一图解千言啊!大家一看,就什么都清楚了。
图1 示意图( 大家可见,后面的上传图片)
这里涉及到了以下几个东东:金矿、金子、人族农民、人族农民脑子里的意识、人族基地。我的比喻分析如下:
1:金矿就好比web页面,里面装满了客户需要处理的数据。
2:金子理所当然就是客户数据了。
3:人族农民就好比起封装数据、数据传输作用的actionForm了。
4:人族农民脑子里的意识,它决定这金子要往基地里放,就好比struts-config.xml文件,控制着actionForm的跳转以及与相应action类的对应关系。
5:人族基地获得农民运来的金子后,然后进行处理转化成战争资源。那好比对应的action类,对获得的数据后进行业务处理。
农民从金矿里背着金子放基地里,这个非常不引人注意的过程归结到我们技术的说法是,actionForm封装了客户web页面表现层上的数据,然后通过配置文件的设置,找到actionForm与action的对应关系,把数据传递给对应的action类,再由action类做相关的业务处理。
3:编者语:
写到这里,心里似如万里晴空,想不到以前的奇思妙想,今天有这个机会让我写下来和大家一起分享。一个程序员的生活是随意的,思维是活跃的,在我们眼里一切都是对象,我们可以用自己这个特有的角度来看世界,原来生活如此美妙。
希望此文能够帮助那些没入门又想进这个门槛的弟兄们理解一些java基础的东西,而后奋斗的日子还很长,也很艰辛。如果看了以后感觉很好玩,而且对java技术产生一点兴趣了,那么笔者就已经深感欣慰了。
加油吧!往后的路,还长着呢,让我们一起霹浪前行!