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

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

一.抽象数据类型

抽象数据类型是一种定义在操作上的数据类型。与以前的数据类型不同,ADT倾向于操作,而不是具体的存储逻辑。对于JAVA来说,就像LIST抽象接口,我们只需要存,取,索引操作,而对具体的链表还是数组很多情况我们不需要考虑。

二.ADT类型与操作分类

ADT设计中不可变类型与可变类型的决定,是很重要的设计原则。
可变类型要求提供改变数据值的方法(这个值请参考下文)。
不可变类型中不提供改变数据值得方法。
可变类型的好处将在下一篇分享。
而ADT中可以定义的操作也分为四种:
1.creator
一般有constructor,静态工厂方法。
是根据一些数据创建新对象。
2.producer
一般是根据已经有的对象创建新对象,和creator不同的是,它一定要根据已经有的对象创建。
例如clone方法,String con cat方法。
3.mutator
改变ADT值的方法.
可变对象允许修改A空间,
不可变对象不允许修改A空间,但允许修改修改R空间。
一般来说返回void 方法一定是mutator
4.observer
观察对象内部,返回一个值。

三.表示独立性(represention independence)

1.客户端不应该依赖具体的实现细节而应该依赖抽象
2.除非制定了条件,否则不应该更改ADT内部实现。没有条件时候,客户端不知道到底和你约定了什么。

四.ADT方法的测试

ADT方法的测试,是有依赖性的。
测试creator,producer,mutator,用observer来查看变化。
测试observer,用creator,producer,mutator变化后观察。

五.不变性(Invariant)

不变性是指在ADT的整个生命周期永真的属性。
在我看来,就是一个ADT不会违背的原则。

可变与不可变就是一个ADT的不变性。
不变性是由ADT维护的,维护不变性更有利于发现错误,进行调试。一个ADT维护了不变性就可以让客户端知道哪些地方是可以放心使用的。比如String的不可变,让客户端使用String的时候不用自己检查。

表示泄露:表示泄露是指外部的代码,可以修改ADT内部的rep。
表示泄露就违背的表示独立性,也让ADT的不变性受损。因为你不知道客户端会如何修改你的rep,就不知道ADT会不会违背你设计的不变性。
表示泄露的防止:
private让rep对外不可见。
final 让引用不可变。
确保不会返回任何可变对象的直接引用,可以防御拷贝。

六

总之这一切都是ADT整体上的东西,ADT就是一个由操作定义的黑盒子。这个黑盒子应该是独立的,外界应该是不知道我的具体实现的,而只有我能修改这个黑盒子。这也是我觉得这一章的核心——封装。
封装带来安全性,只有封装才能避免傻帽随意修改。而这一章都是围绕封装的。举个例子,ADT就是一个电视机,你永远不知道他怎么运作的,但你就是会用。而方法就是电视机的各个功能。这也是为什么ADT定义在方法上,电视机被称为电视机的原因就是因为他播放的功能。播放就是这个ADT的功能。

一些常见的数据结构ADT定义及相关数据运算 本代码中涉及的是一些常见基础的数据结构C语言结构体定义,及相关数据初始和运算,本代码的初衷是方便大家在练习考研编程题缩减不必要的时间,比如一系列的ADT初始化问题。这样大家就可以有较多时间花在思考算法而不是去花一些时间用在数据初始化上。 立即下载

相关推荐

奇异值分解(SVD)C++实现

奇异值分解SVD(紧奇异值分解,截断奇异值分解)C++实现

weixin_45804601的博客 4172

ADT的设计

简要介绍ADT的设计

qq_64219369的博客 340

PHP证书图片生成

$realname = "姓名"; $schoolname = "学校"; $idcard = "身份证号"; $image = imagecreatefrompng('certification.png'); // 证书模版图片文件的路径 $red = imagecolorallocate($image,00,00,00); // 字体颜色

4036

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

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

zhr_never_giveup的博客 585

