首页 > 其他 > 详细

OO第三单元总结

时间:2021-05-30 20:07:47      阅读:16      评论:0      收藏:0      [点我收藏+]

一、实现规格的设计策略:

1. 基于规格,设计方法

  大部分需要我们写的方法,都可以根据规格直接写出来,这些方法一般都是比较简单的,比如查询有没有这个元素、返回某个元素、增加或删除某个元素。

2. 根据规格,了解方法功能,自行设计方法

  规格怎么描述,方法怎么写也是可行的,但是了解了方法功能,自行设计会更快,比如iscircle这个方法,就是查询两者是否能通过有限次查找找到对方,如果按照规格描述实现该方法,就会每次查询都逐个寻找,方法本身非常的慢,而了解该方法功能后,设计一个并查集就会很快实现。

3. 选择容器

  我容器选择了arraylist(主要是就会用这个),这个在增加删除的时候很方便,其实还可以用hashmap,查找的时候会很方便。

4. 使用算法

  我在这里就使用了并查集和SPFA,并查集的话要注意压缩路径,SPFA没想到什么好的优化。

5. 异常处理

  建立相应的异常类,按照后置条件抛出相应的异常

二、基于JML规格来设计测试的方法和策略

  这边没有什么太好的测试方法和策略,主要是根据JML规格的描述去写代码,照猫画虎还是比较容易实现的,然后比较难的就是理解后自行设计的代码,这部分容易出问题,大都是强测出问题后,根据出问题的指令去寻找BUG

三、容器的使用和选择

  个人使用数组和ArrayList,主要是比较熟悉,ArrayList在特定位置插入、特定元素删除非常方便,而这三次作业都很经常用到插入删除,我就选择了ArrayList,但是看别人的实现,貌似hashmap更方便……,然后数组使用那边就与我个人习惯密不可分了,之前学习算法的时候一直使用数组,然后写并查集和SPFA都习惯性的选择了数组。

  所以我的容器使用与选择的方法比较直观,就是个人熟练度和一丢丢的方便。

四、性能问题

1. 容器使用问题

  使用的是ArrayList,每次都是通过遍历实现查询,当数据变多,这种查询就会显得很慢。

2. 算法问题

  比如iscircle没有想到用并查集,而是使用搜索,就会很慢。

  然后就是求年龄平均值、方差等,可以先存一下之前的和,每次有变化的时候再改变这个和,就会快一些。

五、作业架构

 技术分享图片

  以第三次作业为例,我的异常以及类完成如上,类中的方法就是按照规格中有的实现的。

  在设计的时候,我是按照person->message->group->network设计实现的,就是从容易到复杂,先实现基础的,后续设计network的时候就能使用之前设计好的方法了,会相对容易一点。

  我的图模型设计设计比较简单,就是根据人与人之间认识与否来连线建立联系,由线连在一起的一群人构成一个块(使用并查集实现),查询是否认识时,看有没有线,查询是否能通过有限的人认识时就看在不在一个块。维护也比较简单,线的维护就是建立关系的时候连线,通过acquaintance数组添加新元素实现,块的维护就是并查集的常规维护。

OO第三单元总结

原文:https://www.cnblogs.com/zhaixuyao/p/14828208.html

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