BUAA-OOpre课程总结与反思

BUAA-OOpre课程总结与反思

​ 对于OO课可以说是又爱又恨。由于假期没学计组的教程,导致开学后压力陡增,正值水深火热之际,OOpre的迭代开发作业露出了它的獠牙,给予我迎头痛击。熬过这段艰难的日子,回过头看,可以说是大有所获。

架构设计

刚接触OO课,我的思想还始终遵循着“面向过程设计”的思路,所以最初的架构设计极其不合理。发现架构不合理、想要修改的时候,已经学无余力了,只能在微小的地方进行改善,这才使得代码没有成为“*山代码”。

最终架构设计

架构类
类名内容
Main在Main中创建冒险者列表、总日志列表(按时间排序)、商店、处理系统
Market负责管理向冒险者出售商品、收购冒险者的物品
Fight负责处理与战斗有关的事物(一对一、一对多战斗)
Control负责对各个指令进行处理、调取类的方法
Fightlog战斗日志类,负责生成不同类型的战斗日志
Commodity价值体接口,能够获得价值体的类型以及价值
Employer雇主接口,实现增加雇员、通知雇员、更新雇主状态
Employee雇员接口,实现对雇主的支援
Package背包类,实现对携带物品的管理
Bottle药水类
Food食物类
Equipment装备类
架构图

在这里插入图片描述

架构调整与考虑

​ 与大多数同学相比,我的类比较少。其原因主要是最初没有做好架构设计,当需求发生变化(增加了BottleEquipment的种类)时,有两种处理办法。其一就是标准处理,新增不同种类,继承自BottleEquipment;第二是对于我之前的架构而言,为BottleEquipment增加一个type属性。权衡利弊后,我发现我这种架构采用第二种方法工作量更小,于是没有做继承处理。

​ 最大的架构调整是新增了战斗系统以后,为了处理战斗日志以及战斗日志的查询,我新增了Fight类以及Fightlog类。当时还在冒险者的属性中新增了“受伤记录”,用来快速处理战斗中冒险者的体力变化以及之后的日志查询。

对合理架构的想法

​ 在我看来,可能更加合理的架构是这样的:

  1. 设计一个“读入类”,读入所有的指令并作指令划分,将划分后的指令传递给“操作类”
  2. “操作类”负责接收划分好的指令,调用对应的处理方法
  3. 不设置“背包类”,而是利用Commodity接口在”冒险者类“内部生成背包,避免出现调用冒险者方法后又调用背包方法,这样不仅减少了代码量,还有利于debug(如果设置背包类,那么冒险者携带的物品、背包携带的物品要保持高度一致,不能出现冒险者的物品已经丢掉了但是背包里还有该物品的情况)
  4. 对不同种类的BottleEquipment做继承处理
  5. 其余沿用之前构想

Junit部分

​ 说实话,由于架构的不合理(很多方法需要调用Scanner),导致Junit测试总是过不去,久而久之便放弃了Junit处理,我对此感到很抱歉。但是在写完代码测试的时候,Junit能够帮到我很多。比如分支率测试时,我可以通过观察某条分支是否会经过来判断该处有没有bug,诸如此类。

​ 在之后的OO正课中我会尽量采用输入统一处理,避免这种情况的发生。

学习OOpre的心得体会

​ 在OOpre之前一直接触的是”面向过程编程“,在最开始的几次作业中有很多地方体现着”过程“思想而非”对象“思想,对之后的作业产生了不良影响。如今回看,对OOP有了一些基本的认识:

  1. 抽象与封装:

    • 面向对象编程:OOP 强调抽象和封装。它将数据(属性)和操作(方法)封装到对象中,以便对象可以通过暴露的接口进行交互。这有助于隐藏内部实现细节,使代码更容易理解和维护。
    • 面向过程编程:面向过程编程更加关注函数和算法,通常将数据和功能分开。数据通常是全局的或传递给函数作为参数,而函数执行特定的任务。
  2. 继承与多态性:

    • 面向对象编程:OOP 支持继承和多态性。继承允许创建新类(子类)基于现有类(父类),并继承其属性和方法。多态性允许不同对象(类的实例)对相同的消息做出不同的响应。
    • 面向过程编程:通常不支持继承和多态性,其焦点更多地放在功能性编程上。
  3. 代码重用性:

    • 面向对象编程:OOP 通过类和对象的概念实现代码重用。可以使用现有的类创建新对象,减少了代码的重复编写。
    • 面向过程编程:通常需要在不同部分之间复制和粘贴代码,因为没有类和对象的概念来实现代码重用。
  4. 复杂性管理:

    • 面向对象编程:OOP 有助于管理大型和复杂的代码库,它提供了更好的组织和封装。
    • 面向过程编程:在大型项目中,代码通常更难维护和理解,其缺乏 OOP 的组织结构。
  5. 程序的自然性:

    • 面向对象编程:OOP 更贴近现实世界的概念,因为它使用对象来表示现实世界的实体和关系,这使得设计和开发更自然。
    • 面向过程编程:更偏向于以程序执行的顺序为基础的抽象,可能不如 OOP 在处理复杂问题时那么自然。

对OOpre课程的简单建议

​ 建议降低Junit要求,我觉得很大一部分同学在刚接触OOpre时对数据的统一读入不会太重视,这就导致Junit测试中部分方法难以测试,难以满足Junit要求,使得Junit测试成为一种负担,脱离了设置它的初衷。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值