编辑推荐
代码构建也兼具艺术性和思想性!
《代码大全(第二版)》经典重塑,2011版,仍然是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节!是著名IT畅销书作者Steve McConnell十一年前的经典著作的全新演绎,该作者是两届Software Development Magzine Jolt Award震撼大奖得主。两届震撼大奖得主,数十年软件开发智慧,十二年前的经典,十二年后再铸辉煌!
内容简介
代码大全(第2版)是著名Ⅱ畅销书作者、《IEEESoftware》杂志前主编、具有20年编程与项目管理经验的SteveMcConneU十余年前的经典著作的全新演绎:第2版做了全面的更新,增加了很多与时俱进的内容,包括对新语言、新的开发过程与方法论的讨论,等等。这是一本百科全书式的软件构建手册,涵盖了软件构建活动的方方面面,尤其强调提高软件质量的种种实践方法。
作者特别注重源代码的可读性,详细讨论了类和函数命名、变量命名、数据类型和控制结构、代码布局等编程的基本要素,也讨论了防御式编程、表驱动法、协同构建、开发者测试、性能优化等有效开发实践,这些都服务于软件的技术使命:管理复杂度。为了培养程序员编写高质量代码的习惯,书中展示了大量高质量代码示例(以及用作对比的低质量代码),提高软件质量是降低开发成本的重要途径。除此之外,本书归纳总结了来自专家的经验、业界研究以及学术成果,列举了大量软件开发领域的真实案例与统计数据,提高本书的说服力。
本书中所论述的技术不仅填补了初级与高级编程实践之间的空白,而且也为程序员们提供了一个有关软件开发技术的信息来源。本书对经验丰富的程序员、技术带头人、自学的程序员及没有太多编程经验的学生都是大有裨益的。可以说,只要您具有一定的编程基础,想成为一名优秀的程序员,阅读本书都不会让您失望。
作者简介
Steve,Mc Connell,被公认为软件开发社区中的首要作者和发言人之一。他是ConstruxSoftware公司的首席软件工程师。他所编著的图书包括曾被SoftwareDevelopment杂志授予优异产品震撼大奖(JoltAwardforproductexcellence)的《代码大全》(CodeComplete)和《快速软件开发》(RapidDevelopment),以及《软件项目生存指南》(SoftwareProtectSurvivalGuide)和《专业软件开发》(ProfessionalSoftwareDevelopment)等等。
精彩书评
“《代码大全》第1版在我看来堪称软件工程领域的经典之作——而第2版则更棒!”
——Ralph Johnson,伊利诺伊州立大学;《设计模式》(Design Pattems)作者之一
“无论您是新手还是经验丰富的开发人员, 《代码大全》(第2版)都能教会您思考编程的方法。”
——Jeffrey Richter,《Microsoft.NET框架实用编程》(Applied Microsoft.NET Framework Programming)作者
“这本书是讲述软件构建的指南——准备孤身前往荒岛的程序员只要带上这本书就足够了。”
——Diomidis Spinellis,《代码阅读方法与实践》(Code Reading:The Open Source Perspective)作者
“Steve McConnell是一位既在一线实践,又能把其中奥妙讲明白的少数人之一。”
——John Vlissides,IBM研究院;《设计模式》(Design Patterns)作者之一
”Steve McConnell比任何人都懂得如何构建软件;我们十分庆幸他能把其所有的深邃见解和实践经验写成这样一本重要而新颖的图书。”
——“Visual Basic之父”Alan Cooper,《软件观念革命》(About Face 2.0)作者
目录
前言
鸣谢
核对表目录
表目录
图目录
第1部分 打好基础
第1章 欢迎进入软件构建的世界“
1.1 什么是软件构建
1.2 软件构建为何如此重要
1.3 如何阅读本书
第2章 用隐喻来更充分地理解软件开发
2.1 隐喻的重要性
2.2 如何使用软件隐喻
2.3 常见的软件隐喻
第3章 三思而后行:前期准备
3.1 前期准备的重要性
3.2 辨明你所从事的软件的类型
3.3 问题定义的先决条件
3.4 需求的先决条件
3.5 架构的先决条件
3.6 花费在前期准备上的时间长度
第4章 关键的“构建”决策
4.1 选择编程语言
4.2 编程约定
4.3 你在技术浪潮中的位置
4.4 选择主要的构建实践方法
第5章 软件构建中的设计
5.1 设计中的挑战
5.2 关键的设计概念
5.3 设计构造块:启发式方法
5.4 设计实践
5.5 对流行的设计方法的评论
第6章 可以工作的类
6.1 类的基础:抽象数据类型(ADTs)
6.2 良好的类接口
6.3 有关设计和实现的问题
6.4 创建类的原因
6.5 与具体编程语言相关的问题
6.6 超越类:包
第7章 高质量的子程序
7.1 创建子程序的正当理由
7.2 在子程序层上设计
7.3 好的子程序名字
7.4 子程序可以写多长
7.5 如何使用子程序参数
7.6 使用函数时要特别考虑的问题
7.7 宏子程序和内联子程序
第8章 防御式编程
8.1 保护程序免遭非法输入数据的破坏
8.2 断言
8.3 错误处理技术
8.4 异常
8.5 隔离程序,使之包容由错误造成的损害
8.6 辅助调试的代码
8.7 确定在产品代码中该保留多少防御式代码
8.8 对防御式编程采取防御的姿态
第9章 伪代码编程过程
9.1 创建类和子程序的步骤概述
9.2 伪代码
9.3 通过伪代码编程过程创建子程序
9.4 伪代码编程过程的替代方案
第3部分 变量
第10章 使用变量的一般事项
10.1 数据认知
10.2 轻松掌握变量定义
10.3 变量初始化原则
10.4 作用域
10.5 持续性
10.6 绑定时间
10.7 数据类型和控制结构之问的关系
10.8 为变量指定单一用途
第11章 变量名的力量
11.1 选择好变量名的注意事项
11.2 为特定类型的数据命名
11.3 命名规则的力量
11.4 非正式命名规则
11.5 标准前缀
11.6 创建具备可读性的短名字
11.7 应该避免的名字
第12章 基本数据类型
12.1 数值概论
12.2 整数
12.3 浮点数
12.4 字符和字符串
12.5 布尔变量
12.6 枚举类型
12.7 具名常量
12.8 数组
12.9 创建你自己的类型(类型别名)
第13章 不常见的数据类型
13.1 结构体
……
第4部分 语句
第5部分 代码改善
第6部分 系统考虑
第7部分 软件工艺
参考文献
索引
精彩书摘
数据纯化论者有时争论说,程序员应该绝不使用全局数据,但是按照“全局数据”这一术语的广义解释,大多数程序都使用了它。存在于数据库中的数据是全局数据,存在于配置文件如Windows注册表中的数据也是。具名常量也是全局数据,只不过不是全局变量罢了。
如果遵循使用的原则,那么全局变量在一些场合下也是有用的。
保存全局数值有时候你会有一些在概念上用于整个程序的数据。这可能是一个用于表示程序状态的变量——例如,交互式模式或者命令行模式、正常模式或者错误恢复模式等的模式标识。也可能是在整个程序里面要用到的信息——例如,程序中的每一个子程序都会用到的数据表。
模拟具名常量尽管C++、Java、Visual Basic和多数现代语言都支持具名常量,但是Python、Perl、Awk以及UNIX shell脚本等语言却不支持。当你的语言不支持具名常量的时候,你可以用全局变量代替它们。例如,你可以用取值分别为1和0的全局变量TRUE和FALSE来代替字面量1和0,或者用LINSES_PER_PAGE=66代表每页行数的66。一旦采用了这种方法,那么日后再修改代码就会更容易了,而且这样的代码会更方便阅读。贯彻这种对全局数据的使用原则是在一种语言上编程(programming in a language)和深入一种语言去编程(programming into a language)之间差异的一个主要示例,第34.4节“深入一门语言去编程,不浮于表面”对此有深入探讨。
模拟枚举类型你还可以在Python等不直接支持枚举类型的语言里用全局变量来模拟枚举类型。
简化对极其常用的数据的使用有的时候你会大量地引用一个变量,以致于它几乎出现在你所编写的每一个子程序的参数列表里。与其将它包含在每一个参数列表里面,不如把它设置成全局变量。不过,事实上很少会出现代码到处访问某一个变量的情形。通常该变量是由为数不多的一组子程序来访问的,你可以把这些子程序以及它们所用到的数据整合进一个类里面。下面会就这一问题展开讨论。
消除流浪数据有的时候你把数据传递给一个子程序或者类,仅仅是因为想要把它传递给另一个子程序或者类。例如,你可能有一个在每个子程序里都使用的错误处理对象。当调用链中间的子程序并不使用这一对象的时候,这一对象就被称为“流浪数据(tramp data)”。使用全局变量可以消除流浪数据。
Use Global Data Only as a Last Resort
只有万不得已时才使用全局数据
在你选择使用全局数据之前,请考虑下面这些替换方案。
首先把每一个变量设置为局部的,仅当需要时才把变量设置为全局的 开始的时候先把所有的变量设置为单一子程序内部的局部变量。如果你发现还需要在其他位置用到它们,那么在一举把它们转变成全局变量之前,先把它们转变为类里的private或者protected变量。如果你最终发现必须要把它们转变成全局变量,那么就转变它们。不过请先确定除此之外别无选择。如果你一开始就把变量设置为全局的,那么你将永远不可能把它转变成局部的;反之,如果你开始时把变量设置为局部的,那么你可能永远也不需要把它转变成全局的。
区分全局变量和类变量有些变量由于要被整个程序访问,因此是真正的全局变量。其他只在一组特定的子程序里被频繁使用的实际是类变量。在频繁使用某个类变量的子程序组里,你可以采用任何希望的方式来访问它。如果类外部的子程序需要使用该变量,那么就用访问器子程序来提供对该变量的访问。不要直接访问类变量——好像它们是全局变量一样——即便你的编程语言允许你这么做。这一建议等价于高呼:“模块化!模块化!模块化!”
使用访问器子程序创建访问器子程序是避免产生与全局数据相关问题的主要方法。下一节会对此做更多的讨论。
……
前言/序言
代码大全(第2版) epub pdf mobi txt 电子书 下载 2024
代码大全(第2版) 下载 epub mobi pdf txt 电子书 2024