荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: noid (奥运在北京), 信区: Program
标  题: 大厦是如何建起来的(初稿) *三*
发信站: 荔园晨风BBS站 (Sat Oct 12 14:36:33 2002), 站内信件

4.先把问题分析清楚
    一个程序当然是为了完成一个任务或者说是解决一个问题的。所以编
程的第一步就是把问题分析清楚,再以此为基础构造程序的框架。就如先
分析大厦所被要求功能从而设想大厦的大体形状大小,再以此搭建大厦的
主体框架一样。(我只是根据小时候搭积木的经验写的啊,建筑系的同学
不要砸我)

分割问题
    需要解决的问题往往不是一步就能解决的,但再宏伟复杂的建筑也是
由一砖一瓦堆砌而成的正如任何复杂问题都是由许多小问题组成的一样,
所以归根结底解决多么复杂的问题都是解决许许多多小的简单问题的总和,
但是一下子要把这些问题都分割好是很难做到的,正如设计一座大厦的时
候不可能一下子就考虑每一块砖应该是怎么砌的一样。这个时候就要分层
次地分割问题,先把问题分割成小块,然后再把这些小块分成更小的模块,
其实就象写小说一样,先构思故事大纲,再把故事分成篇,每一篇又分成
若干章,每一章又分成段……如此不断细化;而在写程序时也是类似的,
把程序主要要实现的功能列出,然后再把它们分割成几个功能块,当这些
功能块比较复杂时可写为不同的源文件否则可写为类、函数甚至一个函数
里面的某一部分,然后再把前面所分的模块再分。其实在“分”的同时,
程序的框架也就“立”起来了。当然,并不需要在动笔前就把问题分割得
那么细,相反,最好其实是边写边分,写一层再分一层,这样脑力负荷就
会少很多了。
    如何分割问题呢?分割问题的依据是什么?
    如果是用面向对象的语言(对此我只看过一点书,连程序都没写过,
班门弄斧了,呵呵),就先先把问题所要涉及的所有事物归类,使其尽量
有独立性,先分大类、再写它们所包含的类和他们的派生类。比如你如果
要写一个帝国时代的游戏程序,我们知道这个游戏先是出现片头动画,然
后再出现菜单,然后再进入主程序,所以先划分成这三个模块。然后再分
别写这三个模块:动画播放功能单一就不用再分了;菜单类包含按钮对象,
它们自己有一种互动关系,且启动主游戏程序和向其传递参数,所以根据
这些特征再写菜单类和按钮类;当然最主要的还是主游戏程序,如何把它
分割呢?大家都知道这个游戏主要是我们可以通过一些操作来控制游戏的
发展,而游戏是通过游戏画面具体体现出来,而这些画面又主要由游戏数
据和控制状态所决定的,因此我们可以先把它“一刀三断”,分为游戏界
面类、游戏数据类、控制类,为什么第一步就想到这样分呢?因为这个游
戏是有很多具体的画面,而这些画面是根据游戏的状态来决定的,而游戏
着则是控制这些东西的,因此这个问题是抽象与具体之间的交互,故其第
一步可分割为三类:具体(游戏界面类)、抽象(游戏数据类)、抽象与
具体之间的连接(控制类),游戏画面类由主要由游戏数据类和控制类所
影响,控制类主要是由一些按钮和菜单来控制游戏数据类,因此控制类主
要还是包括一些按钮和点击激活的菜单,而游戏数据类就包含树木类,矿
类,建筑物类,人物类,它们都有其基本属性,比如人物类就有是否死亡、
位置、攻击力、防御力、行为状态等,然后再派生,比如派生出农民类就
得加上所负载物的种类数量等。如此就能把框架大概搭好了。当然在有些
时候(例如写成员函数的时候)就要用到面向过程的分割方法了。


                                                To be continued

--
勇敢的人不一定长命
但是懦弱的人等于没有活过

※ 修改:·noid 於 Oct 12 16:48:44 修改本文·[FROM: 192.168.32.243]
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.32.243]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店