前置条件和后置条件
前置条件满足后置条件必须满足
除非在后置条件里声明过,否则方法内部不应该改变输入参数
不限定太强的precondition,而是在postcondition中抛出异常
规约越强对程序员要求更高
正则表达式
主要注意转义字符,只要与正则本身固有的字符冲突都应该转义
\d \s \w \D \S \W
Snapshot diagram
单箭头指向基本类型或指向对象
双箭头表示引用不可变
双线椭圆表示对象不可变
LSP规则
子类对象的返回值要跟具体,参数范围可以扩大,throw更具体。
前置条件不能强化,后置条件不能弱化, 不变量要保持。
接口
接口可以用Static 和 Default 修饰,不能用private 和 final 修饰
注意接口定义不能有implement
Adapter Pattern
这个设计模式解决接口不兼容问题,使用别人的代码但结构不同
可以创建adapter类,在类中创建别人代码的实例
本质上是将某个功能的实现委托给别的类
Decorator
装饰模式,理解为实现一个装饰接口,其中实现接口的类传入实例
对实例进行装饰的操作,感觉上装饰完结果是递归执行的。
Composition和Aggregation
composition 类似肉体与灵魂的关系,同时存在,同时灭亡
aggregation 比联系还要更弱,从外部传入对象实例
黑盒测试
等价类划分对称、自反、传递
等价类依据spec划分,要注意考虑边界情况
测试时每个函数都要测试到
设计模式分析
Factory Method 调用者利用工厂函数返回所需实例
Adapter Pattern 面临实现新功能时,可以可用委托维护一个其他类的实例对象
Decorator 感觉就是每调用一次装饰函数就套上一层,传入的对象实例一直不变
Strategy 整体的替换算法,定义接口类,使用时传入算法实例
Template Method 父类定义通用逻辑,子类给出步骤实现
visitor 外部对ADT的操作,其中内部开放accept 外部实现visit
里氏替换原则
子类型可以增加方法,但不可删
更强的不变量、更弱的前置条件、更强的后置条件