考点
第三章
3.1 类型检查
静态类型检查
动态类型检查
代码快照图
Immutability
3.2 Specification(规格说明)
防御式拷贝
行为等价性
前置条件 后置条件
规约的强度
3.3 Abstrate Data Type(ADT)
ADT 操作的四种类型
Representation Independence(表示独立性)(待完成,44页)
RA
AF:R->A
第五章 (可复用性的度量、形态与外部表现)
Programing for/with reuse
设计模式
白盒框架的原理与实现
黑盒框架的原理与实现
Liskov Substitution Principle (LSP)
type erasure 类型擦除
Delegation
第六章(可维护性的度量与构造原则)
雨课堂题目
可维护性
模块化编程
OO Design Principles: SOLID
设计模式
第七章
Unchecked exceptions
checked exceptions
第十章
交错
Race Condition
interleaving
考点
若干种设计模式
线程安全的策略
四种GC策略
多态:LSP原则,泛型,重载和重写。
第三章
考点图:
3.1 类型检查
静态类型检查
语法错误,类名 / 函数名错误 ,参数数目错误,参数类型错误 ,返回值类型错误
动态类型检查
非法的参数值 ,非法的返回值 ,越界 ,空指针。
代码快照图
描述程序运行时内存里变量层面的状态。
参考链接:https://www.cnblogs.com/zdj-/p/8494316.html
基本类型的值。原始值由常量表示。 传入箭头是对变量或对象字段中的值的引用。
对象类型的值。对象值是由其类型标记的圆圈。 我们在其中写入字段名称,箭头指向它们的值。字段可以包括其声明的类型。
不可变对象:用双线椭圆
可变对象:用一个椭圆
不可变的引用:用双线箭头(引用是不可变的,但指向的值却可以是可变的;可变的引用,也可指向不可变的值)
引用是不可变的,但指向的值却可以是可变的。例如:: final StringBuilder sb
可变的引用,也可指向不可变的值。例如:String s1 = new String(“abc”)。
Immutability
final类无法派生子类
final类无法改变值/引用
final方法无法被子类重写
| immutable |mutable |
|–|–|
| String| StringBuilder |
||List|
使用mutable类型的风险,前后打印出的结果相同。
groundhogAnswer与partyDate引用相同,更改了partyDate,groundhogAnswer也将随之更改。
3.2 Specification(规格说明)
防御式拷贝
通过防御式拷贝,给客户端返回一个全新的 Date 对象
安全的使用可变类型:局部变量,不会涉及共享;只有一个引用
行为等价性
判断两个函数实现是否可相互替换。站在客户端视角看行为等价性。
根据规约判断是否行为等价,如果两个函数符合这个规约则等价。
前置条件 后置条件
requires effects
在规范中,前置条件和后置条件的某些部分可以在@param和@return子句之外的其他位置找到,因此必须仔细阅读。
对于可变函数
除非在后置条件里声明过,否则方法内部不应该改变输入参数
避免使用可变的全局变量,但是为了性能原因,有时候却不得不用。这对程序的安全性造成了巨大破坏。
规约的强度
3.3 Abstrate Data Type(ADT)
可变类型的对象:提供了可改变其内部数据的值的操作。
不变数据类型: 其操作不改变内部值,而是构造新的对象。
ADT 操作的四种类型
构造器 Creators create new objects of the type.
创建该类型的新对象
生产器 Producers create new objects from old objects of the type.
从该类型的旧对象创建新对象
观察器 Observers take objects of the abstract type and return objects of a different type.
获取抽象类型的对象并返回不同类型的对象。
变值器 Mutators change objects.
改变对象
Representation Independence(表示独立性)(待完成,44页)
不变量
Defensive copying(在return和构造器中)
当复制代价很高时,可以增加spec
Rep Invariant
R相同,AF相同,RI可以不同
Abstraction Function
RA
ADT 开发者关注表示空间 R , client 关注抽象空间 A。
AF:R->A
第五章 (可复用性的度量、形态与外部表现)
Programing for/with reuse
White box reuse 白盒复用:源代码可见,可修改和扩展
Black box reuse 黑盒复用:源代码不可见,不能修改
delegation 委托
显式委派:将发送对象传递给接收对象
隐式委托:由语言的成员查找规则
(Framework)框架:可重复使用的框架代码,可以自定义到应用程序中。一组具体类、抽象类、及其之间的连接关系。
设计模式
Adapter
shape是目标对象
Rectangle是适配器
LegacyRectangle是被适配对象
Decorator
Display类是抽象类,被装饰物与装饰物的抽象父类,这样保持了两者之间的一致性。
StringDisplay类是被装饰者类,具体类
Border类是装饰物的抽象类
(deligation是声明了在class类中使用了被委托的类型的变量,并调用该类型变量的方法,而继承没有)
参考链接:https://blog.youkuaiyun.com/zoinsung_lee/article/details/82771581
factory method 设计模式
抽象工厂类:工厂的抽象类实现
具体工厂类:一个工厂生产一类产品
abstract factory(产品族)
抽象工厂类:工厂的抽象类实现
抽象产品类:产品的抽象类实现
具体产品类:
具体工厂类:一个工厂创建多个不同类型的产品。具体产品与具体工厂之间通过deligation联系。
builder 设计模式
Builder:抽象建造类,用于规范产品的各个组成部分,并进行抽象。
ConcreteBuilder:具体建造类,实现抽象类中的所有方法并返回一个产品实例。
Product:builder要返回的多个产品类
Director:安排一有模块的顺序,并且告诉builder开始建造
Iterator
Iterator(迭代器接口):该接口必须定义实现迭代功能的最小定义方法集,比如提供hasNext()和next()方法。
ConcreteIterator(迭代器实现类): 比如BookShelfIterator,迭代器接口Iterator的实现类。可以根据具体情况加以实现。
Aggregate(容器接口):定义基本功能以及提供类似Iterator iterator()的方法。
ConcreteAggregate(容器实现类): 比如BookShelf,容器接口的实现类。必须实现Iterator iterator()方法。
参考链接:https://blog.youkuaiyun.com/xw13106209/article/details/6912873
Strategy
AthContext:外部环境类,实现create()方法
Strategy类:抽象类,策略实现接口
ConcreteStrategy类:具体类
state 和 memento 设计模式
Facade(外观模式)
(电脑)
参考链接:https://blog.youkuaiyun.com/bifuguo/article/details/81432774
visitor设计模式
Visitor类:存放要访问的对象
Myvisitor类:针对不同子类型的subject类,分别实行visitor操作
Subject类:accept()方法,与特定的visitor子类联系起来,允许其对自己的数据进行操作。
observer模式
Subject:被观察者的抽象类,定义增加和删除观察者对象的操作。声明了获取当前状态的方法,如果MySubject发生变化,会通知所有需要监控的对象。
MySubject:如果MySubject发生变化,会通知所有需要监控的对象。
Observer:观察者的抽象类。声明了update方法,负责接收来自Subject角色的状态变化通知。
Observer1:依赖于MySubject的对象,表示具体的Observer,当update执行后会获取观察对象的最新的状态
Observer2:依赖于MySubject的对象,表示具体的Observer,当update执行后会获取观察对象的最新的状态
//proxy、bridge、composite,template、mediator 等设计模式
Flyweight设计模式
Prototype 设计模式
用 Singleton 和 Object Pool 设计模式
(canonicalization 的思想)
白盒框架的原理与实现
通过继承和动态绑定实现的可扩展性
template method pattern
黑盒框架的原理与实现
通过为可以插入框架的组件定义接口来实现可扩展性
通过定义符合特定接口的组件来重用现有功能
这些组件通过委派与框架集成
Liskov Substitution Principle (LSP)
子类型可以增加方法,但不可删
子类型需要实现抽象类型中的所有未实现的方法
子类型中重写的方法不能抛出额外的异常
子类型中重写的方法必须有相同或子类型的返回值类型或者符合co-variance的参数
子类型中重写的方法必须有相同的参数类型或者符合co-variance的参数
更强的不变量
更弱的前置条件
更强的后置条件
前置条件越弱,后置条件越强,spec强度越强。
type erasure 类型擦除
Delegation
关联 依赖 聚合 组合