309
社区成员
发帖
与我相关
我的任务
分享目录
本次课程的任务是设计一套有关于冒险者的管理系统,我们需要赋予冒险者一些特定的装备和技能,同时维护他的自身属性,以及一些附加的关系。下图是我的设计的总体结构与方法流程。

(图1:设计总体结构)

(图2:方法流程示意)
我把将本次作业分为三个部分:
1.Main的顶层部分,用于对接用户
2.ExecutorCommand的输入管理部分,用于将用户的输入识别,调用具体的方法
3.Manager的方法实现和属性维护部分,涵盖了三个管理冒险者的类 :AdventurerManager类管理冒险者的方法和属性,Adventurer类继承他并将抽象方法具体实现;Laxer类管理冒险者的关系;Item类管理冒险者的物品和技能。在下面的迭代过程介绍中会详细介绍Adventurer类中的方法和属性。
homework2:进行了首次设计,初步实现了Adventurer类,引入了冒险者的若干属性。初步实现了Item类,引入了三种物品:Bottle,Equip。
homework3:进行了首次迭代,引入了“可用”和“携带”的概念,在Adventurer类中新增了标记物品是否可用的属性,并且新增了takeItem方法。在Item类中引入了新物品:Spell。以及对原有指令、方法和属性进行微调。
homework5:进行了第二次迭代,引入了新的属性、“战斗”、“金钱系统”,细化了物品的使用规则和属性。在Adventurer类中新增了属性金钱和一些附加属性;新增了judge_fight方法和fight方法,用来判断是否能够进行战斗以及执行战斗指令;同时新增了“Buy”方法来利用金钱购买物品。新增了工厂来对物品进行生产。以及对原有指令、方法和属性进行微调。
homework6:进行了第三次迭代,引入了“雇佣”、“上下级关系、”“同盟关系”以及“援助”,细化了一些战斗的设置。在Adventurer类中新增了有关于上级和下级的属性;新增了管理Boss和Sub的方法,维护同盟树的方法,以及收集同盟树的成员的方法;同时新增了进行援助的Help方法。以及对原有指令、方法和属性进行微调。
homework7:进行了最后一次迭代,引入了“批量导入雇佣指令”的概念。新增了Laxer类用来利用递归下降算法解析指令,在Laxer类中新增了添加上级和下级的方法,以及其所对应的属性。最后在ExecutorCommand类中新增了方法用来进行批量导入的操作。以及对原有指令、方法和属性进行微调。
本次作业中,还要求同学们完成JUnit测试代码并且需要代码对于自己的程序拥有较高的覆盖率(包括分支覆盖率,方法覆盖率和行覆盖率),在编写测试代码的过程中,我们可以精简自己的程序,并且优化自己程序的处理流程,同时增强自己程序的鲁棒性(这一点笔者深有体会)。在此对于JUnit测试加以总结:
1.JUnit测试代码编写的核心在于理解自己构建的方法和属性,利用自己的方法来修改属性并且要通过观察属性的变化来确定方法实现的完整性,同时,我们可以通过覆盖率来了解测试的方法是否全面,测试的情况是否充足,对于代码的框架提升有很大的帮助。
2.JUnit测试代码可以进行隔离性测试,对于单个的类以及其中的单个方法可以编写不同的Test进行测试,有利于我们对于特定方法的安全性测定以及Bug的定位;同时JUnit测试代码也可以进行综合测试,利用JUnit测试对整个程序中的某个流程进行测试。多样的测试方法可以让程序更加稳健。
3.JUnit测试中的断言操作可以让我们简单直观的观察属性的改变,省去了进行数据构造和内部属性显示的繁琐。
正如课题所言,“OOpre”作为一门面向对象编程的程序课程,我在课程中最大的收获无疑是理解了何为面向对象。“面向对象”不仅仅是我们代码设计中的一个方式和要求,更是我们在程序整体框架的构件中应该具有的一种思维方向和能力,我们需要在设计程序框架的时候用更加简洁的顶层设计,更加普适性的类的设计来实现“面向对象”的要求。
在以后进行大量代码的设计中,“面向对象”思维是重要且宝贵的,因为这种思维可以帮助我们设计出更加明确清晰的程序结构,可以让代码的分工更加明确,在debug的时候可以更加精准和高效。
这门课程的设计相当精彩,作为一名在编程方面并没有天赋和经验的普通学生,这门pre课程没有给与我太大的压力,用循序渐进的迭代来教导我完成了java的学习和面向对象的理解,我认为课程能够提升的地方在于课堂和课下的衔接,在课下可以回顾一下课堂的内容并且做好衔接,对于我来说课下的指导书内容有一些时候理解起来比较吃力,希望可以用更加温和的方式进行过渡。