《代码大全2》学习笔记2

第二部分:创建高质量的代码

第五章:软件构建中的设计

“在大型项目中,设计可能会详细到让编码工作近乎机械化”

“在小型项目中,设计可能就是指用伪代码写个类的接口,或者询问旁边的程序员那个模式好,画几个类的关系图”

——基本没有经历过大型项目,小型项目描述的过程跟我接触的非常的相似,最多多个设计评审。

“当没人知道对一处代码的改动会对其他代码带来什么影响的时候,项目也就停止进展了”

——得多复杂,多糟糕的项目才会到这个地步啊,没有体会过。

因为项目主要是网络的,没有什么雇员、雇主之类很容易抽象的对象,所以制作的类基本都是c子程序和数据的集合体。不知道是不是不对,不过也没感觉出来不对啊。

“信息隐藏在不断增长、大量变化的环境里尤其有用”

刚开始的代码里面把所有的私有变量都加了get、set,但是慢慢就觉得麻烦,全部都公开了,感觉项目一个人维护,全部私有变量都封装,有时候没感觉出来什么意义,如果个别需要特别处理的变量才封装成方法。

不知道得大到什么程度、或者变动到什么程序,才有明显的意义。或者说,我没有感觉出太大的好处。

“不要使用布尔变量做状态变量,请使用枚举”

——这个比较有道理,因为如果从2种变成为3种类型,修改是个累人的活。

P117 写总结邮件这点不错,每次讨论后,经常有遗忘,或者有人记错了,导致争论和疑问。

第六章:可以工作的类

“不懂得ADT(抽象数据类型)的程序员只是把稍有关系的子程序和数据堆在一起,叫做类。”

——感觉自己就是这样,不过看完了这章,感觉就是教你把私有成员隐藏起来,隐藏实现细节,除了接口全部黑盒。

继承与包含,我用的包含最多,继承最少。

一直讨厌使用继承,最大的原因是用source insight看代码不方面,老是跳到基类的方法里面去了。不知道什么阅读工具会比较好。

“当你想让基类控制接口,用继承。当你想染自己控制接口,用包含”

用继承主要是放在list里面方便,不过我平时都是用一个类,然后包括一个void*,来访那些包含的类,再用一个type变量标记是哪种类。

P155

“避免创建万能类”——有时候视图控制数据分离,难道不是这种结构作为过渡吗?

“消除无关紧要类”——类比结构体放数据方便很多,为什么不能出现专门放数据但是没有行为的类?

C++中,只有virtural的方法才能被覆盖,java默认方法都能被覆盖。

第七章:高质量的子程序

子程序的参数不要超过7个,可以做成结构体,这样增加一个参数的时候会比较方便。

不要出现神秘值,用常量定义或者用枚举来替代100,4.0,3.14之类的常量。

子程序要尽量单一而明确的任务。

避免把输入值当做工作变量。

子程序可以避免代码重复,更易懂,提高可移植性,未来去优化也比较方便。

第八章:防御式编程

“主要思想:传入错误的参数也不怕”

断言是不错的方法,但是linux里面用断言感觉不是很好,因为屏幕打印有什么用处,还不如打印到日志里面去,狠点的话,打印日志后退出程序好了。

处理错误有多种情况,不错网络情况估计就是报警和重试了吧。

在正确性和健壮性之间选择。

“只有真正的例外才抛出异常,异常应该和断言一样,是永远不应该发生的事情”

——这个好像跟com不符合哦,com主要是抛出异常的,尤其是解码的com,抛出的异常种类那叫一个多。

——这里的理由是“异常弱化的了封装性”

P203页批评程序员用异常返回错误是为用而用

——记得以前我上学的时候,一个同学还说他师兄是真正的面向对象,所有返回错误值的地方都用异常处理,当时我们崇拜了一阵子。不过这里也未必全对,毕竟是一本书。

“删除一个对象之前把它填满垃圾数据”

——够狠,也是个好主意,这样不会出现有时候出错有时候正常的情况了,如果以后再试图使用肯定崩溃。

第九章:伪代码编程

1、使用自然语言来精确描述特定的操作。

2、避免使用目标编程语言中的语法元素。(这样会受制于程序语法上的约束)

3、先超出语言来描述解决问题的意图。

4、再以足够低的层次上编写伪代码,以便可以近乎自动的从它生产代码。

5、写好代码后,可以把伪代码当做注释存在。

架构应该提前指明多少资源可用,好确定性能还是可读性优先。

“写一个子程序前先考虑怎么测试它”——感觉很困惑,也没有举出例子,不就是检查输入输出吗?还能考虑什么?

时间: 2024-08-29 05:22:46

《代码大全2》学习笔记2的相关文章

lua游戏开发实践指南学习笔记1

本文是根据lua游戏开发实践指南做的一些学习笔记,仅用于继续自己学习的一些知识. Lua基础 1.  语言定义: 在lua语言中,标识符有很大的灵活性(变量和函数名),不过用户不呢个以数字作为起始符,也要避免下划线(_)接大写字母,因为这种格式为lua自身保留如_Start. 建议用户使用如下格式和命名规则来定义变量.常量和函数名: ①  常量用全大写和下划线,例如:MY_CONSTANT ②  变量第一个字母小写,例如:myVariable ③  全角变量第一个字母用小写g表示,例如:gMyG

