深入理解Java的基本概念:ADT&OOP的概念具体实现(1)

本文探讨了不可变数据类型的特点,如String和基本类型,以及可变类型如集合和StringBuilder。介绍了如何设计ADT,区分构造器、生产者、观察者和变值器,并强调了在可变类型中检查数据表示的不变性(RI)。此外,文章提到在适当场景下添加`checkRep`函数以确保数据一致性。

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断言,如果不对则直接结束程序。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值