完结撒花!!!感谢老师和助教们的付出,大家辛苦了!!
一、架构设计
首先是所有的类↓↓
然后类之间的关系↓↓
说明
1. Main:负责将输入切割并存入数组,传入并调用manager类中的方法。
2. Adventurer: 管理Bottle、Equipment、Food、Commodity的容器,管理Bag、以及一些对子类添加或删除的方法。
3. Bag: Bottle、Equipment、Food的容器,管理和携带有关的操作方法。
4. Bottle、Equipment: 下设了继承的子类。
5. Commodity: 实现的类有Bottle、Equipment、Food、Adventurer,共性操作是getValue。
一些迭代中的调整和反思
1. 在最开始写这个作业时,我还处于一种两眼一抹黑的状态,所以基本没有考虑过结构的问题。最直观的体现就是试图把所有操作都堆到main里面
然后就被60行制裁了
接着就把所有操作都打包扔到了main的下面,因为前期操作不多,所以侥幸通过了checkstyle,然而还是在最后一次,Main不幸地超过了500行
所以,结合老师在课上提的建议,我将这些有关操作的方法都移到了Manager类里面,同时,将一些不涉及到外部变量的操作封装起来放进Adventurer类及其子类,有效减少了父类的行数。
2. 关于方法名,因为有“携带”与“拥有”两个概念,在给冒险者添加物品和给冒险者背包添加物品时,我用的是“insert”和“add”。刚开始还是能分清的,但是迭代到了后面,就渐渐忘了之前写的方法名的区别。以后会注意用更有标志性的名称,以及写注释来提醒自己不要记混。
3. 实现接口的时候,因为是比较后期的作业,改动太大会影响整体结构,所以我只添加了一个getValue方法,没有能很好地体现出commodity成员之间的共性。其实这些类中有很多方法都能够互通,这样可以减少代码冗余度,提高可读性。
二、使用junit的心得体会
说实话,因为一些程设和ds遗留的不好习惯,我在debug时更多地是去阅读理解标准输入或者打印中间变量,而不是使用junit来寻找可能的错误点。所以我的junit基本上就是拿评测的数据点去凑覆盖率,有些感觉像是为了写而写。所以,也是为了下学期的课程,我认为我可以在以下几点上作出提升:
1. 尝试更多地去利用junit来debug,多用assert检查程序是否符合预期。
2. 多考虑一些极端情况(比如添加同一物品好几次、卖空瓶子这种)。
3. 使用有代表性的数据,可以更方便地定位bug。
4. 在利用junit的同时,想想自己有没有可能理解错了题意或是遗漏了什么特殊情况,这种bug是测不出来的。
三、学习oopre的心得体会
从 c 到 java ,我们从面向过程来到了面向对象。java 这个语言给我的最直观的感受就是,从属关系非常明确,条理清晰(结构体promax版),更便于去迭代和拓展。在得到正确输出的同时,我们还要关注整体结构、可访问性、可变性等等,不仅要写得对,还要写得优雅()
不过这样子的话缺点就是程序运行过程相较于c语言来说没有那么容易理解。比如两个变量名是否指向同一个实例化的对象等等,这就要求我们花更多的时间去学习领悟java的运行过程(比如说第五次作业的教程),这样可以更好地避免一些不必要的bug,加深对这门语言的掌握。
四、对oopre课程的简单建议
1. 可以适当增加一下对git使用方法的教学,因为idea里就可以提交,所以我基本没怎么了解过cmd的用法。导致了刚开始有一次交错文件的时候怎么都pull不回来,最后是直接在gitlab里面手动改的
2. 建议至少把中测的数据点给全,有时候只WA了一个没给数据的点还是挺难de的
以上就是我对oopre这门课所有的心得体会了~下学期再见!