OOpre课程总结

总体架构

    总体来说,在迭代过程并没有对于之前架构太大的改动。但有几次局部架构的调整。

    1. 将对于不同类型指令的执行从case结构调整为按照指令意义或参数类型进行分类然后在对应的具体类中再执行具体的指令。

    2. 学习完正则表达式后对于main函数和输入解析做了重构。调整之前的输入解析使用课程组提供的代码,并放在main函数中处理。调整之后单独设置了一个Input类,在main函数中只有一行调用Input中的parsInput方法。

输入解析做到了和业务代码的完全分离,同时对于新增的指令格式具有很好的扩展性,同时也让main函数变得简洁。

    3. 在最后一次迭代的时候对于工厂模式的使用。在之前关于继承的迭代中,为了新增不同种类的瓶子和装备,专门设置了一个AddUtil类来完成具体子类的初始化。本来想直接用这个类来实现不同种类物品购买的功能。但最后为了保持整个代码逻辑的清晰,最后还是使用工厂模式来完成子类的新建。否则就要在Input类中强行构造出新增物品的指令格式,破坏代码的可读性。

使用Junit的感受

    Junit是一种很有效的单元测试手段,它的一个很大特色就是能做到不同测试之间的独立,通过独立地检查每一个方法正确性,可以有效避免对整个程序debug的大海捞针。

    [注]: Juit不同测试之间的独立需要注意静态的data member, 由于静态成员在类加载时就会且仅仅进行一次初始化,故如果在对于同一个类中的不同方法进行测试时如果没有在测试前对于这些静态成员的初始化可能会导致上一个测试的数据没有清除仍然留存在其中。造成代码逻辑错误的假象。

    关于Junit覆盖率,由于对于Input类的测试无法进行,同时就情景本身还有一些不可能出现情况,但是都算在覆盖率当中,就会有时候导致覆盖率不够的情况,就不得不测试一些过于极端的数据(本身不会发生的情况)。

一点心得

    Java本身在使用上比c语言更加方便和简单。例如很多数据结构和一些常见的方法都是java库里本身就有的,可以直接调用库函数,可以更多地去考虑一个需求如何实现而不用再关注一些基础的数据结构如何实现。

    在面向对象编程的过程中,我更多考虑的是实现这个需求需要划分出什么类,这个类对应需求要做什么,不同的类之间如何交互。而在c的编程过程中,是把一个问题分成几个主要的步骤和执行次序,有一种一条路走到底的感觉。而java更有一种多条道路相互交汇的感觉。

    面向对象语言更能体现出结构化,层次化的特征。将数据和与数据相关的方法封装在一起,在逻辑上更加清晰,更容易实现分治。

最后一点就是在java中可以有效避免ctrlC,ctrlV的情况。通过使用重载,继承,多态这些面向对象语言的特性,避免了之前写c代码时频繁的ctrlC和ctrlV的操作。

一点建议

    可以将junit的要求进一步的灵活,针对不同的作业内容给予不同的要求。每次作业给予一定的结构设计的指导,或者是在本次作业结束后给予大体结构的示例,这样可以更好并及时优化代码的结构,避免后面再做开发时需要大规模的改变之前的结构。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值