一、代码架构以及迭代过程中的调整考虑
~第一次接触Java的时候,我以为和C++里面的面向对象内容差不多,也没理解oo的含义,于是乎,上手就码了一堆套着oo外壳的C++(我个人感觉这个比喻挺贴切的),并在第三次迭代的时候掉入了大坑,不得不推翻重写,属实心酸。其实我开始并不想重写,但是加之对Java的内存回收机制的理解错误,和傻傻分不清对象内存空间与对象的指针的区别,修改错误几乎不可能,所以我毅然决然选择重写(600多行啊)。
~经过一次重写之后,我走上正轨,架构一直延用至最后,不过我并没有加装接口和使用工厂之类的东西,个人感觉不适合(理解有误请指出),因为如果强用的话有点为了用结构而用结构的感觉,本作业提出的要求并不需要弄得这么复杂,要练习使用完全可以找搭配的、合适的练习,没必要简单问题复杂化。这个后面再谈。
~于是我就确定了 以类为基础,类扩展为功能细分,以对象为数据体,进行各种操作的架构,个人感觉还挺简单实用的,下面细说一下为何这几个内容就够了。
~类,顾名思义,就是对一类事物的刻画,类里面我认为应该具有该类事物的共有属性、这类事物在与其他类型事物交互时需要的方法和查看修改自己属性的方法。依托这个认识,举个例子,当冒险者需要增加一个bot时,无论是买,还是怎么样,这个操作的直接发起者当然就是直属于冒险者类的事物,于是我们可以为这个类添加一个方法,并且只要冒险者获得bot的方式不变,我们可以永远信任这个方法,不会因为其他操作而牵一发动全身,甚至细分之后,我们可以把冒险者的购买行为也认识为一个这类事物的方法,总而言之,一个类方法的增加,我们可以通过这种生活逻辑分析、归类来确保增加过程的独立性,这样构建出来的类和方法也会因为符合日常思维习惯而有较高的可读性。
~而一个类属性的增加,也可以用这种方法进行,比如我的bag类,分析之后觉得应该和adventure类耦合,于是就new了一个bag对象(很合理,我的每个冒险者都背了个小背包),并为冒险者增加了一系列针对掏背包的方法(合理,确信)。到这里,相信读者也能理解我是如何定义归类一个类应该具有的private变量了,这里就不赘述了。
~基于上述思想,在加上类扩展,和管理好每个容器内的对象,完成课程要求十分就变得十分简单,迭代时,只需需要新的类就开,需要子类就extend,分门别类整理,方法与类逻辑自洽,就好了。
二、使用junit的心得体会
三、学习oopre的心得体会
~另一个印象深刻的事物就是 buaa版checkstyle,这个上面我可是吃了大亏,我之前一直不知道每次新建git仓库链接之后,会重置,得重新配置。于是我高兴地埋头狂写,导致了一个历史遗留问题,我的主类里面永远超过60行,这也是本次oopre的败笔(呜呜)。这个代码风格属实纠正了我好多习惯,适应过程极其困难,包括一些缩进习惯,空行习惯,甚至if后面跟空格,运算符号左右加空格,{括号前面不能换行等等,属实难顶,个人觉得我以前写的代码也挺好看的嘛,结果弄得就像 “戴着镣铐跳舞”,不提了。
~至于后面介绍的工厂化架构,通过接口对类的分配、分派,我实在觉着用在oopre的操作里面别扭,我也不知道为什么,大概需要我继续学习摸索吧(加油!)。