当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

北京大学:《数据结构与算法》课程教学资源(实习讲义)风格、设计与实现

资源类别:文库,文档格式:PDF,文档页数:4,文件大小:171.94KB,团购合买
点击下载完整版文档(PDF)

clas风格 My Type命名 Type语句 风格、设计与实现 注释 MyType文档; MyType参考文献 风格风格0 风格风格0 额外的工作量为了减少工作量 我们必须培养良好的代码风格 Good points ■现在处于学习阶段,不能太懒 ■团队合作要求统一的风格 ■自己的代码适合别人学习,别人==几个月或者 几年后的自 ■从最切身的利益讲:有利于助教或者老师 批改; 风格要付出额外的劳动一增加输入量: ■人们经常忽略风格,或者不能达成共识 ■没有风格有利于代码的保密② 所以我们的代码需要风格 风格风格O 风格风格0 两个程序片段 ol Ca:aahk(onokDIN-ATE kftlarinz panee) t是什么了 n m哪坐来的 ak又是哪甲的了

1 风格、设计与实现 高壮 2007.10 class 风格 { private: MyType 命名; MyType 语句; MyType 注释; MyType 文档; MyType 参考文献; public: 风格(); ~风格(); }; 风格.风格() 额外的工作量为了减少工作量 „ So it is a tradeoff! Good Points: „ 阅读别人的代码方便; „ 自己的代码适合别人学习,别人=?=几个月或者 几年后的自己。 Bad Point: „ 风格要付出额外的劳动—增加输入量; „ 人们经常忽略风格,或者不能达成共识; „ 没有风格有利于代码的保密/ 风格.风格() 我们必须培养良好的代码风格: „ 现在处于学习阶段,不能太懒; „ 团队合作要求统一的风格; „ 从最切身的利益讲:有利于助教或者老师 批改;☺ 所以我们的代码需要风格 风格.风格() 两个程序片段: „ int main() „ { „ int qq, i, j, tot, pre; ------------------qq,tot是什么? „ scanf("%d", &qq); „ while (--qq >= 0) „ { „ memset(stock, 0, sizeof(stock)); „ scanf("%d%d", &side, &n); „ max = 0; ---------------------max,min哪里来的? „ min = 10; „ tot = 0; „ for (i = 0; i max) max = j; „ if (j totalSize || leftTop.second+pieceSize[piece]>totalSize) „ return false; „ for(int row=leftTop.first;row>caseNum; „ Case cutCake; „ while((caseNum--)>0) „ { „ cutCake.Input(); „ cutCake.Output(); „ } „ }

风格命名 风格命名 ■命名是程序风格中最重要的部分,也是初 ■词能达意 学者最容易忽略(甚至不屑)的部分 获得字符串的长度“的函数,下面两个名称: ■一个好的变量命名应该满足 hdzfcdcd ( 词能达意: COORDINATE leftTo getLength ( )表明身份:变量?函数? 局部?常 孰优孰劣,一目了然! 量?类?宏? e)存储类型:int?foat?char? **这里我们不提倡“爱国”,不要用拼音,尤其 是拼音首字母组合 风格命名 风格命名 ■表明身份 ■存储类型(匈牙利命名法): variable:局部变量 variable:全局变量 ■ BOOL eNable ■ Int nlength m variable:成员变量 n WORD wPos dosomething函数 CONSTANT VARIABLE:常量 n DWORD dw Range ClassName:类 MACRO0:宏 ■32位字符串指针lsN g_vErtex:全局变量,并且是指向顶点的指针 32位常量字符串指针 pszName ■ Windows对象句柄hWnd 风格命名 风格语句 t20向导自动生成的 MAnfran要 ■语句的风格主要包括 缩进 这个大家都做的很好! 空格:intb=a+c; vs int b=a+c; cManlramo 空行: rita md DumpNDupCantens de)cora ■文件中的主要部分要用空行分开 控件条嵌入成员 ■连续的两个多行定义之间用空行隔开 ■多行定义和其他代码之间应该用空行隔开 CKEATEsIKLCr Lptnaesmuck ■块局部变量和代码之间用空行分开 有什么不同?不统一的风格>NO

2 风格.命名 „ 命名是程序风格中最重要的部分,也是初 学者最容易忽略(甚至不屑)的部分。 „ 一个好的变量命名应该满足: a) 词能达意: COORDINATE leftTop b) 表明身份:变量?函数?全局?局部?常 量?类?宏?… c) 存储类型:int?float?char? 风格.命名 „ 词能达意: ”获得字符串的长度“的函数,下面两个名称: hdzfcdcd() getLength() 孰优孰劣,一目了然! **这里我们不提倡“爱国”,不要用拼音,尤其 是拼音首字母组合** 风格.命名 „ 表明身份: „ variable:局部变量 „ g_variable:全局变量 „ m_variable:成员变量 „ doSomething():函数 „ CONSTANT_VARIABLE:常量 „ ClassName:类 „ MACRO():宏 „ g_pVertex:全局变量,并且是指向顶点的指针 风格.命名 „ 存储类型(匈牙利命名法): „ Char chGrade „ BOOL bEnable „ Int nLength „ WORD wPos „ LONG lOffset „ DWORD dwRange „ 指针 pDoc „ 远指针 lpszName „ 32位字符串指针 lpszName „ 32位常量字符串指针 lpszName „ Windows对象句柄 hWnd 风格.命名 „ class CMainFrame : public CMDIFrameWnd-------------------------.net 2003向导自动生成的CMainFrame类 „ { „ DECLARE_DYNAMIC(CMainFrame) „ public: „ CMainFrame(); „ public: „ virtual BOOL PreCreateWindow(CREATESTRUCT& cs); „ public: „ virtual ~CMainFrame(); „ #ifdef _DEBUG „ virtual void AssertValid() const; „ virtual void Dump(CDumpContext& dc) const; „ #endif „ protected: // 控件条嵌入成员 „ CStatusBar m_wndStatusBar; „ CToolBar m_wndToolBar; „ protected: „ afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); „ DECLARE_MESSAGE_MAP() „ };---------------------------------------------------------有什么不同?不统一的风格>NO 风格.语句 „ 语句的风格主要包括: 缩进: ------------这个大家都做的很好!☺ 空格:int b = a + c; vs int b=a + c; 空行: „ 文件中的主要部分要用空行分开 „ 连续的两个多行定义之间用空行隔开 „ 多行定义和其他代码之间应该用空行隔开 „ 块局部变量和代码之间用空行分开

风格语句 风格语句 不要滥用空格 ■少用具有二义性或者很难理解的语句 ■不要在单目运算符和其操作对象间加空格比 strai++I sizeof(str): = sizeof(str); (nt)a+b =>(int)a+b hild=(ILC&&!RO):0: (?RC: LO; 不要在引用操作符∵>前后加空格 subkey=subkey>>(bitoff-(bitoff>>3) leftTreel=0; = while((c=getchar)!=EOF PNode->leftTreel=0 # define square()()(3)2有没有问题?2/ square() 风格语句 风格注释 大括号(建议前一种) ■风格规范涉及在进行实际编码时,从注释、代码 while(condition) 块到类和函数域,以至于整个项目文件范围方方 面面形成的良好风格习惯。 ■初学者往往注重完成特定的算法功能,而忽视了注释 以及代码可读性、可维护性 ■注释应当是编码的一部分。没有注释 if(condition)i while(condition)t 整。写出好的注释如同写出好的代码,需要经验积累 ■注释要清晰、简沽,并且有价值。 风格注释 风格文档 ■对于注释,请尽量遵守下面的规范 ■文档是一个良好程序不可分割的一部分。一个程 ■使用∥/,因为/*·/不支持嵌套注释 序能否被广泛使用很大程度长觉得于它的文档的 ■文档应该包含 ■问题背景 ■问题分析 问题求斛 问题的结果分析 ■程序的性能: 最后的总结

3 风格.语句 不要滥用空格 „ 不要在单目运算符和其操作对象间加空格比 如:!a,++a… sizeof (str); => sizeof(str); (int) a+b => (int)a+b 不要在引用操作符’.’ ’->’ ’[ ]’前后加空格 a [i] => a[i] pNode -> leftTree!=0; => pNode->leftTree!=0; 风格.语句 „ 少用具有二义性或者很难理解的语句: i+++i; stra[i++] = strb[i++] = ‘ ‘; child=(!LC&&!RC)?0:(!LC?RC:LC); subkey=subkey>>(bitoff-((bitoff>>3)<<3)); „ 不要吝啬括号 while((c=getchar())!=EOF) #define square(x) (x)*(x)??有没有问题?2/square(x) 风格.语句 „ 大括号(建议前一种) if (condition) while (condition) { { ... ... } } vs if (condition) { while (condition) { ... ... } } 风格.注释 „ 风格规范涉及在进行实际编码时,从注释、代码 块到类和函数域,以至于整个项目文件范围方方 面面形成的良好风格习惯。 „ 注释 : „ 初学者往往注重完成特定的算法功能,而忽视了注释 以及代码可读性、可维护性。 „ 注释应当是编码的一部分。没有注释,编码不算完 整。写出好的注释如同写出好的代码,需要经验积累 与素养。 „ 注释要清晰、简洁,并且有价值。 风格.注释 „ 对于注释,请尽量遵守下面的规范: „ 使用’//’,因为’/*… */’不支持嵌套注释。 „ 长注释应和代码分在不同的行 „ 如果注释掉大段代码,请使用'#if 0...#endif'或'//'注释 代码,不要使用'/*...*/'。用'/*...*/'作注释可能会导致嵌套 注释,当被注释掉的代码块很大时更容易出现这种情 况,这样可能导致注释掉的区域不是我们想要的范 围。而'#if 0...#endif'方式可以嵌套,# if 0是废掉代码, #if 1是打开代码,非常方便。 „ 确保所有注释(随代码)及时更新。一定要牢记注释 是编码的一部分,所以修改代码时,相应的注释也要 改。没有及时更新的注释会误导代码阅读和维护,甚 至产生严重的副作用。 风格.文档 „ 文档是一个良好程序不可分割的一部分。一个程 序能否被广泛使用很大程度长觉得于它的文档的 质量。 „ 文档应该包含: „ 问题背景; „ 问题分析; „ 问题求解; „ 问题的结果分析; „ 程序的性能; „ 最后的总结;

风格文档 风格文档 较好的文档实例: ■需要注意的文档风格: 上行优先理素,判断可否下只需检置一什 张贴大量代码,甚至全部代码,而没有说明 的 械,当且仅当,《+D可这个格子为空,我们用下的代到树定 1是当的要的小修,上足远的去形 风格参考文献 风格~风格0 ■高质量C++/C编程指南林锐博士 程序设计实践 Brian w. Kernighan, Rob pike a C++ Coding Standard, Andrei Alexandrescu Herb Sutter 谢谢!

4 风格.文档 较好的文档实例: 风格.文档 „ 需要注意的文档风格: 张贴大量代码,甚至全部代码,而没有说明 风格.参考文献 „ 高质量C++/C 编程指南 林锐 博士 „ 程序设计实践 Brian W. Kernighan, Rob Pike. „ C++ Coding Standard,Andrei Alexandrescu, Herb Sutter 风格.~风格() 谢谢!

点击下载完整版文档(PDF)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
已到末页,全文结束
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有