六、Java从头开始-看着对象来编程

看着对象来编程

 

在前几篇文章里,通过”fuckWorld”让我第一次和Java语言进行接触,通过九九乘法表了解Java基本语法结构,怎么去定义不同数据类型的变量、怎样去运用运算符的计算、选择语句和循环语句,利用这些知识我可以在main函数里实现一些基本程序设计,但这一切我还没有真正进入Java的世界。

项目争夺战

在进入Java世界前先来看看下面关于C罗和J罗两人编程比赛的实录。C罗是一名程序开发高手,J罗是一名面向对象编程信仰者,两人为争取公司一个利润可观的项目展开一次测试比赛,项目客户作为评判。比赛要求最短时间内完成的获胜。

程序要求:

1、  程序原形是设计一个飞机大战的游戏;

2、 要求用户可以选择攻击机、轰战机来开始游戏。

 

C罗坐在计算机前开始思考,“这个程序需要执行什么动作,我需要一个什么程序来实现,有了,我会需要fly()和shoot()!”,然后他开始设计工作。

J罗同样在计算机前想到,“这个程序有什么事物,有什么关键角色,”他首先会想到飞机(plane),还有两个关键角色攻击机(battlePlane)、轰战机(bombingPlane)

接下来就是他们程序设计比赛的实录,究竟谁可以赢得利润可观的项目。

六、Java从头开始-看着对象来编程_第1张图片

C罗老早就写完程序,这时J罗还在写第二类飞机的飞行动作程序,·C罗心想,这场比赛赢定了,姜还是老的辣,已经开始幻想着这个项目带来的丰厚奖金。~~~~~

慢着!!!客户发话了,“两种飞机太少了,而且这样的游戏不能给我带来额外的利润,我需要一种超级飞机,能垂直起飞、隐形,这种飞机可以作为另一种充值服务”。对,游戏需求规格改了,再给我设计一款超级飞机,能垂直起飞、起飞后隐形。

六、Java从头开始-看着对象来编程_第2张图片


六、Java从头开始-看着对象来编程_第3张图片
       虽然在旧程序里作了稍许改动,幅度也不是很大,C罗仍然继续领先着J罗,但是C罗以他以往接触客户的经验告诉他,“肯定不会就这么结束,你以为规格不会再改了吗?”。是的,规格再次作出改动,客户远远不能满足这样超级的飞机怎么会没有一个超级武器。


六、Java从头开始-看着对象来编程_第4张图片

六、Java从头开始-看着对象来编程_第5张图片

这场比赛看来是J罗赢了?不对,C罗这时发现J罗的过程有缺陷,“你有太多重复的代码,有三个飞机,有三个fly()和三个shoot()过程,设计存在很大问题,这样一来你必须维护6个过程,效率很低”。

J罗:“首先,那不叫过程,叫方法,还有这三个飞机的物体正式名称叫,现在也不是我的最终设计,让你看看什么叫面向对象的继承!!”


六、Java从头开始-看着对象来编程_第6张图片
 
六、Java从头开始-看着对象来编程_第7张图片

这样一来“BattlePlane继承自Plane”、“BombingPlane继承自Plane”、“SuperPlane继承自Plane”。fly()shoot()已经从三个类中移除。Plane是底下三个类的父类。子级类会继承父级类的方法,也就是说,子类可调用父类的功能。

 

 “但是这样一来,你的超级飞机要怎么办,它可以垂直起飞、隐身、发射超级武器,它完全不同于其它两个飞机,如果都继承Plane那么它的飞行方式和射击武器就都和其它两种都一样了?”C罗很快就提出了质疑。

J罗:“不用担心,我的SuperPlane虽然继承了Plane,但是我仍然可以按照它自己的需求覆盖(overridePlane的方法。在我调用时会知道使用覆盖后的方法。”


六、Java从头开始-看着对象来编程_第8张图片
 

这样一来,不管是增加新的飞机种类,还是修改其功能,我都不需要重头测试整个已经通过编译的程序,这样的设计有很好的适应性和可扩展性。

 

项目争夺比赛终于结束了,J罗最终赢得了比赛,但是两天后他并没有得到应得的项目承包权,项目给了隔壁组的屌罗,原因很简单,“Business is business”,相同条件下,屌罗开出的价格更低。

 

项目争夺战虽然结束了,它体现出了面向过程程序员和面向对象程序员的在思维上的明显区别,这里面有面向对象关键概念的论述,包含了类、对象、属性和方法,也体现了面向对象的特性之一:继承。在接下来的几篇里会有详细的介绍。

   

你可能感兴趣的:(java)