代码大全笔记

良好的安全的程序,比看起来简洁的程序要好100倍

最好是去找一种好的方案,同时避免发生灾难,而不要去试图寻找最佳的方案。

1、软件构建

(1)定义问题。问题定义为用户出发,提出什么问题。

(2)需求分析。需求描述系统应该做什么。明确用户驾驭系统的功能。可以避免开发中的争论,而不是程序员自己定义需求,我做APP时,由于没有完整的需求,所以后面要重新设计。需求真的很重要,稳定的需求是软件开发的圣杯。但是随着客户参与项目时间越长,就会提出需求变更,一般为25%。但是应该在构建期间解决需求,否则成本会越来越高。如果变更太频繁,应该建立一套变更程序。确保进度、成本和需求的关系客户知道。并根据需要调整方法。

(3)软件构建。首先应对系统做综述。对主要构造块进行说明。各功能模块与其他交互越少越好。定义主要的类,802法则,80%的功能由20%的类完成。描述主要文件和数据库表的设计。对业务规则说明。用户界面设计,如果在需求阶段没有完成,应该在这里有详细说明,并能够模块化。资源管理,包括内存、线程、句柄。安全性,包括数据加密等。性能。可伸缩性。互用性。国际化。输入输出。错误处理,90%的代码用来处理异常、错误情况,应该定义规则。容错性。买还是造,有些功能已经可以买到,如电子表格处理工具等。

(4)详细设计。这里也有专门的设计师完成。由5步组成,1、系统结构。2、拆成包或各个模块。3、分解为类。4、子程序。5、子程序的设计,这里可以由编码者完成

(5)编码与调试。程序员完成。

(6)单元测试。程序员完成。

(7)集成测试

(8)系统集成

(9)系统测试

(10)系统维护

2、类

由抽象数据类型(ADT)加上继承和多态就成为类,ADT即将一系列对数据操作的集合。其设计的目的为隐藏细节等。所以对于数据都要采用private。访问为采用子程序。类的创建过程:

(1)类的总体设计,如数据和子程序。

(2)编写子程序

(3)复查和测试整个类。

3、伪代码编程

这是以后必须用的一种编程习惯,可以提高易读性,便于维护。同时减少代码质量,提高效率,减少错误的发生。步骤如下:

(1)分析子程序的功能,相关输入输出,隐含条件,处理过程。出错处理等。

(2)先用英语写程序头注释,介绍功能。然后用英语按照流程写伪代码。

(3)将头部注释,写好函数头。

(4)全部//注释,将注释翻译成语句,如果无法翻译,还是比较模糊,那么应该继续写伪代码,直到清晰为止。如果太长,可以用子程序。一行下面写一句或几句程序(控制结构)。

(5)编写过程中,应该用到防御式编程思想。

4、防御式编程

在遇到绝对不可能发生的情况下,如何保护自己,就跟开车一样。如:检查外部来源的值,如文件数据等。子程序输入参数值。输入数据错误怎么处理

断言:绝不可能发生的情况,只在开发模式下用,不放入产品中。对于高健壮性的程序而言,先处理断言,再处理错误。

错误处理:需要做的有错误码,返回值,显示错误,告警日志,关闭程序等处理。

异常:同样用来处理系统函数或一些不应该发生的情况。避免使用空catch。在构造函数和析构函数中不应该使用catch。

调试:如c++中可以用#define DEBUG确定只在调试模式下代码起作用。

这里教会了子程序中编程的思想。

5、变量

变量应在靠近第一次使用的地方声明,需要注意的问题有:变量存活时间尽可能短,变量应具有单一用途。

变量命名:应该描述变量的完整意思。

规则:限定词如total、sum、average、max、min、record要放在后面。

循环用词为teamCount、teamIndex.

状态命名:ready、type、needed

布尔变量:done、error、found、success、ok、available、complete

枚举命名:Color_Red等

类或接口中命名:首字母大写

子程序:首字母小写

成员变量:m_Read

全局变量:g_

常量: 大写用_隔开

对象:首字母小写

访问器子程序使用set和get为前缀

名字缩写:去掉非前置原因以及保留开始和最后一个字母等。不要使用数字。

6、类型

整数:除零错误。整数溢出。检查中间结果溢出。

浮点数:避免使用=判断,应该用减号

数组:边界

第13章

1、全局数据

