第四章
1. 代码可理解性/可读性
(1)度量可理解的指标:名称长度、名称唯一性比率、复杂性、代码行数、注释密度、嵌套层数
(2)可读性:人类读者可以轻松理解源代码的目的,控制流程和操作
(3)代码可读性强的例子:
Example A:z = ((3*x^2) + (4*x) - 5) - (( 2*y^2) - (7*y) + 11) / ((3*x^2) + (4*x) - 5)
Example B:a = (3*x^2) + (4*x) - 5; b = ( 2*y^2) - (7*y) + 11; z = (a - b) / a
B的代码可读性强于A
2. 编码规范:名称符合约定和语义、复杂性低、代码行数少、适当添加必要注释、嵌套层数少
第五章
1. 面向/基于复用编程:
(1)为什么复用:成本有效性和及时性、可生成可靠的软件、标准化
(2)面向复用编程(for):开发可重用组件
(3)基于复用编程(with):用可重用组件进行开发
(4)可重用性高的表现:简单、可移植性和兼容性好、灵活、可扩展、通用和参数化、模块化、稳定、将变化限制在局部
2. LSP:子类必须能够替换基类,具有较弱的前置条件和较强的后置条件,尽量从抽象类而非具体类继承
3. 数组的子类型化:代码重用,如List -> ArrayList
4. 泛型的子类型化:类的重用,如L -> Vertex
5. 泛型中的通配符?:可指代满足某种要求的一切类型,如List<? extends Vertex>
6. 委托(Delegation):一个对象依赖另一个对象来实现其功能的某个子集
(1)支持代码重用,被视为实体间代码和数据共享的低水平机制
(2)显式委托:将发送对象传递给接收对象
(3)隐式委托:由成员查找语言的规则
(4)类型
·使用:一个对象调用另一个对象的方法,如Schedule -> Course
·组合:强拥有关系,如Hand -> Person
·聚合:弱拥有关系,如Student -> Class、Teacher -> Class
·关联:一个对象需要知道另一个对象,如Student <-> Exam
7. 比较器
(1)Comparator:外部比较器,需要实现compare()方法,对外部传入的两个类进行比较,从而让外部方法在比较时调用
(2)Comparable:内部比较器,需要实现compareTo()方法,传入一个外部参数进行比对
8. 白盒框架的原理与实现
·可直接修改代码
·通过继承和动态绑定实现可扩展性,通过继承框架基类并重写预定义的钩子方法来扩展现有功能
·钩子方法:对于抽象方法或者接口中定义的方法的一个空实现,允许需要时通过继承,override将具体实现挂载上
9. 黑盒框架的原理与实现
·无法访问代码,只能改变组合方式
·通过为可插入框架的组件定义接口来实现可扩展性,通过定义符合特定接口的组件来重用现有功能,这些组件通过委托与框架集成
10. 设计模式
(1)结构模式
·事件适配器(Adapter)
- 允许具有不兼容接口的类通过将自己的接口包装到已有类的接口中而一起工作
- 继承适配器等于继承了一个空的监听器接口,只需重写自己需要实现的即可
·Decorator:动态地添加/覆盖对象的现有方法中的行为,如:noodle + egg
·Façade:定义一个更高层的接口,为大量代码提供简化的界面
(2)行为模式
·Strategy:允许在运行时即时选择一个算法族中的一个
·Template:将算法的骨架定义为抽象类,允许其子类提供具体的行为
·迭代器(iterator)
- 依次访问对象的元素而不暴露其底层表示
- iterable:一个集合对象要表明自己支持迭代,必须为foreach语句提供一个迭代器,这个迭代器是用Iterable接口定义的 iterator方法提供的
来源:oschina
链接:https://my.oschina.net/u/4359607/blog/3940574