软件构造知识点复习:数据类型+spec+ADT(上)

数据类型与类型检查

{/null\left\{ \begin{array}{c} 静态类型检查:语法错误(类名,函数名,参数的数目/类型,返回值) \\ 动态类型检查:非法参数,非法返回值,null,数组越界\end{array}\right.
{intlongbooleancharbyteshortfloatStringBigIntegar(IntegerBoolean)\left\{ \begin{array}{c} 基本数据类型:int,long,boolean,char,byte,short,float\\ 对象数据类型:String,BigIntegar,基本数据类型的包装(Integer,Boolean……)\end{array}\right.
软件构造知识点复习:数据类型+spec+ADT(上)
重载overload:操作名称一样,输入参数不同
{\left\{ \begin{array}{c} 静态类型语言:编译时检查 \\ 动态类型语言:运行时检查\end{array}\right.

immutable与mutable

{StringBuilderDateString\left\{ \begin{array}{c} 可变数据类型:StringBuilder,Date,数组 \\ 不可变数据类型:String,基本数据类型与它们的封装\end{array}\right.
不可变数据类型:

  1. 指向的空间所存的数据不可改变
  2. 关键字final:指向的地址不再改变
  3. 问题:垃圾回收

可变数据结构:
4. 防御使拷贝:return new
软件构造知识点复习:数据类型+spec+ADT(上)迭代器:Iterator
介绍:List,Set,Map
可变→不可变:Collections.unmodifiableList/Set/Map
注:只能看和读,可以改变封装之前的值改变它的值

spec

spec:
{\left\{ \begin{array}{c} 输入输出,数据类型 \\ 功能和正确性\\ 性能\end{array}\right.
行为等价:基于spec的,再某一soec条件下,效果一样
spec:
{percondition@parampostcondition@return@throws\left\{ \begin{array}{c} 前置条件:percondition(@param) \\ 后置条件:postcondition(@return,@throws)\end{array}\right.
fail fast
spec强度,强于S2>S1同时满足以下条件(其中一个相同):

  1. S2的前置条件更弱
  2. 在S1的前置条件下,S2的后置条件更强
    此时S2可以替代S1(用户喜欢强的,程序员喜欢弱的,强的图更小)

ADT

{(Creators)(Producers)(Observers)(Mutators)mutablevoid\left\{ \begin{array}{c} 构造器(Creators):从无到有\\ 生产器(Producers):根据旧的返回新的\\ 观察器(Observers):返回参数\\ 变值器(Mutators):只有mutable才有,唯一可以是void的,更改数据\end{array}\right.
表示独立性:内部的参数独立