1.如何封装?

封装总被提及,但是封装除了隐藏细节,还有什么需求呢?封装不仅仅是有简化过的模型看到复杂的概念,而且同时还不能让你看到复杂概念的任何细节。隐藏信息的重要性毋庸质疑。所以我们现在不仅用 C++ 的 private 隐藏信息。还用接口的方法,不在头文件暴露任何设计细节。另外,任何一个不满足现状的程序员,对自己以前的代码一定不会满意。但是复用老的不满意的代码并非坏事。我们需要做的是,重用的时候,把老的东西隐藏起来。

2.防御性编程是什么?

防御式编程的主要思想是:子程序应该不因传入错误数据而被破坏,哪怕是有其他子程序产生的错误数据。简单点讲就是容错性。

要点:

最终产品代码中对错误的处理方式要对“垃圾进,垃圾出”复杂得多。

防御式编程技术可以让出错误更容易发现、更容易修改,并减少错误对产品代码的破坏。

断言可以帮助人尽早发现错误,尤其是在大型系统和高可靠性的系统中,以及快速变化的代码中。包含C++

、Java和Microsoft Visual Basic在内的很多语言都支持断言,比如C++中标准的aasert宏并不支持文本消息。

3.耦合的种类有哪些?

松散耦合是每个系统设计人员所追求的东西。但是其标准往往把握不准。举个简单的例子,不一定恰当。在我最早的设计里,系统把坐标这个东西封装成一个叫做 point ,以后参数传递都传 point * ,而不是 x,y 。这看使很合理。但是,这的确增加了耦合度。因为每个类都需要知道 point 的细节。很多情况下,用简单类型做参数传递反而更合适。(到底传 point * 还是 x,y 依旧要根据实际情况靠量) 参数过多也会导致耦合度的增加,从这个角度看,x,y 是两个参数, point * 是一个参数。关于耦合程度的问题,没有绝对唯一的标准。

4.需求分析如何做?

其实我们不必去照本宣科的写需求分析书什么的,做需求分析即使是在大脑中,口头交流上完成,也是有这么一个过程。落下文字固然是好的,但并不是重点。关键在于做不做。是否详细定义了系统的全部输入,包括来源、精度、取值范围、出现频率。是否详细定义了系统全部输出,包括目的,精度,取值范围、出现频率,格式?是否定义了机器内存和剩余磁盘空间的最小值?是否详细定义了系统的可维护性,包括适应特定功能的变更、操作环境的变更、与其他软件的接口的变更能力? 书中列的远比我这里列出的多,非常值得一读。定下这些是很重要的,我觉得合理的游戏开发,是有一个相对稳定的策划方案,和一些已经完成完成的美术资源。大部分的变更都留在下一版本去做。策划和美术永远为下一个版本工作,而程序可以根据相对稳定的需求做设计。这样做,即使第一个版本是不可玩的,扔掉,也是能让游戏最终成功。

5.怎么写一个高质量子程序?

子程序代码长度最好控制在200行之内,如果超过200行,会在可读性方面遇到问题。

把宏表达式整个包含在括号内,比如:#define Cube(a) (a*a*a)

创建子程序最主要的目的是提高程序的可管理性,当然也有其他一些好的理由。其中,节省代码空间只是一个次要原因:提高可读性、可靠性和可修改性等原因都更重要一些。

子程序可以按照其内聚性分为很多类(功能内聚、顺序内聚、通讯内聚、临时内聚过程内聚、逻辑内聚、巧合内聚),而你应该让大多数子程序具有功能上的内聚性,这是最佳的一种内聚性。

子程序的名字是它的质量的指示器。如果名字槽糕但是恰如其分,那就说明这个子程序设计得很差劲。

转载于:https://www.cnblogs.com/bsdbch/p/4027935.html

