读书笔记:《代码大全第2版》 04.创建高质量的代码之高质量的方法

代码大全2总结与思维导图汇总 最近花了一些时间把《代码大全》第二版全部看完了。整本书很厚,正文有862页,看着后面,忘了前面。就寻思着做下思维导图,辅助记忆。各个导图有详有略,目前做了一半,剩下的择期更新吧。至于《大话数据结构》,等有空的时候一起更新吧。       这本书有几个问题。首先,中文书名没起好,这本书讲了软件构建过程的方方面面,原书名《Code Complete》直译就是代码完成,也揭示了书的内容。代码完成不是一 阅读详情

高质量的方法

1、创建方法的理由

  1. 降低复杂度

  2. 引入中间的,易懂的抽象

  3. 避免代码的重复

  4. 支持子类重写(子类重写简短而规整的方法要比冗长而邋遢的方法更好)

  5. 隐藏顺序

  6. 隐藏指针操作

  7. 提高可移植性

  8. 简化复杂的布尔判断(有时候将一些简单的操作写出独立的方法会具有更好的可读性)

  9. 改善性能(把代码集中在一处可以更方便地查出哪些代码的运行效率低下)

除此之外,创建类的很多理由也是创建方法的理由:

  • 隔离复杂度
  • 隐藏实现细节
  • 限制变化所带来的影响
  • 隐藏全局数据
  • 形成中央控制点
  • 促成可重用的代码
  • 达到特定的重构目的

2、内聚性(cohesion)

内聚性(cohesion)是指方法中各种操作之间联系的紧密程度。好的方法具有高内聚性,符合单一职责原则。

内聚性的几个层次

  • 功能内聚(functional cohesion)
    • 它是最强也是最好的一种内聚性,也就是说让一个子程序仅执行一项操作
    • 除此之外都是不够理想的内聚
  • 顺序内聚(sequential cohesion)
    • 模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入
    • 比如方法需要按照给定的出生日期来计算员工的年龄和退休时间。如果该方法是先计算员工的年龄,再根据计算出的员工年龄来计算退休时间,那么该方法就是顺序内聚。
    • 将该方法拆分成两个方法,A计算员工的年龄,B计算退休时间(B中调用A),则两者都是功能内聚
  • 通信内聚(communicational cohesion)
    • 模块中的不同操作使用或生成同一数据集
    • 如上例,如果方法先计算员工的年龄,再重新计算他的退休时间,两次计算之间只是碰巧使用了相同的出生日期数据,则该方法就只具有通信内聚性
  • 时间内聚(temporal cohesion)
    • 模块完成的功能必须在同一时间内执行,但这些功能只是因为时间因素才有关联
    • 比如在 startUp() 方法里有读取配置文件、初始化临时文件等操作
  • 过程内聚(procedural cohesion)
    • 模块内部的处理成分是相关的,而且这些处理必须以特定的次序进行执行
    • 用户登陆了某某网站,方法A责依次读取用户的用户名、邮箱和联系方式,这个次序是事先规定的,不能改变。方法A中就是过程内聚
  • 逻辑内聚(logical cohesion)
    • 逻辑上相关的功能被放在同一模块中
    • 方法A实现的是将对应的人员信息发送给技术部,人事部和财政部,决定发送给哪个部门由输入的控制标志决定的。方法A中就是逻辑内聚。
    • 最好不要用控制标志来控制另一个方法的处理方式,应该让多个方法分别完成不同的操作
  • 偶然内聚(coincidental cohesion)
    • 模块的各成分之间没有关联,只是把分散的功能合并在一起

3、方法命名

方法的命名是它的质量指示器,糟糕的命名意味着程序需要修改

如何给一个方法取给好名字:

  • 描述方法所做的所有事情
  • 避免使用无意义的、模糊或者表述不清的动词(比如 ProcessInput())
  • 不要仅通过数字来形成不同方法名字(比如 insertToDb1()、insertToDb2())
  • 根据需要确定子程序名字的长度
  • 给方法命名时要对返回值有所描述(比如 printer.isReady()、customerId.next()、pen.currentColor())
  • 给过程起名时使用语气强烈的动词加宾语的形式(面向对象语言中不需要宾语)
  • 为常用操作确定命名规则,避免相同的操作具有不同的方法名

