270
社区成员
发帖
与我相关
我的任务
分享总览
整个项目围绕“冒险者-物品-战斗-雇佣关系-解析”五个维度迭代完善。本次博客作业涉及以下内容:最终的架构设计, 在迭代中的架构调整及考虑;使用JUnit的心得体会;学习OOPre的心得体会;对OOPre课程的简单建议。

架构的细节设计集中在Adventurer、AdventurerManager、Factory这三个类中,同时实现了Useable这个接口,便于对可用事物的使用。
1.Adventurer
hitPoint、atk、def、mana、money,以及携带的 Bottle、Equipment、Spell。2.AdventurerManager
ar/rr)、解析关系(lr)、购买/移除/携带物品(bi/ri/ti)、学习与使用(ls/use)、战斗(fight)。Magicbook 法术消耗 mana,Sword 物理伤害),根据 atk-def、法术 power、武器 ce 等综合计算。3.Factory
createBottle、createSpell、createEquipment、createItem,提高了项目的可扩展性。架构调整主要集中在hw2、hw3、hw4中。
hw2:Adventurer 管理 Bottle、Equipment;AdventurerManager 处理冒险者与物品;Main 以 switch 执行(aa、ab、ae、rb、re)。
以面向过程为主,Main很复杂。
hw3: Useable 接口登场,Spell 实现法术的统一使用;HpBottle 等引入使用行为。此时Main中处理命令解析十分冗长,于是利用AdventurerManager实现对命令解析的处理。
hw4:Equipment、Weapon 抽象,具体装备(Sword、Magicbook、Armour)分层。Factory 统一实例化入口,Adventurer 使用 Factory.createBottle/createEquipment 简化对象创建。
但目前架构仍存在一些问题,比较严重的就是将命令解析和关系处理全堆在了AdventurerManager中,AdventurerManager类实现了大量方法,正好500行(OOcheckstyleFileLength限制也是500行)。AdventurerManager类是明显可以优化的,将命令解析独立成一个类,AdventurerManager中只处理战斗系统和关系,这样虽增加了类之间的耦合,但极大缓解了AdventurerManager的负担。
JUnit测试以单元覆盖为主,极大增加了代码量,但是JUnit能很大程度上节省debug的时间成本。它能够具体检测各个方法是否存在bug,将具体问题集中在具体模块,测试的写法能直接反映并检验面向对象的设计是否良好。
OOPre上,我不再像学C一样死磕一个函数的复杂逻辑,而是将复杂逻辑化为多个简单逻辑,每个部分各司其职,在高层的管理中,我不再关注各个部分内部的具体实现,仅在调用他们各自的功能相配合。
C进阶中对面向对象编程有初步的引入(C++的类、继承和多态),当时学的朦朦胧胧。OOPre这门课,我不仅学会了Java的基础语法,还理解了它以面向对象为核心设计,学会了用类、对象、接口来构建系统。在这门课上加深了我对类、继承和多态的理解,也让我对面向对象编程有一定的认识,让我学会设计不同的类,在类中实现各自的功能,通过 “继承” 复用父类功能,“多态” 实现灵活扩展,再通过一个管理类对各个类进行访问与管理,进而对要求的具体实现。
希望推出git的详细教程,初学时很痛苦。