面向对象之子程序的设计及防御编程_代码大全笔记(三)
2012-12-24 13:15
246 查看
创建子程序的正当理由
降低复杂度;
引入中间,易懂的抽象(一堆的if,switch等,肯定不如一个GeName()来的易懂);
避免代码重复;
支持子类化(类派生)
隐藏顺序(处理顺序执行事情的代码,可以封装到子程序中)
隐藏指针操作(指针的可读性差,且容易出错)
提高可移植性
简化复杂的布尔判断(复杂的bool判断放入函数中,利用具有概括性的名字代替可提高可读性)
改善性能(代码集中在一处,方便优化,方便使用)
创建类的很多理由也是创建子程序的理由(见二章节的内容)
1、在实现函数时,可能需要考虑的一些问题
函数的名字,能否做到“望文知义”?子程序是否需要注释?
子程序的布局是否一致?
子程序的参数个数,const,&的使用是否合理正确?
子程序的功能是否单一(内聚性强)?
子程序是否有防范错误输入?
其他-这些问题问完,函数也该完美了吧
2、内聚性的层次
功能的内聚性:最好也是最强的内聚性,即让子程序仅执行一项操作顺序上的内聚性:指在子程序中包含需要按特定顺序执行的操作
通信上的内聚性:即子程序的不同操作使用了相同的数据,但不存在其他任何联系(如某个函数先利用传入的数据汇总显示,再将数据初始化。可以分成两个子程序)
临时的内聚性:指一些需要同时执行的操作放到一个子程序中。如StartUp()中放了一大堆不相关的代码等
3、不可取的内聚性
过程上的内聚性:指一个子程序的操作是按照特定的顺序进行的逻辑上的内聚性:若干操作被放入一个子程序,通过传入的标志选择其中一项操作(Envent Handler是特例)
巧合的内聚性:子程序中各操作没有任何关联,也称为无内聚性或混乱的内聚性
4、断言
建立自己的断言机制用错误处理代码处理预期发生的状况,用断言处理绝不会发生的状况
避免把要执行的代码放入断言中
用断言注解并验证前条件和后条件
高健壮性的代码,应该先使用断言再处理错误
5、错误处理技术
返回中立值:返回一个没有危害的值如0,空串等返回下一个正确的数据:如读数据库时发现一条记录损坏,可以继续读下去
返回与前次相同的值
换用最接近的合法值
把警告信息记录到日志文件
返回错误码
调用错误处理子程序或对象
当错误发生时,显示出错消息
用最妥当的方式在局部处理错误
关闭程序
具体用何种方式,视具体情况而定。
6、异常
审慎明智地适用,可以降低复杂度,草率粗心,只会让代码无法理解一些建议:
用异常通知程序的其他部分,发生了不可忽略的错误:异常的优越之处在于它能提供无法被忽略的错误通知机制。
只在真正例外的情况抛出异常:即其他编码实践无法解决的情况下才使用异常。
不能用异常推卸责任:若错误能在局部处理,则处理之。
避免在构造函数和析构函数中抛出异常,除非在同一地方把它们捕获
在恰当的抽象层次抛出异常:如不要把更底层的异常抛给调用方。
在异常消息中加入异常发生的全部信息
避免使用空的catch语句:有时你可能试图敷衍一个不知如何处理的异常,请不要这样做,若确实有需要,请说明原因
了解所用函数库可能抛出的异常
考虑创建一个集中的异常报告机制
把项目中对异常的使用标准化
考虑异常的替换方案
相关文章推荐
- 面向对象之类的设计_代码大全笔记(二)
- JAVA进阶 面向对象程序设计——第5周 设计原则(耦合和聚合,代码结构设计,程序维护拓展发展)
- 面向对象之数据抽象_代码大全笔记(一)
- 设计模式之禅笔记--面向对象设计六大原则之一
- Boolan C++面向对象高级编程(下)第四周笔记
- python学习笔记(七) - 面向对象高级编程
- Geekband C++面向对象高级编程(下) 第二周笔记 暗影行者
- 【Python】学习笔记——-8.3、面向对象高级编程:3.多重继承
- Javascript高级程序设计第二版第六章--面向对象程序设计(Object-Oriented Programming)简称OOP编程--笔记
- Python3.X之面向对象高级编程笔记
- C++面向对象高级编程笔记03--GeekBand
- 面向对象设计模式纵横谈:Bridge 桥接模式(笔记记录)
- Javascript高级程序设计第二版第六章--面向对象程序设计(Object-Oriented Programming)简称OOP编程--笔记
- C#面向对象设计模式学习笔记(7) - Bridge 桥接模式(结构型模式)
- Python笔记(2):多参数,全局变量与局部变量,层状作用域,函数式编程,面向对象
- JavaScript个人笔记:面向对象设计二(继承)
- Design Patterns - Elements of Reusable Object-Oriented Software 设计模式-可复用的面向对象软件元素。【笔记】
- C#面向对象设计模式学习笔记(1) - Singleton 单件模式(创建型模式)
- 消除switch/case语句,不破坏代码的封闭性,使程序结构更符合面向对象思想(一)
- 设计模式C++学习笔记之二十(完结篇 & 面向对象原则)设计模式C++实例下载