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

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

一.方法规约

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

二.为什么要写规约?

1.必要性:Bug来自与双方的误解,不把一些设计决策写下来,双方的理解不同
2.重要性:区分责任,隔离细节,了解spec即可工作。

三.行为等价性

两个方法能否互相替代?是个常见的问题,这时候就要行为等价性来判断。
行为等价性:是针对spec来说的,单纯代码无法判定行为等价性。

四.规约的结构

1.require:前置条件对客户端约束
2.effect: 后置条件对开发者的约束
前置条件满足后置条件必须满足,前置未定义,后置可以做任何事情。

五.JAVA规约

首先明确规约并不只是注释,而函数声明也属于规约
1.静态方法声明属于规约,给编译器的规范。里面包含了返回值与参数类型,函数名。
2.注释属于规约,给人看的。

一个JAVA规约
/***
* @param
* @return
* @throws
*/
public xxx xxxx(xxxxxxx)

@param描述前置条件,@return @throws描述后置条件

书写规约千万不能提及内部表示,局部变量,私有变量。而且注释中的规约没有必要提及代码规约已经提及过的东西,返回值,参数类型。
并且有一些要求也必须在规约中,除非规约提到,否则不能修改参数。

六.可变类型让规约变得复杂

可变类型中,多个变量有引用别名。所以导致我们的程序有很多行为需要考虑。
iterator 迭代器就是一个例子,在迭代的过程中,因为集合类可变。如果将集合类中使用本身的remove删除某个对象,就会导致未定义行为,iterator指向就会不确定。
并且要避免使用可变全局。
但在spec中要求开发者或使用者不修改数据的要求是不靠谱的,这是责任推卸,应该多用不可变类型。

七.规约设计

规约属性汇总:
1.陈述性 说清楚情况吗?
2.确定性:一个输入有多种可能合法输出吗?
3.强度:规约合法输入多还是少

规约的强度:
S1>=S2
要求S1的前置条件更弱。
S1后置条件在前置条件相同的情况下更强。
则S1允许替换S2。

若S1前置强于S2,后置弱于S2,S2>=S1
若S1前置弱于S2,后置弱于S2,或无关,S1与S2不兼容。

规约越强:前置越弱,客户端责任越弱,后置越强:开发者责任越强。
越强的规约实现方法越少。

【Unity的HDRP渲染管线下实现好用的GUI模糊和外描边流光效果_Blur_OutLine_案例分享(内附源码)】 因为没有用到纹理,但介于是UI层,没有MainTeX的时候,会提示报错,所以这里加上了MainTex,最后不在片段着色渲染出来既可。这样UI层级显示正常了,但旋转后的模糊效果,跟背景拼接不上,有很大的偏移。猜测是屏幕UV采样错误导致,只要找到屏幕UV数值,更正过来就可以了,RenderTexture设置一下Size既可,其他的先不管。没有贴图,用Shader实现外描边流光效果。将主相机拖入Render Camera。新建一个RenderTexture。 阅读详情

相关推荐

IBM 3560M3 R5 坏盘更换记录

公司一台老旧 3650M3在日常巡查过程中发现硬盘报错

ddriv的博客 3945

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

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

zhr_never_giveup的博客 585

CXL3.0 CDAT(Coherent Device Attributes Table)

在说明CDAT之前,先讲一下CXL中的DOE类型:CXL协议里定义了两种DOE的类型,一种是Compliance就是合规性测试的内容,还有一种就是CDAT(一致性属性表)Memory_Info_Valid是CXL设备的内存配置完成标志,位于DVSEC(Designated Vendor-Specific Extended Capability)的CXL Range X Size Low寄存器中(X为1或2)。

Summer的博客 1437

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

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

DodoJordi的博客 558

win10下面安装MTK USB VCOM 驱动

win10下面安装MTK USB VCOM 驱动1.概述2.驱动准备3.主要步骤3.1禁用win10对没有签名驱动限制3.2通过设备管理器安装mtk usb vcom驱动3.3工具版本问题4.禁用win10对没有签名的驱动限制4.1在设置中打开 更新和安全4.2进入恢复4.3在高级启动中点击立即重新启动4.4电脑重启后的几个动作5.通过设备管理器安装MTK USB VCOM 驱动5.1准备驱动5....

qimi123456的专栏 3万+

STM32CubeIDE(CUBE-MX hal库)----RTC时钟断电保持与时间校准实战

本文详细介绍了在STM32CubeIDE中使用CUBE-MX和HAL库实现RTC时钟断电保持与时间校准的实战方法。通过硬件配置、后备寄存器(BKP)操作及软件校准策略,确保嵌入式设备在断电后仍能保持准确时间,适用于智能电表、环境监测等物联网应用场景。

weixin_29189373的博客 218

ADT设计

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

weixin_60144550的博客 429

手把手教你玩转AT32F403A位带操作:像51单片机一样控制GPIO

本文详细介绍了如何在雅特力AT32F403A国产MCU上实现位带操作,像51单片机一样高效控制GPIO。通过实战演示和性能对比,展示了位带操作在实时控制中的优势,包括更快的执行速度和更低的延迟,特别适合工业控制和电机驱动等场景。

weixin_29234509的博客 285

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

面试复习题--RN面试

