《代码大全2》第四、五章

第四章“关键的‘构建’决策”主要有以下三要点:1.每种编程语言都有优点和缺点,程序员应根据需要选择编程语言,尽量选择熟悉的语言以提高生产效率。作为一种表达工具,编程语言当然也会影响到使用者的思维,然而大多数重要的编程原则并不依赖与特定的语言,而是使用语言的方式。作者提倡“深入一种语言去编程”,当选择的语言缺乏构件或者其他问题时,我们不应该被语言的可行性束缚住,而是试着发明自己的编码约定、类库等去弥补它。2. 高质量的软件工程强调“架构的概念完整性”与其“底层实现”之间的关系,各个具体部件都能反映出架构的内涵。这要求我们,尤其是团队合作时要对变量名称、类名称、子程序名称、注释约定等底层细节有合理地统一规定,以避免程序充斥着不同的风格和随意的变化,从而程序员能够更好地关注本质问题。3.在技术浪潮前期与后期,编程的环境和难度是截然不同的,对此应该因时适宜地调整开发的策略。

第五章“软件构建中的设计”内容非常丰富,值得仔细阅读。以下只对部分要点做分析概括。要理解设计的出发点和最终目标,不得不先理解软件的首要技术使命:管理复杂度。在书中,作者暗示复杂度来源于两种难题:偶然性与本质性难题。偶然性与事物的偶然、非本质属性关联,已经在编程语言和编程工具数十年的进化中得到了较好的解决。而本质性问题的求解进展则缓慢得多,本质性的困难来源于很多方面,概括来说是在复杂、无序的现实世界中精确而完整地识别出各种依赖关系并给出一套解决方案,而人们对现实世界中各种实体以及运行规律还未参透,这就增加了软件开发的本质性困难。 从管理复杂度这个首要使命出发,作者列出了一些理想的设计特性:最小的复杂度、易于维护、松散耦合、可扩展性、可重用性、高扇入、低扇出、可移植性、精简性、层次性等等。要实现以上设计特性,其中,层次化设计显得尤为重要。作者给出的基本层次是:软件系统 -> 子系统和包 -> 包中的类 -> 类中的数据和子程序 -> 子程序内部。接着作者花了大量篇幅介绍启发式的设计方法,其中最让我印象深刻的有两点,一是形成一致的抽象和信息隐藏概念。两者其实是相辅相成的,为层次化设计服务,而且他们展示了面向程序编程和面向对象编程的显著差别。分而治之——或者说模块化思想,在两种编程中都举足轻重,但面向过程侧重于,也许只能支持过程(具体来说函数)和自定义数据类型的封装,而面向对象编程在引入了类和对象的概念后将模块化思想进一步延伸,使得能够形成统一抽象的范围得到了扩大,比如说可反复使用的一整套操作在接口中定义,允许某些操作的事物定义为一个类,类之间还可以继承、多态。而信息隐藏是结构化程序设计与面向对象设计的基础之一,这个概念在实现类与类或子程序与子程序的松散耦合、提高扩展性等设计特性中都有非常大的价值。

转载于:https://www.cnblogs.com/VIAROW/p/8616505.html

《代码大全2》读书笔记 Week2相关推荐

  1. 代码大全(读书笔记)

    代码大全(读书笔记) 2021.06.27 开始阅读此书,这篇文章记录了一些读此书或者这款时间工作生活的一些心路,希望自己能持续从此受益. 2021.08.05 此次阅读的关注点在第 3/5/6/7/ ...

  2. Code Complete《代码大全》读书笔记

    最近拜读了 Code complete<代码大全>,这部大块头确实经典,涉及到了软件开发的方方面面.有点后悔没有早些阅读,值得推荐给还没读过的朋友.它并不是针对某种语言的武林秘籍,应该可以 ...

  3. 《代码大全》读书笔记及随想(day02)

    3.1 前期准备的重要性 准备工作的中心目标就是降低风险:一个好的项目规划者能够尽可能早地将主要的风险清除掉,以使项目的大部分工作能够尽可能平稳的进行.(感触颇深,感觉没有一个好的规划,写到中后期会有 ...

  4. 《重构-改善既有代码设计》读书笔记-重构篇

    2019独角兽企业重金招聘Python工程师标准>>> 重构定义 名词 对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本.--<重 ...

  5. 《代码阅读》读书笔记(一)

    <代码阅读>读书笔记(一) <代码阅读>(<Code Reading The Open Source Perspective>)Diomidis Spinellis ...

  6. 代码大全2阅读笔记01

    今天我阅读了代码大全前两章,第一章欢迎来到软件构造的世界,它分为两部分什么是软件构造,软件构建为何如此重要. 软件构造: (1) 定义问题 (2) 需求分析 (3) 规划构建 (4) 软件构架 (5) ...

  7. linux命令行大全 笔记,《Linux命令行大全》读书笔记

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? shell就是一个程序,它接受从键盘输入的命令,然后把命令传递给操作系统执行.当使用图像用户界面时,我们需要一个叫做终端 ...

  8. html字体代码大全_HTML基础笔记(一)

    HTML 基础 HTML 标题 HTML 标题(Heading)是通过<h1> - <h6> 标签来定义的. 实例 HTML 段落 HTML 段落是通过标签 <p> ...

  9. 《代码重构》读书笔记(一)

    一.简单认识重构 1.认识重构的概念 重构是一种非常重要的技术,越复杂的系统越是需要不停地进行不同规模上的重构: 什么时候我们需要重构:当我们打算修改系统或者添加优化需求时,结构较差的系统很难修改,因 ...

最新文章

  1. Redis详解(一)------ redis的简介与安装
  2. [2021.1.17多校省选模拟4]T1(莫比乌斯反演/组合数学/枚举倍数)
  3. PyTorch 深度学习:37分钟快速入门——FCN 做语义分割
  4. ssm上传文件获取路径_ssm框架实现图片上传显示并保存地址到数据库(示例代码)...
  5. C语言 函数指针一(函数指针的定义)
  6. MAC安装软件 brew 问题记录
  7. Vulkan 学习笔记 day01 vulkan visuall studio配置测试
  8. VidMasta:搜索和观看在线电影、电视剧的神器
  9. 2021-2027全球与中国氢动力引擎市场现状及未来发展趋势
  10. 金士顿服务器内存条型号解读,金士顿标签含义,如何鉴别真假?
  11. MySQL如何删除一行数据
  12. 一名合格的大数据测试工程师,需要掌握哪些基本知识
  13. 滚动轴承特征频率计算推导过程
  14. python中判断生肖和星座哪个准_十二生肖PK十二星座,到底哪个更准?
  15. 申宝投资-三大股指开盘逐渐下跌
  16. 用HTML+CSS编写课程表及个人简历表
  17. 软件开发需求分析究竟应该由谁来做
  18. 瑞康医药携手亚马逊云科技,推动云上医药创新
  19. 语音算法笔记(3)——从序列建模的角度理解ASR
  20. 软件宝宝系列——SQL注入篇

热门文章

  1. 常见的java异常_浅谈十个常见的Java异常出现原因
  2. Affinity Photo中文版
  3. NUMECA FINE Turbo 14中文版
  4. 【洛谷 2782】友好城市
  5. Java核心技术点之多线程2
  6. Go - interface
  7. 550 Ip frequency limited
  8. jquery效果案例学习站
  9. 手把手教你实现SVM算法(二)
  10. LeetCode 14. Longest Common Prefix字典树 trie树 学习之 公共前缀字符串