1、可变数据类型与不可变数据类型
不可变数据类型(immutable)是指一旦通过构造函数创建出来之后就不再对内部的成员变量改变(包括值和引用)的数据类,其余的则是可变数据类型(mutable)。
常见的不可变数据类型有:所有的基本类型及其包装类、String。
常见的可变的数据类型有:集合类(Set、Map、List等)、数组、StringBuilder、Date。
2、设计ADT:一个类的方法可以分为以下几类
1)constructor 构造器:构造函数。
2)productor 生产器:从旧的对象构造新的对象。
3)observer 观察器:观察内部值的方法,一个不可变数据类型的观察器不能暴露内部值的改变方法,如返回一个可变类型的引用(应该使用防御式拷贝的方法去消除,或者返回一个不可变的数据类型)。
4)mutator 变值器:改变内部值方法,仅限可变的数据类型(mutable)
3、测试ADT:RI、AF、checkRep
抽象函数AF:Abstraction function
表示不变性RI:Representation Invariant
两个空间
A集合:抽象空间,客户端可见的、使用的 如:String s = "123"
R集合:开发者空间,开发者使用的,如:char s[4]={'1','2','3'}
AF: R->A:满射、未必单射、未必双射(双射=单射&&满射),把开发者定义的表示形式转换为用户表示的形式
RI: R->{T,F}:什么是合法的r,判断开发者使用的数据结构有没有错误
例如,一个描述有理数的class,有分子分母两个属性,RI要求最简形式,那checkRep就是需要化简,每次对属性变更后都需要check一下。
什么时候加checkRep()?
Creater\producer\mutator结束的时候,observer如果复杂也可以加。
使用assert断言,如果不对则直接结束程序。
本文探讨了不可变数据类型的特点,如String和基本类型,以及可变类型如集合和StringBuilder。介绍了如何设计ADT,区分构造器、生产者、观察者和变值器,并强调了在可变类型中检查数据表示的不变性(RI)。此外,文章提到在适当场景下添加`checkRep`函数以确保数据一致性。
1079

被折叠的 条评论
为什么被折叠?



