软件构造第三章——ADT的设计细节

软件构造的理论基础ADT 软件构造中的ADT(Abstract Data Type,抽象数据类型)是一种理论基础,它提供了一种组织和操作数据的方式,使得数据的实现细节与其使用者分离开来。ADT 可以被看作是一种数据的抽象,它定义了数据的逻辑结构和操作,而不涉及具体的实现细节。总结来说,ADT 是软件构造的重要理论基础,通过将数据和操作抽象为一个整体,提供了模块化、可维护、可重用、灵活和安全的设计方式。安全性:ADT 提供了一定的数据访问控制,通过定义接口的访问权限,可以控制对数据的访问方式和范围,从而提高数据的安全性。 阅读详情

一.回顾

上一篇我们说了ADT定义,应该遵循的一些原则,表示独立性,不变性,防止表示泄露。这回我认为我们侧重于ADT设计的一些具体内容。

二.RI与AF

一个ADT是定义在一组操作上的数据类型,操作有了以后,我们要实现rep,而rep是具体的,功能是抽象的。我们需要解释如何把具体的rep映射成抽象的表示。
我们把具体的rep值空间称之为R空间,把抽象的值称为A空间。
比如说:我们要表示一个小写字母的集合,a.我们可以用LIST,R空间就定义在LIST上了,b.我们也可以用一个数组,R空间就定义在数组上了。
A空间就是字母的集合。
而AF(abstraction function)就是R到A的映射,比如定义a.,我说所有出现在LIST的字母都在字母集合里AF:LIST->{s| LIST.contains(s)}
而我也可以定义AF:LIST->{s| LIST.contains(s)==false}
在这两个定义下,同样的“abcde” 在a.下就是"abcde",而在b.下就是除了“abcde”以外的小写字母。

AF不是一一映射:存在不是映射的值
AF是满映射:每个A都应该有一个R值对应。
AF不是单映射:不同的R对应同一个值比如上面的.a,R为“abc”与“aabc”表示的是一样的。

而RI(Represention Invariant)就是规定哪些值可以被映射,是R的一个合法子集,比如我们规定在LIST中每个字符只能出现一次,那么上文提到的“aabc”就是非法的。
RI也是我们上次说的不变性的一种
RI与AF是ADT中必须设计的值,不同的RI相同的AF,或不同的AF相同的RI所能表示的ADT都是不同的。

三.保持不变性

不变性是我们要求的ADT必须永远为真的属性,除了不可变,这次的RI也是一种不变性。
我们在代码中应该时刻用checkRep()方法断言RI。
checkRep()方法检查RI,调用mutator,creator,producer必须用,而observer建议使用。
在所有方法check代表更好抓住BUG

不变性的建立如下
1.creator,producer建立不变性
2.mutator,observer维护不变性
3.checkRep检查不变性
4.没有表示泄露

四.RI与AF记录与有益可变性

现在我们可以说不可变对象的不可变是指A空间不可变,而如果R空间改变A空间不变我们认为也是可以的。
但这并不意味可以随意出现mutator在不可变类型中。

RI与AF都是设计者的默契,这些应该写在注释中而不是javadoc文档中。
注释写明:field为什么有效(RI),如何解读field(AF),给出表示泄露的防范。

五.

现在已经了解了如何设计一款ADT中除了数据类型与方法应该考虑的内容。
ADT里的东西分为两种,能拿出去的和不能拿出去的,拿出去的是抽象,拿不出去的是具体。拿出去的可以写在javadoc里,拿不出去的就写在注释里。

我们大致总结一下ADT设计流程
1.分析需求写spec
2.选定represention
3.实现
而RI,AF都属于represention的内容。

树的ADT设计(C语言实现) C语言实现树的各种操作,虽然是dos界面,不过也可以参考参考把。 立即下载

相关推荐

USRP N210与MATLAB连接实战:从驱动安装到信号接收

