软件构造知识点复习:ADT(下)+OOP+等价性

ADT

{specRepresentationImplementation\left\{ \begin{array}{c} spec:注释,类名 \\ Representation:具体的存储数据,成员变量 \\ Implementation:方法实现体\end{array}\right.
不变量(Invariants):任何时刻变量都要符合的要求
表示泄露→用private,final
接口(interface):只定义方法与spec

RI与AF

软件构造知识点复习:ADT(下)+OOP+等价性
AF(Abstraction Function):映射:R(表示空间)→A(抽象空间)

  1. 满射
  2. 不一定单射
  3. R中的非法值没有映射

RI:映射:R→boolean(R中的表示是否合法)
Rep invartiant:条件
注释:RI+AF+Safety from rep exposure

OOP

接口与类

一个接口可以有多个实现类,一个类可以实现多个接口
静态工厂方法:软件构造知识点复习:ADT(下)+OOP+等价性default方法:在接口中写实现体
接口中不能声明实现体:ArrayList × —— List √
{extendsimplementsextends\left\{ \begin{array}{c} 扩展:接口 extends 接口 \\ 实现:类 implements 接口 \\ 继承:子类 extends 父类\end{array}\right.
父类中没有用final修饰的可以重写:@overide;复用:super()
抽象类(abstract class):至少一种方法是抽象的,没有被实现的

多态

{(overload)publicclass<E><?>List<?extends>\left\{ \begin{array}{c} 重载(overload):同一个函数名,参数一定不同,返回值可以不同 \\ 泛型:public class<E>;也可以用<?>: List<? extends 接口>\\ 子类型多态:继承树,处理顶层即可\end{array}\right.
软件构造知识点复习:ADT(下)+OOP+等价性Object:equals,hashCode,toString

等价性

等价性:是基于AF的,要求的方法返回值相同
{(==)(ID)(equals)\left\{ \begin{array}{c} 引用等价性(==):对基本类型 (对对象类型比较的是ID)\\ 对象等价性(equals):对对象类型\end{array}\right.
{equals()nullnullhashCode()hashCode()hashCode\left\{ \begin{array}{c} equals():比较等价性,不能对数据修改,与null比较返回null,与hashCode()成对出现\\ hashCode():查询的时候用,相同的hashCode一样即可,不一样的也可以相同\end{array}\right.
equals()=true → hashCode()相同,反之则不行
{observerobserver+muator\left\{ \begin{array}{c} 观察等价性:observer的值相同\\ 行为等价性:observer+muator都一样\end{array}\right.
{observerobserver+muator\left\{ \begin{array}{c} 观察等价性:observer的值相同\\ 行为等价性:observer+muator都一样\end{array}\right.
{immutableequals+hashCodemutable\left\{ \begin{array}{c} immutable:一定要重写equals+hashCode\\ mutable:不是必须的\end{array}\right.