面向对象的程序设计在游戏开发中使用(二):方法

作者:Kingfeng 奶牛关 2019-08-08


我并不是游戏开发的从业人员,甚至连软件开发都不是,但至少我是程序员。


我认为,一个【面向对象】的理念在学习过程中的重要性远大于对于代码本身含义的认识。


这一点可以在诸多书籍中得到论证,但很奇怪的一件事是,绝大部分的视频入门教程和并没有过多的强调这一点。


系列收藏夹:https://cowlevel.net/collection/3476202

我们在类的部分已经简单的介绍了什么是类

在这里,我用一张简洁的图来回顾上一篇文章的内容


程序里的一支笔,对于我们显然不是为了把他作为一个观赏品

我们要利用笔的概念制造出笔,在代码中与其他的类进行交互

当然,制造的部分不是我们这次的内容,我们要做的是为我们的类加入交互的方法

0伪代码

在之后的内容,为求简介(和类不同,方法和其他一些东西并没有日常中的例子可以方便的举出

在文章中会出现”伪代码“形式的内容

但请放心,这些伪代码并不是任何编程的一部分,只是作为高度的概括来节省篇幅

并使用诸如箭头或是其他更加形象的内容,来代替隐晦的语法和符号

1函数

在真正认识到方法之前

大部分人先听过的概念更多的是函数

在大部分的情况下,如果你去搜索函数与方法的区别,更有可能搜索到的是某一门语言(比如python)对于这二者之间称呼上进行区分的,这些区别并非是错的,只是出发点不同。

函数和方法之间最大的区别,是面向对象和不面向对象。

如果你在设计层面,面向的是一个对象,那么你写出来的就是方法。

这还不够现实,对吗?

那我们举个例子,暂时忘掉之前的面向对象。

我们拿笔在写字或者乱涂乱画之类的,实质上是一个吧笔里的墨水沾到纸上的过程。那我们就来写写看

  1. 写字(笔,纸,位置){
  2.         墨迹 ← 位置,形状 ← 笔尖形状
  3.         墨迹 ← 笔的墨水
  4.         纸 ← 墨迹
  5. }
复制代码

看起来还可以对吧?

但是这里面的每一行在实际的项目中可能都是数十甚至数百行代码,而且这些步骤可能是互相穿插的,不论编写时会造成逻辑上的混乱,就是在纠错时也会很容易的吧自己转的晕头转向。

更可怕的是接下来更大的麻烦,我如果新加入了铅笔,甚至羽毛笔怎么办,对这些代码的修改会不会影响到其他笔的使用,要怎么做区分??

2方法

于是我们就有了方法。

对于上面的问题,当然很简单,我们只需要把这些步骤独立出来就好了嘛。

首先我们编写一个从笔尖获取形状的函数,然后写一个笔消耗墨水的函数,最后再写一个吧墨水盖在纸上的函数,很简单对嘛?几乎没有什么变动,但是这种思想已经向着面向对象前进很多了。

我们捡起上篇文章的内容,从功能的角度来思考。

对于一支笔,他的形状是根据笔尖决定的,受到桌面或者纸的影响,但是我们姑且不考虑这些,更复杂的东西我们以后再说。

那么决定形状就是笔尖的功能了,当然还有出墨量。那么我们为笔尖创造一个方法,让笔尖生成一个形状。

看不出来有什么区别嘛?这个同样等下再说。

同样的,我们给我们的墨囊或是其他的什么东西创造一个方法让他挤一些墨水出来。

再给纸张加个方法让他可以吧墨迹放在自己身上。

3方法(续)

  1. 写字(笔,纸,位置){
  2.         墨迹 ←生成墨迹(笔)
  3.         沾上墨迹(纸,墨迹,位置)
  4. }
复制代码

我们现在吧生成墨迹交给了笔,吧沾上墨迹交给了一个函数,这虽然还是函数,但是已经距离方法很近了。

就像我们从药店买的药都会有说明书,电器也会有,其他都会有。

我们想想说明书告诉了我们的事,那是现实意义上的方法。当我们拿到了一件东西,去看他的说明书,而这时我们需要掌握的并非对物品的使用经验或是之类的,而变成需要语言的阅读能力来阅读说明书。

当我们把这个“说明书”写进代码之中

  1. 写字(笔,纸,位置){
  2.         墨迹 ←生成墨迹(笔-生成墨迹的方法)
  3.         沾上墨迹(纸-沾上墨迹的方法,墨迹,位置)
  4. }
复制代码

当我们有多个笔,多种纸,我们就不用改动【生成墨迹】的代码,而只需要重新编写笔相应的生成墨迹的方法。。

就像例子里所说的,我们编写一个会阅读笔尖说明书的函数,再给每个笔尖放上一个说明书,就踏出了从函数走向方法的最后一步。

在C语言或者一些更古老的语言中,我们需要一些技巧来完成说明书,但是更先进的语言里,我们已经可以直接吧说明书以函数的形式写在类里面了,当然如何写并不在我们文章的范围里。

4方法带来的便利

那么方法到底带给了我们什么样的好处。

首先一点,最直观的,当我们用其他笔的时候,可以重写这个说明书,使用同样的格式重写,函数会读到新的说明书,直观的造成改变。

同样,如果对原有的说明书不满意,可以更方便的改写他,然后就可以影响使用这个说明书的所有个体。

而深入一些,你在功能还为编写时你甚至可以用简单的一个固定形状来代替你笔尖的形状变化,等到其他部分完成再回过头来让你的笔尖可大可小。

也可以在你制作笔尖的时候让你使用一个更简单的纸张,而不用考虑因为复杂纸张的代码引发的笔尖BUG

这只是表面上的便利性,更多的内容我们会在下篇文章继续!

系列文章
面向对象的程序设计在游戏开发中使用(一):类
面向对象的程序设计在游戏开发中使用(二):方法
面向对象的程序设计在游戏开发中使用(三):三大特性
面向对象的程序设计在游戏开发中使用(四):五大原则

面向对象的程序设计在游戏开发中使用(五):基本计算器
面向对象的程序设计在游戏开发中使用(六):数与抽象数

面向对象的程序设计在游戏开发中使用(七):享受劳动果实

作者:Kingfeng
来源:奶牛关
原地址:https://cowlevel.net/article/2050908



最新评论
暂无评论
参与评论

商务合作 查看更多

编辑推荐 查看更多