BUAA 2023秋-oopre课程总结

完结撒花!!!感谢老师和助教们的付出,大家辛苦了!!

一、架构设计

首先是所有的类↓↓

然后类之间的关系↓↓

说明

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这门课所有的心得体会了~下学期再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值