对于全局数据,应该用访问器子程序来取代全局数据,这样做的好处有:

(1)可是避免操作错

(2)统一修改结构时更加方便,只要改动一处代码

(3)加锁比较方便,直接在子程序中加锁即可。

启示:APP项目中,这一点我放在了CommonInfo类中,全部用Static,但是缺少了子程序访问。

第15章

1、if else 和case

这里需要注意的地方是,一般用了if  就要考虑是否真的不需要else。对于我做的初始化数据那一块,如果失败了,没有考虑到。所以才出现问题。

所以无论如何加一个else子句,如果什么都没有,就在里面写上注释(即不需要else的原因)

if后面的判断,如果比较长的话,考虑用布尔函数。

2、case

用default来检测错误:如果defalut没有做其它处理,而且正常情况下也不会进入,那么就加入诊断消息,如写入错误日志,或者在屏幕上提示。这一点必须要注意。

在JAVA和c++中case后只能是整数。

3、循环

应该让人看到循环条件就知道这个循环是干什么的,里面应该是一个黑盒子,维护者不要看子程序就能明白

(1)下标不要用i/j/k,应该用实际的变量。如payCodeIdx  divisionIdx  总数如numPayCodes。这样约定的话 人家一眼就能看出来,而且不会有下标出问题的情况,命名方式也比较简单,加上Idx就可以,这是我以前做试题的时候,遇到的问题,就是下标修改和使用错误,一直调试不出来,这样做就不会出问题了。

(2)循环结构应该清晰,如果太长就应该用子程序。创建方式,由内而外,最多不超过3层。

第17章

1、错误处理和goto

不要使用goto,当需要进行错误处理,需要跳转时,考虑try-finnaly,跳转到finally中,如果不支持它,那么用状态标记。

第18章

1、表驱动法

对于一些逻辑判断太多的情况,很多个if else组成,如根据年龄段来计算信息。这个时候可以用表来存储。

在java或者c++中可以用hash表,同时用键值转换,将一个年龄段转化为一个值。

如果情况呈现阶梯性,则不要用hash表,而用阶梯法。同时若情况很多,阶梯表的查询就不要采用顺序查询,而应该考虑二分查找等。

还有一种方法是,建立索引。索引一个表,而数据再放到一个表。这个其实没有hash表好用。

所以如果用hash表解决麻烦,就用阶梯法。

第19章

1、布尔型

(1)对于判断而言,不要用0和1来替代布尔的true和false。这个问题要改,这样也可以表面由=0等引起的问题。而对于具体的数值,应该用常量。

(2)简化判断表达式,这里用布尔函数实现。

(3)编写肯定的布尔表达式。

2、嵌套不要超过3个

这个时候考虑用子程序,或者用case等来进行简化。否则程序非常难以理解。如果程序写完,自己都看起来很累的话,那么就要改进,否则程序很难维护。

这个是我在做c++中选择曲线程序中碰到过的问题。一定可以简化的。

3、控制子程序的复杂度

将选择判断作为一个决策点,总的决策点不要超过10个,一般在6个以上就要考虑简化子程序了。

这一点要谨记,否则管理起来就很麻烦。

第20章

代码写完之后,要详细检查,阅读代码每小时能够检测出来的缺陷要比测试高出80%左右。检查发现一个错误只要3.5小时,而测试要花费15-25个小时。

软件重构和返工在不成熟的软件开发周期中可能消耗大约50%的时间。

设计过程中,开发人员平均每小时会引入1到3个缺陷,在编码阶段会平均每小时引入5到8个缺陷。

复查和结对编程是提高软件质量的一种重要手段,特备是代码复查,我以后一定要复查两遍。

第21章

以后在程序中,自己开发一个脚手架,用来对程序进行单元测试,即测试子程序的性能,输入和输出,这个是必须要做的。

对于程序中的告警,一定要处理。

对子程序进行调试修改时,保存原来的源代码。一次只修改一处。

第26章

提升性能

(1)少使用系统函数,因为系统函数很慢,精度很高,很多时候我们不需要这么高的精度。如log2 不如直接写出它的值。

(2)减少系统运算量,如加法代替乘法、乘法代替幂、利用三角恒等式代换等价的三角函数、用long 或int代替 longlong 整数、

用整数代替浮点数、用float代替double、用移位代替乘2等。

(3)子程序改为内联函数