4、方法参数

  • 按照 输入->修改->输出 排列参数
  • 如果几个方法都用了类似的一些参数,应该让这些参数的排列顺序保持一致
    • 比如 print(int x) 使用printf(int x, File file) 就要比 printf(File file, int x) 好
  • 不用的参数应该剔除
  • 把状态或出错变量放在最后
  • 不要把方法的参数用作工作变量
    • 应该将其赋值给新的临时变量,让后续的操作去操作临时变量
  • 在方法中对参数的假定加以说明(不要等把方法写完之后再回头去写注释,应该在代码中使用断言来处理)
  • 方法中的参数个数不要超过7个
  • 根据方法的抽象定义决定是传递需要的变量还是直接传递一个对象
  • 尽量使用具名参数,使参数更加具有自我描述性
  • 确保实际参数与形式参数相匹配

5、总结

核对表

《代码大全2》读书笔记 这本书的核心思想是: 管理软件项目的本质是管理复杂性。 代码承载的是人与人之间的交流。 第一部分 打好基础第2章 隐喻重要的研发成果常常产自类比(analogy)。通过把你不太理解的东西和一些你较为理解、且十分类似的东西做比较,你可以对这些不太理解的东西产生深刻的理解。这种使用隐喻的方法叫做“建模”。目前最合适隐喻:建造软件(Building Software)第3章 前期准备( Measure T 阅读详情

相关推荐

代码大全2中文版(高清晰完美PDF版,索引完整).pdf

代码大全2中文版(高清晰完美PDF版,索引完整).pdf 966页 存在文字轻微倾斜,慎重

读书笔记:《代码大全第2版》 01.打好基础

文章目录前言理解软件开发软件开发经历建筑过程与软件工程前期准备前期准备的意义前期准备的工作明确软件类型问题定义需求分析架构设计前期准备工作不周全的原因在构建期间处理需求变更构建之法 前言 精华部分:6、7、10~19 初级:先看18 高级:先看4 P M:先看33 低年级学生:先看11 高年级学生:先看8 制定编码标准:先看32 自学编程:先看7 喜欢网上争论:先看13.3和17.3 理解软件开...

github_39353936的博客 461

C#菜鸟教程学习笔记

C#菜鸟教程学习笔记 C#简介 C# 是一种编程语言,它是由微软开发的。 C# 编程是基于 C 和 C++ 编程语言的,它与 Java 也非常相似。 C# 是 .Net 框架的一部分,且用于编写 .Net 应用程序。 .Net 框架(.Net Framework)能编写出下面类型的应用程序: ①Windows 应用程序 ②Web 应用程序 ③Web 服务 常用的C# 编程的开发工具:Visual Studio(VS:可视化工作室) C#程序结构 一个 C# 程序(C# 文件的后缀为 .cs)主要包括以下部分

mlc_WTMOTW的博客 4974

代码大全(第2版)(奋斗的小鸟)_PDF 电子书

下载地址:

奋斗的小鸟之博客 1876

STM32实战:5分钟搞定CanFestival协议栈下的CANopen心跳报文配置(附避坑指南)

本文详细介绍了如何在STM32平台上使用CanFestival协议栈快速配置CANopen心跳报文,包括硬件准备、协议栈移植、心跳报文配置及常见问题解决方案。通过实战步骤和避坑指南,帮助开发者高效实现节点状态监控,提升工业控制系统的可靠性。

win55的博客 744

【STM32】STM32F103C8T6多串口通信实战:3个USART并行收发与中断处理优化

本文详细介绍了STM32F103C8T6多串口通信的实战技巧,包括3个USART模块的并行配置、中断优先级优化及数据收发冲突规避策略。通过硬件初始化步骤、中断优先级设置和双缓冲区实现等方案,有效解决了多串口通信中的数据错乱问题,提升系统稳定性与效率。

weixin_42526417的博客 168

代码大全2中文版pdf

下载地址:网盘下载内容简介······第2版的《代码大全》是著名IT畅销书作者史蒂夫·迈克康奈尔11年前的经典著作的全新演绎:第2版不是第一版的简单修订增补,而是完全进行了重写;增加了很多与时俱进的内容。这也是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。它从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟潮流的新技术...

weixin_30735391的博客 700

实战详细讲解Qt插件plugin的编写与用法

qt插件的开发,可以说是动态库的开发,因为调用方式类似,多熟悉一下,利用Qt框架开发很简单的。在想想这种调用过程有的熟悉,比如公司买了一堆摄像头,公司要对摄像头进行二次开发,实现自己想要的功能,集成到一套设备里去,然后在卖给用户。此时厂商肯定会提供开发文档,并给你SDK包(软件开发工具包), 包里你会发现只有头文件和一堆库文件,没有源文件,因为实现的过程是产商公司保密的,给你看还得了。所以都封装成了库的形式给你调用,如静态库或者动态库。

qq_44667165的博客 1万+

读书笔记:《代码大全2》

        本书在笔者实习时就已经开始阅读,按照自己的所处阶段有间隔的分成了3次阅读,一直到现在终于完成了。读者千万不要认为这本书真的只是“代码大全”,在我看来,这本书就是软件工程师的心法,提升软件工程的认知、意识。各种技术层出不穷,也有很多技术最终消失在时间里,但这本书的精髓则适用于每一代软件开发者。        本身还提供了各方面的CheckList,可以借助这部分CheckList培养...

key_next的博客 7366

Ubuntu docker镜像中下载安装 DPABI(DPARSF)

在Ubuntu服务器的docker镜像中用MATLAB运行DPABI(以及使用DPARSF的功能)。

Pandako's Blog 1722

OceanBase数据库:从入门到精通全栈教程目录(含架构解析、性能调优与实战案例)

《OceanBase数据库专栏》全面解析蚂蚁集团自主研发的分布式关系型数据库,涵盖从基础到高级的完整知识体系。专栏分为入门篇、原理篇、使用篇等七大模块,包含35+篇深度文章,详细讲解OceanBase的高可用架构、Paxos协议、LSM树存储引擎等核心技术。特别提供MySQL/Oracle迁移指南、金融/电商场景实践案例,以及性能调优、运维监控等实战内容。适合开发者、DBA及架构师快速掌握OceanBase的核心特性和行业应用,助力企业实现数据库分布式转型。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 981

如何编写高质量的代码——来自《代码大全(第2版)》的启示

如何编写高质量的代码——来自《代码大全(第2版)》的启示陈硕 编译说明:这篇文章大量文字直接取自《代码大全(第2版)》中译本。本文发表于《程序员》杂志2006年第3期(杂志上的文章去掉了参考文献和脚注,格式编排也有些小问题),转载请先获得杂志社的许可。 软件的首要技术使命是管理复杂度,计算先驱Edsger Dijkstra指出,只有在“计算(Computing)”这种职业中,人的思维需要从一个字节

移动开发与培训 278

11、牛转录组分析的实用生物信息学流程

本文详细介绍了一套实用的牛转录组分析生物信息学流程,涵盖从数据提取、基因组索引生成、读取比对到单样本表达分析及差异表达分析的完整步骤。使用Angus和Brahman牛的RNA-seq数据作为示例,介绍了HTSEQ、featureCounts和StringTie等工具在基因表达计数中的应用,并结合edgeR和limma进行差异表达分析。文中提供了详细的命令行与R代码示例,包含常见问题解答与关键注意事项,帮助研究人员高效、准确地完成转录组数据分析。

ios99的博客 111

《代码大全(第2版)》英文文字版资源下载介绍

《代码大全(第2版)》英文文字版资源下载介绍 【下载地址】代码大全第2版英文文字版资源下载介绍 本仓库提供《代码大全(第2版)》英文文字版的PDF资源,这是一本由Steve McConnell撰写的经典编程书籍。书中深入探讨了软件构建的最佳实践,帮助程序员提升编程技能,编写高质量、易维护的代码。资源包括书名、作者、语言、...

gitblog_06711的博客 487

YOLO11 锚框机制全解析:从改进 K-means 聚类到自适应优化,附多场景实战(附代码)

摘要 YOLO11的锚框机制采用"自适应、动态化、场景感知"的设计理念,通过数据驱动的锚框生成、多尺度感知分配和实时优化策略,显著提升目标检测性能。相较于早期YOLO版本,YOLO11的锚框完全基于训练集目标分布自适应生成,并引入智能分配策略,使不同尺寸目标获得最优匹配。技术架构包含自适应锚框生成、多尺度分配器和动态优化模块,通过改进的K-means聚类和交并比计算实现精准匹配。YOLO11锚框机制在检测精度、训练稳定性和场景适应性方面均有显著提升,为复杂场景下的目标检测提供更优解决方案

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1318

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

代码大全 读书笔记

代码大全读书笔记Chap7-9第 7 章 高质量的子程序7.1 章节概述7.2 关键内容7.2.1 概念相关7.2.2 关键内容7.3 思维导图第8 章 防御式编程8.1 章节概述8.2 关键内容8.2.1 概念相关8.2.2 关键内容8.3 思维导图第 9 章 第9章伪代码编程过程9.1 章节概述9.2 关键内容9.2.1 概念相关9.2.2 关键内容9.3 思维导图 第 7 章 高质量的子程序 7.1 章节概述 本章主要介绍何为高质量的子程序,以及如何构建高质量的子程序的内容。介绍的内容包括为何创建子程

GorMing 的博客 411

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

读书笔记:《代码大全第2版》 03.创建高质量的代码之创建高质量的类

6、创建高质量的类 成为高效程序员的一个关键就在于,当你开发程序任何一部分代码时,都能安全地忽视程序中尽可能多的其余部分。 抽象 类 = ADT(抽象数据类型)+ 继承 + 多态 创建高质量类的最关键一步是创建一个好的接口(这里的接口指的是类中能够被外部访问的方法)。 类的接口应该提供一致的抽象。很多问题都是由于违背该原则而引起的。 一个呈现出很好的抽象的类接口通常也有很高的内聚性。而具有很强内聚...

github_39353936的博客 221

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

《代码大全2》高质量子程序的5个关键点

洪流学堂,让你快人几步。 本篇内容来自洪流读书会精选内容。 本篇解读自计算机领域经典名著《代码大全2》。 高质量子程序的5个关键点 1、创建子程序最主要的目的是提高程序的可管理性,当然也有其它一些好的理由。其中,节省代码空间只是一个次要原因,提高可读性、可靠性和可修改性等原因更重要一些。 2、有时候,把一些简单的操作写成独立的子程序也非常有价值。 3、子程序可以按照其内聚性分为很多类,而你应该让大多数子程序具有功能上的内聚性,这是最佳的一种内聚性。 4、子程序的名字是它质量的指示器。如果名字糟糕但恰如其.

大智_Unity探路者 332

读书笔记:《代码大全第2版》 06.创建高质量的代码之伪代码编程

文章目录伪代码编程过程1、类和子程序的创建过程2、伪代码3、通过伪代码创建子程序3.1 设计子程序3.2 编写子程序的代码3.3 检查代码3.4 收尾工作4、总结 伪代码编程过程 创建类和子程序通常都是一个迭代的过程。在创建子程序的过程中获得的认识常常会反过来影响类的设计。 1、类和子程序的创建过程 类的创建过程 子程序的创建过程 2、伪代码 如何编写一段伪代码: 用类似英语的语句来精确描述...

github_39353936的博客 505

《代码大全》到底讲什么?

    《代码大全 (中文版)第二版》到底讲什么?她讲的是哪种编程语言?C、C++、Java、C# 还是 Visual Basic?列出的代码全吗?我能从中直接copy&paste代码到自己的项目中吗?这本书英文名叫“Code Complete”,其中 code 是代码,complete 是“完成”的意思。code complete 就是“写完了所有代码,可以开始系统测试”的这么一个时段,与之对应

陈硕的Blog 3万+

书籍-Steve McConnell《代码大全》

《代码大全》是一本关于软件构建的百科全书式著作,系统地介绍了从代码级设计到实现的完整过程。全书分为七个主要部分:打好基础部分涵盖软件构建的宏观视角、隐喻使用、前期准备和构建决策;创建高质量代码部分深入探讨设计原则、类与子程序设计、防御式编程、伪代码编程和代码布局;变量部分详细讨论变量命名、初始化、作用域、生命周期和持续性;语句部分全面覆盖组织直线型代码、条件语句、循环语句、不常见控制结构和表驱动方法;代码改善部分重点介绍重构、代码调整策略、性能优化和代码调整技术;系统考虑部分探讨程序规模对构建的影响、集成、

d3y1`5 81_09 1074

代码大全2 第二章创建高质量代码(高质量子程序)

子程序是为实现一个特定的目的而编写的一个可以被调用的方法或过程。函数指的是有返回值的子程序,而过程是指没有返回值的子程序。如果你是高级面向对象语言的开发者,比如Java、C#、python,子程序就是函数方法,只是是否存在返回值而已。创建子程序最主要的目的是提高程序的可管理性子程序可以按照其内聚性分为很多种类,而我们在编写子程序时应该尽可能的让子程序具有功能上的内聚性,因为这是最佳的一种内聚性。也就是让一个子程序只执行一项操作一个函数应该只做一件事。

阿呆博客 645

《代码大全》笔记 2 - 创建高质量的代码

豆瓣:https://book.douban.com/subject/1477390/ 《Code Complete》2d ed,CC2 设计中的挑战 设计是一个险恶的问题 你必须首先把这个问题“解决”一遍以便能够明确地定义它,然后再次解决该问题,从而形成一个可行的方案。 设计是个了无章法的过程 设计就是确定取舍和调整顺序的过程 设计受到诸多限制 设计是不确定的 设计是一...

一个软件工程师的技术笔记 586
上一篇: 读书笔记:《代码大全第2版》 03.创建高质量的代码之创建高质量的类
下一篇: 读书笔记:《代码大全第2版》 05.创建高质量的代码之防御式编程
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值