242
社区成员




UML类图
第一次调整
在hw3中对先前代码进行了一次较大调整,在最初编写时,在Main
中进行了命令的解析以及部分命令的实现,导致把许多本该属于Adventurer
中的方法写在了Main
中,造成结构层次上的混乱。初期可能只是从命令实现的方便性出发编写代码,而没有考虑到其合理性,甚至出现了由于没有厘清各类中需要实现的功能,不同类中出现了内容极为相似的方法,在一定程度上增加了代码的复杂性。在调整时,对于每一个方法,首先思考其作为谁的方法、由谁调用才是最为合适的,再将其挪至对应类中,再对方法进行调整。
在方法实现时,先前一个很大的问题就是参数过冗余,基本是需要用到的参数全部传递过去,当在实现过程中发现功能无法完成时就继续添加参数,其实其本质仍是没有厘清各类应该负责的功能,把过多的工作都集中在Adventurer
中完成,为解决这种问题,就要把多余部分交至其他类中完成,以及对于重复过程进行抽象提取,形成新的方法,以减少方法的冗余问题和接口的混乱。
其余调整
随着命令条数的增加以及命令形式更加多样化,如何解析并完成命令成为新的问题。最初采用的if-else
分支语句,在中期出现类中方法行数超出规定值的问题,不得不寻找新的实现方法。为解决这个问题,新增Utils
类在其中完成命令的读取和储存,并新增Parser
类用于命令的存储,将命令(operation
)和日志(logs
)作为其属性,以解决新增的14命令中对于战斗日志的处理和操作问题。
在历次迭代的过程中,都要求我们自行对代码进行测试,并且对Junit测试覆盖率有所要求。
在迭代初期,代码复杂度较低,在编写过程中产生的bug较少,导致对代码的测试环节常被忽略。然而随着题设要求的增加,运行时出现的问题越来越多,愈发意识到测试的重要性。特别是在最终修复出bug后,会发现如若能在先前对代码进行功能测试,其实就可以减少大量的bug排查时间。测试看似是在初期“浪费”了时间,实则会减少debug时的工作量,是重要且必要的。完成这样的认识转变,是我在先导课程中十分重要的收获。
测试的覆盖率也是一个很重要的指标,在测试中对覆盖率的要求,提醒我要充分测试代码,不遗漏分支,对尽可能多的语句进行检查。
从面向过程到面向对象
完成从面向过程编程到面向对象编程的认识转变,是在先导课程中很重要的一个内容。在迭代初期,代码更像是经过java翻译后的c语言,缺乏封装的思想。随着历次课程的不断深入和在迭代中的反复体会,开始学会如何从面向对象出发,构建整个代码。在迭代过程中,也开始反思先前的构架是否有合理性,如果不合理,又应该如何调整。从如何抽象提取出每一个类,再到使用继承还是接口,抑或是其他在构建过程中遇见的问题,都有在帮助我进一步了解“面向对象”的思想。