某天在某一家软件公司里,那令人讨厌的项目经理要求两名程序员完成同样的一个任务。经理并且承诺谁先完成任务的发给一张带转轮的真皮沙发代替原来的木质靠背椅。杰习惯过程式编程的程序员,而涛是一个面向对象的程序员。他们都知道这是一个不错的机会。 织梦好,好织梦
任务是这样的,在GUI的程序界面里有一个正方形,一个圆形和一个正三角形。但用户点击这个图形时,图形会顺时针旋转360°并且播放相应的AIF音效。 dedecms.com
本文来自织梦
杰,坐在自己的办公室里,对自己说:“这个程序要做什么?我们需要那些过程?”“旋转并且播放音效。”他又回答了自己。所有他的程序就是去完成这两个过程。
本文来自织梦
涛带着他的笔记本坐在休息室里。他也在思索着:“程序中都有什么东西啊?谁是主要的角色啊?他最先想到的就是形状。当然他也想到了其他的一些对象,比如用户,音效和点击事件。因为已经有现成的库支持其他的对象了。因此因此他把重点放在创建形状类上。
内容来自dedecms
在杰的办公室 织梦好,好织梦
就像曾经写过千百的的程序一样,杰把他的程序认为是重要的过程,并且没有用什么时间就完成了旋转和播放音效的过程。他的程序大概是这样的 本文来自织梦
织梦好,好织梦
dedecms.com
rotate (shapeNum) { 内容来自dedecms
// make the shape rotate 360°
} 内容来自dedecms
playSound (shapeNum) {
内容来自dedecms
// use shapeNum to lookup which AIF sound to play, and play it
}
织梦内容管理系统
内容来自dedecms
dedecms.com
涛和他的笔记本在休息室
dedecms.com
内容来自dedecms
涛为每个形状写了一个类
本文来自织梦
内容来自dedecms
copyright dedecms
class Square {
本文来自织梦
rotate () {
// code to rotate a square
内容来自dedecms
} 本文来自织梦
playSound() {
// code to play the AIF file for a square
本文来自织梦
} 织梦内容管理系统
} 织梦内容管理系统
class Circle { copyright dedecms
rotate () { copyright dedecms
// code to rotate a circle copyright dedecms
}
playSound() {
织梦好,好织梦
// code to play the AIF file for a circle 本文来自织梦
}
}
class Triangle{
dedecms.com
rotate () { 内容来自dedecms
// code to rotate a triangle 内容来自dedecms
}
playSound() { copyright dedecms
// code to play the AIF file for a triangle
织梦好,好织梦
}
} 本文来自织梦
dedecms.com
织梦好,好织梦
杰的程序基本是完成了,他觉得他赢了,他似乎已经感觉到那张真皮沙发了。
但是请等一下,任务有所变动
本文来自织梦
织梦好,好织梦
“现在你是快一点,杰”,项目经理说着,“但我还要加一点小小的功能在程序里。这对你们这样高水品的程序员来说,应该是毫无问题的。” 织梦内容管理系统
copyright dedecms
“如果只是个小改动,我可以接受。”杰想着,他知道经理所说的毫无代价的改动是胡扯。“为什么涛会显得如此的平静呢?”杰不解得想着。杰一直执着认为面向对象只是个花架子,完全是浪费时间。 本文来自织梦
新增的任务
copyright dedecms
在GUI界面里多了一个不规则图形,当用户点击该个图形时,图形也会旋转360°,并且播放一个 .hif的音效。 本文来自织梦
织梦好,好织梦
杰回到办公室 织梦好,好织梦
织梦内容管理系统
旋转的过程依然时可以用的,因为代码使用的是shapeNum来对于相应的图形。然而播放音效的过程需要修改。“为什么非要播放 .hif的音效呢?”,杰愤愤的说着。
copyright dedecms
织梦内容管理系统
copyright dedecms
playSound (shapeNum) { copyright dedecms
// if the shape is not an amoeba, 本文来自织梦
//use shapeNum to lookup with AIF sound to play, and play it copyright dedecms
//else 本文来自织梦
//play amoeba .hif sound
内容来自dedecms
}
copyright dedecms
内容来自dedecms
这不是一个很大的改动,但是杰依然不得不重新修改他已经调试成功过的代码。 织梦好,好织梦
织梦好,好织梦
涛在他的笔记本前 本文来自织梦
涛微笑着,呷了一口茶。随手写了一个新的类。有时他觉得他最喜欢面向对象中的这个优点,就是对已经编译调试过的代码可以不要任何改动。灵活和课扩展形……,涛沉醉在面向对象的优点中了。 copyright dedecms
dedecms.com
copyright dedecms
织梦好,好织梦
class Amoeba{ copyright dedecms
rotate () {
// code to rotate an amoeba dedecms.com
} copyright dedecms
playSound() { 织梦好,好织梦
// code to play the new .hif file for an amoba 内容来自dedecms
}
本文来自织梦
} 织梦好,好织梦
织梦好,好织梦
本文来自织梦
杰这一次只比涛领先一步
织梦内容管理系统
织梦内容管理系统
“面向对象都是在胡扯,浪费时间!”杰正在暗笑着涛。“不规则图形不是这样旋转的。” 织梦好,好织梦
项目经理失望的说。 织梦内容管理系统
原来,杰和涛都是这样写的 本文来自织梦
内容来自dedecms
用一个矩形围住不规则图形,然后计算矩形的中心,最后让图形以中心旋转。
copyright dedecms
copyright dedecms
项目经理接着说:“它应该以一个给定的坐标旋转。” 本文来自织梦
内容来自dedecms
“我真像是一块砧板上任人宰割的肉。”,杰想着“但我可以再加上一些if…else 语句就可以搞定了。”然而天知道经理会又有什么改动呢?
杰的办公室 dedecms.com
织梦内容管理系统
他思索着旋转的过程。很多的代码受到影响的。杰又要重新编译调试。终于有了结果。
本文来自织梦
织梦好,好织梦
rotate ( shapeNum, xPt, yPt) { 内容来自dedecms
// if the shape is not an amoeba, copyright dedecms
//calculate the center point base on the rectangle, the rotate 织梦好,好织梦
//else copyright dedecms
//use the xPt and yPt as the rotation point offset an the rotate
内容来自dedecms
} 本文来自织梦
涛在他的笔记本前
copyright dedecms
为了不把沙发拱手让给杰,涛也在修改他的旋转方法,但仅仅是在Amoeba的类里。对于其他的测试好的类,是原封不动的。为了给不规则图形一个旋转点,他给Amoeba加肋两个属性,然后他测完成后通过无线网络提交了任务。
copyright dedecms
dedecms.com
dedecms.com
class Amoeba{ 织梦好,好织梦
int xPoint; copyright dedecms
int yPoint; 织梦好,好织梦
rotate () {
本文来自织梦
// code to rotate an amoeba using amoeba’s x and y
织梦内容管理系统
} 内容来自dedecms
playSound() { 织梦内容管理系统
// code to play the new .hif file for an amoba dedecms.com
}
}
那涛得到了沙发对吗?
dedecms.com
copyright dedecms
并没有那么快,杰找到涛程序里的一个缺陷。并且他知道如果能得到沙发的话就可以取悦会计室的婷,因此他不希望就这样就输了。 内容来自dedecms