本文详细介绍了USRP N210与MATLAB连接的完整流程,涵盖驱动安装、网络配置、支持包安装及信号接收实战。重点解决了安装过程中的常见错误和硬件连接问题,并通过MATLAB代码示例展示了如何配置接收器、处理信号数据,帮助用户快速实现从设备对接到信号分析的全过程。

blue的专栏 821

HIT软件构造——抽象数据类型(ADT):设计稳健的数据结构

ADT是一种数学模型,定义了数据类型的抽象行为,包括数据的表示和操作。通过ADT,程序员可以将数据结构视为一个整体,而不必关心内部实现细节。这种抽象性使得程序更易于理解、维护和扩展。

zhr_never_giveup的博客 585

《计算机网络》课程大作业- 《小区局域网的设计和规划》

8.1首先,在满足用户需求方面,通过详细的需求分析,充分考虑了居民和物业管理的不同业务需求。对于居民,无论是日常的高清视频播放、在线游戏、远程办公还是智能家居设备的连接,网络都能提供稳定的高速带宽支持。从有线网络的千兆以太网技术保障稳定的有线连接,到无线网络采用 Wi - Fi 6 技术确保无线覆盖区域的高速和低延迟,满足了居民多样化的娱乐和生活需求。对于物业管理,安防监控系统的实时数据传输、物业办公自动化系统的流畅运行以及社区信息的及时发布等业务,都有针对性的网络设计。

lisangsimida的博客 2600

软件构造学习笔记(4)-- 习题课ADT的设计

这些笔记概括了文件中提到的主要概念和步骤,可以作为学习和复习的参考。此输出显示停车场“A1”有5个车位,其中60%被占用。

DodoJordi的博客 558

Vue3项目实战:CKEditor5富文本编辑器从安装到隐藏不需要的功能

本文详细介绍了在Vue3项目中集成并深度定制CKEditor5富文本编辑器的完整流程。通过分析其模块化架构,指导开发者从标准构建出发,移除图片、表格等冗余插件,创建专属轻量构建,从而显著减小打包体积并提升用户体验。文章结合实战代码,涵盖了环境搭建、自定义构建配置、高级优化技巧等关键步骤。

weixin_29016833的博客 286

季节性注意力的时间序列预测模型 SAITS 进行数据补齐 完整代码数据

季节性注意力的时间序列预测模型 SAITS 进行数据补齐 完整代码数据

1072

ADT的设计原则

定义数据类型时,只描述其操作行为,不涉及具体实现。抽象出数据类型的核心功能,使得使用者无需了解实现细节即可使用。

m0_75087395的博客 522

强化学习优化多目标冲突推理的决策过程设计

1. 背景介绍 强化学习(Reinforcement Learning,RL)作为机器学习的一个重要分支,近年来在计算机科学和人工智能领域取得了显著的进展。其核心思想是通过试错来学习最优策略,从而在复杂的环境中实现目标。然而,在多目标冲突推理(Multi-Objective Conflict Reasoning,MOCR)问题上,强化学习面临着诸多挑

AI天才研究院 1514

ADT设计

ADT设计的相关基础性预备内容

weixin_60144550的博客 429

【OAG vs RAG】OAG工程实战(下):权限治理与多模型协同

本文摘要(149字): OAG工程体系的核心挑战在于权限治理与多模型协同。文章深入探讨OMA(对象管理权限)系统,实现细粒度访问控制:通过对象级权限管理行级安全,属性级权限控制敏感字段脱敏,确保AI Agent权限不越界。系统采用三层次防护:对象策略控制记录可见性,属性策略处理字段级脱敏,动作策略限制操作范围。权限验证贯穿Agent执行全流程,结合多模型交叉验证机制,构建企业级AI安全防线。这些设计使OAG系统从技术演示升级为生产可用的企业解决方案。

求知若渴、虚心若愚 105

