一、作业最终架构
- 图片架构

- 简要说明:
- Main:程序入口
- 冒险者角色及管理类:Adventurer(冒险者,实现Employer、Employee接口)、AdventurerManage(管理类)
- 背包及物品管理:Backpack、OwnedItems
- 物品系统:Bottle、Equipment、Spell等抽象类,下设具体的子类,Bottle和Spell类要实现Usable接口
- 工厂模式:Factory类中的静态方法创造新的实例
- 输入解析:Lexer、Parser实现递归下降法
- 迭代过程:
- 首次实现:实现冒险者类,创建Bottle类和Equipment类
- 第三次作业:考虑到涉及多个冒险者,为方便管理创建AdventureManage类;添加背包系统,创建Backpack、OwnedItems加以区分是否携带;添加Spell类,使用继承方法为Bottle和Spell创建不同子类;创建Usable接口
- 第五次作业:装备类型细化,为Equipment创建子类;创建Factory类,实现工厂模式
- 第六次作业:用Adventurer实现Employer和Employee接口,实现雇佣系统;实现观察者模式
- 第七次作业:创建Lexer、Parser类实现递归下降法
使用Junit的心得体会
- 刚开始接触 JUnit 时,总觉得写测试用例是 “附加任务”。但多次踩坑后发现:进行测试是十分必要的(苦笑)。而用Junit进行单元测试就为我们提供了一个很好的工具。
- Junit最大的优点就是精准,即可以针对某一个具体的功能模块构造用例进行测试,并且在测试时更容易想到针对该模块进行边界测试,能很好地发现错误点。在构造的Test中发现问题后进行调试时能直接定位可能有错误逻辑的代码块,十分方便。
- 通过测试用例能够提前暴露我们设计过程中的缺陷,同时倒逼我们做出更好的设计。通过Junit的学习与实践,我想,需要塑造这样一种逆向思维:不仅要考虑如何实现功能,更要考虑如何证明功能是对的。
学习OOPre的心得体会
很明显,学习OOPre,学习Java语言,最大的特点就是面向对象编程。这与我们之前学习的C语言的面向过程编程有很大不同。总结如下:
- 对象化的思维:学习OOPre让我清晰的认识到“万物皆可对象”,每一个实体都有各自的属性和方法,每一个对象各司其职,这种解耦的思想让逻辑表达更加清晰
- 三大特点:封装、多态和继承这三种方法的目的都是为了更好的解耦
- 封装:通过private、public等修饰符能够选择性地将对象的属性隐藏,只暴露安全的操作方法,实现对数据的保护
- 多态:简单说就是同一种行为有不同的实现方式,在新增方式时只需要添加一个实现类,不用修改原有代码。这很好的体现了作业指导书中的“开闭原则”——对扩展开放,对修改关闭
- 继承:实现代码的复用,但是不要过度或不合理地继承,会导致层级关系复杂,逻辑混乱,比如用Backpack继承OwnedItems,会导致Backpack被迫拥有了OwnedItems中的不必要的方法
- OOPre能够强化人的逻辑思维和抽象能力,划清边界实现解耦,有助于复杂系统的设计
简单建议
- 希望能够为自学的内容提供更多的指导
- 可以增加面向对象和面向过程的对比学习