2023年BUAA面向对象先导课程总结

屎山不是一天堆成的,笔者不是一下消化的

🔥🔥🔥🔥🔥🔥🔥🔥🔥

一、架构设计

1. 整体架构

在这里插入图片描述

2. 结构说明

名称类型内容
instruction文件夹处理指令的类Instruction
存放不同类型指令的文件夹
Instructions接口将不同的指令串联起来
world文件夹世界类、商店类、战斗日志类
adventurer文件夹冒险者类、背包类、拥有物类
食物类、药水瓶类及其子类、装备类及其子类
Commidity接口将不同类型的价值体串联起来
Main程序入口

3. 特点

  • 项目结构化,通过目录的方式,将具有不同功能和依赖关系的类组织起来。层次结构清晰,便于快速定位。
  • 每条指令单独成类,通过Instructions接口串联起来。耦合度低,便于扩展。
  • 通过Instrucion类中的readIns和exeIns方法统一读取指令和执行指令。功能明确,实现简洁。

4. 迭代调整

整体而言,五次迭代中架构并未有根本性变化,但有两次明显调整。

  • 在区分了“拥有”和“携带”的概念后,我将冒险者中原有的存储物品的容器提炼出来,形成Possession和Package两个相互关联的类,作为冒险者的一个属性。
    最初,我以为这样的设计能避免概念区分不清造成的问题,但在实践中发现,这种设计实际上存在着很大的问题。“拥有”和“携带”具有明显的包含关系,但却通过两个类建立两个独立的容器去实现,会导致许多操作需要在两个类中建立相似的方法去分别实现,加入、删除、深浅拷贝等问题都需要着重考虑,对物品更复杂精确的操作(例如使用哪个瓶子)则会带来更麻烦的问题,造成极大的耦合。
    尽管硬着头皮写下来了,但这是一个非常糟糕的设计,幸运的是后续迭代没有在这一点上有新的要求。
  • 起初,我所有指令的执行都是在Instrucion中写方法来实现的,并未单独抽象出类。但当指令增多,(加上注释)Instrution的行数逼近500行的代码风格红线时,我不得不考虑把各个指令从Instruction中剥离出来。
    于是我为每个指令单独设立了类,每个类中都实现exeInst的方法。在Instruction初始化时,通过传入World这一囊括所有需要数据的类的对象参数,来实现每条指令的实例化和处理效果的关联,再将每个指令对象存入接口容器中,达到统一处理的效果。
    相比于上一条,这次改进我个人比较满意(尽管可能有更优越点办法),经过分类后的独立的指令更加有序,再也不用担心代码风格超行数的问题。

初次学习Java语法和迭代的过程是交织在一起的,所以代码堆成屎山也是可以理解的。

二、使用Junit的心得体会

最初,在迭代程度较低时,我认为Junit确实很鸡肋。需要自己手搓数据点并人工计算后,再与程序运行结果比对,耗时费力,对于找bug帮助不大。我往往都是中测点过了以后,才为了完成作业而写单元测试。

但是,当程序逐渐复杂起来后,Junit的价值才慢慢体现出来。当我为了达到覆盖率要求而去写单元测试的时候,一次竟然意外地发现程序运行结果和预期不一致,这才发现写的代码存在一定的缺陷。

很多时候,你所构想的和你所实现的实际上并不一致,Junit存在的价值就是帮助你发现“想当然”的问题。——某编程小白点肺腑之言

三、学习oopre的心得体会

1. 关于面向对象编程

尽管我没有对象,但“万物皆可对象”的理念真的很神奇。比起“面向过程”那种直愣愣的一根筋式的解决问题的方法,“面向对象”的思维显然更能把握不同事物之间的关系,从而更好的管理调度数据,这显然是“面向过程”无法比拟的。掌握对象的交互性才能更好地实现业务逻辑。相信我在O_O正课中学习多线程时将有更深的体会。
在这里插入图片描述

2. 关于debug

在大多数情况下,如果我们的程序无法通过评测,我们更倾向于通过“调试”去找到问题,在经历本课程(的拷打)前我亦如此。但当代码量大起来、功能要求复杂起来之后,我们更容易犯错的地方已经不是写C语言时那种高深的逻辑不清晰的问题。更多时候,我们是审题不清,没有把握最准确的业务逻辑;或者一些粗心的手下误问题导致的蝴蝶效应。

这时,反复读题、审阅代码,多动动脑子想一想有没有别的情况,实际上更有利于我们发现问题。“调试”功能很强大,但也很丑陋。让它代替我们思考,显然不是高效率的debug方式。

“摸着石头过河”去试错的日子已经过去了,我们更需要的是做好预判式的“顶层设计”。

四、对ooPre课程的建议

  • 出于对学术诚信的过高要求,我们在学习的过程中往往都是埋头干自己的事,很容易“闭门造车,出门不合辙”。在接触java、面向对象之初,缺乏交流互鉴就容易导致走不少弯路、不知道还有更好的实现方式,这实际上会把我们限定在自己的圈子里而不知“天高地厚”。
    既然是Pre课程,希望可以降低学术交流的门槛,为后续正课打下更好的基础。

感谢无怨无悔付出的老师和助教!
感谢一如既往坚持和坚定的自己!

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值