读书摘要——《凌波微步-软件开发警戒案例集》

p15.

"将void,int,float等基本数据类型通过typedef重新命名,可以在最大程度上保证代码的可移植性——例如从16位程序至32位程序的移植问题即可通过此方法简单解决。
   例如WIN32 SDK中大量出现的UINT ,DWORD等定义均属此列。
  "

p18.

"匈牙利命名法存在很多严重的问题,其中之一是:一旦要修改变量类型,也就必须同时修改变量名称。这一问题,反映在必须保证接口稳定的WIN32 API上,更为棘手。"

p31.

"几乎所有现代C/C++编译器在处理内存中的数据结构以及sizeof运算符时,默认情况下,都会把类或结构占用的空间大小在8字节边界处对齐,以优化代码的执行速度。

可以通过预编译命令 #pragma pack (1)来取消这种默认对齐"

p42.

"定义和实际存储相关的数据结构时,最好不要使用int这种"可变长"的数据类型——int在16位、32位、64位计算机上的字节长度是不同的——相反,使用诸如DWORD这样的定长类型是个不错的选择。"

p66.

"assert()宏仅在NDEBUG宏无效的情况下才发挥作用,即若定义了NDEBUG宏(软件的releass版本),则assert()宏相当于空语句;若未定义NDEBUG宏(Debug版本),则assert检查参数,参数为假时,输出错误信息并终止程序。

assert()宏的最大问题是其在软件的release版本中将变为空语句,不起任何作用。

因此,不要在assert()中写入任何影响程序运行状态的语句,如assert(fp=fopen()),这种用法是错误的。

另外,对于外部参数(用户输入)不应该用assert()宏来检查有效性,assert()宏应用来检查内部参数(确定因素)。

MFC中特别提供了一个VERIFY宏,除了能完成assert()的验证功能外,其最大的特点是无论在Debug版还是Release版本中,都永远有效。"

p91.

"面向对象编程中不容忽视的一个问题:类的构造函数是没有返回值的。

这个特点使得如果在构造函数中进行资源分配,就必须采取一定办法将分配失败的情况通知调用者,否则就有可能造成内存访问异常。

解决方法通常有两种:

一是干脆不在构造函数中进行资源分配,而是在类中实现Initialize()和Uninitialize(),由这两个函数负责资源的释放和分配,返回值类型为bool。
  
   二是利用对象的异常处理机制,当构造函数发生分配错误时,就跑出异常,一旦捕获异常,就不进行后续的工作。"

p131.

"属性是一种高级的面向对象特征,它与成员变量、方法一样,是编写类库或组件的常用方法。

属性的最大优点在于保证数据机器相关操作的完整和统一。"
 
    成员变量易于定义比较单纯的数据元素,方法适于实现功能操作,属性则用于定义与某些功能操作关系紧密的元素。 "

p172.

"sendmessage()这个API的功能被定义为向窗口发送消息,并调用目标窗口的窗口过程函数来处理该消息,直到消息被处理完前函数保持阻塞状态。

postmessage()的功能与sendmessage()类似,区别在于postmessage()在将消息放入目标窗口的消息队列后立即返回,即是非阻塞的。"

p175.

"黑板擦问题

不应该将执行耗时操作的代码放置在需要负责处理用户消息的窗口线程中。"

p236.

" 版本控制的最重要目标和原则就是尽量避免不同版本代码中的重复内容,因为重复意味着重复工作,意味着重复错误。
     而为了避免重复,应当将代码中共用的部分尽量提取出来,并且尽量让同一功能的代码集中在同一代码文件中。"

p246.

"全面质量管理(TQM:Total Quality Management)

p235

"被测实现(IUT:Implementation Under Testing)

测试中最重要的概念和原理是:
    1.测试无法证明被测实现(IUT)的正确性。
    2.测试只能证明被测实现(IUT)中包含错误。

p309.

