首页 > 其他分享 >《代码大全》读书笔记二

《代码大全》读书笔记二

时间:2023-06-11 14:36:09浏览次数:42  
标签:ADT 读书笔记 继承 代码 抽象 复杂度 内聚性 子程序 大全

《代码大全2》第六、七章

       作者在第六章中从抽象数据类型(Abstract Data Type)出发阐释类(class)的概念,给出创建类的原因以及创建高质量的常涉及的设计问题。抽象数据类型(ADT)是指一些数据以及对这些数据所进行的操作的集合,ADT是一个比类更基础的概念,类由ADT出发得到扩展,或者说,类是ADT的实现形式之一。ADT概念是与本书前文中的整体抽象概念一脉相承的,使用ADT可以隐藏实现细节,更容易提高性能,让程序更具有自我说明性(self-explanatory),这都是从管理复杂度的基本任务出发的。

       那么在什么情境下我们应该选择创建一个类呢?本书作者总结了诸多合理原因例如对现实世界中的对象或抽象对象建模、降低及隔离复杂度、隐藏全局数据、限制变化所影响的范围、实现中心控制点、让代码易于重用和重构等等。创建具有良好抽象的类接口对于创建一个高质量的类至关重要。在一个良好抽象化的类接口中,每一个子程序都朝着一致的目标工作;反之,没经过良好抽象的类混杂着各种子程序,内聚性差。封装是一个比抽象更强的概念,抽象提供一个让程序员忽略实现细节的模型,而封装强制阻止程序员看到细节。良好的封装会尽可能地限制类和成员的可访问性,避免把私用的实现细节放在类的接口中。

       相比起ADT,类还衍生出继承和多态两个概念。在书中作者重点讨论了继承的优势和危险。继承的目的在于“定义能为两个或多个派生类提供共有元素的基类”,但如果使用不当,继承会大幅增加程序的复杂度。作者建议慎用继承,避免让继承体系过深,把公用的接口、数据和操作放到继承树中尽可能高的位置。

       另外在设计和实现类时,要保持类与类之间较为松散的耦合,对其他类的子程序的简介调用要尽可能的少,避免创建万能类,消除无关紧要的类。而在一个类内,如果可能,应该在素有构造函数中初始化所有的数据成员,优先采用深层副本。

       第七章就如何编写高质量的子程序展开讨论。子程序是为了实现一个特定的目的而编写的一个可被调用的方法或过程,例如C++中的function, Java中的method。子程序可以避免代码的重复,引入中间、易懂的抽象,简化复杂的逻辑判断,隔离复杂度,提高整个程序的可移植性。在子程序层上的设计,作者阐述了几种内聚性,其中被最好的一种内聚性是功能上的内聚性,也就是说,令子程序实现的功能专一化。紧接着是一些在代码编写过程始终存在的问题:如何给变量取个好名字?子程序可以写多长?如何使用子程序参数?等等。作者给出了相当详实的建议和例子,此处不一一列举。最后作者对函数和过程的概念进行了辨析,并指出使用宏子程序和内敛子程序应该注意的问题。

标签:ADT,读书笔记,继承,代码,抽象,复杂度,内聚性,子程序,大全
From: https://www.cnblogs.com/LIXIHENG/p/17472905.html

相关文章

  • 人月神话读书笔记二
    作者介绍:20世纪最后一年也就是1999年的图灵奖,授予了年已69岁的资深计算机科学家布鲁克斯(FrederickPhillipsBrooks,Jr.)。布鲁克斯这个名字在中国知之者不多,但在美国却是大名鼎鼎。因为他在60年代初只有29岁时就主持与领导了被称为人类从原子能时代进入信息时代标志的IBM/360......
  • 【读书笔记】人月神话
     作为一本计算机编程项目管理类的书刊,此书书名就毫不留情地指出“用人月作为衡量一项工作的规模是一个危险和带有欺骗性的神话”。这里向读者传达了这个重要的概念,在估计和进度安排中使用的工作量单位:人月。但实际上,人数和时间的互换是近乎不可能的,因为编程项目的任务不能分解给......
  • Lucene--开放源代码的全文检索引擎工具包
    Lucene是apache软件基金会4jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的......
  • 《梦断代码》读后感之一
    今天发表《梦断代码》的第一篇读后感。这几天读了《梦断代码》的前四章,有很多不懂的也是必然的,读了很多遍还有好多地方不是很懂。发一下读的内容。   作者迷恋于一个叫做Sumer的游戏,其可以让玩家打补丁,任何人都能窥探其内部运行机制。花点时间学习简单的Basic语言,改游戏就......
  • 《梦断代码》读后感之二
    当今世界,软件已经成为当今世界不可或缺的一部分。而《梦断代码》一书记录的是作者罗森伯格对OSAF主持的Chandler项目进行田野调查,通过Chandler开发过程来揭示软件开发过程中一些根本性的大问题。   第四章作者将其命名为乐高王国。卡普尔很注重前台的效果,着重于如何体现Age......
  • 【三维装箱】基于自适应遗传算法的三维集装箱装载问题研究附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • SonarQube扫描C#代码
    目录用SonarQube实现什么功能?SonarLintforVisualStudio是什么?使用SonarQube扫描检测C#/.NET代码并上传到服务器一、配置MSBuild二、下载安装SonarScannerforMSBuild三、使用SonarQube分析C#代码并上传服务器Sonar系列相关参考SonarQube官网SonarQube是一款静态代码质量......
  • 用jQuery实现轮播图——超简单(代码解释)
    一、直接上代码<!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <title></title> <style> .wrapper{ width:600px; height:350px; border:1pxsolidred; position:relative; } ......
  • Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测|附代码数据
    全文链接:http://tecdat.cn/?p=27279最近我们被客户要求撰写关于深度学习循环神经网络RNN的研究报告,包括一些图形和统计输出。此示例说明如何使用长短期记忆(LSTM)网络预测时间序列LSTM神经网络架构和原理及其在Python中的预测应用LSTM网络是一种循环神经网络(RNN),它通过循......
  • R语言中的隐马尔可夫HMM模型实例|附代码数据
    原文链接:http://tecdat.cn/?p=17592最近我们被客户要求撰写关于隐马尔可夫HMM模型的研究报告,包括一些图形和统计输出。最近,我们使用隐马尔可夫模型开发了一种解决方案,并被要求解释这个方案HMM用于建模数据序列,无论是从连续概率分布还是从离散概率分布得出的。它们与状态空间和......