其他分享
首页 > 其他分享> > OO_Unit3_Summary

OO_Unit3_Summary

作者:互联网

目录

心得体会

丈育最近没有读书,所以玩不了前两次总结的文摘花活了

不读书真是会变成丈育,感觉连个语句通顺的心得体会都写得十分困难,自省。)

自测历程

分析在本单元自测过程中如何利用JML规格来准备测试数据。

本单元我采用了数据生成器 + 群友对拍的方式进行测试。JML 的规格化特点使得准备自测数据的过程变得非常自然,所有的指令、约束和边界条件都已经给出,我们只需要设计合适的场景,让各个方法与限制条件按照合适的比例出现在数据中(或者说,按照一个个“单元”来逐个测试),就可以构造覆盖率很高的数据,因此写测试数据生成器的效率比前两个单元高了很多,用 cpp 来实现还是比较容易的。得益于覆盖率较好的数据和与群友的充分对拍,本单元平安通过

至于指导书中推荐的 JUnit,我试水了一阵后感觉书写效率不是太高(每个方法都要设计),同时由于能力问题也没太搞明白它的奥妙,所以没有使用它进行单元测试,究其根源,还是自己太水了。

BTW,OO 互测也随着本单元的结束落下了帷幕。第二单元的摆烂过后,这单元总算又开始 hack 了些人……但总地来说,在互测这个环节我始终是不够积极,需要反省。不过学习别人优秀代码的过程还是很高兴,这也是互测环节带给我的最大收获。

架构设计

梳理本单元的架构设计,分析自己的图模型构建和维护策略。

正如在开头的心得体会里写的那样,本单元所有的问题(包括架构设计)都可以用“请仔细阅读 JML 表述”来解决,因此三次作业的架构都是与之强相关的。唯一需要注意 / 可能引起不同的点应该就是性能优化涉及的那几个图论相关算法了,为了方便使用,我将它们抽象成了几个类。至于具体的性能优化服务算法放到下一节中讨论。

以下的架构图略去所有异常类。为了方便异常类中的计数需求,我设计了一个 Counter 类,借助 static 的特性完成异常出现次数的统计。

第九次作业

本次作业架构图如下:

注:MyNetwork 里面那个 nodes 属性并没有用,后面被抽象到 Dsu 类中实现并查集算法去了,但是我忘了删(悲)

该次作业中,由于需求太简单 + 冯如杯赶时间,我有许多地方直接无脑用 ArrayList 管理了,后面为了便于管理 / 考虑性能都替换成了 HashMap。

第十次作业

本次作业架构图如下:

第十一次作业

本次作业架构图如下:

性能分析

按照作业分析代码实现出现的性能问题和修复情况。

本单元的性能优化问题主要可以分为图论算法考察方法复杂度降低两部分。前者明白写在 JML 脸上,再不济通过同学的讨论也可以发现,实现的过程比较简单,权当复习数据结构了;后者可能需要稍微想一下(群友和互测房友都在此出过 TLE 的锅),但其实只要发现某方法中存在多重循环 / 频繁的查询,就要好好考虑是不是要改变一下它的实现思路了,一般通过不断更新维护一个属性都可以解决的。

扩展任务

假设出现了几种不同的Person

  • Advertiser:持续向外发送产品广告
  • Producer:产品生产商,通过Advertiser来销售产品
  • Customer:消费者,会关注广告并选择和自己偏好匹配的产品来购买 -- 所谓购买,就是直接通过Advertiser给相应Producer发一个购买消息
  • Person:吃瓜群众,不发广告,不买东西,不卖东西

如此 Network 可以支持市场营销,并能查询某种商品的销售额和销售路径等。请讨论如何对 Network 扩展,给出相关接口方法,并选择 3 个核心业务功能的接口方法撰写 JML 规格(借鉴所总结的JML规格模式)

感觉这个改动还挺有意思的,有没有一种可能是 21 级课程会加入呢(喜)

标签:OO,群友,int,作业,Summary,Person,JML,Unit3,单元
来源: https://www.cnblogs.com/hjingwok/p/16341132.html