"好的测试都是自动测试。测试计划和测试用例由人设计,但实际的测试操作确实由程序或者自动化工具完成的。
    好的测试都是基于模型的。
    最常用的测试模型包括组合模型和面向对象模型。"

p366.

"使用面向对象语言不等于基于面对对象的思想设计和开发软件。
    面向对象设计(OOD)的基础是面向对象分心(OOA)。
    面向对象分析的关键侍从应用中抽象出操作和数据的统一体。
    面向对象分析的结果应该用UML(Unified Modeling Language)语言来描述。
    UML只是一种描述模型的标准语言,而不是一种面向对象的分析方法。
    无论我们使用和何种面向对象的分析方法,最终模型化的结果应该用UML语言来描述,因为这是面向对象世界的通用语言。"

p374.

"简化设计和增强复用性,这两条原则在软件的总体设计中至关重要。"
p15.

"将void,int,float等基本数据类型通过typedef重新命名,可以在最大程度上保证代码的可移植性——例如从16位程序至32位程序的移植问题即可通过此方法简单解决。
   例如WIN32 SDK中大量出现的UINT ,DWORD等定义均属此列。
  "

p18.

"匈牙利命名法存在很多严重的问题,其中之一是:一旦要修改变量类型,也就必须同时修改变量名称。这一问题,反映在必须保证接口稳定的WIN32 API上,更为棘手。"

p31.

"几乎所有现代C/C++编译器在处理内存中的数据结构以及sizeof运算符时,默认情况下,都会把类或结构占用的空间大小在8字节边界处对齐,以优化代码的执行速度。

可以通过预编译命令 #pragma pack (1)来取消这种默认对齐"

p42.

"定义和实际存储相关的数据结构时,最好不要使用int这种"可变长"的数据类型——int在16位、32位、64位计算机上的字节长度是不同的——相反,使用诸如DWORD这样的定长类型是个不错的选择。"

p66.

"assert()宏仅在NDEBUG宏无效的情况下才发挥作用,即若定义了NDEBUG宏(软件的releass版本),则assert()宏相当于空语句;若未定义NDEBUG宏(Debug版本),则assert检查参数,参数为假时,输出错误信息并终止程序。

assert()宏的最大问题是其在软件的release版本中将变为空语句,不起任何作用。

因此,不要在assert()中写入任何影响程序运行状态的语句,如assert(fp=fopen()),这种用法是错误的。

另外,对于外部参数(用户输入)不应该用assert()宏来检查有效性,assert()宏应用来检查内部参数(确定因素)。

MFC中特别提供了一个VERIFY宏,除了能完成assert()的验证功能外,其最大的特点是无论在Debug版还是Release版本中,都永远有效。"

p91.

"面向对象编程中不容忽视的一个问题:类的构造函数是没有返回值的。

这个特点使得如果在构造函数中进行资源分配,就必须采取一定办法将分配失败的情况通知调用者,否则就有可能造成内存访问异常。

解决方法通常有两种:

一是干脆不在构造函数中进行资源分配,而是在类中实现Initialize()和Uninitialize(),由这两个函数负责资源的释放和分配,返回值类型为bool。
  
   二是利用对象的异常处理机制,当构造函数发生分配错误时,就跑出异常,一旦捕获异常,就不进行后续的工作。"

p131.

"属性是一种高级的面向对象特征,它与成员变量、方法一样,是编写类库或组件的常用方法。

属性的最大优点在于保证数据机器相关操作的完整和统一。"
 
    成员变量易于定义比较单纯的数据元素,方法适于实现功能操作,属性则用于定义与某些功能操作关系紧密的元素。 "

p172.

"sendmessage()这个API的功能被定义为向窗口发送消息,并调用目标窗口的窗口过程函数来处理该消息,直到消息被处理完前函数保持阻塞状态。

postmessage()的功能与sendmessage()类似,区别在于postmessage()在将消息放入目标窗口的消息队列后立即返回,即是非阻塞的。"

p175.

"黑板擦问题

不应该将执行耗时操作的代码放置在需要负责处理用户消息的窗口线程中。"

