309
社区成员
发帖
与我相关
我的任务
分享
在这个博客中,记录一下以下内容:
作业最终的架构设计, 在迭代中的架构调整及考虑;使用JUnit的心得体会;学习OOPre的心得体会(包括但不限于从面向过程编程过渡到面向对象编程的体会),以及对OOPre课程的简单建议。
整个项目的类图如下:

在最终作业中,我的架构大致呈现如下特点:
1.实现`Items和Usable`两个接口,其中`Bottle类和Equipment类`是物品,可以被拥有和携带,`Bottle类和Spell类`是可用事物,可以对某个冒险者使用。
2.清晰的父类和子类。父类和子类的架构如类图所示,父类提供通用方法,子类通过重写父类方法来实现不同功能。
3.在`AdventurerManage类`里实现工厂模式,从而对各种指令的实现提供清晰统一的实现方法,实现较为良好的拓展性和可读性。
4.单独编写`Fight类,HireRelationship类`,分别实现攻击和雇佣,降低类之间的耦合性。在`HireRelationship类`里使用图和BFS来实现雇佣关系。
整个迭代过程中有两次较大的改动。第一次是在学习了父类和子类,接口这部分内容后,我意识到如果在原来的代码架构上继续添加内容,不仅会使得方法的实现不明晰,还会使得类的耦合性过大,导致后续编写和调试困难,所以我使用了父类、子类、接口的方式来组织架构,使得项目架构清晰。第二次是在学习了工厂模式后,为了统一处理指令,我将指令的实现单独提取出来,在`AdventurerManage类`里实现了工厂模式。
JUnit让我加深了对测试的重视。之前在学习程设和数据结构的时候,都是在控制台一遍遍地输入测试来对比输出,这在小文件里或许没什么问题,甚至更快,但是在大项目中不仅麻烦,而且还容易因为输入出错等问题导致不必要的问题,而且也不方便逐步调试。在JUnit中,采用`assertTrue`等断言方法,可以较为容易且清晰地实现对方法的精确监控,判断是何处出错,找到bug所在。可以说,JUnit是很好的测试工具。
在学习OOpre的过程中,我从面向过程编程过渡到面向对象编程,不仅是掌握JAVA这门新的编程语言的基本语法,还在项目的迭代中不断加深对封装、继承、多态的认知。在之前面向过程编程的时候,题目一般都较为简短,不超过500行代码,大部分都在一两百行上下。那个时候我拿到题目就是思考第一步做什么、第二步做什么,就像个智能计算器一样一步步计算。
而现在,在学习面向对象编程的过程中,我逐渐领会到了那种把一个功能的实现分解成一个个类,每个对象都有属性(状态)和责任(行为),这样我在设计顶层架构的时候无需着眼于先做什么后做什么,而是着眼于每个类需要实现什么功能,既定它们已经实现各自的功能,在其他地方调用即可,随后再设计类里方法的具体实现。 这样一来,项目就可以逐步分解为一个个功能模块。
同时,面向对象编程让我第一次体会到了做项目开发的感觉,学会使用IDEA自带的推送提交或者使用命令行进行`git push`等操作,可以方便的进行版本控制,可以为日后更复杂的项目开发打好基础。
我觉得OOpre课程设计的很好,为OO正课打下了坚实的基础。就是建议课程指导书能分解开来,逐步学习,或者延长学习时间、加强引导,而不是在一开始就将课程平台&工具链教程、checkstyle说明、JUnit说明等一口气端上来。这些内容大部分在使用后理解并不困难,但是在一开始大量的新事物(之前大部分同学对gitlab/github,git与版本控制,chekstyle,测试及JUnit都没有了解或者缺乏重视)容易使人困惑。
OOpre完结撒花!
祝6系越来越好!