(4)追求效率时,如果一直达不到要求,使用更加低级的语言,如汇编或C

1、对于使用工具IDE、测试工具、文档生成工具、代码自动生成工具,以后都要有所了解,对自己有利的一定要学习。

提高代码质量最好的方式是学习相关著名开源软件的做法,并利用人家已经实现的部分。

2、自己做单元测试。

第31章 布局

1、对于控制块 如if(){}写法为

if(){

}

这样来写,因为很多都是自动生成,直接回车就可以。

2、case写法

case:

...;

break;

这样对于子程序或者比较多的情况比较好。也比较整齐

3、一行中不要做两次操作,如不要把++n放在里面

4、每行只声明一个变量,尽量靠近变量第一次使用的地方声明。

int a;

int b;

这样看起来更加清晰。

5、C++中指针的* 要靠近变量,靠近类型的话只对第一个变量有效。

6、注释前面留一个空行。注释单独一行,这个从伪代码而来。

7、各功能块之见要分行。

8、子程序布局

在子程序参数过多时,布局如下:

bool funcName(

int a;

int b;

)这种格式,否则就按照一般格式。

9、类布局

类文件中 类的功能注释为

//****************************

//...

//***********************

子程序注释为

//-------------------------

//..

//------------------------

子程序之见要空行

一般注释为

//...

上面空一行

第35章 注释技术

1、行尾注释只用来声明数据。包括数据范围,单位,含义。包括全局数据的声明。并用一个一看就知道是全局变量的符号。如g_

2、注释控制结构。在之前要注释意图。之后如果太长的话要在}//if这样表示,看起来更加清晰。

3、子程序注释。子程序除了开头表明意图外,若使用全局变量,也应该做声明。在子程序内部,如果参数过长,则应该按照规范些,并在定义数据后面注释。

4、JavaDoc这个工具以后要使用。

第33 个人性格

1、要充分理解自己的程序,而不是用编译器来通过,确定取消所有警告。

2、提供实际的状况报告,否则最后苦的是自己,不需要再上级面前装自己。

3、多看别人优秀的开源程序,这是提高自己的很重要的方式。

4、乐于承认错误。

5、项目估计时,要坚定自己的立场,否则用加班什么的来完成,最后超过时间还会落得一个不讲信用的下场。

6、培养习惯很重要,优秀的程序员是在头几年就很优秀的,所以一开始就应该培养自己的良好习惯,才能不断提高。

7、碰到问题时,若花半个小时还没有解决,应该花10分钟重新思考问题,试着将它绕过去,寻找新的解决方案。再花一个小时重新设计。

时间: 2024-08-11 05:42:40

代码大全笔记的相关文章

代码大全阅读笔记(二)

代码大全这本书只看懂了一部分,现只对最有收获的部分写入笔记里 第七章 创建子程序的正当理由 (1)降低复杂度;(2)避免代码充分;(3)支持子类化;(4)隐藏顺序;(5)隐藏指针操作;(6)提高可移植性;(7)简化复杂的布尔判断;(8)改善性能 对于过于简单的代码写成子程序的两大理由:1 可以增加程序的可读性 2简单程序可能变成复杂程序 1 在子程序层上设计 内聚性强调把一件事做好,不再做其它任何事情这样做的好处是得到更高的可靠性 顺序上的内聚性是指在子程序内包含有需要按特定顺序执行的操作,这些

表驱动法 -《代码大全》读书笔记

表驱动法是一种编程模式,从表里面查找信息而不是使用逻辑语句(if-else-switch),当是很简单的情况时,用逻辑语句很简单,但如果逻辑很复杂,再使用逻辑语句就很麻烦了. 比如查找一年中每个月份的天数,如果用表驱动法,完全不需要写一堆if-else-语句,直接把每个月份的天数存到一个数组里就行了,取值的时候直接下标访问,最多针对二月判断一下闰年.这么算的话,平时用的的HashMap,SparseArray也可以算是表驱动 表里可以存数据,也可以存指令,或函数指针等都可以. 示例 看一个例子,

代码大全学习笔记(什么是构建)

  构建有时也被认为是"coding"或者"programing".编码算不上是最贴切的词,因为它有一种"把已经存在的设计机械化的翻译成计算机语言"的意味,而构建并不是机械化的,需要可观的创造力和判断力,人们常常用编程代替构建.   构建的步骤: 1.验证前面的工作已经完成(如定义问题,需求分析). 2.确定如何去测试所写的代码. 3.设计并编写类或者子程序. 4.创建并命名变量和具名常量. 5.选择控制结构,组织语句块. 6.对你的代码进行单元

