软件构造实验二感悟——课程博客2

本学期软件构造课程的实验二为ADT的编写和OOP的应用。

关于第一个任务(来自MIT的实验),我们知道Java库提供了数组、集合、映射等类的数据结构,但没有提供有向图的数据结构。实验中我分别编写了依赖顶点集和边数组、顶点数组的图结构,给出了类的AF、RI、防止表示泄露的方法,checkRep方法以及删除、增加顶点和边等等方法。

图 Graph类实现的全部方法,图为两个类使用的接口

编写这两个类对图论、数据结构以及算法设计的知识点要求较高。

这里在注释中设计到AF、RI、以及防止表示暴露方法的表述:

关于AF、RI的概念:
1、关于两个空间:表示空间、抽象空间
        (1)表示空间里面包含的是值具体的实现实体。一般情况下ADT的表示比较简单,有些时候需要复杂表示。
        (2)抽象空间里面包含的则是类型设计时支持使用的值。这些值是由表示空间抽象出来的,也是使用者关注的。
        (3)ADT实现者关注表示空间,而用户关注的是抽象空间。
        (4)R->A(表示空间->抽象空间)映射特点
2、抽象函数(AF):R和A之间映射关系的函数
        AF : R → A
3、表示不变量(RI):将rep值映射到布尔值
        RI : R → boolean
(1)对于表示值r,当且仅当r被AF映射到了A,RI为真。
(2)表示不变性RI:某个具体的“表示”是否是“合法的”
(3)也可将RI看作:一个条件,描述了什么是“合法”的表示值
(4)AF与RI都不会展示给用户

而防止表示泄露的方法一般包括将类中属性设置成final private类型;并且只能通过设计者提供的、安全的方法修改类;在返回一些数据结构时最好将结果复制到一个新的数据结构中,然后返回,等等。

第二部分实验中,最主要的问题就是如何把顶点集和边数组中储存的图信息存储到邻接矩阵中,然后使用上一次实验编写的方法(Floyd算法)求解最短距离。这里采用的是先逐行将各边的权导入,然后将主对角线上元素置为0,最后将其他元素置为-1,这样执行实验一中写好的方法即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值