软件构造——ADT

抽象数据类型(ADT)

一些名词

抽象:忽略底层细节而在高层思考。
信息隐藏:将模块的实现细节隐藏,使未来更改模块内部时不必改变外部代码。

类型和操作的分类

对于类型(不管是内置的还是用户自定义的)都可以被分为mutable和immutable两种类型,mutable类型的对象能够被改变,它们提供了改变对象内容的操作。String是immutable的,StringBuilder是mutable的。

抽象类型的操作符可被分成四类:

  • creator:创建一个该类型的新对象。一个创建者可能会接受一个对象作为参数,但是这个对象的类型不能是它创建对象对应的类型。一个creator通常是由构造函数实现的(例如new ArrayList(),但是有的构造体是静态方法(类方法),例如 Arrays.asList(),String.valueOf()和List.of()等 ,这样的静态方法也称为factory method。)

  • producer:通过接受同类型的对象创建新的对象。例如, String类里面的 concat 方法就是一个producer,它接受两个字符串然后据此产生一个新的字符串。

  • observer:接受一个同类型的对象然后返回一个不同类型的对象/值。例如List的 size 方法,它返回一个 int。

  • mutator:改变对象的内容。例如 List的 add 方法,它会在列表中添加一个元素。


我们可以将这种区别用映射表示:

抽象数据类型的例子

int 是Java中的原始整数类型,它是不可变类型,没有mutator。
creators: 字面量 0, 1, 2, …
producers: 算术符 +, -, *, /
observers: 比较符号 ==, !=, <, >
mutators: 无

List 是Java中的列表类型,它是可更改类型。另外,List也是一个接口,所以对于它的实现可以有很多类,例如 ArrayList 和 LinkedList.
creators: ArrayList 和 LinkedList 构造函数
producers: Collections.unmodifiableList
observers: size, get
mutators: add, remove, addAll, Collections.sort

String 是Java中的字符串类型,它是不可变类型。
creators: String 构造函数, valueOf 静态方法(工厂方法)
producers: concat, substring, toUpperCase
observers: length, charAt
mutators: 无


Integer.valueOf()——creator(将基本类型int转换为包装类型Integer,或者将String转换成Integer)

BigInteger.mod()——producer

List.addAll()——mutator

String.toUpperCase()——producer

Set.contains()——observer

Map.keySet()——observer

BufferedReader.readLine()——mutator(读入操作会修改内部指针指向,所以是mutator)

对于复杂的数据类型,有些操作可能既是producer也是mutator。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值