首页 > 其他 > 详细

OO第三单元总结——JML系列

时间:2021-06-02 00:03:18      阅读:22      评论:0      收藏:0      [点我收藏+]

OO第三单元总结——JML系列

一、设计策略

  1. 浏览JML规格,看大致实现了什么功能

  2. 完成MyPerson,MyGroup,MyMessage等耦合度比较低的类,进一步理解题目

  3. 完成异常类

  4. 实现MyNetwork类

  5. 进行优化

在实现一个比较复杂的方法时:

  • 分辨出条件并使用if语句分开

  • 实现所有的 exceptional_behavior,抛出异常,剔除异常情况

  • 阅读 normal_behavior,如果有多条就分类

  • 对于每个方法识别出模式和背后的含义

二、测试策略

参考了往年的测试方式

JMLUnitNG:测试MyGroup方法

技术分享图片

用Junit对函数进行单元测试

三、使用容器和架构设计

第一次作业

本次作业main中容器均使用的Arraylist,Exception类使用了HashMap。

MyPerson类除了继承Person类的方法,另外加了link方法,将有关人员加入acquaintance中。

技术分享图片

第二次作业

本次作业main中的类有对应的尝试使用了HashMap但用时反而长,所以继续使用了ArrayList作为容器。

MyPerson除了继承接口外新添addFirstMessage方法。

技术分享图片

第三次作业

下面仅为main部分的UML类图,除了添加方法外容器与前面差别不大。

关于图的构建与维护策略,基本上是按照jml的说明构造的,并没有特意想(菜鸡落泪

技术分享图片

四、性能问题

本单元二三次作业均出现了tle。

第二次作业性能分析如图所示,主要是MyNetwork和MyPerson类复杂度高。

技术分享图片

第三次作业main类性能分析如图所示,也是MyNetwork和MyPerson类复杂度高。

技术分享图片

tle原因分析:

  1. isCircle、sendIndirectMessage、leastPathLength算法复杂度高。

  2. 一些O(n)复杂度的计算方法每次调用都重新计算。

  3. 后面一些方法用到了前面的方法,导致算法复杂度加和。

尽管使用了Dijkstra算法仍然tle,应该是前面一些地方算法不好。

五、感想

虽然感觉这次比前两个单元都简单,但强测结果是最差的,还是算法的锅(数据结构不牢,地动山摇,假期一定重学数据结构),另外大多照jml抄并没有太多可写的……

另外就像老师说的,考的太多心累所以互测不干活

OO第三单元总结——JML系列

原文:https://www.cnblogs.com/zxj9/p/14838552.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!