3.3抽象数据类型(ADT)


ADT的特性:表示泄露、抽象函数AF、表示不变量AF;
基于数学的特性对ADT的这些特性进行描述并应用于设计中;

1.Abstract and User-Defined Types

抽象对规约意味着什么?
抽象;模块化;封装;信息隐藏;关注点分散(Separation of concerns);

传统的数据类型,关注数据的具体表达;
抽象类型:强调“作用于数据上的操作”,程序员和用户无需关心数据如何具体存储,只需设计/使用操作即可;

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

2.Classifying Types and Operations

Mutable and immutable types

类型可分为可变和不可变数据类型;
可变类型的对象,提供了可改变其内部数据的值的操作;
不变数据类型,其操作不改变内部值,而是构造新的对象;

Classifying the operations of an abstract type

  • Creators (构造器):建立该类型+新的对象;
  • Producers (生产器):从已经存在的该类型的基础上,生成新的类型,例如String中的concat()方法;
  • Observers(观察器):获取抽象类型的对象,返回一个不同类型的对象;例如:List中的size()方法;
  • Mutators (变值器):改变对象属性的方法;例如:List中的add()方法;

举个栗子:
在这里插入图片描述

构造器的标志

构造器:可能实现为构造函数或静态方法;
一个构造器实现为静态方法为工厂方法;

变值器的标志

变值器通常返回void;如果返回值为void,则必然意味着它改变了对象的某些内部状态;
变值器也可能返回非空类型;

3.抽象数据类型例子

对于不可变的数据类型没有mutators;
注意:BufferReader.readLine()是Mutator;
Integer.valueOf()是Creator(将int包装为Integer);

4.Designing an Abstract Type

“经验法则”:

  • 设计简洁、一致的操作
  • 要足以支持client对数据所做的所有操作需要,且用操作满足client需要的难度要低;
  • 要么抽象,要么具体,不要混合;

Representation Independence(表示独立性)

表示独立性:client使用ADT时,无需考虑其内部如何实现。ADT内部表示的变化不应影响外部spec和客户端。
除非ADT的操作指明了具体的pre-和post-condition,否则不能改变ADT的内部表示 -- spec规定了client和implementer之间的契约
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值