2025 OOPre课程总结

前言

在此纪念oopre的结束,第一次切身体会Java项目的编写,遇到了很多的挑战,但也获益良多,希望用这篇博客来完成作业,同时也在oopre的世界留下自己的足迹。

最终结构图

在这里插入图片描述

迭代过程
第二次作业->第三次作业
  • 添加了继承,由具有相同属性的bottleSpell继承共同的父类item,使代码结构更加清晰
  • isdead接口:创建isdead接口,用于每次执行指令时冒险者的死亡判断
  • 创建stored容器:用于存放冒险者携带的物品
  • 创建have容器:用于存放冒险者拥有的物品
第三次到第五次
  • 工厂模式的构建:更方便地进行对象创建
  • 容器类型由Arraylist转为Hashmap,提高查找效率
  • 金钱系统和购买系统的构建
金钱系统:Adventure新添属性coin,使用givecoin()方法实现击败其他冒险者时金钱的转移
public int givecoin() {
        int sum1 = 0;
        for (int i = 0; i < equipments.size(); i++) {
            sum1 = sum1 + equipments.get(i).getCE();
        }
        int sum2 = 0;
        for (int i = 0; i < bottles.size(); i++) {
            sum2 = sum2 + bottles.get(i).geteffect();
        }
        int sum = coin + sum1 + sum2;
        return sum;
    }

购买系统:
public void bi(String bid, String btype) {
        int cost = 0;
        if (coin >= 100) {
            cost = 100;
        } else if (coin < 100 && coin >= 0) {
            cost = coin;
        }
        if (btype.matches("(Hp|Atk|Def|Mana)Bottle")) {
            Bottle bottle = new Bottle(bid, btype, cost);
            bottles.add(bottle);
        } else if (btype.equals("Sword") || btype.equals("Magicbook") || btype.equals("Armour")) {
            Equipment equipment = new Equipment(bid, btype, cost);
            equipments.add(equipment);
        }
        coin = coin - cost;
        System.out.println(coin);
    }
  • 背包系统的完善,细化装备类为WeaponArmour,创建相关方法实现战斗指令
第五次到第六次
  • 实现雇佣关系:在冒险者类中创建Empoloyee容器存放其下级,创建Employer属性记录其上级,创建雇佣和解雇方法,实现雇佣关系的建立与消除
public void guyong(Adventurer adventurer) {
        Empoloyee.add(adventurer);
        adventurer.Employer = this;
    }
public void jiegu(Adventurer adventurer) {
        Empoloyee.remove(adventurer);
        adventurer.Employer = null;
    }
  • 利用递归实现对isAllyisBoss的检验
public boolean isAllay(Adventurer a, Adventurer b) {
        if (a == b) {
            return true;
        }
        return adventurer.isBoss(a, b) || adventurer.isBoss(b, a);
    }
public boolean isBoss(Adventurer a, Adventurer b) {
        for (int i = 0; i < a.getXiaji().size(); i++) {
            if (a.getXiaji().get(i) == b) {
                return true;
            }
            if (isBoss(a.getXiaji().get(i), b)) {
                return true;
            }
        }
        return false;
    }
  • 在冒险者死亡时,通过clearmyself()方法实现关系的切断
public void clearmyself() {
        if (Employer != null) {
            Empoloyer.getEmpoloyee().remove(this);
            Empoloyer = null;
        }
        for (Adventurer a : Empoloyee) {
            a.shangji = null;
        }
        Empoloyee.clear();
    }
  • 冒险者援助的实现
第六次到第七次
  • 学习文法,词法,语法以及递归下降的相关知识
  • 使用递归下降法实现对树形雇佣关系的构建
使用Junit的心得体会
  • Junit是检验代码正确性的良好方法,在使用Junit进行代码调试时我们可以适当增加对边缘数据和特殊情况的检验,例如药水瓶携带数量超过10的情况,或者在支援时下级没有治疗法术的情况,帮助我们发现bug
  • Junit使用的便利之处在于我们可以先着眼于一个或者几个方法进行单独检验,同时自动比较预期结果和实际结果,方便我们快速找到问题
  • Junit的覆盖率可以让我们更好地对代码完备性进行判断,同时IDEA贴心地对没有覆盖和覆盖到的位置进行了标记,在一些情况下有助于我们快速定位bug的位置
学习oopre的心得体会

在oopre的学习过程中,我在实际的代码操作中对面向对象思想和Java项目的编写进行了一定程度的体会,受益良多,有趣的冒险者项目,课程的创新型以及强测的紧张刺激都让我记忆深刻。在对面向过程和面向对象的两大编程思想的学习中,我也认识到了面向对象思想在一些情况的方便之处。

封装化的类,就好像演化成了一个实体或工具,我们可以在需要时调用他们,也可以在发现错误或者需要扩展时专注于这个类进行修改和完善,这让面向对象有了很好的可复用性和可扩展性,在一些情况下让我们的编程更为方便。

给oopre的小建议

希望指导书在知识点讲解时可以更加详细,给出更多的例子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值