1.Abstraction Function and Rep Invariant
rep value: 数据是如何被真正实现的;现实世界存在的实体
abstract value:数据被要求代表的含义;虚拟又抽象
AF:从rep value到abstract value是如何被映射的
即实际的数据结构是怎么抽象成ADT被要求实现的类型的
RI:那些AF定义的rep value;或者说确保rep value属于AF的条件是什么
checkRep:检查RI是否为真,即确立条件是否成立
(默认对象和数组不能为空,即不在RI中进行说明,但要求在checkRep中实现检查非空)
2.override and overload
override:参数列表和返回值不能改变
决定是父类还是子类调用时是运行时检查,看是哪个类的实例调用了该方法
overload:参数列表必须改变
决定调用是编译器静态检查,观察参数列表确定调用者
3.Polymorphism
Ad hoc:overload
Parametric:泛型编程
Subtype:接口>抽象类>具体类
靠继承和实现来实现同一个名字多个功能 注意LSP原则
3.observational equality and behavioral equality
observational equality:调用creator, producer,observer方法都不能区分出两个对象的区别
即两个指向是否在程序运行的现阶段看起来一样
behavioral equality:即使调用mutator方法也不能区分区别
即两个指向在未来也一模一样 //来日可期
4.equals and "=="
equals:内容相等,即两个事物的内容是否一致
自反性:x.equals(x)返回真
传递性:如果x.equals(y)和y.equals(z)返回真,那么x.equals(z)也返回真
对称性:x.equals(y)和y.equals(x)返回值相同
==:引用相等,即两个事物是否指向同一块内存
5.equals and hashCode
1.object类中的equals和hashCode方法:
equals: 判断是否指向内存中同一个地方
2.对于不可变类型必须重写equals和hashCode
equal:比较两个抽象数据,提供行为等价性
hashCode:将抽象值映射到一个整数
3.对于可变类型不应重写equals和hashCode
为了提供行为等价性