关于写故事的“面向过程思想”和“面向对象思想”

我喜欢用我学过的程序设计理论来说明问题。如果故事是一个程序体,那我们在写这个程序的时候,可以有两种设计思想,一种是面向过程编程,另一种是面向对象编程。

这两个概念,没学过计算机的人可能不太理解。我直接用写故事的思路来表达一下。

举一个例子:开始->恶龙破坏了村落->主人公开始训练->主人公找到恶龙->主人公打败恶龙->结束

如果是面向过程的设计思想,代码会是这样:

//定义变量
变量 龙;
变量 主人公;

//执行函数
函数 恶龙破坏村庄(){...}
函数 主人公训练(){...}
函数 主人公找到恶龙(){...}
函数 主人公打败恶龙(){...}

很简单的逻辑,特别容易理解。而如果是面向对象的设计思想,代码会是这样:

//先定义一个类
class 龙{
  会飞;
  会喷火;
}
class 人类{
  会使用工具;
  身体弱小;
}
//接下来我们定义我们需要的函数
//我们的需求是让主人公将恶龙杀死,我们来定义一个函数
函数 杀死(参数2 龙){
  ...//这里是人类如何杀死恶龙的具体步骤
}
//接着我们要设计主人公杀死恶龙的需求,那就是恶龙破坏了村庄
函数 破坏村庄(){
  ...//这里是龙如何破坏村庄的具体步骤
}
//主人公动机有了,接着他要开始训练
函数 训练(){
  ...//这里是训练步骤
}
//主人公开始找恶龙
函数 寻找(线索){
  ...//寻找步骤
}
//当我们所有步骤都已经定义清楚之后,我们开始执行,这个时候开始故事

main(){
  人类 张小飞 = new 人类(); //将人类实例化,张小飞就是我们的主人公。
  龙 恶龙 = new 龙();//将龙实例化,恶龙是我们这里的大反派。

  //接下来恶龙要破坏村庄:
  恶龙.破坏村庄();

  //主人公开始训练
  张小飞.训练();

  //主人公开始寻找恶龙
  张小飞.寻找(线索);

  //主人公杀死恶龙
  张小飞.杀死(恶龙);

  //故事结束
}

实际上,这两种办法都可以创造出不错的故事,但是随着故事越来越复杂,角色的属性越来越多,我们就不得不考虑到,面向对象的思想,更有助于我们来创造更复杂的故事,他就像是把所有的准备都做好,然后最终把这些零件有序地放入生产线中。真的帮助很大。

回到写故事被卡住的问题,也许你可以换一种思路,把视线放在整个故事之上,而非当前的小问题。因为小问题有100种解决办法,而你要选择符合自己故事的那一种,如果你没搞清楚自己的故事是什么,那这个小问题可能会一直无法解决。

而且万幸你解决了一个小问题,可能下面还有成百上千个小问题,到时候你该怎么处理?