软件构造之ADT(抽象数据类型)

一、总述

传统的数据类型仅仅关注数据的具体表示形式,而抽象数据类型关注的则是“作用于数据上的操作”,程序员和用户无需关心数据如何具体存储,只需要设计和使用操作即可。这一点和面向对象的编程思维也是紧密相连的。(抽象、模块化、封装、信息隐藏、关注点分离(模块具有单独的责任,不要将一个责任分散在不同的模块中))。

二、类型和操作的具体分析

在这里我们将抽象操作类型分为三类:
1.Creators(构造器):给入一个或多个别的类型的对象,生成一个此类对象。
具体例子可以参考 构造器 Person(int age,String name …) (一个与该类名称相同的函数,可以通过输入一个人的各类属性信息来创建Person类)
2.Producer(生产器):在已有对象基础上产生新的对象
具体实例可以参考 String.concat()
3.Observers(观察器):给定一个但前对象,返回其它类型
具体实例可以参考getter函数,获取某个类的特定属性
4.Mutators (变值器):改变对象的属性 (注:变值器通常返回void)
参考setter函数,在外部调用setter函数,可以设定对象的属性

下图是四种抽象类型的代数表示
下面是抽象类型操作的例子
可以自己对照右侧答案判断一下
下面是有关于抽象数据类型的例子:

  1. int是immutable 类型,所以没有变值器
    Creator: 0,1,2,
    Producer: +,-,
    Observers:==,!=,<,
  2. String 是immutable 类型,所以没有变值器
    Creator:String constructors
    Producer:concat,substring,
    Observers:length,charAt

表示独立性(representation Independence)

表示独立性:用户使用ADT时无需考虑其内部如何实现,ADT内部表示的变化不影响外部spec和客户端。
保证表示独立性的两条原则是:
1.所有属性前的修饰符必须用private。
2.所有方法的返回值不能是引用,必须做defensive copy。

举例:
一个类的属性声明为:private char[] a;
相对应的实现方法如下图:
在这里插入图片描述
测试:
测试方法间不可避免的会相互影响,测试时尽量把独立,不依赖其他操作的且被后面其他方法调用的方法放在前面测试。
且测试时应该用 creators,producers,mutators来产生或改变对象通过observers来观察改变是否正确。

表示不变性和抽象方法(Rep Invariant and Abstraction Function)

在这里插入图片描述
R:表示空间,实现时用到的值空间
A:抽象值空间,需要支持的值空间
AF : R --> A 满射、非单射、未必双射(一个从R空间映射到A空间的映射)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值