ooprehomework_2023_hw_8_总结

11月份,迎来了oopre的最后一次作业,可以说在这半学期的oopre学习中我还是收获了很多东西的,遗憾是最后一次作业考虑疏忽,强测只通过了部分数据点,并且没有掌握好工厂模式并将其应用在我的第七次作业中。

作业最终的架构设计,在迭代中的架构调整和考虑

我的第七次作业src文件夹中包含13个类:

Main类:作为整个程序代码的入口,主要功能是运行代码,从前几次作业把大部分代码写进Main中到后来Main只有短短15行,我改的时候其实还是有一点思想斗争,但是改过之后发现Main类确实就应该这样写,不应该包含过多的功能。

Inputfix类:这个类主要负责读入和输出,对读入的代码进行处理。比如说对单一形式指令读入,对具有多种输入形式的指令如给冒险者增加装备,药水瓶;对复杂输入进行分割、摘取如输入战斗日志的指令。23种指令也对应了我23个type。之前我将一些其他的功能还放在了Inputfix类中,导致这个类写的很臃肿,很杂,管了一些与读入输出无关的事,进行了删改之后还是有400+行,其中有很多重复的代码行没有找到合适的解决方法。如果继续改进,可以将读入和输出再分开,并且将与这个两个功能无关的代码完全写到其他的类里面去。

Adventurer类:作为迭代开发的主要对象,冒险者类也可谓是主体部分。因为冒险者有许多行为,属性所以说要用到许多方法,我将冒险者与瓶子,食物,装备,商店的交互的方法分类按顺序写了下来,整体比较清晰。并且用HashMap来记录拥有的瓶子,装备,食物,用HashSet<Equipment>来记录装备背包,因为装备不会出现重名现象,用HashMap<String,TreeSet<Integer>>来记录食物和瓶子背包,因为两者会出现同名但ID不同的情况,并且要在必要时按照ID顺序进行操作,用HashSet来记录雇佣的冒险者。

Bottle类(以及继承Bottle的RecoverBottle和ReinforcedBottle)

Equipment类(以及继承Equipment的CritEquipment和EpicEquipment)

Food类

Fightmode类:进行与战斗模式有关的操作,如使用药水瓶,攻击,雇佣的冒险者进行援助。这个类中的内容原来我写在了Adventurer类中,但是后来发现Adventurer类代码冗余,所以新建了一个类。

Store类:主要写了商店购买和卖出的行为。因为只有一个商店所以使用了static描述了商店的各种属性和方法。

Commodity接口:将有商品属性的类添加共同的方法:getPrice,感觉接口是真的好用,但是我只理解了百分之十,用了百分之一呜呜呜。。。

使用Junit的心得和体会:

Junit虽然没有能够帮我de出很多bug,但还是为我在测试方法覆盖率,分支覆盖率等方面有很大帮助。注意Junit中的断言一定不要使用assert,会吞覆盖率。Junit可以显示运行后哪些方法被覆盖了,这可以为我们改善自己的代码提供很大帮助,可以选择对一些方法进行删除或合并,减少代码量。

学习oopre的心得体会:

学习oop我是首先认识了idea这个功能强大的IDE,这里集成了很多容器,并且鼠标移到自己写完的东西上又是会有“神奇”东西出现,再按alt+enter就会有神奇的事情发生。我还学习使用了git远程提交,并且慢慢适应了config对代码风格的严格要求,方法不能超过50行,一行不能超过100字符,变量命名等等,这些我们初学时看上去很不必要的部分,如果注意了就可以在自己回看或者他人看代码时事半功倍。

其次,也是最重要的一点,我认识了面向对象编程,面向对象目前给我的感觉就是写代码之前可能需要思考的时间比C语言要长那么一小会,但如果类设计的好写的时候思路就会非常清晰。 C语言面向对象编程感觉程序员只是一个客体,以客观的角度去解决问题,用到的也是结构体,函数这些概念。而面向对象编程,万物都可以是对象,程序员可以置身事内,明确一个对象有哪些属性,行为,甚至可以将自己想象成这个对象去进行交互,函数也变成了方法。解决问题的过程就是模拟自己是对象的过程。继承,多态,接口,这些用法我还是没有掌握的很好,但还是照猫画虎地用了一些,用起来感觉确实很方便。

对oopre课程的简单建议:

希望题目描述可以更加清晰吧,如果可以多加一些图片之类的去描述题目感觉会更好!

结语:

在这里由衷感谢oo课程组,oo的助教是我大二上学期最喜欢的助教们,感谢你们可以耐心地回答我们这些小东西的问题。希望oopre课程越办越好!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值