软件构造3.3抽象数据类型笔记

Chapter3:抽象数据类型(ADT)和面向对象的编程(OOP)

3.3Abstract Data Type(ADT)抽象数据类型

1.用户自己定义的类型(User-defined Types)

  • 数据抽象:由一组操作所刻画的数据类型。
  • 传统的类型定义:关注数据具体表示。

ADT是由操作定义的,与其内部如何实现无关。

2.不同的数据类型和操作(operations)

不同的数据类型:

  1. 可变类型的对象:提供了可改变其内部数据的值的操作。
  2. 不可变数据类型:操作不可改变内部值,而是构造新的对象。
  3. 一些类型提供两种形式:如String,StringBuilder。

不同的操作:

  1. 构造器(Creators):从无到有(new)
  2. 生产器(Producers):从旧到新(如concat)
  3. 观察器(Observers):输出某些特性(如size(),boolean)
  4. 变值器(Mutators):改变对象属性(如add())

3.抽象数据类型的例子

List是java中一种可变的数据类型。(Mutable)

例子:判断一些操作。

  • Integer.valueOf()       Creator
  • BigInteger.mod()       Producer
  • List.addAll()         Mutator
  • String.toUpperCase()     Producer
  • Set.contains()        Observer
  • Map.keySet()        Observer
  • Collections.unmodifiableList()  Producer
  • BufferedReader.readLine()   Mutator

4.抽象数据类型的设计

  1. 设计简洁,一致的操作。
  2. 满足client需求,操作难度要低。
  3. 要么抽象,要么具体。
  • 面向具体应用的类型不应包含通用方法。
  • 面向通用的类型不应包含面向具体应用的方法。

5.表示独立性(Representation Independence)

表示独立性: client使用ADT时无需考虑其内部如何实现,ADT内部表示的变化不应影响外部spec和客户端。

6.不变量(Invariants)

防止表示泄露(representation exposure)的方法:

  1. public->private
  2. final
  3. return new DataType() (防御式拷贝Defensive copying)

7.表示不变性和抽象函数(Rep Invariant and Abstraction Function)

表示空间和抽象空间:
在这里插入图片描述
R(表示空间)表示值构成的空间:实现者看到和使用的值。
A(抽象空间)抽象值构成的空间:client看到和实用的值。

ADT开发者关注表示空间R,client关注抽象空间A。

R->A集合的关系:

  1. 满射(A中所有值必须被表示)
  2. 不一定单射(R中可能有未用的值)
  3. 不一定双射

抽象函数: R和A之间映射关系的函数,即如何将R中的每个值解释为A中的每一个值。
AF : R -> A
在这里插入图片描述
R中可能存在不合法值。

RI : 判断某个具体的"表示"是否是“合法的”。
RI :R -> Boolean

  1. 同样的表示空间R,可以有不同的RI。
  2. 同样的R,同样的RI,可能有不同的AF,即“解释不同”。

问题:
在这里插入图片描述
答案:134

Que:What about developer?
Ans:All.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值