p236.

" 版本控制的最重要目标和原则就是尽量避免不同版本代码中的重复内容,因为重复意味着重复工作,意味着重复错误。
     而为了避免重复,应当将代码中共用的部分尽量提取出来,并且尽量让同一功能的代码集中在同一代码文件中。"

p246.

"全面质量管理(TQM:Total Quality Management)

p235

"被测实现(IUT:Implementation Under Testing)

测试中最重要的概念和原理是:
    1.测试无法证明被测实现(IUT)的正确性。
    2.测试只能证明被测实现(IUT)中包含错误。

p309.

"好的测试都是自动测试。测试计划和测试用例由人设计,但实际的测试操作确实由程序或者自动化工具完成的。
    好的测试都是基于模型的。
    最常用的测试模型包括组合模型和面向对象模型。"

p366.

"使用面向对象语言不等于基于面对对象的思想设计和开发软件。
    面向对象设计(OOD)的基础是面向对象分心(OOA)。
    面向对象分析的关键侍从应用中抽象出操作和数据的统一体。
    面向对象分析的结果应该用UML(Unified Modeling Language)语言来描述。
    UML只是一种描述模型的标准语言,而不是一种面向对象的分析方法。
    无论我们使用和何种面向对象的分析方法,最终模型化的结果应该用UML语言来描述,因为这是面向对象世界的通用语言。"

p374.

"简化设计和增强复用性,这两条原则在软件的总体设计中至关重要。"
p15.

"将void,int,float等基本数据类型通过typedef重新命名,可以在最大程度上保证代码的可移植性——例如从16位程序至32位程序的移植问题即可通过此方法简单解决。
   例如WIN32 SDK中大量出现的UINT ,DWORD等定义均属此列。
  "

p18.

"匈牙利命名法存在很多严重的问题,其中之一是:一旦要修改变量类型,也就必须同时修改变量名称。这一问题,反映在必须保证接口稳定的WIN32 API上,更为棘手。"

p31.

"几乎所有现代C/C++编译器在处理内存中的数据结构以及sizeof运算符时,默认情况下,都会把类或结构占用的空间大小在8字节边界处对齐,以优化代码的执行速度。

可以通过预编译命令 #pragma pack (1)来取消这种默认对齐"

p42.

"定义和实际存储相关的数据结构时,最好不要使用int这种"可变长"的数据类型——int在16位、32位、64位计算机上的字节长度是不同的——相反,使用诸如DWORD这样的定长类型是个不错的选择。"

p66.

"assert()宏仅在NDEBUG宏无效的情况下才发挥作用,即若定义了NDEBUG宏(软件的releass版本),则assert()宏相当于空语句;若未定义NDEBUG宏(Debug版本),则assert检查参数,参数为假时,输出错误信息并终止程序。

assert()宏的最大问题是其在软件的release版本中将变为空语句,不起任何作用。

因此,不要在assert()中写入任何影响程序运行状态的语句,如assert(fp=fopen()),这种用法是错误的。

另外,对于外部参数(用户输入)不应该用assert()宏来检查有效性,assert()宏应用来检查内部参数(确定因素)。

MFC中特别提供了一个VERIFY宏,除了能完成assert()的验证功能外,其最大的特点是无论在Debug版还是Release版本中,都永远有效。"

p91.

"面向对象编程中不容忽视的一个问题:类的构造函数是没有返回值的。

这个特点使得如果在构造函数中进行资源分配,就必须采取一定办法将分配失败的情况通知调用者,否则就有可能造成内存访问异常。

解决方法通常有两种:

一是干脆不在构造函数中进行资源分配,而是在类中实现Initialize()和Uninitialize(),由这两个函数负责资源的释放和分配,返回值类型为bool。
  
   二是利用对象的异常处理机制,当构造函数发生分配错误时,就跑出异常,一旦捕获异常,就不进行后续的工作。"

p131.

"属性是一种高级的面向对象特征,它与成员变量、方法一样,是编写类库或组件的常用方法。