【WRF模拟】土地利用类型的确定:最大覆盖法/瓦片法

土地利用类型的确定:最大覆盖法/瓦片法

WW、forever的博客 1529

软件构造-Java中ADT的设计

文章目录前言一、ADT是什么?二、ADT分类三、ADT操作的分类3.1 Creator3.2 Producer3.3 Observer3.4 Mutator四、ADT的设计4.1 表示独立性 Representation Independence4.2 表示不变性 Representation Invariants4.3 抽象函数 Abstraction Function总结 前言 ADT,即抽象数据型,在计算机科学中有重要的意义。抽象数据型不关心数据如何存储和实现,强调作用于数据的操作。ADT又有如下特

1119

RFC-only 与 SAProuter 场景下,让 Claude 真正参与 SAP ABAP 开发

SAP ABAP 开发这几年正在出现一个很有意思的变化。过去我们说开发工具,脑子里大多是 SE80、SE38、SE24、SEGW、Eclipse ADT,再往后是 BAS、VS Code、abapGit、ATC、CI/CD。现在又多了一层,Claude Code、Claude Desktop 这类 AI 编程助手开始通过 MCP 进入开发现场,不只是写一段示例代码,而是能读系统里的 ABAP 对象、搜索包、改源码、跑检查、辅助重构。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1620

软件构造第三章——ADT的设计综述

一.抽象数据类型 抽象数据类型是一种定义在操作上的数据类型。与以前的数据类型不同,ADT倾向于操作,而不是具体的存储逻辑。对于JAVA来说,就像LIST抽象接口,我们只需要存,取,索引操作,而对具体的链表还是数组很多情况我们不需要考虑。 二.ADT类型与操作分类 ADT设计中不可变类型与可变类型的决定,是很重要的设计原则。 可变类型要求提供改变数据值的方法(这个值请参考下文)。 不可变类型中不提供...

wangbichen的博客 430

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

#软件构造 ADT与OOP的总结 (3) 抽象数据类型 (ADT)

在软件构造课程的第三章 Abstract Data Type (ADT) and Object Oriented Programming (OOP) 中主要分为五个子章节 3-1 Data Type and Type Checking 数据类型与类型检验 3-2 DesigningSpecification 设计规约 3-3 Abstract Data Type (ADT) 抽象数据类型 3-4...

Franklins_Fan的博客 640

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

软件构造ADT

Abstract data type Abstraction and User-Defined Types 数据抽象:有一组操作所刻画的数据类型 抽象类型:强调作用在数据上的操作,程序员和client无需关心数据如何具体存储,只需设计使用操作即可 Classifying Types and Operations 可变和不可变数据类型 可变mutable:提供了可改变其内部数据的值的操作 不可变immutable:其操作不改变内部值,而是构造新的对象 构造器可能是构造函数或..

qq_48420781的博客 300

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

软件构造难点1——ADT

