目录
前言
2023北航面向对象先导一共8次课程,从Java程序入门与代码管理、类的初识与单元测试、对象管理与容器到输入解析、BUG分析与调试、继承与接口、设计模式至最后的代码风格与重构,作业分为2次bug修复、5次迭代和最后的总结。OOpre课程带领我们入门Java语言,培养习惯、打下基础。
一、架构设计
1、Main:从标准输入读入指令,按空格进行分割
2、Carryout:进行输入解析,对指令进行分情况处理
3、Datelog:对战斗日志按日期储存
4、Befight/Bebeat:对战斗日志按攻击/受击储存
其余无特殊处理

1、顶层声明adventurers和datelogs两个Hashmap,进行统一管理
2、Adventurer类拥有hireAdventurers属性对雇佣的冒险者进行管理,log属性存放战斗日志。此外对拥有与携带分为两个Hashmap进行管理(逻辑简单但进行卖出与删除等处理时需要同时修改,容易出错)
3、Bottle和Equipment内使用了继承,使逻辑更为清晰,可以统一处理
4、对价值体的处理采用了接口,对价值相关业务的处理更加直观
细节处理
1、遍历容器:迭代器删除
遍历容器的本质是用迭代器遍历,一个很经典的错误是边遍历边删除,需要使用迭代器遍历,删除的时候使用迭代器的删除方法
本人初次遇到该问题时使用了break来终止循环并remove,也能正常运行。但在后续迭代过程中该处就出现了问题。
2、正则表达式
注意非贪婪匹配(使用不当可能会“吞”掉后续想要匹配的字符)
注意捕获组的使用(更加方便去对匹配到的数据进行相应处理)
注意^的不同用法
注意字符转义
3、层次化
注意继承、接口和其对应模式的使用对程序进行解耦,提高层次化
4、注意声明局部变量时的位置
局部变量若在循环开始时声明,则一旦在循环过程中该变量被改变,就会对后续循环产生影响。在代码具有一定的复杂度时该bug难以发现。
二、JUnit的心得体会
1.assert()使用
| 方法 | 介绍 |
|---|---|
| assertEquals(expected, actual) | 检查两个值是否相等 |
| assertTrue(condition) | 检查条件是否为真 |
| assertFalse(condition) | 检查条件是否为假 |
| assertNotNull(object) | 检查是否不为空 |
| assertNull(object) | 检查是否为空 |
| assertNotSame(expected, actual) | 检查两个相关对象是否不指向同一个对象 |
| assertSame(expected, actual) | 检查两个相关对象是否指向同一个对象 |
| assertArrayEquals(expectedArray, resultArray) | 检查两个数组是否相等 |
2.覆盖率
分支覆盖率
类覆盖率
方法覆盖率
行覆盖率
分支覆盖率
3、体会
JUnit可以省去自己肉眼比对输出结果和预期结果这一过程,且测试数据更加方便,对自己所测数据覆盖了哪些方法和分支也一目了然,非常方便。
三、学习OOPre的心得体会
OOPre课程让我对Java语法有了初步的认识,从大一C语言面向程序到面向对象有了适应性的转变,并对代码风格、代码重构、代码层次化等有了更加全面的认识。其中,我对程序解耦和构建层次化的重要性认知尤为深刻。如果耦合度较大,在代码迭代和bug修复时会非常复杂且痛苦,整体逻辑性也很差。同时期待OO正课呀!
四、对OOPre课程的建议
希望OOPre课程能加强中测点的强度~
本文分享了作者在2023年北航面向对象先导课程中的学习体验,包括架构设计中的迭代器删除、正则表达式使用、层次化编程和JUnit单元测试技巧。作者强调了OOPre对面向对象编程的理解和解耦、代码重构的重要性。
1122

被折叠的 条评论
为什么被折叠?



