
读书笔记
e5Max
这个作者很懒,什么都没留下…
展开
-
《C++编程规范》读书笔记(上)
《C++编程规范——101条规则、准则与最佳实践》(C++ Coding Standards——101 Rules, Guidelines and Best Practices)组织和策略问题 设计风格 编程风格 函数与操作符原创 2013-08-03 18:05:25 · 1440 阅读 · 0 评论 -
《C++编程规范》读书笔记(下)
《C++编程规范——101条规则、准则与最佳实践》(C++ Coding Standards——101 Rules, Guidelines and Best Practices)名字空间与模块 模板与泛型 错误处理与异常 STL:容器 STL:算法 类型安全原创 2013-08-04 17:59:48 · 1696 阅读 · 0 评论 -
《C++编程规范》读书笔记(中)
《C++编程规范——101条规则、准则与最佳实践》(C++ Coding Standards——101 Rules, Guidelines and Best Practices)类的设计与继承 构造、析构与复制原创 2013-08-04 13:09:10 · 1347 阅读 · 0 评论 -
《重构》读书笔记(十四)——第十五章 总结
第十五章 总结 “我已经知道如何重构了吗?”Kent Beck告诉我们:不,还没有。 前面各章列出的技术要点仅仅只是一个起点,是你登堂入室之前的大门。 这些技术如此精彩,可它们仅仅只是一个开始,这是为什么?答案很简单:因为你还不知道何时应该使用它们,何时不应该使用;何时开始,何时停止;何时前进,何时等待。使重构能够成功的,不是前面各自独立的技术,而是这种节奏。原创 2013-07-28 08:54:01 · 878 阅读 · 0 评论 -
《重构》读书笔记(十三)——第十三章 重构,复用与现实
13.1 现实的检验 13.2 为什么开发者不愿意重构它们的程序?1. 不知道如何重构。2. 如果这些利益是长远的,何必现在付出这些努力呢?长远看来,说不定当项目收获这些利益时,你已经不在职位上了。3. 代码重构是一项额外工作,老板付钱给你,主要是让你编写新功能。4. 重构可能破坏现有程序。1. 如何重构?在哪里重构?1). 一个常见的重构原因,就是调整程序结构以使(原创 2013-07-27 21:41:08 · 1094 阅读 · 0 评论 -
《重构》读书笔记(十二)——第十二章 大型重构
这场游戏的特点 在大型重构中,情况有很多变化,我们无法告诉你准确的重构步骤。如果没有看到实际情况,任谁都无法准确知道该怎么做(所以,不要妄想得到放之四海皆准的重构方法)。(而在实际项目中,经常遇到的就是大型重构。因为在项目初期,都会有很紧的进度压力,而此时由于刚开始编码,代码的腐坏程度也可能还没有到达你无法容忍的程度。而到了项目中期,代码的可扩展性和可维护性已经严重影响了你的生产原创 2013-07-27 19:09:00 · 1023 阅读 · 0 评论 -
《重构》读书笔记(十)——第十章 简化函数调用
第10章 简化函数调用1、重命名函数(Rename Method)P273 一个好的函数名称很重要,比你想象的还要重要得多。为函数起一个”见名知意“的名字并不容易,需要经验;要想成为一个真正的编程高手,起名的水平是至关重要的,因此需要你的重视。如果你所在的领域比较特殊(专业性比较强),你可以从专业人员那里得到帮助。千万不要以为名字只是小事,不值得去咨询专业人士,一个好的名字将原创 2013-07-20 19:32:16 · 2152 阅读 · 0 评论 -
《重构》读书笔记(十一)——第十一章 处理概括关系
第十一章 处理概括关系 有一批重构手法专门用于处理类的概括关系(generalization,即继承关系),其中主要是将函数上下移动于继承体系之中。1、上移字段(Pull Up Field) 判断若干字段是否重复,唯一的办法就是观察函数如何使用它们。如果它们被函数使用的方式很相似,你就可以将它们归纳到超类去。本项重构从两方面减少重复:首先它去除了重复的数据声明;其原创 2013-07-22 13:58:43 · 1188 阅读 · 0 评论 -
《重构》读书笔记(九)——第九章 简化条件表达式
1、 分解条件表达式(Decompose Conditional)通常与提炼函数(Extract Method)一起使用。 “编写短小的函数”。2、合并条件表达式(Consolidate Conditional) 合并条件表达式,使用Extract Method将条件表达式提炼成一个独立的函数,并为函数取一个意义清晰的名字,大部分情况下这都可以大大提高代码的可读性。原创 2013-07-19 22:47:25 · 1109 阅读 · 0 评论 -
《重构》读书笔记(八)——第八章 重新组织数据
1、自封装字段(Self Encapsulate Field)P171自封装字段 在“字段访问方式”这个问题上,一直有两种截然不同的观点:其中一派认为,在这个字段所在的类中,你可以自由访问它;另一派则认为,即使在这个类中你也应该只使用设值/取值函数间接访问。 两种方式,自有优缺点: 1)间接访问变量的好处是,子类可以通过覆写(基类的)一个函数而改变原创 2013-07-16 23:11:10 · 1358 阅读 · 0 评论 -
《编写可读代码的艺术》读书笔记(一)
The Art of Readable Code 作为程序员,日常工作的大部分时间都是花在一些“基本”的事情上,像是给变量、函数或类命名,写循环以及在函数级别解决问题。并且这其中很大的一部分就是阅读和编辑(修改)已有的代码。因此,代码是否易于理解就显得尤为重要。《编写可读代码的艺术》(The Art of Readable Code)这本书从命名,排版,注释,循环以及如何拆分长表原创 2013-10-03 17:51:32 · 2868 阅读 · 0 评论 -
《编写可读代码的艺术》读书笔记(二)
第一部分介绍了“表面层次的改进”,一次一行,在没有很大风险也不需要花很大代价的情况下改进代码的可读性。接下来,第二部分将讨论“简化循环和逻辑”这个主题,相对第一部分,第二部分的技巧方法通常都需要对代码做些许改动。但这些改动仍然是一些简单的调整(或说重构),不会带来太大的风险和代价。第7章 把控制流变得易读1、条件语句中参数的顺序明显的, if (length > 10)比原创 2013-10-03 23:14:22 · 2866 阅读 · 2 评论 -
MapReduce点滴
1、一个映射(Map)函数就是对一些独立元素组成的列表中的每一个元素进行指定的操作。类似于STL中的算法。Map操作是可以高度并行的,这对高性能要求的应用和并行计算领域非常有用。2、化简操作指的是对一个列表的元素进行适当的合并(例如迭代求和)。3、我们可以把MapReduce理解为,把一堆杂乱无章的数据按照某种特征归纳起来,然后处理并得到最后的结果。Map面对的是杂乱无章的互不相关的数据,转载 2015-05-24 18:21:40 · 594 阅读 · 0 评论 -
《C++标准程序库》读书笔记(一)
1、非类型模板参数:类型(Type) 可以作为模板(template)参数,非类型(NonType)也可以作为模板(template)参数。因而非类型参数可被看做整个模板(template)类型的一部分。例如:bitsettemplate class bitset;当然,其中的N必须是一个编译器常量(即能够在编译器就确定变量的值)。2、缺省模板参数(Default Template原创 2015-04-11 18:21:06 · 848 阅读 · 0 评论 -
C++中类型引导关键字class 和 typename
template 模板定义中类型引导关键字class 和 typename的历史渊源。原创 2015-04-11 08:33:11 · 1115 阅读 · 0 评论 -
《敏捷软件开发》学习笔记(三)
学习介绍了空对象模式,单例模式和单态模式,模板方法模式和策略模式,外观模式和中介者模式,以及命令模式。原创 2015-01-25 13:06:14 · 902 阅读 · 0 评论 -
《敏捷软件开发》读书笔记(四)
1、在进行用例(user case)分析时,我们关注用户素材(user story)和验收测试(acceptance test)。2、提炼共性,寻找抽象。实体对象,塑造模型。3、NullObject空对象模式:对于那种一些对象具有某种行为而另外一些不具有该行为的场景,空对象模式是一个很适合的解决方案。4、核心模型(core model)或者说架构(architecture)是一个系统的原创 2015-02-25 15:41:08 · 662 阅读 · 0 评论 -
《敏捷软件开发》读书比较(二)
1、拙劣设计的症状:僵化性:设计难以改变脆弱性:设计易于遭到破坏牢固性:设计难以重用粘滞性:难以做正确的事情不必要的复杂性:过分设计不必要的重复:滥用鼠标晦涩性:混乱的表达这些症状在本质上和代码的臭味相似,但是它们所处的层位稍高一些。2、面向对象设计的SOLID原则。3、臭味和原则。 设计中的臭味是一种症状,是可以主观(很难客观进行度量)进行度量的。这些臭味常原创 2015-01-19 20:25:15 · 1055 阅读 · 0 评论 -
《敏捷软件开发》读书笔记(一)
1、敏捷开发是一种面临迅速变化的需求快速开发软件的能力。 为了获取这中敏捷性,我们需要:(一)使用一些可以提供必要的纪律和反馈的实践。(二)需要使用一些可以保持我们的软件灵活、可维护的设计原则。(三)我们需要知道一些已经被证明针对特定问题可以平衡这些原则的设计模式。2、原则(Principle)、模式(Pattern)和实践(Practice)都是重要的,但是使它们发挥作用的是人。原创 2015-01-17 14:53:16 · 1185 阅读 · 0 评论 -
《编写可读代码的艺术》读书笔记(三)
这一部分我们将在函数级别对代码做一些改动以改善代码的可读性。第10章 抽取不相关的子问题本章的建议是“积极地发现并抽取出不相关的子问题”。1、提炼纯工具代码并放置到项目中一个公共的地方。2、创建大量通用的代码。“自顶向下”与“自底向上”的结合。3、简化(包装)已有的接口。第11章 一次只做一件事 本章的关键思想是“应该把代码组织得一次只做一件事”。原创 2013-10-07 10:48:31 · 1563 阅读 · 0 评论 -
《重构》读书笔记(七)——第七章 在对象之间搬移特性
1、 “把责任放在哪儿?”通常是艰难的抉择,Move Method可以让你有机会纠正你当初犯下的错误。保证类的职责单一。P142搬移函数 Move Method是一项非常重要的重构手法。决定哪个(或哪些)函数需要搬移,以及搬移至哪一个目标类中更合适?这往往不是容易做出的决定。需要经验的积累。2、对于一个字段,在其所驻类之外的另一个类中有更多的函数使用了它,我们就应该考虑搬移这个字段。P14原创 2013-07-14 16:37:56 · 1459 阅读 · 0 评论 -
《重构》读书笔记(六)——第六章 重新组织函数
1、在很多情况下,我们使用“提炼函数”这个重构手法时会遇到一个困难,即如何给函数起一个好的名称。所以我们需要在函数名称上下功夫,多积累经验。P116 提炼函数2、函数应该尽量选择单一返回值。P116 提炼函数3、间接性可能带来帮助,但非必要的间接性也总是给人不舒服。P117内联(即消除)函数4、默认情况下,我们应该总是将临时变量定义为final(C++中为const). P124引入解原创 2013-07-14 15:25:27 · 1226 阅读 · 0 评论 -
《高质量程序设计指南——C/C++》第9章 C/C++编译预处理
第9章 C/C++编译预处理 预编译伪指令一般都以#号打头,且其前面只能出现空白字符。预编译伪指令不是C/C++语句,它们只是能够被预编译器展开成合法的C/C++语句。因此所有的预编译伪指令都不会进入编译阶段。C/C++中常用的一些预编译伪指令有文件包含(#include),宏定义(#define),条件编译(#if....#else....#endif)等。9.1 文件包含(#原创 2013-01-15 21:40:02 · 912 阅读 · 0 评论 -
《高质量程序设计指南——C/C++》第8章 C/C++高级数据类型
第8章 C/C++高级数据类型8.1 结构(struct)1.关键字 struct 和 class 的困惑 这是面试时经常被问到的一个问题。当然很多时候问这个问题的人并没有把问题问得准确。例如,有人这样问“结构体”和“类”有什么区别? C语言中的结构体和C++中的类有什么区别? C++中的关键字“struct”和 “class”有什么区别? 其实他们想问的问题可能是一样的,即C原创 2013-01-13 18:44:29 · 835 阅读 · 0 评论 -
《高质量程序设计指南——C/C++》第7章 C/C++指针、数组和字符串
第7章 C/C++指针、数组和字符串7.1 指针1、指针就是地址,即存储该指针指向的变量的地址。2、void* 类型的指针能够被任何类型的指针赋值,因此它不能参与算术运算,只能进行赋值、比较和sizeof()操作。7.2 数组1、数组名实际上就是数组的首地址。2、delete 和 delete[] 的语义。3、现代C++程序中,应该尽量避免使用数组。而使用vector代原创 2013-01-13 09:52:39 · 865 阅读 · 0 评论 -
《高质量程序设计指南——C/C++》第6章 C/C++函数设计基础
第6章 C/C++函数设计基础6.1 认识函数 1、函数对于构建程序并不是必需的,但却是非常重要的,它极大的增强了代码的模块性,使程序更易于开发和维护。 2、在程序中积极的使用现有的库不仅可以节省时间,还可以提高程序的质量。 3、关于静态链接库和动态链接库: 写了这么久的代码,关于“静态链接库”和“动态链接库”的概念,一直很模糊。刚才百度了一下,摘录如下原创 2013-01-12 19:13:17 · 773 阅读 · 0 评论 -
《高质量程序设计指南——C/C++》第5章 C/C++常量
第5章 C/C++常量 常用的常量可以分为:字面常量,符号常量,契约性常量,布尔常量和枚举常量。1、尽量使用含义直观的符号常量来表示那些将在程序中多次出现的数字或字符串。2、在C++中应尽量使用const来定义符号常量,包括字符串常量。3、类中的常量:通常使用枚举常量实现。原创 2012-12-27 11:52:38 · 672 阅读 · 0 评论 -
《高质量程序设计指南——C/C++语言》第2章 编程语言发展简史
第2章编程语言发展简史是计算机科学中的一些科普知识,但为了完整性,我仍然将读书笔记记成单独的一篇。 这一章里,作者简略介绍了编程语言的发展历史;讲述了美丽女子Ada的故事;特别的,提到了C /C++语言的发展与演化;并用生动优美的句子放映了Borland与Microsoft之争;Java是近年来编程语言中的最为盛行的工具,其与微软C#的较量成为一段佳话,最后Java暂时成为了这个时原创 2012-12-13 19:10:58 · 850 阅读 · 0 评论 -
《高质量程序设计指南——C/C++语言》第4章 C/C++程序设计入门
第4章 C/C++程序设计入门4.1 C/C++程序的基本概念4.1.1、关于启动函数main() 每个 C++ 程序都包含一个或多个函数,而且必须有一个命名为 main()的主函数。函数由执行函数功能的语句序列组成。操作系统通过调用 main() 函数来执行程序,main() 函数则执行组成自己的语句并返回一个值给操作系统。1、 C++标准规定的标准main()函数的原创 2012-12-27 11:32:42 · 915 阅读 · 0 评论 -
《高质量程序设计指南——C/C++语言》第1章 高质量软件开发之道
第1章 高质量软件开发之道 本书的第1章之高质量软件开发之道,作者用大量的篇幅介绍了“软件质量”的基本概念,解释了软件质量的十大属性。这十大质量属性又分为功能性和非功能性两类,功能性包括正确性,健壮性和可靠性;非功能性包括性能,易用性,清晰性,安全性,可扩展性,兼容性和可移植性。 1.1 软件质量的基本概念 在这一节里,作者提出了“零缺陷”理念。 “没有原创 2012-12-13 10:32:24 · 1246 阅读 · 0 评论 -
《高质量程序设计指南——C/C++语言》第3章 程序的基本概念
第3章 程序的基本概念 什么是程序设计语言?语言实现又是什么?程序库、开发环境及程序的工作原理等概念,很多C/C++程序员不甚了解,本章对这些纠缠不清的概念和它们之间的关系作了解释。 程序设计语言实际上就是一套规范的集合。 语言实现则是具体地实现一种语言的各种特性并支持特定编程模式的技术和工具。一般的讲,编程语言的实现就是指编译器(包括链接器或解释器等)的实现。原创 2012-12-14 09:50:12 · 848 阅读 · 0 评论 -
《高质量程序设计指南——C/C++》第10章程序版式&第11章命名规则
第10章 C/C++文件结构和程序版式 文件结构和程序版式虽然并不影响程序的正确和功能,也无多少技术含量,但是能够反映出开发者的职业化程度。版式可以提高代码的清晰性,可读性,从而让代码更易于理解和维护,进而提高软件质量。10.1 程序文件的目标结构 对于开发中的项目工程,一个良好的文件组织是很有必要的。它有助于开发和维护。10.2 文件的结构 1、一般来说,实原创 2013-01-16 18:09:59 · 814 阅读 · 0 评论 -
《高质量程序设计指南——C/C++》第13章 对象的初始化、拷贝和析构
第13章 对象的初始化、拷贝和析构 构造函数、析构函数和赋值函数(操作符)是每个类最基本的函数。13.1 构造函数与析构函数的起源 把对象的初始化工作放在构造函数中,把清除工作放在析构函数中。当创建对象时构造函数被自动执行;当对象消亡时,析构函数被自动执行。这样就不用担心忘记对象的初始化和清除工作了。13.2 为什么需要构造函数和析构函数 注意“初始化”与“赋原创 2013-02-19 20:10:53 · 767 阅读 · 0 评论 -
《重构》读书笔记(五)——第四章&第五章
单元测试1、编写优良的测试程序,可以极大提高我们的编程速度。这可能让很多人吃惊,也违反很多程序员的直觉。2、自测试代码的价值:修复错误通常是比较快的,但找出错误却是噩梦一场。当你修复一个错误,总是会有另一个错误出现,而且肯定要很久以后才会注意到它。那时我们又要花上大把的时间去寻找它。3、当然,编写测试程序,要写很多的额外代码。起初你可能会觉得这纯粹是无稽之谈。你甚至会发现一个人一天能干原创 2013-07-14 11:32:21 · 1352 阅读 · 0 评论 -
《重构》读书笔记(四)——第三章 代码的坏味道
第三章 代码的坏味道 从某种意义上讲,理解“何时应该重构”,“何时停止重构”比“知道如何重构”更重要! 作者在这一章里试图通过“代码的坏味道”这样一种暗喻来解释“重构的时机和场合”。任何人都没办法给出何时必须重构的精确衡量标准。理解并掌握这个标准需要我们的直觉。这也与项目的实际情况有关,例如质量要求,预期的服役年限,安全性要求等等。因此,我们必须培养自己的判断力,学原创 2013-07-14 11:05:39 · 1342 阅读 · 0 评论 -
《重构》读书笔记(三)——第二章 重构原则
第二章 重构原则 这一章作者回答了“何谓重构?”“为何重构?”“何时重构?”等基本问题,并讲述了重构的难题和起源以及重构与设计,重构与性能的关系。 何谓重构? 重构(Refactoring)就是在不改变软件可观察行为的前提下,通过调整程序代码的结构,提高其可理解性,降低其修改成本。关于“重构”的定义,有过这样的讨论: 重构的基本要求是“不改变原创 2013-07-13 19:34:19 · 1322 阅读 · 0 评论 -
《重构》读书笔记(二)——第一章 第一个重构案例
第1章 重构,第一个案例 作者在第一章通过一个影片出租的例子,试图阐述重构的基本过程和步骤。看得出来,作者对这个案例给予厚望,花了很大的篇幅。正因如此,我没有理由不好好学习这一章。 影片出租的例子本身不难,但我足足花了一整个下午学习了这个例子。我先是老老实实的把代码用C++重抄了一遍,然后跟着作者的步伐,一步步重构,以期体验“重构改善设计”的完美过程。原创 2013-07-13 17:04:50 · 1727 阅读 · 1 评论 -
《重构》读书笔记(一)——序言
《重构——改善既有代码的设计》(以下简称《重构》)。 这本书有三个序言,《重构的重新认识》(再版序),《重构的生活方式》(译序),《序》。嚇!NB书就是NB书啊,序言都这么多。 一、《重构的重新认识》(再版序)----译者熊节 再版序,顾名思义,就是再一次出版,嗨,看来这书还真是名不副实啊,估计只有书好,买的人才多,才能再版吧。看来这书买对了,^-^ 在《重构的原创 2013-07-13 09:28:33 · 1360 阅读 · 0 评论 -
《高质量程序设计指南——C/C++》第16章 内存管理
第16章 内存管理16.1 内存分配方式内存分配方式有以下3种:一、从“静态存储区”分配 例如全局变量,static静态变量。二、从“栈”上分配 例如函数内的局部变量(包括形参)。该类运算效率很高,而且一般不存在失败的危险,但是分配的内存容量有限(2M?),可能会出现堆栈溢出。三、从“堆(或称自由存储区)”上分配 亦称动态内存分配。例如mal原创 2013-03-11 21:56:50 · 1111 阅读 · 0 评论 -
《高质量程序设计指南——C/C++》第15章 C++异常处理机制和RTTI
第15章 C++异常处理机制和RTTI 一、C++异常处理 到目前为止,我还没有实际项目中使用“异常机制”的经验,因此对这一块全然不懂。因为在Qt4框架中,不提倡使用异常。 有意思的是,Google编程规范也建议:“我们不使用 C++ 异常.”。 当然,不可质疑的是:C++的异常处理技术能增强软件的健壮性。关于异常的使用,留待以后研究吧。二、RTTI原创 2013-03-11 20:56:32 · 1216 阅读 · 0 评论