OO第一阶段总结

初学OO,上手并没有想象中的那么复杂,因为有了C语言的基础,所以在语法上很快就接收了,但面向对象的思想确实晦涩,经过三次课下作业终于有了点心得体会。

第一次作业

第一次作业是关于多项式加减法,要求使用JAVA编写能够实现多项式加减的面向对象程序,结果写出来,个人感觉只是多了一个类,面向对象?不存在的。这个从类图里就可以看出点端倪。

可以看到,我的Poly类十分臃肿,有点成为GOD CLASS的潜力了。而且,由于数据结构构建出现了偏差,直接将整个多项式而非多项式的某一项单独构建成一个对象,进一步加剧了Poly类的复杂程度,相比而言,main函数则显得有点瘦小。第一次写面向对象的程序,并不能称得上是良好吧,但有个好处就是,反思之后,为下面的作业提了个醒,面向对象各个类之间各司其事,更要注意类之间的平衡,不能搞得有些类吃白食啥事不干而另一些类真的太累了。

度量

BUG

第一次作业的BUG主要源自于对作业要求不明确,许多错误都是边界条件控制不当,检查他人的代码也发现了相同的问题,如作业要求输出小写的error,他完全使用大写ERROR,这些错误都是可以避免的,至少不会再次出现。

第二次作业

第二次作业有了老师在课件中对类和对象的安排作为指导,明显感觉自己的JAVA程序更加面向对象了,从类图中来看,Scheduler类中使用了Req类和Reqqueue类类进行调度,而Reqqueue是使用Req对象来构造队列,而电梯对象获取请求并响应请求,而输出也在电梯类中执行,而main函数则构建了电梯对象和调度器对象,各个类之间各司其职,体现了面向对象的思想。各个类之间也基本做到了平衡。从第二次作业开始,对面向对象的思想已经有了初步的概念而且也能够写出体现面向对象的程序。

度量

BUG

第二次作业的BUG依旧是边界条件没有控制好,但相比第一次作业已经有了很大哦的好转,而从其他同学的代码来看,面向对象的思想依旧没有充分的体现,部分类处理的信息太多而其他类几乎什么事都不做,导致了功能未完全实现,而且代码十分混乱,错误较多,这也值得我们反思。拿到要求后应该充分了解需求,构造好outline之后再开始写,而不是直接上手,到时候东改改西改改,就会极大影响程序功能和代码可读性。

第三次作业

第三次作业确实是一个挑战,拿到作业之后看需求看了好久,脑子里还是没有产生一个程序的基本的outline,实现ALS_Schedule的调度确实有一些坎,其中很大一部分是对捎带的判断。而且稍有不慎就会对电梯类大改造,加重电梯类的负担,而且完成之后发现对第二次作业并没有完好的继承,核心的方法并没有继承下来,反而是那些很简单的边边角角的方法给继承了下来,没办法,作业要求要继承。其中,明显感觉到全局变量对继承父类的拖累,因为如果直接继承方法的话,父类的全局变量是子类无法改变的,就会导致一系列问题,通过这次作业,知道了全局变量应该少用和慎用,传参传多一点没关系。

从类图中可以看到,第三次作业类之间的关系复杂的多,而且继承原调度器类的新调度器类又加入了许多全局变量,主要考虑到如果不使用全局变量的话,类之间传参就会变得十分繁琐,作出了妥协,同时,电梯类并没有变得臃肿,新的调度器类继承了原调度器类的uselessReq方法用来判断两个请求是否为同质请求。

度量

总结

经过三次的训练,对面向对象的概念已经有了一定的概念,也能写出体现面向对象思想的程序来,重要的是,学会了对边界条件的控制,在README文件中一定要申明,否则会引起模糊和误解。接下来是对多线程了练习了,看自己的表现吧。

posted @ 2018-04-02 20:11  Nipo  阅读(189)  评论(0编辑  收藏  举报