个人阅读 代码大全的阅读与提问相关推荐

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

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

  2. Unix编程艺术和代码大全比较阅读

    最近在看Unix编程艺术,收获颇多,联想起以前看过的同样获益匪浅的代码大全,突然萌生出比较两者观点的想法,那就开始吧. Unix编程艺术:简称U. 代码大全:简称C. 1) 函数的长度 U ( 4.1 ...

  3. 《代码大全》阅读心得二

    在第三四部分中,主要探讨的是具体的编程开发实践过程中的注意事项,相比一二部分,这些更具体,具体到变量.如果一个编程新手看这边书,从这里入手应该是个不错的选择,因为它贴近实战,能给人最直接的感受.可惜的 ...

  4. 《代码大全》阅读笔记-26-代码调整技术

    核对表(代码调整方法) 同时改善代码执行速度和规模 用査询表替换复杂逻辑. 合并循环 使用整型变量而非浮点变量. 在编译时初始化数据. 使用正确的常量类型. 预先计算结果. 删除公共子表达式. 将关键 ...

  5. 《代码大全》阅读笔记02

    上一篇主要讲了软件构建 第二章 用隐喻来更充分的理解软件开发  我们平时把软件编码叫做写代码,让外行人听起来像是在写文章,就是把你心里的想法一点一点的有条理的写出来,在这一点上,编码和写文章确实有相似 ...

  6. 《代码大全》阅读笔记-18-表驱动法

    表驱动法是一种编程模式(scheme)--从表里面查找信息而不使用逻辑语句(if.case).事实上,凡是能通过逻辑语句来选择的事物,都可以通过查表来选择.在适当的情况下,采用表驱动法会比复杂的逻辑代 ...

  7. 《代码大全》阅读笔记-5-软件构建中的设计

    无论是以何种方式来进行设计,小型项目也能和大型项目一样从精心的设计之中获益,而如果能认识到设计是一项明确的活动,你就更会获益匪浅. 设计过程充满了不确定性,因此设计技术也趋于探索性质. 软件的首要技术 ...

  8. 转:Eric Lippert:阅读代码真的很难

    转自:http://blog.jobbole.com/438/ 相关文章 微软资深软件工程师:阅读代码真的很难(第2篇) 阅读优秀代码是提高开发人员修为的一种捷径 学会阅读源代码 如何阅读大型代码库? ...

  9. 微软资深软件工程师:阅读代码真的很难

    编者按:原文作者EricLippert是一名资深软件设计工程师,从1996年起一直在微软开发部门任职,协助设计并实现VBScript.JScript.JScript.NET.Windows Scrip ...

最新文章

  1. JAVA取数两个数组交集,考虑重复和不重复元素
  2. 有勇气的牛排---算法与数据
  3. mtk android lcm调试
  4. LeetCode 05最长回文子串
  5. python 字符串格式化%s_Python字符串格式化%s%d%f详解
  6. ElasticSearch搜索底层基础原理总结
  7. 书单丨把握Java技术发展的新趋势!
  8. python全栈开发中级班全程笔记(第三模块、第一章(多态、封装、反射、内置方法、元类、作业))...
  9. java获取连续日期天数
  10. C语言实现七夕表白爱心
  11. ZYNQ学习笔记PS部分【基本介绍】
  12. 给女朋友的微信专属推送
  13. 更改chrome主页_为什么我的Chrome主页更改了?
  14. 微信网页版二维码扫码过程发生了什么
  15. 通过瀑布流加深对js的理解
  16. c#中如何将一维数组转换为字符串
  17. autoit 将输入法修改为英文输入法,获取输入法的值【20190918亲测原创】
  18. 阿里云sls日志系统接入
  19. 记录一次服务器登录后提示邮件报错550
  20. mysql 获取农历年份_php下实现农历日历的代码

热门文章

  1. 如何定位和处理手机游戏内存泄露
  2. preg_match_all用法
  3. 手把手教你如何写简历
  4. oracle冷备份/恢复
  5. Spark 编程模型(上)
  6. C# VS本地Sqlserver 操作笔记
  7. ORACLE 外部表的简单使用
  8. 彻底弄懂jQuery事件原理一
  9. Freescale MC9S08AW60汇编学习笔记(五)
  10. Javascript知识——事件