编程原则

1.1 简介
1.2 “生存游戏”
1.3 编程风格
1.4 编码测试及求精
1.5 程序维护

1.6 结论及预备知识


n 从软件工程的角度介绍以下十分重要的 编程原则(大型程序设计问题):
1 问题提出
2 需求分析
3 选择数据结构
4 设计、分析算法
5 程序编码
6 软件测试(测试和验证)
7 程序维护
1.1 简介


1.1 简介
n C++语言支持软件工程方法的主要特色
(a) 数据抽象(Data abstraction)
(b) 面向对象设计(Object-oriented design)
(c) 自顶向下设计(Top-down approach) 
(d) 可能重用代码(Reusable code)


1.2 “生存游戏”
n 游戏规则
n 示例
n 设计运行“生存游戏”的算法
n 实现“生存游戏”的C++主程序


n 游戏规则
n 本世纪70年代,人们曾疯魔一种被称作“生命游戏”的小游
戏,这种游戏相当简单。假设有一个像棋盘一样的方格网
每个方格中放置一个生命细胞,生命细胞只有两种状态:
“生”或“死”。规则如下:
n 活的细胞:邻居数为0,1,>=4,下一代将死去。
n 死的细胞:邻居数为3,复活。
n 保持原状:邻居数为2,3。

n 依此规则进行迭代变化,使细胞生生死死,会得到一些有
趣的结果。该游戏之所以被称为“生命游戏”,是因为其简
单的游戏规则,反映了自然界中的生存规律:如果一个生
命,其周围的同类生命太少的话,会因为得不到帮助而死
亡;如果太多,则会因为得不到足够的资源而死亡。


n设计运行“生存游戏”的算法 n 引入了C++的类、对象、数据成员、方法、成员函
数、公有与私有等概念
n 定义生存游戏的类

const int maxrow = 20, maxcol = 60; // grid dimensions
class Life {
public:
void initialize( );
void print( );
void update( );
private:
int grid[maxrow + 2][maxcol + 2];
// allows for two extra rows and columns
int neighbor count(int row, int col);
};

n设计运行“生存游戏”的算法
n 算法
1.设置Lift Configuration初始状态
2.打印Lift Configuration状态
3.当用户要下一代生成的细胞图时
1)根据游戏规则更改Configuration
2)打印当前Configuration状态

n实现“生存游戏”的C++主程序 int main( ) // Program to play Conway's game of Life.
/* Pre: The user supplies an initial configuration of living cells.
Post: The program prints a sequence of pictures showing the 
changes in the configuration of living cells according to the ru
the game of Life.
Uses: The class Life and its methods initialize( ) ,print( ) , an
update( ) .
The functions instructions( ) ,user_says_yes( ) . */
{
Life configuration;
instructions( );  //exercise 
configuration.initialize( );
configuration.print( );
cout << "Continue viewing new generations? " << endl;
while (user_says_yes( )) {

Life configuration;
instructions( );  //exercise 
configuration.initialize( );
configuration.print( );
cout << "Continue viewing new generations? " << endl;
while (user_says_yes( )) {
configuration.update( );
configuration.print( );
cout << "Continue viewing new generations? " << endl;
}
}

1.3 编程风格
n 命名规则Guidelines for Choosing Names
n 文档格式Documentation Guidelines
n 逐步求精及模块化中的编程准则Refinement an
Modularity
n 自顶向下Top-down design and Refinement:
n 工作分配Division of work:
n 数据分类Categories of Data
n Input parameters
n Output parameters

n Inout parameters
n Local variables
n Global variables

1.4 编码测试及求精(4)

n 调试程序的几种方法
n 小组讨论
n 在程序的关键点插入打印语句
n 在函数的开头用if语句测试某些条件是否满足
n 使用静态分析程序找出无使用的变量代码段或
可能不正确的出现

1.4 编码测试及求精(5)
n 程序测试的原则
n 测试数据的质量比数量更为重要
n 测试只能发现错误而不能证明程序的正
确性
n 程序测试的方法
n 黑盒法
白盒法


1.5 程序维护

n 程序交付使用后一半以上的工作就
是进行维护。
n 给出用于评价Evaluation程序的6个
问题,并以“生存游戏”程序为例进
行说明 。
n 程序的改进及进一步的开发。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值