2023北航面向对象先导(OOpre)总结

本文分享了作者在2023年北航面向对象先导课程中的学习体验,包括架构设计中的迭代器删除、正则表达式使用、层次化编程和JUnit单元测试技巧。作者强调了OOPre对面向对象编程的理解和解耦、代码重构的重要性。


前言

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课程能加强中测点的强度~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值