软件构造lab

编程入门 行业动态 更新时间:2024-10-24 04:30:23

<a href=https://www.elefans.com/category/jswz/34/1770125.html style=软件构造lab"/>

软件构造lab

软件构造实验2心得

1.Rep、RI、AF

实验2开始时,对Rep、RI、AF缺乏认识与理解,导致做实验时无从下手。
RI:Representation Invariant的缩写,可翻译为表示不变量,一个好的抽象数据类型最重要的属性之一是它保持了自己的不变量。不变量是程序的一个属性,对于程序的每个可能的运行时状态,它始终为真。不可变性是我们已经遇到的一个关键不变性:一旦创建,不可变对象在其整个生命周期中应始终表示相同的值。但是还有许多其他种类的不变量,包括变量的类型(总是一个数字的平均值)或变量之间的关系(例如,当用于循环数组的索引时,则是循环主体内的不变量)。笔者以为可以理解为程序中的某些量一直要满足某种条件,如大小关系、恒等于某个值,RI的保持是ADT的任务,与客户端要做的操作无关。如下面这段代码,RI要求s始终不含有重复的字母,那么在对s做任何操作前后,都要使这个条件得到满足。为了检查RI是否成立,可以编写checkRep方法,每在类中写一个方法时都现在末尾调用一次checkRep,检查不变量,这也有利于错误的定位。

class CharSet {private s:string;// Rep invariant://   s contains no repeated characters// Abstraction function://   AF(s) = {s[i] | 0 <= i < s.length}...
}

AF:Abstraction Function的缩写,抽象函数:R和A之间映射关系的函数,即如何去解释R中的每一个值为A中的每一个值。其中R为表示空间,是开发者需要关注的程序内部实现时所用到的表示;A为抽象空间,是用户看到和使用的值。两者之间的差异决定了我们需要一个抽象函数来描述二者的关系,用这个函数去解释R中的每个值为A中的每一个值。AF : R → A。该抽象函数是满射、非单射、未必双射,这是因为R中的值并非都是合法的,在A中不存在与之对应的值。如上面那段代码,当s为aa、abbc时,A中就找不到与之对应的值。

图1:AF示例

接口interface

接口:JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
实验二提供了一些接口,清晰的描述了要实现的功能,已经设计规约。在实验二中,这个接口明确了要实现的功能,在接口的两个具体实现中,都要按照接口提供是spec去重写这些方法。接口利于客户使用软件,只要向用户提供接口,用户无需了解内部的具体实现就可以使用。接口还便于团队协作,只要提供接口,就可以明确对方所要完成的工作(按规约设计具体实现)。

图2:实验2提供的部分接口

接口有以下这些特点

接口中的所有成员变量都默认是由public static final修饰的。
接口中的所有方法都默认是由public abstract修饰的。
接口没有构造方法。构造方法用于创建对象
实现接口的类中必须提供接口中所有方法的具体实现内容。
多个无关的类可以实现同一个接口
一个类可以实现多个无关的接口
与继承关系类似,接口与实现类之间存在多态性
接口也可以继承另一个接口,使用extends关键字。
实现接口的类中必须提供接口中所有方法的具体实现内容。
多个无关的类可以实现同一个接口
一个类可以实现多个无关的接口

关于测试

实验2的测试中,笔者曾试图在测试单元中调用多个方法进行测试,包括了对
向图中添加点、改变边、返回顶点等操作的测试,最后运行时发现测试不通过,因为该测试单元过于复杂导致查找问题根源浪费了大量时间。笔者从中体会到测试用例应该尽可能简短且不要尝试在一个测试单元中对多个方法进行测试,简短的测试单元更有利于查找错误根源,节省时间和精力。此外,测试时应调用观察器,不能简单的检查方法的返回值。如boolean add(L vertex){},只是简单的检查返回值无法排斥重复添加某点的风险,该错误笔者在后面调用toString方法时才发现,也浪费了许多时间。

更多推荐

软件构造lab

本文发布于:2024-02-25 16:24:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1699592.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:软件   lab

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!