属性的最大优点在于保证数据机器相关操作的完整和统一。"
 
    成员变量易于定义比较单纯的数据元素,方法适于实现功能操作,属性则用于定义与某些功能操作关系紧密的元素。 "

p172.

"sendmessage()这个API的功能被定义为向窗口发送消息,并调用目标窗口的窗口过程函数来处理该消息,直到消息被处理完前函数保持阻塞状态。

postmessage()的功能与sendmessage()类似,区别在于postmessage()在将消息放入目标窗口的消息队列后立即返回,即是非阻塞的。"

p175.

"黑板擦问题

不应该将执行耗时操作的代码放置在需要负责处理用户消息的窗口线程中。"

p236.

" 版本控制的最重要目标和原则就是尽量避免不同版本代码中的重复内容,因为重复意味着重复工作,意味着重复错误。
     而为了避免重复,应当将代码中共用的部分尽量提取出来,并且尽量让同一功能的代码集中在同一代码文件中。"

p246.

"全面质量管理(TQM:Total Quality Management)

p235

"被测实现(IUT:Implementation Under Testing)

测试中最重要的概念和原理是:
    1.测试无法证明被测实现(IUT)的正确性。
    2.测试只能证明被测实现(IUT)中包含错误。

p309.

"好的测试都是自动测试。测试计划和测试用例由人设计,但实际的测试操作确实由程序或者自动化工具完成的。
    好的测试都是基于模型的。
    最常用的测试模型包括组合模型和面向对象模型。"

p366.

"使用面向对象语言不等于基于面对对象的思想设计和开发软件。
    面向对象设计(OOD)的基础是面向对象分心(OOA)。
    面向对象分析的关键侍从应用中抽象出操作和数据的统一体。
    面向对象分析的结果应该用UML(Unified Modeling Language)语言来描述。
    UML只是一种描述模型的标准语言,而不是一种面向对象的分析方法。
    无论我们使用和何种面向对象的分析方法,最终模型化的结果应该用UML语言来描述,因为这是面向对象世界的通用语言。"

p374.

"简化设计和增强复用性,这两条原则在软件的总体设计中至关重要。"
p15.

"将void,int,float等基本数据类型通过typedef重新命名,可以在最大程度上保证代码的可移植性——例如从16位程序至32位程序的移植问题即可通过此方法简单解决。
   例如WIN32 SDK中大量出现的UINT ,DWORD等定义均属此列。
  "

p18.

"匈牙利命名法存在很多严重的问题,其中之一是:一旦要修改变量类型,也就必须同时修改变量名称。这一问题,反映在必须保证接口稳定的WIN32 API上,更为棘手。"

p31.

"几乎所有现代C/C++编译器在处理内存中的数据结构以及sizeof运算符时,默认情况下,都会把类或结构占用的空间大小在8字节边界处对齐,以优化代码的执行速度。

可以通过预编译命令 #pragma pack (1)来取消这种默认对齐"

p42.

"定义和实际存储相关的数据结构时,最好不要使用int这种"可变长"的数据类型——int在16位、32位、64位计算机上的字节长度是不同的——相反,使用诸如DWORD这样的定长类型是个不错的选择。"

p66.

"assert()宏仅在NDEBUG宏无效的情况下才发挥作用,即若定义了NDEBUG宏(软件的releass版本),则assert()宏相当于空语句;若未定义NDEBUG宏(Debug版本),则assert检查参数,参数为假时,输出错误信息并终止程序。

assert()宏的最大问题是其在软件的release版本中将变为空语句,不起任何作用。

因此,不要在assert()中写入任何影响程序运行状态的语句,如assert(fp=fopen()),这种用法是错误的。

另外,对于外部参数(用户输入)不应该用assert()宏来检查有效性,assert()宏应用来检查内部参数(确定因素)。

MFC中特别提供了一个VERIFY宏,除了能完成assert()的验证功能外,其最大的特点是无论在Debug版还是Release版本中,都永远有效。"

