现在的位置: 首页 > 综合 > 正文

程序设计风格

2018年02月01日 ⁄ 综合 ⁄ 共 1853字 ⁄ 字号 评论关闭

程序设计风格

1.最终目的是设计一个好的软件;

好软件的标准:

,正确性-能完成需求中的所有要求;

二,可扩展性-易于修改;

三,高效的数据结构与算法

四,易读性;

五,可移植性等;

大道至简。

2.变量名,宏定义,见名知义

3.空格和缩进

一致性和习惯用法

4. If(i==0){

//TODO

}

尽量用If()else if() else{} 而非switch(){case 1: break;//fall through}case0:case 1:case2: ;;;break;

5.enum,const,#define 代替魔数。

6.注释;简单而不过分简单;

7.数据结构与算法

最基本的:基本检索和排序;

8.界面  在进行设计的时候,必须考虑的问题包括:

•界面:应提供哪些服务和访问?界面在效能上实际成为服务的提供者和使用者之间的一

个约定。在这里要做的是提供一种统一而方便的服务,使用方便,有足够丰富的功能,

而又不过多过滥以至无法控制。

•信息隐藏:哪些信息应该是可见的,哪些应该是私有的?一个界面必须提供对有关部件

的方便访问方式,而同时又隐蔽其实现的细节。这样,部件的修改才不会影响到使用

者。

•资源管理:谁负责管理内存或者其他有限的资源?这里的主要问题是存储的分配和释放,

以及管理共享信息的拷贝等。

•错误处理:谁检查错误?谁报告?如何报告?如果检查中发现了错误,那么应该设法做

哪些恢复性操作?

一个界面要想成功,它就必须特别适合有关的工作—必须简单、通用、规范、其行为

可以预料及坚固等等,它还必须能很好地适应用户或者实现方式的变化。

9.应该先检查所有的变量是否都正确地进行了初始化。

对于测试,惟一的、最重要的规则就是必须做。

风格

全局变量用具有描述意义的名字,局部变量用短名字。

保持一致性。(缩进,空格等)

函数采用动作性的名字。Send

要准确。

以缩行形式显示程序结构。

使用表达式的自然形式。

利用括号排除歧义。

分解复杂的表达式。

要清晰。

当心副作用。

使用一致的缩行和加括号风格。

为了一致性,使用习惯用法。

else-if 处理多路选择。(少用switch

避免使用函数宏。

给宏的体和参数都加上括号。

给神秘的数起个名字。#define,const,enum

把数定义为常量,不要定义为宏。const而非#define

使用字符形式的常量,不要用整数。

利用语言去计算对象的大小。(sizeof)

不要大谈明显的东西。

给函数和全局数据加注释。

不要注释不好的代码,应该重写。

不要与代码矛盾。

澄清情况,不要添乱。

界面

隐蔽实现的细节。

选择一小组正交的基本操作。

不要在用户背后搞小动作。

在各处都用同样方式做同样的事。

释放资源与分配资源应该在同一层次进行。

在低层检查错误,在高层处理。

只把异常用在异常的情况。

排错

寻找熟悉的模式。

检查最近的改动。

不要两次犯同样错误。

现在排除,而不是以后。

取得堆栈轨迹。

键入前仔细读一读。

把你的代码解释给别人。

把错误弄成可以重现的。

分而治之。

研究错误的计数特性。

显示输出,使搜索局部化。

写自检测代码。

写记录文件。

画一个图。

使用工具。

保留记录。

测试

测试代码的边界情况。

测试前条件和后条件。

使用断言。assert

做防御性程序设计。

检查错误的返回值。

以递增方式做测试。

首先测试最简单的部分。

弄清所期望的输出。

检验那些应当保持的特征。

比较相互独立的实现。

度量测试的覆盖面。

自动回归测试。

建立自包容测试。

性能

自动计时测量。

使用轮廓程序。

集中注意热点。

画一个图。

使用更好的算法或数据结构。

让编译程序做优化。

调整代码。

不要优化无关紧要的东西。(不要过度优化)

收集公共表达式。

用低代价操作代替高代价操作。

铺开或者删除代码。

缓存频繁使用的值。

写专用的存储分配程序。

对输入输出做缓冲。

特殊情况特殊处理。

预先算出某些值。

使用近似值。

在某个低级语言里重写代码。

使用尽可能小的数据类型以节约存储。char

不存储容易重算的东西。

可移植性

盯紧标准。

在主流中做程序设计。

警惕语言的麻烦特性。

用多个编译系统试验。

使用标准库。

只使用到处都能用的特征。

避免条件编译。

把系统依赖性局限到独立文件里。

把系统依赖性隐藏在界面后面。

用正文做数据交换。

数据交换时用固定的字节序。

如果改变规范就应该改变名字。

维护现存程序与数据的相容性。

不要假定是A S C I I

不要假定是英语。(国际化)

...............................................................................

抱歉!评论已关闭.