浅谈抽象数据结构(ADT)

抽象数据类型(Abstract Data Type,ADT)是计算机科学中具有类似行为的特定类别的数据结构的数学模型;或者具有类似语义的一种或多种程序设计语言的数据类型。抽象数据类型是描述数据结构的一种理论工具,其目的是使人们能够独立于程序的实现细节来理解数据结构的特性。抽象数据类型的定义取决于它的一组逻辑特性,而与计算机内部如何表示无关。

抽象数据类型与表示独立性:
能够分离程序中数据结构的形式和对其使用的方式,如何设计良好的抽象数据结构,通过封装来避免客户端获取数据的内部表示(即“表示泄露”),避免潜在的bug—— 在client 和implementer 之间建立“防火墙”。
而ADT也具有一定的特性:ADT 的特性:不变量、表示泄漏、抽象函数AF 、表示不变量RI

表示空间R:实现者看到和使用的值。

抽象空间A:client看到和使用的值。

抽象函数AF:R和A之间映射关系的函数,即如何将R中的每一个值解释为A中的每一个值。
注意,AF必定是一个满射,但不一定是单射。

表示不变性RI:所有表示值的一个子集,包含了所有合法的表示值。也可以将其看作一个条件,描述了什么是“合法”的表示值。

注意:
同样的表示空间R,可以有不同的RI。

Abstraction and User-Defined Types 用户自己设计数据类型
除了编程语言所提供的基本数据类型和对象数据类型,程序员可定义
自己的数据类型。
以数据抽象为例:数据抽象:由一组操作所刻画的数据类型。
– A number is something you can add and multiply;
数字就是可以用于加法和乘法操作的对象。
– A string is something you can concatenate and take substrings of;
字符串就是可以用于连接和截取的对象。
程序员在定义自己的数据类型的时候只关心设计、操作:抽象类型:强调“作用于数据上的操作”,程序员和client无需关心数据如何具体存储的,只需设计/使用操作即可。

抽象类型操作的分类
      构造器:创建该类的新对象。creator : t* → T

      生产器:从该类型的旧对象中创建新对象。producer : T+, t*→T

      观察器:获取抽象类型的对象,并返回不同类型的对象。observer : T+, t*→t

      变值器:改变对象属性的方法。mutator : T+, t*→void | t | T

其中T是抽象数据类型本身,t是别的类型,+表示该类型可能在签名的该部分中出现一次或多次,*表示它发生了零次或更多次,|表示或。
 

不变量:程序在任何时候总是true的性质。

为什么需要不变量:保持程序的“正确性”,容易发现错误。

表示泄露: 不仅影响不变量,也影响了表示独立性:无法在不影响客户
端的情况下改变其内部表示。

防止表示泄露:

例如:
1.确保不会返回任何可变对象的直接引用,可以防御拷贝。


2.使用关键字private让rep对外不可见。

   


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值