oo-2021 第三单元总结s

(1)实现规格要求所采取的设计策略

由于本次是实现jml格式的写法,只需要阅读EmojiMessage,Group,Message,Network,NoticeMessage,Person,RedEnvelopeMessage,Runner进行编写

主要实现了错误抛出的几中MyException,以及Mainclass Mygroup,MyEmojiMessage,等如下图

 

在主要类的实现方法中,大部分是由给出的jml格式直接写出。在三次作业中,第一次中判断是否联通的isCircle()方法,选用了最简单的广度优先遍历。大概看了一下并查集的方法,由于懒,并没有做设计优化。第三次作业中的sendIndirectMessage()方法也采取了最简单的迪杰斯特拉算法。对于message 在person 类中,我并没有新建立一个容器,将容器排序,而是建了一个由固定大小为4的容器,每次新加入message时,将最后面的弹出,把其添加在队首即可。

 

 

(2)结合课程内容,整理基于JML规格来设计测试的方法和策略

首先在基本了解JML语法的基础上,通读JML规格,了解规格希望实现的内容

只要选用了合适的容器,方法直接调用容器的相应方法即可实现。

理解相应类之间的联系,实现规格定义的方法。

(3)总结分析容器选择和使用的经验

除了person中的messages用到了ArrayList 其他都用了HashMap

 

因为HashMap可以满足其他的要求,但是HashMap是没有顺序的,Messages需要排序 所以用到了 ArrayList

HashMap可以以很快的效率实现增,删,查,改

通过建立id到自身的HashMap可以很快的查找某一类的实例

(4)针对本单元容易出现的性能问题,总结分析原因

不要像我一样犯懒,isCircle()只用广度优先,因为这样在重复查询的时候,你会发现非常耗时。而用并查集的方法,可以将之前查过的路径存起来,不需要在再用到的时候再次查询

sendIndirectMessage()方法  进行了堆优化,用到了优先队列。

(5)梳理自己的作业架构设计,特别是图模型构建与维护策略

 

posted @ 2021-06-01 20:57  nnnnnnnnnnnn_n  阅读(53)  评论(0编辑  收藏  举报