已阅读5页,还剩103页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件体系结构编程回顾,林荣恒北京邮电大学,北京邮电大学,主要内容,编程概述程序风格算法与数据结构小结,设计、调试和测试这里不再介绍,北京邮电大学,编程概述,程序编程Programming编程语言,北京邮电大学,程序,计算机的工作是由程序来控制的程序:程序是为解决某一问题而编写的语句序列。通俗的说,将解决一个实际问题的具体操作步骤用某种计算机语言描述出来,就形成了程序。语句序列:指令计算机可以识别的命令实际问题的具体操作步骤:算法求解问题的方法,是在有限的步骤内求解某一问题所使用的一组定义明确的规则,是计算机处理问题所需要的过程,北京邮电大学,高质量的程序所具备的条件,建立正确的数学模型和确定有效的计算方法运行结果必须正确,且在精度和其它各方面均满足要求程序本身具有良好的结构,逻辑清晰,易读易懂程序运行时间尽可能短,同时尽可能合理地使用内存便于检查、修正、移植和维护,北京邮电大学,编程,编程(Programming):就是编写程序,它是在对算法进行正确描述的基础上进行的,是用计算机语言(程序设计语言)实现算法的过程。算法转变程序的过程,北京邮电大学,编程的一般过程,对于简单问题,前三步可看作一步,即分析问题、设计算法。维护?,北京邮电大学,程序语言,机器语言由计算机硬件系统可以识别的二进制指令组成汇编语言将机器指令映射为一些可以被人读懂的助记符,如ADD、SUB等高级语言屏蔽了机器的细节,提高了语言的抽象层次程序中可以采用具有一定含义的数据命名和容易理解的执行语句在书写程序时可以联系到程序所描述的具体事物面向过程面向对象,北京邮电大学,选择计算机语言的原则,根据自己所处理事务的特点来选择计算机语言符合现代程序设计的要求适合使用者的硬件和软件环境考虑软件执行效率考虑使用者的工作性质,北京邮电大学,高级程序语言学习要点,数据结构基本、复合变量类型声明方法操作符语句赋值、计算结构控制语句:条件、分支、循环过程调用语句功能块/操作函数、过程类中的方法或成员变量,北京邮电大学,高级程序语言学习要点(2),模块.c文件类类库或者库函数:该语言或者第三方提供的,不用自己编写的系统调用输入输出:文件、键盘、网络随机数、String线程作用域Public、static、private、protected、friendly、extern异常处理,北京邮电大学,高级程序语言学习要点(3),可执行程序的构成和组织主程序、Main函数、Main类模块文件、类文件目录结构程序编辑、编译、链接和执行方法依赖于环境该语言有特色的地方可视化程序设计实质是去使用开发环境提供的可视化库函数或者类库,北京邮电大学,主要内容,编程概述程序风格算法与数据结构小结,北京邮电大学,程序风格,引言名字表达式和语句一致性和习惯用法函数宏神秘的数注释,北京邮电大学,程序风格,引言名字表达式和语句一致性和习惯用法函数宏神秘的数注释,北京邮电大学,看看这个代码,typedefstructdoublex,y,zvec;vecU,black,amb=.02,.02,.02;structsphereveccen,color;doublerad,kd,ks,kt,kl,ir*s,*best,sph=0.,6.,.5,1.,1.,1.,.9,.05,.2,.85,0.,1.7,-1.,8.,-.5,1.,.5,.2,1.,.7,.3,0.,.05,1.2,1.,8.,-.5,.1,.8,.8,1.,.3,.7,0.,0.,1.2,3.,-6.,15.,1.,.8,1.,7.,0.,0.,0.,.6,1.5,-3.,-3.,12.,.8,1.,1.,5.,0.,0.,0.,.5,1.5,;yx;doubleu,b,tmin,sqrt(),tan();doublevdot(A,B)vecA,B;returnA.x*B.x+A.y*B.y+A.z*B.z;vecvcomb(a,A,B)doublea;vecA,B;B.x+=a*A.x;B.y+=a*A.y;B.z+=a*A.z;returnB;vecvunit(A)vecA;returnvcomb(1./sqrt(vdot(A,A),A,black);structsphere*intersect(P,D)vecP,D;best=0;tmin=1e30;s=sph+5;while(s-sph)b=vdot(D,U=vcomb(-1.,P,s-cen),u=b*b-vdot(U,U)+s-rad*s-rad,u=u0?sqrt(u):1e31,u=b-u1e-7?b-u:b+u,tmin=u=1e-7,你写的比它好多少?,北京邮电大学,想写出高质量的代码吗?,高质量代码的四个基本特性:正确性简单性可读性可测试性可读性(清晰性)是“易于维护、易于重构的程序”最有价值的特性采用好的程序设计风格进行编码是实现可读性的必要保障,北京邮电大学,为什么要有可读性?,编程首先是与人交流,其次才是与计算机交流,采用好的风格编写出可读性好的代码,可以降低与人交流的复杂度:编程阅读代码的次数要比编写代码多得多,即使在开发的初期也是如此维护代码的维护者会感激你使代码容易理解将来的维护者很可能就是你自己,到时候你得尝试记起自己六个月以前在想什么软件的首要技术使命是管理复杂度,许多编程实践背后的动机正是为了降低程序的复杂度,北京邮电大学,怎样提高可读性?,名字,最常见的有类名、子程序名、变量名;长度,比如类的长度、数据成员的数目、子程序的长度、子程序的参数数目、语句的嵌套层数;复杂度,包括表达式的复杂度、语句逻辑的复杂度等;格式,包括缩进、空格、注释等;耦合度,包括由于共享数据(含全局数据)导致的耦合、类之间耦合(继承、组合、友元)、子程序之间的耦合等;,北京邮电大学,程序风格,引言名字表达式和语句一致性和习惯用法函数宏神秘的数注释,北京邮电大学,名字:名不正,则言不顺!,类名、子程序名、变量名等,用于标识相应的对象可以使用切合实际的命名约定,但一旦使用了,就一定要始终如一地坚持你的命名约定frontsize,frontSize,front_size,北京邮电大学,一些基本的命名规则,全局变量使用具有说明性的名字,作用范围越大,所携带的信息应该越多好名字:currentDate、todaysDate坏名字:X,y,d,cd,td,x,y,date局部变量可以使用短名字例如,如果循环只有寥寥数行,而且只是单层循环,那么可以用i、j等如果循环行数较多,或者有嵌套,则需要更长而且有意义的名字试比较:scoreteamIndexeventIndex和scoreij下标串化问题,北京邮电大学,一些基本的命名建议(续1),研究发现,当变量名的平均长度在10到16个字符的时候,调试程序所需花费的气力是最小的。平均名字长度在8到20个字符的程序也几乎同样容易调试。太短的名字无法传达足够的信息太长的名字很难写,同时也会使得程序的视觉结构变得模糊不清,北京邮电大学,一些基本的命名建议(续2),保持一致性坏的命名:好的命名:,ClassUserQueueintnoOfItemsInQ,frontOfQueue,queueCapacity;publicintnoOfUsersInQueue(),ClassUserQueueintnUsers,front,capacity;publicintgetNoOfUsers(),北京邮电大学,一些基本的命名建议(续3),函数采用动作性的名字:用动作性的动词,后面跟着名词如:比较:If(checkoctal(c)和if(isoctal(c)要准确:名字不仅是个标记,它还携带着给读程序人的信息,now=date.getTime();putchar(n);,北京邮电大学,程序风格,引言名字表达式和语句一致性和习惯用法函数宏神秘的数注释,北京邮电大学,表达式和语句,用缩行显示程序的结构Bad:Good:,For(n=0;n100;fieldn+=0;*i=0;return(n);,For(n=0;n=actblks)|(block_idunblocks),北京邮电大学,表达式和语句(续2),用加括号的方式排除二义性在混合使用相互无关的运算符时,多加几个括号没有坏处尤其是C语言即使不必要,加了括号也能把意图表现得更明白小窍门:使用括号使得你不用去记那些操作符的优先级,北京邮电大学,表达式和语句(续3),分解复杂的表达式Bad:Good,*x+=(*xp=(2*k(n-m)?ck+1:dk-);,If(2*k29”),Rightcode,北京邮电大学,一致性和习惯用法(续2),为了一致性,使用习惯用法just“so-so”codeGoodcode,i=0;while(isuf=NULL;sp-next=statetabh;statetabh=sp;returnsp;,北京邮电大学,Hash函数,/*hash:computehashvalueforarrayofNPREFstrings*/unsignedinthash(char*sNPREF)unsignedinth;unsignedchar*p;inti;h=0;for(i=0;iword=suffix;suf-next=sp-suf;sp-suf=suf;,北京邮电大学,输出模块:generate函数,/*generate:produceoutput,onewordperline*/voidgenerate(intnwords)State*sp;Suffix*suf;char*prefixNPREF,*w;inti,nmatch;for(i=0;inext)if(rand()%+nmatch=0)/*prob=1/nmatch*/w=suf-word;if(nmatch=0)eprintf(internalerror:nosuffix%d%s,i,prefix0);if(strcmp(w,NONWORD)=0)break;printf(%sn,w);memmove(prefix,prefix+1,(NPREF-1)*sizeof(prefix0);prefixNPREF-1=w;,北京邮电大学,算法与数据结构,数据结构概述算法概述实例小结,北京邮电大学,小结,算法和数据结构的研究是计算机科学的基石程序算法+数据结构,设计算法与选择合适的数据结构是程序设计中相辅相成的两方面,缺一不可。数据结构的选择一直是程序设计中的重点、难点。正确地应用数据结构,往往能带来意想不到的效果。算法通常是决定程序效率的关键,但一切算法最终都要在相应的数据结构上实现,许多算法的精髓就是在于选择了合适的数据结构作为基础。,北京邮电大学,小结(2),我们不需要太担心,其实基本算法只有屈指可数的几个,几乎出现在每个程序中,而且被包含在程序库中,如:基本检索和排序但是递归分治等算法设计思想,还是要好好把握的基本的数据结构也不多。虽然有时需要更复杂的数据结构,但它们基本上都是从几个基本的东西中产生出来的,北京邮电大学,小结(3),对于大部分程序员而言,所需要的是知道有哪些合适的、可用的算法和数据结构知道如何在各种可以替代的东西之中作出选择,北京邮电大学,小结(4),选择算法的几个步骤参考可能的算法和数据结构参考问题规模,如果不大,选择简单技术;如果数据可能增长,不再考虑不能对付大数据集合的东西如果有库或语言本身的特征可以使用,就应该使用;如果没有,先自己写或借用短的、简单的容易理解的实现。如果测试发现太慢,再改用更高级的技术。,北京邮电大学,小结(5),实际上,在程序设计过程中,很难确定到底是先决定的算法还是先决定的数据结构有的时候,先决定数据结构有的时候,先决定算法更多的时候是在问题的分析过程中,这两方面慢慢地同时变得清晰起来只有通过大量的实践,才能够真正掌握算法和数据结构的精髓,北京邮电大学,主要内容,编程概述程序风格算法与数据结构小结
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 成教毕业论文题目范文
- 会计学专业(120251)硕士研究生培养方案
- 工程监理解除合同协议书(3篇)
- 工程合同协议书范例6篇(3篇)
- 华师撰写本科毕业论文的规定
- 2025会计学论文题目参考
- 浅议工艺美术设计的创新思维-图文
- 加强煤炭企业成本管理的思路及其对策
- 浅析“向异类中行”
- 《工程岩土》课件 模块五区域性岩土问题分析单元1任务点3泥石流灾害分析
- 风电约3.9GW!重庆发布“十五五”能源规划任务分解实施方案
- 《高效协同的组织架构》课件
- 消防检测合格标准项消防隐患标准用语参考手册
- CNAS-CC121-2017 环境管理体系审核及认证的能力要求
- GB/T 45473-2025复合材料和增强纤维碳纤维增强塑料(CFRPs)和金属组件十字拉伸强度的测定
- NSR600RF保护测控装置技术使用说明书
- 鸡鸣寺建筑剖析
- 农村承包蟹塘合同书5篇
- 《皮肤知识》培训课件
- 第一篇病历书写基本规范
- DBJ51T 189-2022 四川省建设工程施工现场安全资料管理标准
评论
0/150
提交评论