代码大全读书笔记

按照读书顺序整理
述而不作
此版为草稿



第二部分:高质量代码


第六章:可工作的类

a.好处

提高程序自说明性
隐藏细节
隔离复杂度
流畅的参数传递
容易重构
...

public下实质就是对外开放的接口,而private则是封装的细节

ADT:应采用尽可能高的抽象

b.接口设计原则

1.一个类只实现一个ADT,内聚性要高。对类内杂乱的函数:

转移到其他类里,
转移为私用子函数

2.使用一致的抽象层次,混乱的抽象会让程序难以理解:
事务层次的类不应该提供容器的操作窗口,
如果有操作需求,也应是事务概念的操作

3.接口是对捕捉到的抽象进行选择,
4.检查是否存在相反操作需求
5.一半子程序使用一半数据,另一半子 程序使用另外一半数据,那么拆分类吧。
6.尽量把语义接口元素转化为编程接口元素。如使用断言等。

总之,接口应该展示一致的抽象。

c.封装原则

对c++等语言代码中,不要在private部分暴露实现细节。
封装方法是

private EmployImplymentation * m_implymenTation

而把细节放入implymentation类里。
至少读代码时别去私用部分里找细节

封装是对接口编程,而不是对内部实现细节编程。

封装的思维:

如果一个人调用库时发现问题,不应该查阅源代码,而是联系作者去修改发布。类内实现细节不应该影响使用者编程。如:

逻辑过程缺失:perform内包含initial,没读细节的使用者先initial再perform就会出bug

假设过强:使用classA.num代替classB.num.客户不知道他们两个的num相同。

紧密耦合事实上消除了封装性。

e.继承

种类:

公有:class a:public class baseClass;
1.baseClass中public元素在a中还是public,base中private元素在a中不可见
2.代表 is a 关系

私有:class b:public class base
1.base中public元素在b中是private,base中private不可见

何时选择继承:

1.多个类的共有元素需要一个基类去集中
2.派生类必须能够通过基类的接口直接调用

3.LSP原则:使用时无须思考不同派生类的语义含义,即基类提供之接口让人直接理解派生类的行为如:

loanAccount的interest和saveAccount中interest中语义不同,就不应在基类account中放入interest元素,interest的继承并没有减少程序员的思考量

4.不要过度设计。为未来工作着想的方式是让眼下之成果尽可能清晰简单。---只有一个派生类的继承很值得怀疑
5.case语句下多操作都很类似暗示着多态的需求。
而种类确实不同的操作则不必。
6.继承体系尽可能低

几点注意事项:

1.避免万能类,应该把功能放入万能类他所操作的类上去。
2.避免动词命名的类:只有动作而无数据的类只应该是其他类的子程序。

在软件的历史中,粒度的增长带来软件开发的进步。语句-子程序-类-包等。

第七章:高质量子程序


a.子程序作用

1.子程序名提供逻辑抽象解释
2.避免重复代码
3.封装事务过程
.......

b.设计

内聚性:
功能内聚性:只完成一个功能
顺序内聚性:顺序执行的操作由上一步ans求下一步
通信内聚性:操作共享数据但无其他联系
临时内聚 :startup()等,不相关的操作组合在一起
逻辑内聚:通过传入的控制字段选择不同操作。如
inputAll(type)

对逻辑内聚:

不应该用一个程序控制另外一个程序的处理方式。
应把程序分为几个平行程序在上层调用。若有相似的底层操作,则封装成底层函数。
但如程序仅为if/case之内选择不同函数,就成了常用的事件处理器。

c.函数命名

避免使用含糊的词 如:HandleOutput->FormatAndPrint

找不到准确的词说明子程序可能需要修改

描述程序做的所有事 :一个动宾结构,object.function()则不必
或者描述程序的返回值

一个恰如其份但是糟糕的函数名说明需要重新设计

#######子程序长度一般应少于200行

d.参数

1.接口参数按一定顺序排列,如:修改-输入-输出型参数
考虑命名规则
2.使用自己函数定义的工作变量,如:
int workingVal=inputVal workingVal....... //注意这两个变量命名是很差的
3.尽量采用const关键字
4.以断言或注释解释参数的操作类型数值范围等
5.参数过多说明耦合紧密。人脑很难记住超过7个单词

7.确保形参实参一致
8.传递数据成员还是对象:
--取决于抽象

函数不要返回局部变量

e.宏程序

1.参数要套括号==
2.整个表达式外要套括号
3.多条语句外套{}
4.除非必要,还是不要用了吧...




第六部分:变量


代码被阅读的时间远远大于编写的时间,确保代码阅读方便。

一般事项

1.显式声明,初始化
2.就近声明和初始化
3.让变量的跨度和存活时间尽可能短以减少攻击窗口。(尽量不使用全局变量)
把相关的语句放在一起
提取语句成为单独的子程序
4.抛弃变量时赋不合理的NULL值
5.变量晚绑定值可以获得灵活性(使用具名变量)
6.单个变量只用于单一用途
7.检查是否有未使用的已声明变量


变量命名

1.8到16个字符
2.体现问题而非解决方案
3.一致的命名变量。
如revenueTotal---expenseAverage
例外numCustomers
4.采用对仗词如old-new,source-target
5.用比i,j,k更具意义的词为大循环或多重循环的循环变量命名
6.temp说明程序员并没有完全的搞懂问题。
7.done,found,error等布尔变量。
8.枚举类型使用组前缀。

一.命名规则

1.命名规则为代码增加了结构,是一项全局决策。
2.用g_标识全局变量
3.变量首字母小写,函数首字母大写。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • 第一部分 打好基础 Laying the Foundation 第一章 欢迎进入软件构建的世界 Welcome t...
    白桦叶阅读 4,600评论 0 17
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,581评论 18 399
  • 曾经我们的脸上总会带着稚嫩的标签,随着时间,它慢慢褪去,身边的人也在不停的变换着,感情的深浅忽上忽下,不知道是我...
    西柚小姐_085f阅读 179评论 0 0
  • 小年夜,家家灯火通明,这样的节日总会让悲伤的字眼显得格外冰冷,让悲伤的人变得格格不入。 接到洁的电话时,我正刷着朋...
    木上南方阅读 259评论 1 3
  • 知: 古人读书,求博、求精,先博而后精。完全以兴趣主导,突破目的与学科间界限。完全听从自己的好奇心与求知欲去追寻一...
    sly61阅读 484评论 0 1