windows局域网文件夹共享

windows局域网共享文件夹,亲测,包括可能出现的一些问题解决

yml15180824993的博客 4万+

从轻量化到高精度:3DXML 转 STP 的工程数据升级技术指南

本文详细解析了3DXML转STP格式的工程数据升级技术,对比了两种格式在轻量化和高精度方面的特性差异,并提供了CATIA、FreeCAD及Python编程等多种专业级转换方案。通过实际案例展示了如何确保转换过程中的数据精度,适用于CAD设计、精密制造等场景,帮助工程师实现工程数据的高效升级。

weixin_29201859的博客 215

设计一个ADT

ADT是对现实中事物的一种抽象,我对ADT的理解是他有两层,一个是数据层、另一个是操作层。换言之就是外界通过操作层的方法使用数据层的内容。就好比我要设计一个可以喝水的人的ADT,我需要设计一个嘴作为ADT的数据,然后在设计一个能够让嘴去喝水的方法。 我们从设计一个无向图的ADT来理解如何设计一个ADT。假设我们现在要设计一个无向图的ADT,他要能够实现创建、增删节点/边,打印图功能。 分析用户要求 通过分析用户要求,我们可以得到,我们设计了一款可变的ADT,需要有一个构造方法、增删节点/边的方法,打印图

weixin_43341566的博客 1015

Qt 【window udp 高频采集丢包问题】

使用Asio + 无锁队列或者环形缓存区方案可以解决 qt udp 在window平台高速采集 (128k)丢包问题。

weixin_45397344的博客 177

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

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

DodoJordi的博客 558

7、刚度矩阵与弹簧元素:有限元分析的核心

本文深入探讨了有限元分析中的核心概念——刚度矩阵与弹簧元素。详细介绍了刚度矩阵的定义、构建方法及其对称性、正定性和稀疏性等性质,同时解析了弹簧和阻尼器元素的特性及其在模拟复杂系统中的应用,如液压缸、减震器等。通过结合刚度矩阵与弹簧元素,可以提高结构模型的精度并模拟复杂的工程系统。文章还讨论了优化策略、验证流程、误差分析及实际应用案例,展示了这些技术在桥梁分析、汽车悬挂系统等领域的重要作用,并展望了其在未来新材料、智能结构和数字孪生技术中的发展潜力。

nice1的博客 236

超级详细的GNS3最新版3-2.2.50安装配置教程,网工速度收藏!

你好,这里是网络技术联盟站,我是瑞哥。上周给大家分享了GNS3安装包。周末的时候有小伙伴在安装的时候遇到了一些问题,瑞哥周末特地从头安装了一下GNS3,今天给大家出个安装的教程,每一步的步骤我都截图了下来,希望对大家有所帮助!

网络技术联盟站 1109

ADT设计的方法与原则总结

在 Java 中,ADT 设计遵循封装性、接口与实现分离、继承与多态、单一职责原则、依赖倒置原则、开放封闭原则、Liskov 替换原则、接口隔离原则和最小知识原则等原则和方法,同时也使用了各种设计模式来帮助实现更好的代码组织和管理。这些原则和方法可以帮助我们编写出更加简单、可维护、可重用和可扩展的代码,提高代码的质量和效率,是 Java 编程中不可或缺的一部分。在 Java 中,我们可以使用接口和抽象类来实现接口与实现的分离,接口定义了对象的公共行为,而实现则是具体类实现接口的方式。

m0_50110365的博客 518

图解目标检测 之 YOLO 算法 最全原理详解

YOLO 一.背景 YOLO(You Only Look Once: Unified, Real-Time Object Detection),是Joseph Redmon和Ali Farhadi等人于2015年提出的基于单个神经网络的目标检测系统。在2017年CVPR上,Joseph Redmon和Ali Farhadi又发表的YOLO 2,进一步提高了检测的精度和速度。 二.YOLO算法的网...

DFCED的博客 26万+

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