考察点:热更新方案的深度理解,选型能力,实战落地经验。答题思路主流热更新方案对比。

hqiangtai的博客 731

高通平台Android 无线 UWB 开发全解析:UWB系统设计、天线与校准全流程指南

为使 UWB 系统达到目标性能,在整个开发流程中遵循一套设计最佳实践至关重要。系统架构:需基于飞行时间(ToF)功能的基准方案(POR)定义系统框图,这是整体系统架构的基础。天线布局:天线位置对性能影响极大,需尽可能贴近 UWB 芯片,以减少信号损耗、保持高传输效率。器件选型:需谨慎选择元器件,推荐使用单刀双掷(SPDT)或双刀双掷(DPDT)开关、UWB 带通滤波器射频同轴测试接头,以保障信号传输路径与测试能力。原理图优化:原理图开发阶段,走线损耗优化极为关键。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 171

设计ADT(抽象数据类型)过程中的若干概念与心得体会

(1)对spec,rep,RI,AF等ADT相关的概念的简单介绍 (2)一些个人对ADT设计的体会感受

Platium_的博客 678

17track单号查询逆向分析

这就说明该网站很有可能存在其它检测点,而检测本地替换最大可能的就是检测了代码格式化或者代码长度。也一样,要么导致网站卡死,要么会导致网页加载异常,这里可能就难到不少人了,让我们一步一步解决。而这个站主要是检测了代码格式化,无限循环检测造成了网站卡死,经多次测试发现检测点共三处。方法中代码很长,但是经调试后发现,它其实只返回一个固定的值,这里直接写死即可。同样的,虽然看起来很长,但是跟过之后就会发现流程很简单,这里主要就是对。追加了一些值,是一条很长的语句,整理代码。,核心流程也很简单,稍微跟一下就出来了,

pyzzd的博客 1624

软件构造第三章总结笔记

ABCstar_super的博客 373

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

软件构造复习(第三章)

软件构造复习(第三章)

qq_44746288的博客 259

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

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

软件构造复习大纲第三章

qq_43412364的博客 144

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

软构第三章 (一)

weixin_43838400的博客 137

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

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

qq_50810293的博客 1237

软件构造系列(三)ADT规约和接口

目录ADT规约规约意义行为等价性前置条件和后置条件规约确定性规约的强度规约的陈述性接口接口作用接口实现泛型 ADT规约 规约意义 规约(specifications)写于ADT和每个方法前,我们应该写清楚每个规约,其对程序有重要意义: 1.让别人理解此ADT意义与作用,而不需要了解其内部实现 2.用于区别客户与开发者的责任 3.先写好规约有利于开发者更正确,更快速设计代码 4.可以隔离变化,无需通知客户端 行为等价性 站在客户端层面看ADT功能是否一样,无需关心内部实现,就像快排和桶排都是排序算法一样 前置

weixin_44135985的博客 997

软件构造ADT总结

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

Kzernb的博客 1107

#软件构造 ADT与OOP的总结 (2)设计规约

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

软件构造总结笔记

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

Zhuoning Guo's Blog 3115

软件构造-规约、ADT

规约的好处 记录自己的设计决策,供自已或他人阅读。 团队协作中,如果没有规约就无法分派任务,无法写程序;即使写出来,也无法验证对错。 规约作为一种客户端与程序之间的“契约”,可以明确双方的责任。 规约可以隔离变化,无需通知客户端,即不管具体实现如何修改,只要符合规约,客户端就没必要知道修改的具体内容。 达到解耦的目标。 可以利用规约来判定方法的行为等价性。 测试用例可以根据规约来编写。 (方法的)规范和合同 规格(或称为合同) ▪规范是团队合作的关键。没有规范就不可能委派实现方法..

m0_51221069的博客 308

软件构造思考3:规约与ADT

软件知识点总结

my的博客 269

软件构造ADT和OOP-2

软件构造ADT和OOP-2设计规约编程语言中的函数和方法规约ADT抽象和用户定义的数据类型对于ADT操作的分类抽象数据类型的表示独立性对于ADT的测试策略ADT的不变量表示不变量和抽象函数有益的可变性 设计规约 编程语言中的函数和方法 函数和方法的类型检验: 参数类型是否匹配,在静态类型检查阶段完成。 返回值类型是否匹配,在静态检查阶段完成。 方法是程序的“积木”,可以被独立开发、测试、复用。使用“方法”的客户端,无需了解方法内部具体如何工作——这就是“抽象”。 对于一个方法来说: 其有规约spec、和

weixin_44114721的博客 242

哈工大软件构造-规约与ADT基础知识总结

Spec是程序员在设计ADT时对自己所写方法的规约,它规定了方法应该做什么,不应该做什么。而在接下来的设计中,测试用例的编写就需要依靠Spec的描述,因为程序员所编写的代码必定是符合spec的,否则就是不合格的。同时,有了Spec的存在,客户端在使用代码时就会有所依据,好的Spec可以大大节省客户端使用自己的API时所需要的时间,并且大大降低了客户端对自己所编写的代码的误解。很多bug来自于双方之间的误解 不写下来,那么不同开发者的理解就可能不同 没有规约,难以定位错误 精确的规约,有助于区分责任 客户端无

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值