p91.

"面向对象编程中不容忽视的一个问题:类的构造函数是没有返回值的。

这个特点使得如果在构造函数中进行资源分配,就必须采取一定办法将分配失败的情况通知调用者,否则就有可能造成内存访问异常。

解决方法通常有两种:

一是干脆不在构造函数中进行资源分配,而是在类中实现Initialize()和Uninitialize(),由这两个函数负责资源的释放和分配,返回值类型为bool。
  
   二是利用对象的异常处理机制,当构造函数发生分配错误时,就跑出异常,一旦捕获异常,就不进行后续的工作。"

p131.

"属性是一种高级的面向对象特征,它与成员变量、方法一样,是编写类库或组件的常用方法。

属性的最大优点在于保证数据机器相关操作的完整和统一。"
 
    成员变量易于定义比较单纯的数据元素,方法适于实现功能操作,属性则用于定义与某些功能操作关系紧密的元素。 "

p172.

"sendmessage()这个API的功能被定义为向窗口发送消息,并调用目标窗口的窗口过程函数来处理该消息,直到消息被处理完前函数保持阻塞状态。

postmessage()的功能与sendmessage()类似,区别在于postmessage()在将消息放入目标窗口的消息队列后立即返回,即是非阻塞的。"

p175.

"黑板擦问题

不应该将执行耗时操作的代码放置在需要负责处理用户消息的窗口线程中。"

p236.

" 版本控制的最重要目标和原则就是尽量避免不同版本代码中的重复内容,因为重复意味着重复工作,意味着重复错误。
     而为了避免重复,应当将代码中共用的部分尽量提取出来,并且尽量让同一功能的代码集中在同一代码文件中。"

p246.

"全面质量管理(TQM:Total Quality Management)

p235

"被测实现(IUT:Implementation Under Testing)

测试中最重要的概念和原理是:
    1.测试无法证明被测实现(IUT)的正确性。
    2.测试只能证明被测实现(IUT)中包含错误。

p309.

"好的测试都是自动测试。测试计划和测试用例由人设计,但实际的测试操作确实由程序或者自动化工具完成的。
    好的测试都是基于模型的。
    最常用的测试模型包括组合模型和面向对象模型。"

p366.

"使用面向对象语言不等于基于面对对象的思想设计和开发软件。
    面向对象设计(OOD)的基础是面向对象分心(OOA)。
    面向对象分析的关键侍从应用中抽象出操作和数据的统一体。
    面向对象分析的结果应该用UML(Unified Modeling Language)语言来描述。
    UML只是一种描述模型的标准语言,而不是一种面向对象的分析方法。
    无论我们使用和何种面向对象的分析方法,最终模型化的结果应该用UML语言来描述,因为这是面向对象世界的通用语言。"

p374.

"简化设计和增强复用性,这两条原则在软件的总体设计中至关重要。"

转载于:https://www.cnblogs.com/SunWentao/archive/2008/06/12/1218579.html

