一、架构设计
1.1 架构类图
1.2 迭代调整与考虑
整个迭代过程中代码的整体内聚度增加,耦合度降低,重复率下降
1.2.1 第二次作业
创建Main、Adventurer、Bottle、Equipment类,用HashMap容器维护冒险者所有物
1.2.2 第三次作业
创建Bag、Food、Instruction类,引入携带机制,用TreeMap容器维护bag携带的Bottle、Food的id有序性,将输入解析功能从Main移到instruction中
1.2.3 第四次作业
创建FightLog类,引入战斗机制,运用正则表达式匹配字符串进行输入解析,用HashMap集中管理冒险者名字和战斗日志记录输出。Instruction类重构为Manager类,以整行字符串为单位进行输入解析
1.2.4 第六次作业
创建Commodity接口,分别以Bottle和Equipment为父类继承添加RegularBottle、RecoverBottle、ReinforcedBottle和CritEquipment、RegularEquipment、EpicEquipment子类,引入价值属性和雇佣关系并递归计算总价值和最大价值。Manager以指令类型为基础分离方法,增添解析层
1.2.5 第七次作业
创建Store类,实现单例模式的商店系统;冒险者增添Money属性和观察者告知关系
二、JUnit使用心得
当代码复杂性增加时,JUnit可以迅速地排查定位到出现Bug的类/方法中,适当的单元测试利于解构复杂代码,方便debug
三、OOPre学习心得
通过本课程的学习,我了解到面向对象编程的特点是封装、继承、多态,便于直接对现实问题建模,适合开发维护扩展庞大的工程项目。循序渐进的课程设计和迭代开发也让我初步接触了实际软件工程开发中的一些行业规范和设计模式,学会了运用层次化设计解构复杂现实问题的方法。
四、课程建议
4.1
一些问题场景如空瓶子的处理、价值的重复计算、观察者金钱援助等有违现实逻辑,或许可以设计更合理的应用场景。
4.2
增加对异常数据(0,负数等)的处理考察