一.回顾 上一篇我们说了ADT定义,应该遵循的一些原则,表示独立性,不变性,防止表示泄露。这回我认为我们侧重于ADT设计的一些具体内容。 二.RI与AF 一个ADT是定义在一组操作上的数据类型,操作有了以后,我们要实现rep,而rep是具体的,功能是抽象的。我们需要解释如何把具体的rep映射成抽象的表示。 我们把具体的rep值空间称之为R空间,把抽象的值称为A空间。 比如说:我们要表示一个小写字母...

wangbichen的博客 330

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

软件构造第三章——ADT设计.方法规约

一.方法规约 程序写出来的目的1.给机器看,2.给人看。一个大型项目中一定有程序员的互相交流,而规约就是为了交流存在的。我们不可能考虑所有的情况,所以我们指定一些假设保证我们的程序正确运行需要的内容。我们需要做一些设计决策。为了交流这些东西,我们要书写规约。 规约是使用者与开发者之间的的契约,隔离了具体的细节,让客户端不了解具体实现也能正确调用方法。 二.为什么要写规约? 1.必要性:Bug来自与...

wangbichen的博客 402

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

软件构造第三章——ADT设计数据类型

一.数据类型 正如老师所说,编程比作写文章的时候,数据就是里面的名词。但我觉得这么比喻有点儿不充分,我觉得文章本身就是一种数据类型,尤其像JAVA面向对象来说,把数据,操作,代码绑定的十分紧密。在现实生活中很难找到一个概念与现在我们要探讨的数据相区分,不如说这个概念就是现实世界本身。 我们定义数据类型就是一组值和其上能进行的操作。 而变量就是空间,可存储满足约束的值。 JAVA类型包括基本类型和引...

wangbichen的博客 327

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

#软件构造 ADT与OOP的总结 (1)

在软件构造课程的第三章 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的博客 453

软件构造复习大纲第三章

qq_43412364的博客 144

软件构造第三章总结笔记

ABCstar_super的博客 373

软件构造复习(第三章)

软件构造复习(第三章)

qq_44746288的博客 259

软构第三章 (一)

weixin_43838400的博客 137

软件构造ADT总结

除了编程语言所提供的基本数据类型和对象数据类型,程序员可定义自己的数据类型。

Kzernb的博客 1107

软件构造-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

软件构造—ADT的理解

最近学习了ADT,即抽象数据类型,刚学的时候理解的不是很好,在完成lab2的过程中,我对ADT的构造以及作用有了一定的理解。(以下仅是我个人理解,很可能会有错误,请批评指正) 首先什么是ADT,它是计算机科学中具有类似行为的特定类别的数据结构的数学模型;或者具有类似语义的一种或多种程序设计语言的数据类型。抽象数据类型是间接定义的,通过其上的可执行的操作以及这些操作的效果的数学约束(与可能的代价)。抽象数据类型(ADT)是纯粹理论实体,用于简化描述抽象算法,分类与评价数据结构,形式描述程序设计语言的类型系统。

weixin_59437923的博客 2410

软件构造总结笔记

哈工大计算机学院2020春课程软件构造总结笔记

Zhuoning Guo's Blog 3115

软件构造第三章学习笔记及心得(三)抽象数据型ADT

软件构造这门课是比较具有挑战性,知识点多且琐碎的,因此,我将结合ppt和回放,对软件构造的知识点来进行整理,主要用于对于知识点的记忆和复习,如果能够对你有所帮助,那荣幸之至。 在这篇博客中,我将对第三章 3.3 这节的知识点来进行整理总结。 3.3 抽象数据型ADT 抽象数据型的本质是加了一定约束条件的类。用户在调用抽象数据型的时候,只能通过类提供的方法去使用这个类(类中所有的属性都是private类型)表示独立性指的是用户使用类的操作而不关心类中具体是怎么实现的。 3.3.1 抽象和用户定义类型 用户定义

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值