搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
盐析白兔
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
WebApi返回类型设置为json的三种方法
2
李宏毅机器学习--self-supervised:BERT、GPT、Auto-encoder_autoregressive模型 和 self-supervised
3
35款优秀的 SpringBoot/SpringCloud 开源项目,开发脚手架,总有一款适合你!
4
Flutter入门-Flutter配置_flutter支持的最低安卓版本
5
推荐一本Vue开发的书籍_vue书籍
6
【网络奇遇记】计算机网络三大交换方式:电路交换、分组交换和报文交换_电路交换网络和分组交换网络
7
大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置_idea sprk
8
hive 列转行—collect_set()/collect_list()/concat_ws()函数的使用场景_collect set函数用法
9
GitHub 各种开源项目_github项目推荐
10
java 8 的流库api 使用详解_streamsupport.stream(graphquery.vertexids().splite
当前位置:
article
> 正文
哈工大2022软件构造4-ADT知识笔记_adt实现者关注表示空间r,用户关注抽象空间a 例如,假设我们选择使用一个字符串来表
作者:盐析白兔 | 2024-05-18 11:13:08
赞
踩
adt实现者关注表示空间r,用户关注抽象空间a 例如,假设我们选择使用一个字符串来表
【ADT的基本概念】
抽象数据类型(Abstract Data Type,ADT)是是指一个数学模型以及定义在该模型上的一组操作;即包括数据数据元素,数据关系以及相关的操作。
ADT具有以下几个能表达抽象思想的词:
抽象化:用更简单、更高级的思想省略或隐藏低级细节。
模块化: 将系统划分为组件或模块,每个组件可以设计,实施,测试,推理和重用,与系统其余部分分开使用。
封装:围绕模块构建墙,以便模块负责自身的内部行为,并且系统其他部分的错误不会损坏其完整性。
信息隐藏: 从系统其余部分隐藏模块实现的细节,以便稍后可以更改这些细节,而无需更改系统的其他部分。
关注点分离: 一个功能只是单个模块的责任,而不跨越多个模块。
与传统类型定义的差别:
传统的类型定义:关注数据的具体表示。
抽象类型:强调“作用于数据上的操作”,程序员和client无需关心数据如何具体存储的,只需设计/使用操作即可。
ADT
是由操作定义的,与其内部如何实现无关!
可变与不可变类型
可变类型的对象:提供了可改变其内部数据的值的操作。Date
不变数据类型: 其操作不改变内部值,而是构造新的对象。String
四种类型
Creators(构造器):
创建某个类型的新对象,⼀个创建者可能会接受⼀个对象作为参数,但是这个对象的类型不能是它创建对象对应的类型。可能实现为构造函数或静态函数。(通常称为工厂方法)
t* -> T
eg:Integer.valueOf( )
Producers(生产器):
通过接受同类型的对象创建新的对象。
T+ , t* -> T
eg:String.concat( )
Observers(观察器):
获取抽象类型的对象然后返回一个不同类型的对象/值。
T+ , t* -> t
eg:List.size( ) ;
Mutators(变值器):
改变对象属性的方法 ,
变值器通常返回void,若为void,则必然意味着它改变了对象的某些内部状态;当然,也可能返回非空类型
T+ , t* -> t || T || void
eg:List.add( )
ADT设计原则
原则 1:设计简洁、一致的操作。
最好有一些简单的操作,它们可以以强大的方式组合,而不是很多复杂的操作。
每个操作应该有明确的目的,并且应该有一致的行为而不是一连串的特殊情况。
原则 2:要足以支持用户对数据所做的所有操作需要,且用操作满足用户需要的难度要低。
提供get()操作以获得list内部数据
提供size()操作获取list的长度
原则 3:要么抽象、要么具体,不要混合 —— 要么针对抽象设计,要么针对具体应用的设计。
抽象函数AF与表示不变量RI
在研究抽象类型的时候,先思考一下两个值域之间的关系:
表示域(rep values)里面
包含的是值具体的实现实体
。一般情况下ADT的表示比较简单,有些时候需要复杂表示。
抽象域(A)里面包含的则是类型设计时支持使用的值。
这些值是由表示域“抽象/想象”出来的,也是使用者关注的。
ADT实现者关注表示空间R,用户关注抽象空间A 。
R->A的映射特点:
每一个抽象值都是由表示值映射而来
,即满射:每个抽象值被映射到一些rep值
一些抽象值是被多个表示值映射而来的,
即未必单射:一些抽象值被映射到多个rep值
不是所有的表示值都能映射到抽象域中,
即未必双射:并非所有的rep值都被映射。
用注释写AF和RI
在抽象类型(私有的)表示声明后写上对于抽象函数和表示不变量的注解,这是一个好的实践要求。我们在上面的例子中也是这么做的。
在描述抽象函数和表示不变量的时候,注意要清晰明确:
对于RI(表示不变量),仅仅宽泛的说什么区域是合法的并不够,你还应该说明是什么使得它合法/不合法。
对于AF(抽象函数)来说,仅仅宽泛的说抽象域表示了什么并不够。抽象函数的作用是规定合法的表示值会如何被解释到抽象域。作为一个函数,我们应该清晰的知道从一个输入到一个输入是怎么对应的。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/盐析白兔/article/detail/588029
推荐阅读
article
python
环境变量
设置_
import
'
不是
内部或
外部命令
,也
不是
可
运行
的程序 或批处理文件。...
默认情况下,在windows下安装
python
之后,系统并不会自动添加相应的
环境变量
。此时不能在命令行直接使用pytho...
赞
踩
article
如何
进行
自学
软件测试
?_
软件测试
如何
自学
...
一、新手学习
软件测试
的流程:1、开始
自学
的时候先看视频,看的差不多了就找一本书来入门(
软件测试
原版第三版很不错),差不多...
赞
踩
article
[
开源
]
企业
协同
任务
管理系统
,主流
管理工具
,一应俱全,开箱即用_
开源
企业
信息部 运维
协同
管理系统
...
文章末尾给你赠送一套私域电商系统源码_
开源
企业
信息部 运维
协同
管理系统
开源
企业
信息部 运维
协同
管理系统
...
赞
踩
article
更智能的广告
素材
生成
!看
A
/B
测试
如何驱动
A
IGC
素材
调优...
ChatGPT 等
A
I 产品引发的
A
IGC
大爆发引起了各行业的震动,其中以图片
生成
甚至视频
生成
技术的效果和速度最为...
赞
踩
article
统计学习方法
第五章
决策树
C4.5
算法
代码实践_头歌本关任务
:
编写一个利用
c4.5
决策树
进行分类
的
程序...
统计学习方法
第五章
决策树
C4.5
算法
代码实践(其实相对于ID3
算法
只是寻找最优划分属性
的
标准发生了改变,ID3为信息增益...
赞
踩
article
跨模态
检索
:基于
OpenAI
的
Clip
预训练
模型
构建
以文搜图系统...
本项目基于
OpenAI
的
Clip
预训练
模型
及milvus向量数据库两个关键技术,
构建
了以文搜图的跨模态
检索
系统;经过Cl...
赞
踩
article
flask
之
Blueprint
_
flask
blueprint...
flask
之
Blueprint
_
flask
blueprint
flask
blueprint ...
赞
踩
article
python
之
蓝图
blueprint
浅析_
python
blueprint
...
目录背景一、
python
中的
蓝图
二、创建
蓝图
三、
蓝图
的运行机制四、
蓝图
的url前缀五、注册
蓝图
中的静态文件的相关路由六、...
赞
踩
article
大
模型
应用
开发
技巧
与实战...
利用prompt构建专属聊天机器人_大
模型
应用
开发
技巧
与实战大
模型
应用
开发
技巧
与实战 ...
赞
踩
article
ClickHouse
在
日志
存储与分析方面作为
ElasticSearch
和
MySQL
的替代方...
2018年,我写过一篇关于Clickhouse的文章,这段内容在互联网上仍然很流行,甚至被多次翻译。现在已经过去两年多,...
赞
踩
article
GPT
-4冲击下
,
知识
图谱
的
现在
与
未来...
AIGC
,
Chat
GPT
以及今天发布
的
GPT
-4相信已经给大家带来足够
的
冲击
,
那么对于
知识
图谱
的
应用产生哪些变化和变革?...
赞
踩
article
大话
C语言
:第
15
篇
运算符
优先级
...
分析下面代码执行过程。分析下面代码执行过程。大话
C语言
:第
15
篇
运算符
优先级
运算符
名称[ ]...
赞
踩
article
如何在
Ubuntu
12.10
上使用
Python
创建
Nagios
插件
...
Python
是一种在 Linux 上默认可用的流行命令处理器。我们之前已经介绍过如何在
Ubuntu
12.10
x6...
赞
踩
article
flask
mysql
慢
,
flask
链接
mysql
数据库
小坑...
#config.pyMYSQL_NAME= ‘root‘MYSQL_PASSWORD= ‘zyms90bdcs‘MYSQ...
赞
踩
article
uniapp
安卓保活
插件
Ba-
KeepAlive
...
Ba-
KeepAlive
是一款android原生保活
插件
,支持市面上大部分机型,Android4.4到Android1...
赞
踩
article
合同
在
项目管理
中
的
优势_在
项目管理
方面,你认为
自己
的
优势
是
什么?...
项目管理
侧重于特定
的
业务操作,这些业务操作有明确
的
结束日期,通常有
自己
的
预算和收入流。因为这些项目
是
临时
的
,而且通常
是
独...
赞
踩
article
node
-
expand
_
使用
dotenv
-
expand
掌握
Node
.js上的
环境变量
...
node
-
expand
介绍 (Introduction)As developers, we found ourselv...
赞
踩
article
比较
好用
的
浏览器
_四款
截图
软件
和一款
浏览器
插件
...
Alice幸福
的
一家谁需要它Windows系统用户,本文推荐四款
截图
软件
ShareX,PicPick,Ashampoo ...
赞
踩
article
初识
C++
(
上
)——“
C++
”...
初识
C++
初识
C++
(
上
)——“
C++
” 各位CSDN的uu们你们好呀,小雅兰的全新专栏又来啦...
赞
踩
article
防劝退!
数据结构
和
算法
难
理解
?
可视化
动画
带你轻松透彻
理解
!_
数据结构
与
算法
看不懂
...
大家好,我是 Rocky0429,一个连
数据结构
和
算法
都不会的蒟蒻…学过
数据结构
和
算法
的都知道这玩意儿不好学,没学过的经...
赞
踩
相关标签
python
sns
path
脚本
文档
thread
程序人生
测试工具
可用性测试
测试面试
软件测试
开源
微信小程序
开发语言
开源软件
小程序
AIGC
ab测试
AI
ML
多模态检索
深度学习
向量数据库
以文搜图
零次学习