编程的原则
摘自《编程的原则——改善代码质量的101个方法》
娱乐界祖师爷
这个作者很懒,什么都没留下…
展开
-
UNIX思想③——组合原则
是什么开发软件时要保证该软件能与其他软件组合使用。换句话说,就是将软件做成一个尽量简单的过滤器。这里所说的过滤器是指接收某种数据流之后,经过加工输出另一种数据流的软件。输出的数据流最好是文本格式。为什么过滤器形式的软件能轻易地连接在一起。软件通过不同的组合方式,能够完成多样的任务。另外。文本流的接口相对简单,这使得软件能够处于信息隐藏的状态。而无法与其他软件协作的软件通常发挥不出多少价值。即便可以使用特殊的进程间通信方式进行协作,软件也会相互暴露内部结构。能作为零件使用的软件要具有独原创 2022-05-05 23:17:48 · 217 阅读 · 0 评论 -
UNIX思想②——清晰原则
是什么代码不应该巧妙,而应该清晰。以大幅提升复杂度为代价,用技术使性能得到一点点提升的做法是丢了西瓜捡芝麻。复杂的代码不仅难以理解,还容易发生故障。而清晰的代码既便于理解,又不容易出错。为什么写代码时最重要的一点就是以人(阅读代码维护软件的程序员)为对象,不以执行代码的计算机为对象。维护是软件不可避免的一个阶段。这个阶段的所需成本通常比重新开发一款软件的成本还要高。因此,代码不是编译完、解释完之后能在计算机上运行就万事大吉了,它还必须能让人读懂。怎么做我们要编写可读性高的原创 2021-03-25 00:04:58 · 193 阅读 · 1 评论 -
UNIX思想①——模块化原则
是什么软件是个复杂的东西。不过,软件整体的复杂度是可以降低的。为此,软件需要由多个简单的模块组装而成。也就是说,将代码中关联性较强的元素聚集起来做成模块。模块的接口简单明了,不能含有多余的东西。为什么接口简明的简单模块不容易与其他模块发生关联。因此,问题能被控制在局部范围,我们可以在不破坏整体代码的情况下修改对象模块。控制复杂度是编程的精髓。可惜的是,控制复杂度没有捷径可走。我们只能通过精简模块、精简接口一步一步地降低软件的复杂度。怎么做我们尽量减少模块的接口。模块内部的原创 2021-03-21 12:32:49 · 268 阅读 · 0 评论 -
UNIX思想
是什么UNIX思想源于UNIX文化。它是大量经验的结晶,是编写优质代码的实用性技术的集合。UNIX思想并不是真正意义上的方法论,它是UNIX文化孕育出的一系列约定俗成的规则,被人们沿用至今。UNIX思想可以总结为以下几个原则:模块化原则 清晰原则 组合原则 分离原则 简单原则 简约原则 透明性原则 健壮性原则 表达性原则 最小意外原则 沉默原则 修复原则 经济原则 生成原则 优化原则 多样性原则 可扩展性原则为什么UNIX拥有强大的生命力。UNIX之原创 2021-03-20 22:40:07 · 242 阅读 · 0 评论 -
七个设计原理⑦——安全原理
是什么安全原理就是注意安全性,采用相对安全的方法来对具有不确定性的、模糊的部分进行设计和编码。说的具体一点,就是在编写代码的时可以将不可能的条件考虑进去。比如即便某个if语句一定成立,我们也要考虑else语句的情况;即便某个case语句一定成立,我们也要考虑default语句的情况;即便某个变量不可能为空,也要检查该变量是否为NULL。为什么硬件提供的服务必须保证安全,软件也一样。设计软件时要考虑各种情况,保证软件在各种情况下都能安全运行。这一做法在持续运营服务和防止数据损坏等方面有着积原创 2021-03-18 15:11:25 · 414 阅读 · 0 评论 -
七个设计原理⑥——清晰原理
是什么清晰原理就是注意逻辑的清晰性。逻辑具有清晰性就代表逻辑能清楚证明自身的正确性。也就是说,我们编写的代码要让人一眼就能判断出没有问题。任何不明确的部分都要附有说明。保证逻辑的清晰性要"不择手段"。在无法使用代码证明逻辑正确性的情况下,我们也可以通过写注释、附文档或画图等方法来证明。不过,证明逻辑的正确性是一件麻烦的事,时间一长,人们就会懒得用辅助手段去证明,转而编写逻辑清晰的代码了。为什么代码免不了被人一遍又一遍地阅读,所以代码必须保持较高的可读性。编写代码时如果追求高可读性,我们就原创 2021-03-17 10:58:20 · 242 阅读 · 0 评论 -
七个设计原理⑤——线性原理
是什么线性原理就是让处理流程尽量走直线。一个功能如果可以通过多个功能的线性结合来实现,那它的结构就会非常简单。反过来,用条件分支控制代码,毫无章法地增加状态数等行为会让代码变得难以理解。我们要避免做出这种行为,提高代码的可读性。“透明”一次可以用来形容代码有较高的可读性,所以线性原理又称为“透明原理”为什么复杂的流程是故障处理的温床。故障多出现在复杂的条件语句和循环语句中,另外,goto等让流程出现跳跃的语句也是故障的多发地。如果能让处理由高层次流向低层次,一气呵成,代码的可原创 2021-03-15 17:16:02 · 864 阅读 · 0 评论 -
七个设计原理④——层次原理
是什么层次原理就是在结构上讲究层次。注意事物的主从关系、前后关系和本末关系等层次关系,整理事物的关联性。不同层次各司其职,同种处理不跨越多个层次,这一点非常重要。比如执行了获取资源的处理,那么释放资源的处理就要在相同的层次进行。又比如互斥控制的标志位置1和置0的处理要在同一层次进行。为什么有明确层次结构的代码能帮助读代码的人抽象理解代码的整体结构,读代码的人可以根据自身需要阅读下一层次的代码,掌握更加详细的信息。这样一来就可以提高代码的可读性,帮助程序员表达编码意图,降低BUG发生的原创 2021-03-10 17:22:42 · 441 阅读 · 1 评论 -
七个设计原理③——对称原理
是什么对称原理就是讲究形式上的对称,比如有上就有下,有左就有右,有主动就有被动。也就是说,我们在思考一个处理时,也要想到与之对称的处理。比如有给标志位置1的处理,就要有给标志位0的处理。为什么具有对称性的代码能够帮助读代码的人推测后面的代码,提高其理解代码的速度。同时,对称性会给代码带来美感,这样有助于他人理解代码。此外,设计代码时将对称性纳入考虑得到范围能防止我们在思考问题时出现遗漏。如果说代码的条件分支是故障的温床,那么对称性就是思考的框架,能有效阻止条件遗漏。怎么做在出现“原创 2021-03-07 16:39:47 · 1541 阅读 · 0 评论 -
七个设计原理②——同构原理
是什么同构原理就是力求规范。同等对待相同的东西,坚持不搞特殊。同等对待,举例来说就是同一个模块管理的数值全部采用同一单位、公有函数的参数个数统一等。为什么相同的东西用相同的形式表现能够使不同的东西更加突出。不同的东西往往容易产生BUG。遵循同构原理能让我们更容易嗅出代码的异样,从而找出问题所在。图表和工业制品在设计上追求平衡之美,在这一点上,同构原理也有着相似之处,统一的代码颇具美感,而美的东西一般更容易让人接受,因此统一的代码有较高的可读性。怎么做我们要让代码符合一定的规范。不原创 2021-03-06 16:08:30 · 1134 阅读 · 2 评论 -
七个设计原理①——简单性原理
是什么简单性原理就是追求简单。说的极端一点,就是自始至终都是以最简单的逻辑写代码,让编程初学者一眼就能看懂。因此,在编程时我们要重视的是局部的完整性,而不是复杂的整体关联性。为什么软件故障常集中在某一个区域,而这些区域都有一个共同的特点,那就是复杂。编写代码时如果追求简单易懂,代码就很难出现问题。不过,简单易懂的代码往往给人一种不够专业的感觉。这就是经验老到的程序员喜欢写老练高深的代码的原因。所以我们要有足够的定力来抵挡这种诱惑。怎么做努力写出自然的代码。放下高超的技巧,坚持原创 2021-03-05 15:07:35 · 1358 阅读 · 2 评论 -
七个设计原理
是什么七个设计原理是我们在设计代码结构时应考虑的核心观点,目的是避免代码中存在故障隐患。这些设计原理源于对实际软件开发现场的分析,是提高代码质量的经验结晶。人们从“怎样做才能在开发时避免代码中存在的故障隐患”的角度出发,分析一个个故障案例的根本原因,从而总结出了这些原理。七个设计原理是代码审查的标准判断。这七个设计原理如下:简单性原理 同构性原理 对称原理 层次原理 线性原理 清晰原理 安全原理为什么代码审查是保证软件质量的有效方法。不过,审查如果没有一定的价值观或观点原创 2021-02-22 10:00:59 · 1941 阅读 · 0 评论 -
软件架构非功能需求——可复用性
是什么可复用性指软件的整体或其中一部分可以在其他软件的开发过程中重复使用的能力。可复用性表现在两个方面:一个是重复使用现有代码的软件开发;另一个是以重复使用为目的的软件开发。重复使用现有代码的软件开发重复使用现有代码的软件开发指在开发过程中重复使用项目内的既有模块、以往项目的模块和各种库等。将可重复使用的现有代码直接或变形后整合至正在开发的软件中。以重复使用为目的的软件开发以重复使用为目的的软件开发指在当前软件开发中创造出来可供未来项目重复使用的模块。为其他软件提供可重复使用的模块是这类原创 2021-02-21 12:40:43 · 1114 阅读 · 0 评论 -
软件架构非功能需求——可测试性
是什么可靠性是指软件有效且高效地进行测试的能力。“有效地进行测试”指测试有深度且高质量,即通过测试可以全面检测软件的质量。“高效地进行测试”指测试所需要的成本和劳力较少,即能够花费较少的成本快速地检查软件的质量。为什么随着软件体积的增大和软件复杂程度的加深,测试的难度会越来越大,所需成本也会越来越高。因此我们要求软件架构不仅要保证软件正常运行,还要有简化测试的效果。无论是开发阶段还是维护阶段,保证修改后的软件的质量都是一个非常重大的课题,在软件的各项需求中,可测试性重要程度相对较高。原创 2021-02-20 10:49:29 · 589 阅读 · 0 评论 -
软件架构非功能需求——可靠性
是什么可靠性指软件在异常情况下或在被非法、非常规使用时维持自身功能的能力。可靠性体现在容错和健壮性这两个方面。容错容错指软件发生故障时仍保持正常运行的能力。它保证软件能在异常情况下正常运行,并在内部完成故障的修复工作。修复完成后,软件需要继续或从头开始执行异常位置的操作。比如分布式系统在发生通信异常时会先暂时切断连接,等问题修复完成后再重新连接,恢复软件的运行。健壮性健壮性是保护软件不受非正常使用方式或非法输入影响的能力。具备该能力后,不论什么样的使用方式,软件都能准确迁移至系统定义原创 2021-02-19 09:18:27 · 3420 阅读 · 1 评论 -
软件架构非功能需求——效率性
是什么效率性指软件在运行过程中使用资源发挥性能的能力。效率性大致分为以下两种:时间效率性时间效率性从时间的角度来定义资源的使用效率。时间效率性可以通过一定时间内可以完成的处理数量(通量)、从用户执行输入操作到应答所花费的时间(响应时间)、从用户开始操作到输出所需信息所花费的时间(周转时间)等来衡量。资源效率性资源效率性从计算机资源的角度来定义资源的使用效率。资源效率性可以通过CPU占用时间,内存使用量,存储空间占用量和网络传输量等来衡量。为什么资源是有限的,所以软件需要高原创 2021-02-18 10:38:24 · 999 阅读 · 0 评论 -
软件架构非功能需求——互操作性
是什么互操作性指软件与其他软件交互的能力,互操作性要求不同的软件之间使用同一交换方式来交换数据、读取相同格式的文件、使用相同的协议等,从而实现相互连接的状态。为什么软件并不是独立存在的,它是系统的一部分,会频繁地与其他系统或环境发生作用。能与其他软件协作,就意味着我们可以直接使用既有资产。这样一来,需要我们开发的软件就会减少。良好的连接性能扩大软件的用途,缩短开发周期,减少成本。怎么做在设计软件架构时,要明确定义需要访问的外部功能以及数据结构。这么做能够提升软件的价值。另外,原创 2021-02-09 20:22:47 · 2866 阅读 · 0 评论 -
软件架构非功能需求——易变性
是什么易变性指软件能被轻松改良的能力。具体来讲,易变性要求软件能被轻易修改、轻易扩展、轻易重组、轻易移植到其他平台。此外,在保证质量的前提下迅速完成改良也是易变性的要求之一。为什么我们总希望软件在发布之后一直不用修改,但事实并非如此。软件在使用周期内会不断被修改和扩展。原需求会不断发生变更,新需求也会不断添加进来。要想长期快速应对用户的各种琐碎需求,我们就需要设计出便于修改代码的软件架构。怎么做可维护性可维护性指解决问题的难易度,即修改故障代码的难易度。要提高可维护性,使用原创 2021-02-08 23:32:49 · 2033 阅读 · 0 评论 -
软件架构的非功能需求
是什么非功能需求指功能方面以外的一切需求。要想让软件具有高质量,真正服务于用户,单纯满足功能需求是不够的,还要满足非功能需求。非功能需求与功能需求一样重要。非功能需求包含以下几种观点:易变性 互操作性 效率性 可靠性 可测试性 可复用性为什么非功能需求对开发、运维以及计算机资源的高效运用有着很大的影响。另外,在发布后的运维阶段,比较大的问题多是由性能、系统宕机等非功能需求引起的。然而与功能需求相比,这些重要的非功能需求往往被忽视、推后。其实,非功能需求应该在开发最初,也就是设原创 2021-02-07 21:29:25 · 983 阅读 · 0 评论 -
软件架构基本技法——分治
是什么分治是指将难以直接解决的大问题分割成多个小问题,然后逐个解决。分割后的小问题要比最初的问题简单许多,比较容易解决,各个小问题被逐一解决之后,原来的大问题就不复存在了。为什么直接解决大问题,难度较大,花费的时间也比较多,闹不好到最后也解决不了。之所以会出现这样的现象,是因为规模过大的问题,其复杂度也比较高。先将问题分割成容易控制的大小,再着手解决,这么做效率比较高。怎么做先对问题进行分割,然后再一个一个解决,比如下面几种做法:在设计整个软件时,先将软件分割成多个可以独立设原创 2021-02-06 14:01:55 · 245 阅读 · 0 评论 -
软件架构基本技法——单一引用点
是什么模块的各元素仅被声明和定义一次。以变量为例,仅定义一次就是指初始化之后就不再对值进行更改了。这样一来,我们就不用再追踪变量值的变迁过程,代码的可读性也随之提高。为什么该基本技法可以使编程无副作用。所谓编程的副作用,是指某一功能使模块状态产生变化,对此后得到的结果造成影响。排除副作用能免去状态的变化,保证相同数据能始终获得相同的结果,从而减少状态依赖引发的故障。另外,当某一变量被大范围使用且该变量的值被频繁更改时,我们将很难对代码进行追踪。变量值固定则可以省去这些麻烦,从而提高代原创 2021-02-04 23:42:15 · 160 阅读 · 0 评论 -
软件架构基本技法——接口与实现的分离
是什么模块由接口和实现这两个相互分离的部分组成。接口部分接口部分用于定义模块具备的功能,决定模块的使用方法。该部分由用户可访问的函数签名组成。实现部分实现部分其实就是实现模块功能的代码部分。该部分包含模块内部使用的逻辑和数据。用户无法访问实现部分。为什么接口与实现分离之后,模块的使用者(用户)就不必了解实现的详细内容了。这样一来,展现在用户眼前的就只有接口,模块变得简单易懂,可以让用户轻松使用。另外,接口与实现分离能保证“模块的使用方法”和“功能的实现方法”的独立性。如此一来原创 2021-02-03 22:44:52 · 911 阅读 · 1 评论 -
软件架构基本技法——策略和实现分离
是什么模块可以承载策略或实现。但是,一个模块不可以同事承载二者。策略模块策略模块依赖于软件的前提条件,这类模块通常用于给业务逻辑或其他模块选择参数。实现模块实现模块不依赖于软件的前提条件,这类模块通常是独立的逻辑部分。软件的前提条件会作为传递给模块的参数给出。为什么实现模块不依赖于特定的软件,是一种纯粹的模块,因此可供其他软件重复使用。而策略模块是为了特定软件量身打造的。当软件发生变动时,策略模块也要被迫发生改变。因此如果将实现和策略混在一起,那么当策略发生变动时,实现也会受到牵原创 2021-02-01 22:37:17 · 350 阅读 · 0 评论 -
软件架构基本技法——充足性、完整性、原始性
是什么经过封装,我们让相互关联的元素集中到一个模块来承载一个抽象概念。该模块承载的抽象概念要具有充足性、完整性和原始性。充足性充足性是指模块表达的抽象概念非常充足。比如模块要表达“收集”这一概念,但只提供remove,没有提供add,这就不足以表达“收集”这一概念了。完整性完整性是指模块表达的抽象概念具有所有特征。涵盖所有特征、没有缺漏的模块方便任何人拿去使用。比如当模块要表达“收集”这一概念时,如果模块没有提供用于获取元素个数的size,我们就不能说该抽象概念具有完整性。原始性原创 2021-01-31 09:42:38 · 2039 阅读 · 0 评论 -
软件架构基本技法——关注点分离
是什么关注点指软件的功能或目的。把关注点“分离”,就是将与各个关注点有关的代码集中起来做成独立的模块,与其他代码分离。分离的模块要尽量减少公开的功能数量,与其他模块的关联也要维持在最低的限度。在设计技法中,有很多模式用于实现关注点分离,其中最具代表性的模式是“模型-视图-控制器”(MVC)。在编程领域,关注点分离的代表技术是面向切面编程。为什么代码的修改通常以关注点为单位。因此,将代码按照关注点进行分离有一下好处。各个关注点互相独立,从而缩小了代码的修改范围,使得代码更易于修改 修改带原创 2021-01-28 22:44:03 · 2547 阅读 · 0 评论 -
软件架构基本技法——打包
是什么将模块按照某种有意义的单位整理并分组,其实就是将整个软件按照某种有意义的单位进行分割。这种分割后的产物成为“包”。包决定了以任何方法将软件的理论结构存储为物理结构。包起到的是物理容器的作用,主要用来以某种有意义的单位存放软件的功能。为什么将代码中的相关元素封装成模块,可以起到整理代码、降低复杂度的作用。然而,当软件规模大到一定程度后,模块的数量也会变得非常多,这同样会增加复杂度。此时需要对模块群进行分组,也就是打包。打包有一下优点:整个软件被分割成包,复杂度下降 包内没有不相关的原创 2021-01-27 21:15:19 · 774 阅读 · 3 评论 -
软件架构基本技法——信息隐藏
是什么对使用模块的用户隐藏模块实现相关的信息。模块内有哪些数据,函数是用何种逻辑实现功能的,这些信息全部对外隐藏。我们要让外部无法直接访问模块内的数据。模块的函数也尽量不要公开。用户只能通过最低限度公开的函数来操作模块。为什么将用户不必知晓的内部详细信息隐藏起来,可以减少接口的代码量,让信息交互变得更简洁,降低代码的复杂程度。从用户的角度来看,由于排除了多余信息的干扰,模块的使用方法变得更加简单。另外,公开的部分越少,模块内部的修改就越不容易影响到外部、这样可以将修改代码的范围控原创 2021-01-26 17:48:47 · 1183 阅读 · 0 评论 -
软件架构基本技法——封装
是什么将相互关联的数据和逻辑分到一组,定义为一个模块。用模块这层外衣将关联性较强的数据群和逻辑群包裹起来的做法称为封装。各个模块会作为完全不相关的东西分开进行处理。为什么通过分组,相互关联的元素被集中到一个模块中,共同负担起一个抽象概念。这种做法有以下优点:模块中不存在不相关的元素,代码可读性高 修改带来的影响被限制在模块内 影响程度明确,代码更易于修改 各个模块都是独立的零件,便于重复使用 数据和逻辑分割成了小单位的模块,便于我们处理复杂问题。怎么做将相互关联的数据和逻辑原创 2021-01-25 10:54:41 · 1452 阅读 · 2 评论 -
软件架构基本技法——抽象
是什么抽象,是指在概念上明确划清界限。这种明确划清界限的方式可以将一个模块与其他模块区分开来。抽象由“舍象”和“一般化”两个观点组合而成。舍象指的是舍去复杂对象的几个性质,只关注其特定的性质。一般化指的是从具体对象中抽出共有的性质,将其固定为更加通用的概念。为什么抽象是人们在处理复杂事物时使用的基本手段。舍象可以除去对象的枝叶,让它的本质暴露出来。复杂度下降之后,我们便能集中精力去对付真正的问题。抽象化的概念简明扼要,便于使用,应用范围极广。一般化通过抽取共同特征将多个对象聚原创 2021-01-24 22:24:37 · 832 阅读 · 0 评论 -
软件架构基本技法
是什么软件架构基本技法共有以下10种:抽象 封装 信息隐藏 打包 关注点分离 充足性、完整性、原始性 策略和实现的分开 接口与实现的分离 单一引用点 分治为什么开发优质的软件需要基本的技法作为支撑。程序员认识到,对于一个问题,特定的解决方案要优于其他方案,于是这些解决方案被重复使用。这些方案就是基本技法。怎么做我们要把基本技法应用到代码中。基本技法不是从某种软件开发技术中总结出来的,这些技法是更为本质的东西,他们适用于一切开发方法以及编程语言。...原创 2021-01-23 22:43:00 · 267 阅读 · 0 评论 -
实现编程理论的六个原则⑥变动率
是什么变动率体现了修改代码的时间点,变动率相同意味着代码在同一时间点被修改。同时修改的元素要放在同一个地方,在不同时间点修改的元素要放在不同的地方这可以说是对时间应用了对称性原则, 同样的东西要同等对待,这一点对修改代码的时间来说也一样,同一时间修改的东西要放在同一个地方。为什么在模块等按照某种单位分组的代码中,有多个修改理由的代码比较脆弱,因为一个模块中如果修改代码的时间不同步,那么修改带来的影响将会波及无关的部分。修改理由越多,修改的机会就越多。这种代码一般会承担多项职责,所以代码量原创 2021-01-19 18:25:57 · 137 阅读 · 0 评论 -
实现编程理论的六个原则⑤声明式表达
是什么声明式表达是指在表达代码意图时,尽量用“声明式”的表达方式,而非“命令式”的表达方式。命令式编程描述的是问题的解决方法,也就是数据结构与算法。而声明式编程描述的是问题的定义,也就是当前问题的性质及解决问题时应满足的限制条件。为什么声明式的代码没有流程方面的限制。这种单纯阐述事实的表达方式能够提升代码的可读性。另一方面。我们要想正确理解命令式的代码,就必须时常在脑中描绘其状态、控制及数据流。为此,我们必须跟着代码的流程走向来进行阅读。怎么做采用声明式的表达方式,简介地表达意图原创 2021-01-18 20:19:54 · 181 阅读 · 0 评论 -
实现编程理论的六个原则④对称性
是什么对称性一般指事物中对某种变换保持不变的性质。以图形中的对称性来说,“轴对称”就是“镜面对称”,“点对称”就是“旋转对称”。编程中的对称性要比图形中的对称性抽象的多,编程中的对称性是指相同思路的代码在任何地方都以相同的形式表现出来。简单来说,就是组内的等级整理。同类的东西,也就是拥有相同性质的东西,要用相同的等级来表现。为什么在代码中明确表现出对称性后,代码的可读性大幅提高。对读代码的人而言,具有对称性的代码要比参差不齐的代码更容易理解,读代码的人可以通过阅读部分代码来推倒其他部原创 2021-01-17 23:12:16 · 465 阅读 · 0 评论 -
实现编程理论的六个原则③逻辑与数据的一体化
是什么逻辑与数据的一体化是指把逻辑和逻辑处理的数据放在相近的位置。所谓相近的位置,指的是在同一个函数或同一个模块内。距离越近,代码的质量就越高。为什么修改代码时往往需要同时修改逻辑与该逻辑处理的数据。因此,如果把二者放在同一位置,我们要阅读代码就会减少,修改也不会波及其他元素。从结果来看,这么做降低了修改成本。怎么做我们要把数据与逻辑放在相近的位置。不过,我们很难一开始就知道哪个逻辑应该和哪些数据放在一起。这时不妨先大致安排一下,之后再根据具体情况进行配置。编写、运行代码原创 2021-01-10 00:19:04 · 205 阅读 · 0 评论 -
实现编程理论的六个原则②重复最少化
是什么重复最少化,就是指极力消除重复。许多技术都以实现重复最少化为目标,函数化技术就是其中之一,该技术将重复的逻辑函数化,整合成一段共享代码来使用。为什么通过复制、粘贴让同一段代码出现在多个位置时,如果有一个地方进行了修改,我们就必须检查其他地方,判断各处是否需要修改,这个判断很难把握,并不是全部替换就万事大吉了,而且检查时不能只看复制部分,其周围的部分也要检查,只有这么做才能正确进行修改。这一过程的成本非常高。怎么做我们要将代码分成多个小块,大块代码之间一般会存在重复,将大块代原创 2021-01-08 23:33:03 · 162 阅读 · 0 评论 -
实现编程理论的六个原则①效应局部化
是什么效应局部化中的“效应“是指修改带来的影响。效应局部化是指修改带来的影响控制在局部。效应局部化是一个很重要的原则。围绕该原则产生了许多技术,模块化就是其中之一。模块化技术的目标之一就是让修改模块所带来的影响停留在该模块的内部。为什么在效应非局部化的情况下,某处修改会对其他完全不相关的地方造成影响,使修改成本大幅增加。这是如果我们知道哪些地方受到影响,或许还有救。然而在大部分情况下,我们对此是一无所知,这时就得先花时间排查影响范围。、但在效应局部化的情况下,我们需要阅读代码以及原创 2021-01-01 22:12:16 · 307 阅读 · 0 评论 -
支撑编程理论的三大思想③灵活性
是什么代码的灵活性是指修改代码的难易程度。“灵活”是指在添加新代码的时候,已有代码能够不受影响,不产生冲突,不出现排斥,在保证自身不遭到破坏的前提下灵活地接纳新代码。为什么代码早晚会被修改。因此,易于修改、具有灵活性成了代码的必备条件。怎么做要想让代码具有灵活性,就要保证代码易于扩展且扩展时不会波及无关的元素。不过灵活是一把双刃剑,代码易于修改自然是好事,但灵活性往往会成为将复杂的代码或设计正当化的借口。不能以牺牲简洁性为前提来提高灵活性,因为多余的灵活性是无用的。为了写出.原创 2020-12-31 17:04:21 · 438 阅读 · 0 评论 -
支撑编程理论的三大思想②简洁
是什么对代码而言,简洁就是消除了"多余的复杂性"后的状态。这里所说的“多余的复杂性”不是反映了目标(代码要达成的目的)复杂程度的复杂性,而是指在修改代码的过程中遗留下来的痕迹所带来的复杂性。为什么“多余的复杂性”不具有任何价值。这类复杂性会阻碍代码正常运行,提高修改代码的难度,损害软件的价值。它会给代码埋下祸根。消除“多余的复杂性”可以让代码变得简洁。这样一来,阅读、使用、修改代码的人就快速理解代码。简洁的代码还能大幅降低故障发生的概率。怎么做在设计时,将代码的本质部分放在显眼的位置原创 2020-12-29 20:16:13 · 146 阅读 · 0 评论 -
支撑编程理论的三大思想①交流
是什么代码也是一种给人看的文档,而文档的本质在于交流。在编程中,良好的交流意味着读代码人能够理解、修改和使用代码。为什么顺利的开发源于顺利的交流。软件开发大部分成本是在完成以后产生的,这部分就是维护成本。要想节约成本,就要提高代码的可读性。这是因为程序员之间是需要通过代码进行交流。读代码的时间要多余写代码的时间。另外,在开发阶段程序员也要一边回顾前面的代码,一边写新代码。通过代码,程序员与片刻之前的自己实现交流。怎么做要想通过代码取得良好的交流效果,我们写代码时就得站在代原创 2020-12-24 14:12:42 · 97 阅读 · 0 评论 -
编程理论
是什么指导编程的思想。在编程的过程中,人们最重视的莫过于编写出高质量的代码。高质量的代码是指拥有多种扩种的方法、不存在多余的要素、可读性高,易于理解的代码。编程中有一套理论专门用来指导人们实现这种高质量的代码。该理论由一下三个思想作为支撑交流 简洁 灵活性在追求高质量代码的过程中,这些思想左右着我们的每一个决定。为什么编程在不同的问题领域有不同的技术和模式。虽然不能否认理解和掌握技术的重要性,但单纯的学习只能帮助我们了解技术的表面,并不能帮助我们真正学会使用这项技术。编原创 2020-12-20 19:17:20 · 438 阅读 · 1 评论