例如,除非你把实现细节隐藏在一个ADT中,否则当你需要把字体类型从粗体的第一种表示变成第二种表示时,就不可避免地要更改程序中所有设置粗体字体的语句,而不能仅在一处进行修改 。把信息隐藏起来能保护程序的其余部分不受影响 。
即使你想把在内存里存储的数据改为在外存里存储,或者你想把所有操作字体的子程序用另一种语言重写,也都不会影响程序的其余部分 。改动不会影响到整个程序 如果想让字体更丰富,而且能支持更多操作(例如变成小型大写字母、变成上标、添加删除线等)时,你只需在程序的一处进行修改即可 。
这一改动也不会影响到程序的其余部分 。让接口能提供更多信息 像currentFont.size = 16这样的语句是不够明确的,因为此处16的单位既可能是像素也可能是磅 。
语句所处的上下文环境并不能告诉你到底是哪一种单位 。把所有相似的操作都集中到一个ADT里,就可以让你基于磅数或像素数来定义整个接口,或者把二者明确地区分开,从而有助于避免混淆 。
更容易提高性能 如果你想提高操作字体时的性能,就可以重新编写出一些更好的子程序,而不用来回修改整个程序 。让程序的正确性更显而易见 验证像currentFont.attribute = current-Font.attribute or 0x02这样的语句是否正确是很枯燥的,你可以替换成像currentFont.SetBoldOn()这样的语句,验证它是否正确就 。
5.线性表的抽象数据类型怎样描述线形表的抽象数据定义
ADT List{
数据对象:D={ai|ai∈ElemSet,i=1,2,……,n,n≥0}
数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,……,n}
基本操作:
InitList(&L)
操作结果:构造一个空的线性表L 。
DestroyList(&L)
初始条件:线性表L已存在 。
操作结果:销毁线性表L 。
ClearList(&L)
初始条件:线性表L已存在 。
操作结果:将L重置为空表 。
ListEmpty(L)
初始条件:线性表L已存在 。
操作结果:若L为空表,则返回TRUE,否则返回FALSE 。
ListLength(L)
初始条件:线性表L已存在 。
操作结果:返回L中数据元素个数 。
GetElem(L,i,&e)
初始条件:线性表L已存在,1≤i≤ListLength(L) 。
操作结果:用e返回L中第i数据个元素的值 。
LocateElem(L,e,compare())
初始条件:线性表L已存在,compare( )是数据元素判定函数 。
操作结果:返回L中第1个与e满足关系compare(
)的数据元素的位序 。若这样的数据元素不存在,则返回值为0 。
PriorElem(L,cur_e,&pre_e)
初始条件:线性表L已存在 。
操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败,pre_e无定义
NextElem(L,cur_e,&next_e)
初始条件:线性表L已存在 。
操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,否则操作失败,next_e无定义 。
ListInsert(&L,i,e)
初始条件:线性表L已存在,1≤i≤ListLength(L)+1 。
操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 。
ListDelete(&L,i,&e)
初始条件:线性表L已存在且非空,1≤i≤ListLength(L) 。
操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1 。
ListTraverse(L,visit())
初始条件:线性表L已存在 。
操作结果:依次对L的每个数据元素调用函数visit() 。一旦visit()失败,则操作失败 。
}ADT List
6.抽象数据类型类的基础:抽象数据类型 抽象数据类型(ADT, abstract data type)是指一些数据以及对这些数据所进行的操作的集合 。
- 关于迅龙数据恢复软件免费版的介绍 迅龙数据恢复软件免费版
- 魔兽世界数据 魔兽世界数据库3.35
- 线性表头文件怎么写
- 许可证类型怎么写
- dnf技能类型扩展卷 dnf技能类型2是什么意思
- raid5数据恢复方法 raid5数据恢复教程
- 烽火战国英雄技能 烽火战国英雄数据
- 潍柴怎么写数据
- 苹果数据线只能充电 苹果数据线只能充电吗
- 50岁男人喜欢的女人是什么类型?