软件构造实验2

 

 1. Graph<L>

 - 可变类型:顶点和边可以在图中添加或删除
 - 有向边:边从源顶点到目标顶点
 - 加权边:边与正整数权重相关联
 - 标记顶点:顶点通过某种不可变类型的标签来区分,如它们可能有姓名String或身份IDInteger
 
Graph<L>是一个泛型,对Graph<L>的规约是L为不可变类型。客户试图使用可变顶点标签就违反了先决条件,得不到期待的正确行为。

 2.GraphPoet 
实现GraphPoet这个使用单词关联图生成诗歌的类。
 

 

问题1 :测试Graph<String>
设计、记录和实现Graph<String>。
目前只测试(然后实现)带有String类型标签的图,之后扩展到其他标签。

 - GraphStaticTest.java中包含对于静态Graph.empty()方法的测试策略和测试。Graph.empty()是静态的,只需实现一次,测试只跑一次。已提供了这些测试,可以自由更改或添加,但对于此问题,可以让它们保持原样。
 - 在GraphInstanceTest.java中写你自己对于所有实例方法的测试策略和测试方法,必须使用emptyInstance()方法而不是Graph.empty()来获取新的空图,已给出的testInitialVerticeEmpty()作为参考。
 
与GraphStaticTest不同,GraphInstanceTest不能直接运行,它有一个空白等待填充:emptyInstance()将提供Graph空对象。下一个问题中,将看到两个子类的GraphInstanceTest通过返回不同类型的空图来填充空白。
GraphInstanceTest必须是Graph声明。

 

我们要用String标签实现加权有向图两次

 - 记录抽象函数和表示不变量
 - 在表示不变量中,记录类型如何防止表示暴露
 - 实现checkRep检查表示不变量
 - 用一个有用的可读的抽象值的表示来实现toString

所有类都要有清楚的规约,这意味着每一个方法都必须有Javadoc comment,除非你使用@Override

ConcreteEdgesGraph和ConcreteVerticesGraph不相关且无共享代码。

ConcreteEdgesGraph中必须使用提供的rep,不可以在rep中添加属性,必须使用到每一个属性。
Edge类:可以定义规约和变量,但必须是immutable类型。
如果比较边的话,需要自己实现观察器,不可以使用equals。
重写toString,必须使用@Override。
你应该加强ConcreteEdgesGraph.toString的规约,在ConcreteEdgesGraphTest.java中为它写测试,不必将这些测试写到GraphInstanceTest。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wind~飘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值