明天就要期末考试了,今年才刚刚复习完老师的讲义,感觉软件构造这一块的内容还是非常多的 下面废话不多说,先说一下难点一——ADT 一、定义: 抽象数据类型(Abstract Data Type,ADT)是将数据对象、数据对象之间的关系和数据对象的基本操作封装在一起的一种表达方式,它和工程中的应用是一致的 抽象数据类型可以用以下的三元组来表示: ADT抽象数据类型名{ 数据对象:<数据对象的定义> 数据关系:<数据关系的定义> 基本操作:<基本操作...

qq_53240735的博客 325

HIT软件构造期末复习第三章ADT+OOP 3.3

3.3抽象数据类型(ADT) 所有的数据都是private类型 ADT特性: (用户看不见AF、RI) 表示泄露 抽象函数AF 表示不变量RI 数据抽象:由一组操作刻画的数据类型 ※表示独立性

weixin_43705798的博客 527

关于软件构造ADT的设计

Abstract Data Type抽象数据类型的定义(Abstract Data Type,ADT)ADT的特性:ADT的表示方法:设计ADTADT的特性的细节 抽象数据类型的定义(Abstract Data Type,ADT) 抽象数据类型( ADT,Abstract Data Type)是指一个数学模型以及定义在此数学模型上的一组操作。它通常是对数据的某种抽象,定义了数据的取值范围及其结构形式,以及对数据操作的集合。(抽象出来得到的数据 + 对数据的操作) ADT的特性: 表示泄漏(represent

qwewuqinga的博客 464

软件构造——规约和ADT复习总结

行为等价性 为了确定行为等价性,问题是我们是否可以用一个实现替代另一个实现(是否可相互替代)

qq_50810293的博客 1237

软件构造第三章3

第3章:抽象数据类型(ADT)和面向对象编程(OOP)3.3抽象数据类型(ADT) 3.3抽象数据类型(ADT) 大纲 1.抽象和用户定义的类型2. ADT中的操作分类3.抽象数据类型示例4. ADT的设计原则5.表示独立性(RI)6。在Java中实现ADT概念7.测试ADT 3.3抽象数据类型(ADT) 大纲 1.不变量2. Rep不变量和抽象函数3.有益突变4.记录AF,RI和Rep暴露的安全...

t03010的博客 620

软件构造课程阶段总结(五):ADT

除了编程语言所提供的基本数据类型和对象数据类型,程序员可定义自己的数据类型。数据抽象:由一组操作所刻画的数据类型。

sy3031273517的博客 1081

软件构造3.3 ADT

3.3 ADT1、抽象数据类型与表示独立性:如何设计良好的抽象数据结构,通过封装来避免客户端获取数据的内部表示(即“表示泄露”),避免潜在 的bug——在client和imp;2、 ADT的特性:不变量、表示泄漏、抽象函数AF、表示不变量RI;3、抽象类型:强调“作用于数据上的操作”,程序员和client无需关心数据如何具体存储的,只需设计/使用操作即可。ADT是由操作定义的,与其内部如何实现无...

Hit_yja的博客 463

软件构造课程心得——抽象数据类型(ADT)

抽象数据类型(ADT)将数据和操作放在了一起,将数据的抽象表示和内部实现分离开来,使数据保存更加安全,也使程序开发的效率得到提高。这篇文章主要结合软件构造课和自己学习的感悟来谈谈自己对抽象数据类型的理解。

weixin_44341587的博客 516

软件构造复习第三章3.3

软件构造第三章3.3抽象数据类型(ADT)数据抽象分类类型和操作设计一个抽象类型表示独立性(representation independence)RI测试ADT不变量(invariants)RI和AFbeneficent mutation (有益突变)记录AF,RI,safety from rep exposureADT不变量替换前置条件summary 抽象数据类型(ADT) 避免客户端获取数据的内部表示 (表示泄露) 特征 不变量 表示泄露 抽象函数AF 表示不变量RI 关键 抽象 模块化 封

weixin_44089811的博客 660

【软件构造】ADT

什么是抽象 抽象数据类型是软件工程中一般原理的一个实例,它有许多名称,其意义略有不同: 抽象。用更简单,更高层次的概念来省略或隐藏底层细节。 模块化。将系统划分为组件或模块,每个组件可以与系统的其他部分分开设计,实施,测试,推理和重复使用。 封装。围绕模块构建墙壁(硬壳或胶囊),使模块对其自身的内部行为负责,并且系统其他部分的错误不会损害其完整性。 信息隐藏。从系统的其他部分隐藏模块实现的细节,以便稍后可以更改这些细节,而无需更改系统的其余部分。 用户定义类型 在软件开发方面一个重大的进展就是抽象数据类

qq_46022974的博客 154
上一篇: 软件构造第三章——ADT的设计综述
下一篇: 软件构造第三章——ADT设计数据类型
入过栈你
博客等级 码龄7年 2粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值