设计引导--一个鸭子游戏引发的设计理念(多态,继

这篇博文是从实际生活中,提炼出来的设计理念,它现在是骨架,现在我加以代码实例,完成程序的血肉,以求让大家活生生的体会设计中的精髓。

自从我们学习面向对象编程以来,它方便了我们的思维思考模式,一个事物具备什么,就以对应的属性及方法加之。

(▽) 没有什么难的,但是你学到的是最基础的语法和连自己都不是很了解的语言,用一段C语言程序,你可以很轻松的把它改成C#,JAVA等,这有什么难的?大多数程序员们扭曲了C#语言,把C的语法都移植到C#上(在我不了解C#的时候,我自己都这么做过),错了不可怕,可怕的是错了还不肯改。
语言是一种工具,学会了都是想通的,但是设计思想不同决定了语言的本质区别。
进入正题,一步一步来剖析一个简单的鸭子游戏程序。
 
首先设计一个鸭子对象,是不是?大致这样:
复制代码 代码如下:

public class Duck
{
void quack(){
//...鸭子都会叫
}
void swim(){
//...都会游泳
}
void Display() {
//...外观
}
}

然后鸭子游戏中有各种鸭子一边游泳戏水,一边呷呷叫,各种鸭子都继承Duck类哦,游戏在预料之中运行。
 
这应该是标准的OO(Object Oriented)技术吧?游戏完美运行中.........
目前鸭子会叫会游泳,都在水里多没意思?来个创新吧:
 
丑小鸭也能飞上青天??o(∩_∩)o
现在想要鸭子飞,那么就要给鸭子添加一个飞行方法,好比这样:
复制代码 代码如下:

public class Duck
{
void quack(){
//...鸭子都会叫
}
void swim(){
//...都会游泳
}
void Display() {
//...外观
}
void Fly() {
//...飞行
}
}

方法已加,游戏中的小鸭子们可以飞咯。
现在问题,才刚刚出现:
在演示程序的时候,“橡皮假鸭”在屏幕上飞来飞去,游戏里面有各种各样的鸭子。
当没有Fly()的时候,小鸭子们可以很平稳的运行。在父类中加上Fyl(),会导致所有的子类都具备Fly(),连那些不该具备的子类也无法免除,所以:
对代码所做的局部修改,影响层面可不只是局部。
看看这张图,说不定和你的想法不谋而合:
 
覆盖掉“橡皮鸭”的飞行方式。这是个不错的选择,这样一来,“橡皮鸭”也不会到处乱飞了~~(注意哦“橡皮鸭”会叫的--“吱吱”)。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/1624.html