lua游戏开发实践指南学习笔记2

深入学习Lua 本人学习lua游戏开发实践指南的学习笔记,主要记录书中的一些知识点. 1.  函数 函数是划分游戏脚本功能的主要工具,它是通过标识符(事实上是一个变量)调用的lua代码块,可以执行某种处理.返回值,或者二者都有. 简单的函数定义如下: Function Wow() print(" ") print(Wow ,that wasaawesome:) print(" ") end 函数定义以function关键字开始,后面是函数名称,然后是传递给函数的参数

《LUA游戏开发实践指南》学习笔记1

本文只做个人学习笔记! Lua脚本语言的优点:免费.小巧.快速和易移植. 游戏项目中的Lua,可以完成以下工作 编辑游戏用户界面(玩家和你的游戏进行交互的媒介) 定义.存储和管理游戏数据(Lua本人并没有直接访问外部数据库的能力,但可以使用C++组件) 管理游戏实时事件 创建和维护开发者有好的游戏存储和载入系统 编写游戏的人工智能(AI) 创建功能原型,可以之后用高性能语言移植 Lua入门 Lua控制台 lua脚本(扩展名为.lua的文本文本) 代码块(Chunk):单个命令或者一系列命令组成脚

《Lua游戏开发实践指南》学习笔记2

深入学习Lua 一.函数 函数是划分游戏脚本的主要工具. 函数以function关键字开始,后面是函数名然后是参数列表,end关键字结尾 单一参数的例子 function SetName(myString) print(" ") print("Your name is :",myString) print(" ") end "myString"传递给了函数,并在函数中使用,函数中的参数是局部变量,调用结束后被回收 Lua可以定

Hadoop权威指南学习笔记一

Hadoop权威指南学习笔记一 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习参考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.net/my_acm 1. 数据的增长远远超过了磁盘的读取速度,传统的数据存储方式和分析方式变得不再适用于大数据的处理. Hadoop分为两大核心技术,HDFS(HadoopDistributed File System-分布式hadoop文件处理系统)和MapReduce(分为Map-数据映射等

Cocos2d-x lua游戏开发之安装Lua到mac系统

注意:mac ox ,lua version :5.15 下载lua官网的lua, 注意:最好是5.15以下,5.2的lua不支持table的getn()方法,这让我情何以堪.(获取table长度,相当与cout,size,length) 下载解压, cd 目录 make macosx sudo make install (是的,就是小写的install,虽然文件夹下的是INSTALL) ook,进入命令行,输入lua 看下,效果 Cocos2d-x lua游戏开发之安装Lua到mac系统,布布

ASP.Net开发基础温故知新学习笔记

申明:本文是学习2014版ASP.Net视频教程的学习笔记,仅供本人复习之用,也没有发布到博客园首页. 一.一般处理程序基础 (1)表单提交注意点: ①GET通过URL,POST通过报文体: ②需在HTML中为表单元素设置name: ③元素id是给Dom用的,name才是提交给服务器用的: (2)请求处理响应模型: ①浏览器发出访问请求→②服务器处理访问请求并返回HTML→③浏览器解析HTML并显示页面 (3)GET与POST的区别:(★★★→重点) ①GET通过URL传值,而POST通过HTT

《JavaScript设计模式与开发实践》读书笔记之观察者模式

1.<JavaScript设计模式与开发实践>读书笔记之观察者模式 观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知. JavaScript中通常采用事件模型替代传统的观察者模式 1.1 逐步实现观察者模式 以客户看房为例 首先指定谁充当发布者,如售楼处 然后给发布者添加一个缓存列表,用于存放回调函数以便通知订阅者.这里为了让订阅者只接收自己感兴趣的消息,增加一个标识key 最后发布消息时候,发布者遍历缓存列表,依次触发里面存放的订阅者的回

Git权威指南学习笔记(一)Git初始化

1.在Git中配置用户名和邮件地址 $ git config --global user.name "Jymn_Chen" $ git config --global user.email "[email protected]" 注意把用户名和邮件地址替换成你自己的资料. 在这里的参数global表示配置的作用范围是当前用户,如果将参数改为system,那么配置的作用范围是系统中的所有用户. 2.创建版本库 新建一个目录并cd到目录中,执行以下命令: $ git i

Git权威指南学习笔记(二)Git暂存区

如下图所示: 左侧为工作区,是我们的工作目录. 右侧为版本库,其中: index标记的是暂存区(stage),所处目录为.git/index,记录了文件的状态和变更信息. master标记的是master分支所代表的目录树.HEAD指向master分支. objects标记的是Git的对象库,所处目录为.git/objects,文件索引建立了文件和对象库中对象实体之间的映射关系. 通过该图我们可以清晰地看出add,commit等命令的转化关系.下面通过git diff和git status两条命