TraceLife

真正的幸福,在于对平淡生活的热爱……

导航

数据抽象(Data Abstraction)

Posted on 2010-08-11 20:39  hallo  阅读(2516)  评论(0编辑  收藏  举报
All problems in computer science can be solved by another level of indirection. 
                                                              -- Butler Lampson

数据抽象

数据抽象隐藏了所描述对象的内部特征,对于外部环境而言是透明的。而外部环境只有通过使用该对象所提供的操作来表现对象的动态特征。


以复数运算的实现过程为例,说明数据抽象的方法。

复数有两种表示形式

● 笛卡尔积

● 极坐标

两种表示在进行复数的算术运算方面各有优缺点,举例以笛卡尔积形式表示的复数易于进行[加法][减法]运算,[乘法][除法]运算则比较复杂。而极坐标表示的复数对于[乘法][除法]的运算处理非常容易。

如果不使用数据抽象的方式来编写代码,则需要分别实现笛卡尔积版本的算术运算操作,以及极坐标版本的算术运算操作。

而[复数逻辑表示层]的引入,使得算术运算的实现不必考虑复数的表示形式。

数据抽象过程

  复数运算程序中,复数有可能用笛卡尔积或极坐标来表示,那么就可以将这个变动的因素提取出来组成复数存储表示层,这层仅仅感受到下层数据结构体的成员变量[x]&[y]或[r][θ]。对于结构体的改变,只需要修改这一层的实现,并向上层提供一致不变的函数接口,那么调用本层的复数运算层也不需要改变。在复数运算层的范围内,所看到的数据只是一个[抽象的“复数”]概念,仅仅知道它有“[x]&[y]或[r][θ]”,而可以调用复数存储表示层的函数来获取这些坐标。对于更上一层的掉用来看,调用者仅仅只需了解它操作的是一个数,并与其他的数相同,提供了对应的算术运算操作,以至于甚至不需要知道它是如何表示的。

  下图给出了具体的抽象过程。

抽象过程说明