【OOpre】结课总结

本文讲述了作者在oopre课程中的学习历程,包括从零开始学习Java,理解面向对象编程,代码框架重构,JUnit的使用体验,以及对面向过程到面向对象思路的转变,强调了测试在项目中的重要性。
摘要由CSDN通过智能技术生成


前言

在本次oopre课程中,我从完全不了解Java,不理解面向对象与面向过程之间的关系,到最后能够成功完成所有的作业,大致理解了面向对象的编程思路。

一、最终代码框架

  • 接受输入类
    • Command类
  • 分析输入类
    • Analyisis类
  • 分配操作类
    • Operation类
  • 管理类
    • List类(管理冒险者)
  • 具体使用类
    • Adventure类 接口 Commodity Ob Beobserver
      • bag类
    • Food类 接口 Commodity
    • Bottle类 接口 Commodity
      • RecoverBottle类 (子类)
      • ReinforcedBottle类 (子类)
    • Equipment类 接口 Commodity
      • CritEquipment类 (子类)
      • EpicEquipment类 (子类)
    • Diary类
      • Content类
    • Store类 (单例模式)

通过Command类得到输入->通过Analyisis类判断执行怎样的操作->通过Operation类给List类分配工作,或者给Diary类分配工作

二、历次迭代中的调整

输入相关类

  • 在第一次作业中,我并没有Analysis类和Operation类,将功能放在了Main类,且Main中的功能比较杂乱,先实例化后再给List操作(仍是面向过程,将List视为函数)
  • 第二次作业中,由于操作很多,我将细分工作交给了Operation
  • 第三次作业中,学习了输入输出后,将Main中实现的功能分给了三个类处理——Command类、Analyisis类、Operation

代码细节的重构

  • bag类中的Equipment和Bottle两个容器从一开始的Hashmap<>修改为HashMap<String,ArrayList<>>

Main类的重构

  • 由原来的Main中实现较多功能,重构为Main不完成任何工作,交给其他类完成

Analysis类的重构

  • 原先的Analysis中选择先将对象实例化,也就是先生成一个类,再将类给Operation操作
  • 重构后的Analysis只负责分配工作,将参数一直传递给真正需要执行的类中

三、junit的心得体会

由于反复的写assert不仅麻烦,而且在命令较为复杂的时候(为实现偏门检测),我自己其实也不太清楚它的输出应该是什么,没有办法assert,所以在中间几次的junit中,并没有去很多的判断我的输出是否正确。
而后面的对于分支覆盖率的要求,我发现了junit的实用性,我在junit中构造了较多的数据去测试,但在之前我并不知道哪些分支是完全覆盖的,而分支覆盖率就能够较为直接的告诉我,我在这部分的条件还没有测试。

四、学习oopre的心得体会

思路的转换

oopre带领我从面向过程的思路,大致转换到了面向对象的思路。

我刚开始写作业的时候,思路仍是我应该怎样去实现这一功能,对功能的过程进行划分,并一步一步完成。因此,我的main中写了很多的功能性语句,并将类中的东西视为函数,调用只是为了实现代码的整洁。

而在后来我逐渐明白了面向对象实际上应该是在到底层之前,不考虑如何实现这一功能,而是这一功能将由谁(哪个类)实现,它在这一功能中发挥了什么作用,做完之后再将剩下的功能让其他人(其他类)去实现。

测试的重要性

oopre是我第一个接触到的,通过测试并不保证正确性的课程,我第七次作业由于第三次作业中的功能错误,导致没有通过强测。

所以在课下的测试就尤为重要,不仅需要测试所有的分支是否完成对应的功能,最好还能构造出覆盖率较高、较为偏门的数据去测试。

五、对oopre课程的简单建议

  • 测试的重要性其实在pre课程中已经体现了,pre课程中是否可以加入一些简单的测评机搭建教程,避免oo中既要学习正课内容,又要额外再学习测评机。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值