读书摘要——《凌波微步-软件开发警戒案例集》相关推荐

  1. 《少有人走的路:心智成熟的旅程》--[美]M·斯科特·派克

    <少有人走的路>,美国作家M·斯科特·派克所著 下面是我的书摘: * 归根到底,它告诉我们怎样找到真正的自我. * 人可以拒绝任何东西,但绝对不可以决绝成熟.决绝成熟,实际上就是在规避问题 ...

  2. 少有人走的路--勇敢地面对谎言

    目录 [一]前言 整篇<简介> 第一章<谎言是心理疾病的根源> 第二章<有没有罪恶感,是善与恶的分水岭> 第三章<压制别人,就是邪恶> 第四章<总 ...

  3. 《少有人走的路》思维导图

    正如开篇所言:人生苦难重重.M·斯科特·派克让我们更加清楚:人生是一场艰辛之旅,心智成熟的旅程相当漫长.但是,他没有让我们感到恐惧,相反,他带领我们去经历一系列艰难乃至痛苦的转变,最终达到自我认知的更 ...

  4. 少有人走的路 - 读书笔记

    文章目录 一.自律 -- 解决人生问题的主要工具 1. 不自律的表现 2. 自律四原则 二.爱 -- 不断拓展自我界限.完善自我意愿 1. 爱是什么? 2. 坠入情网与自我界限 3. 这些都不是爱 4 ...

  5. 《少有人走的路》语录

    文章目录 <少有人走的路:心智成熟的旅程>阅读语录 自律 推迟满足感 子不教,谁之过 解决问题的时机 承担责任 神经官能症和人格失调症 逃避自由 忠于事实 移情:过时的地图 迎接挑战 隐瞒 ...

  6. 读书笔记:少有人走的路

    本文更新版本已挪至  http://www.zhoujingen.cn/blog/1403.html ------------------------- 记得好像是五六年前在公司投稿后得到一本书,这本 ...

  7. 【读书】少有人走的路---自律(斯科特 派克)

    少有人走的路---自律 第一次以文字形式写下书评并公开分享,落笔之时,想起了课堂上一位教授说的话,她提倡我们读书时应采取与作者对话的形式,与作者的思想互动,而不是对作者的观点.结论加以夸耀和迎合.上她 ...

  8. 《少有人走的路》摘录一

    深入心灵,是一段艰难的旅程,也是一条少有人走的路. 你不解决问题,你就会成为问题. 人生苦难重重.这是个伟大的真理,是世界上最伟大的真理之一. 解决人生问题的关键在于自律.人若缺少自律,就不可能解决任 ...

  9. 读《少有人走的路》(一)

    <少有人走的路>是一本关于心理学的理论书籍,这本书中讲述了四个方面的内容,包括:自律.爱.成长和宗教.力量的书籍.我用Kindle快速阅读了一边,有在PC上翻看了第一部分关于自律的内容,感 ...

  10. 少有人走的路 读书笔记二

    引言 The road less traveled,并不是所有人的心智都是成熟的,从不成熟到成熟是人生要走的一段路,相信阅读本书或本文是走向成熟的重要路程,建议每一个人都阅读下这本书,能够帮助你促进心 ...

最新文章

  1. android xUtils的使用
  2. Java中对象的销毁
  3. Python基础入门:正则re.sub使用自定义替换方法
  4. puppet 基础篇
  5. python学习笔记第9天《文件的管理办法》
  6. restful解决什么问题_当您陷入RESTful,WordPress和一个困难的地方时,如何解决CMS问题...
  7. 阿里云 Ubuntu上的mysql运行sql文件来创建表
  8. 【今日CS 视觉论文速览】 27 Dec 2018
  9. fragment的懒加载
  10. Git与SVN版本控制系统
  11. 流行趋势:大背景图片在网页设计的20个精彩应用
  12. 关于JavaScript闭包理解
  13. 车道线检测数据集介绍
  14. php-screw 安装,php_screw安装,使用
  15. 淘宝+京东+拼多多+苏宁易购+聚划算百亿补贴,双11秒杀抢购助手脚本,分享源码
  16. DirectX12(D3D12)基础教程(十七)——让小姐姐翩翩起舞(3D骨骼动画渲染【1】)
  17. 网页配色实例:Web设计色彩速查表
  18. 漫谈TCP新算法Elastic-TCP
  19. Windows热门的八款绘图软件总有一款是你想要
  20. 工厂模式及什么时候用工厂模式

热门文章

  1. scala单例object与伴生object入门
  2. iOS Android 上传代码库+持续集成+单元测试
  3. 大三下,第一次前端面试经历
  4. k8s与caas--容器云caas平台的落地实践
  5. linux集群之LVS入门和企业级实战(续一)
  6. P1049装箱问题(背包,变形)
  7. Jabber 创建一个application dial rule
  8. tornado的views(templates)
  9. 如何使用虚拟实验室建设思科IPS***防御课程的实验环境
  10. 海淘第一单——KindleTouch