代码大全阅读笔记01

又是一本经典的书<代码大全>,从豆瓣上看到了很多的好评,看了一点感觉大全确实是如其名,一路下来都是很实用的东西,有些虽然都接触到了,但是再看一遍仍旧是收益很大.首先,软件构建的核心就是管理复杂度.虽然书中有不少的篇幅来讨论变量.语句等等这些编程的基本要素,还包括代码改善和调整的策略和方法,可谓不无巨细.不过深入理解一下,这些内容都是围绕着上面这句话展开的,也就是软件构建的核心就是管理复杂度.而这一目标产生的根源就在于人脑智力同软件项目复杂程度之间的矛盾.书中常常会提到几个数字,差不多在6.7左

代码大全读书笔记 - 开篇

说起来,<代码大全>这本书书名实在恶俗.在我推荐给展鸿的时候,他说"雾草,这名字看着就像天朝地摊那种XX全书一类的山寨书-" 是的,其实买这个书的原因就是京东买100减30,我买了10块钱的东西,凑了一下单,书到手之前还以为是代码清单,或者以前ACM模板一样的书,甚至买来的一个月里面都拿来当枕头(足足10+cm厚). 这个周末偶然的翻开,才发现,世界上竟然有如此精彩的书,而且很多东西讲的虽然是软件项目,但给了我很多引申到其他东西上面的灵感.很多地方我读到之后,都会兴奋的心跳

《代码大全》读书笔记

初读云风大大的读书笔记,收获蛮多,云风大大的读书笔记只记录了1到442页的.我直接读了400页之后的,也做了后续的读书笔记.<代码大全>第二版确实是一本好书,每个人读了能领悟的东西并不一样,本读书笔记是博主略有领会的东西,分享出来是希望没读此书的人有所收获,要是能引起你对<代码大全>的兴趣,去通读本书的话就更好了. 另附云风大大的1到442页读书笔记链接:http://blog.codingnow.com/cloud/CodeComplete P439 短路求值,更好的办法是使用嵌

《代码大全》读书笔记——week4

<代码大全>代码高效规范部分读书笔记 前三周看的是C++/C高质量编程,将全书看完后,为了进一步了解与提高编写的代码的规范性与高效性,更深刻的了解相关知识,因此,我特地挑选了代码大全中与之前所读的C++/C高质量相类似的第八章与第十一章进行阅读,与之前三周所学进行对比,互为补充,加深自己的印象以及理解. 第八章:防御式编程 主要思想:子程序应该不因传入数据错误而遭到破坏,哪怕是由其它子程序产生的错误数据 8.1 保护程序免遭非法数据的破坏 检查所有来源于外部的数据的值:检查子程序所有输入参数的

代码大全阅读笔记03

无论怎么拖也总是要做的,我感觉自己的拖延似乎是毫无意义的浪费时间,我的拖延挤出来的时间都是在干啥,这真是让我反思.好了继续读代码大全,我开始烦了已经,因为它太厚了.过渡工程,这个问题把握好并不容易.一方面,我们希望系统健壮,如果组成系统的各个部分只在最低限度满足健壮性要求,那么整体通常是达不到要求的.软件健壮性不取决于最薄弱的地方,而是等于所有薄弱环节的乘积.构架应该指出每个部分,程序员为了谨慎而宁可做过度工程,还是做出简单的能工作的东西就够了.有些东西是不应该过分花精力的,这个错误我们也犯过,

代码大全阅读笔记02

继续阅读代码大全这本书,感觉是好厚好难啃啊.刚刚开始读不久到了作者说把主要精力集中于构建活动,可以大大提高程序员的生产率.我想就一个项目来说,思路和设计是站着主导的地位的,你如果不能把思路理清,可能随时都有可能卡在那里,而一旦灵感来了,你就会想泉涌一样的来思路,我们也算是做了一个小的项目的了,虽然很low吧,但是好歹也算有点体会.我们总是在设计的时候会走投无路,不知所措,以至于每一次开始时都是没有思路起手都只能积压在那里,实在是不知道该怎么做.我觉得 P28 的那个食物链的例子更有说服力,健康的