OO第四单元总结——uml图及学期总结

OO第四单元总结——uml图及学期总结

1.本单元架构设计

由于三次迭代设计,三次作业没有重构,只是在不断地增加设计,所以一下是三次作业的类图。




基本上不停的使用hashmap进行查询,其中有不少类是同名的,并且查找时是通过名字查找,并且需要判断是否有重名元素,所以基本上都需要两个hashmap,一个存id->class,一个存name->arraylist(id).

对于一些需要更新继承的信息,一般有一个标记位,来判断是否完成更新,如果已经完成,就不需要再次搜索。

多个检查规则在相应的图类实现,然后回馈给Myumlgeneralinteraction.

总体来说,作业并不难,只是需要使用恰当的数组组织形式,来处理大量的数据,然后进行搜索。但是代码量对于我来说有些大,而且对于uml图的理解也有些困难,导致写的很烦躁,写出来不少bug。

而且感觉写着写着就写乱了,脑子不是很清晰,导致实际上代码实现中有很多功能一样的方法写了好几个,很是多余。

2.四个单元中架构设计OO方法理解的演进

事实上,感觉第一、二单元架构设计的重要性比后两个单元更加显著。前两个单元的架构设计直接影响到,代码实现的难易程度,新增需求难易程度。但是后两个单元架构设计的重要性显得没那么重要,不同架构设计实现的差距不大。

第一单元

第一单元,对于我来说深刻的体会到了什么叫做真正的面向对象。

第一单元的三次求导,我几乎次次重构了,但是好在第三次我回归到了真正面向对象的正轨上来,主要体会是架构设计对于程序实现难度以及增设需求难度的直接影响。

能够把每个多项式、项、因子抽象成一个待处理的对象,然后丢给相应的类去处理,这种相应的类处理自己的问题然后再反馈给上级,层次清楚,而且对于嵌套也可以轻易地解决。这次作业是真正的感受到了那么一点面向对象的感觉。面向对象首先需要对问题进行抽象,抽象成对象,然后各个对象自己处理自己的事,之间反馈信息来进行交流。

第二单元

第二单元,主要学习了多线程,还有学习了电梯调度算法。

这一单元的学习主要感受到了架构设计直接影响程序的稳定性。架构设计的不好,遇见bug只能不断地补丁,在多线程这种情况下,甚至于遇到一些不可复现、无从下手的bug,完全没法修改。与其不停的修bug,更重要的是在下手写之前,先仔细考虑考虑架构,架构搞好,一切实现起来会非常容易,而且bug也更容易解决。

但是在构思架构中需要对问题进行抽象处理,我感觉我对于问题的抽象处理不是很OK,所以电梯完成的也不是那么顺利,这一点还有待提高。

第三单元

这一单元主要学习了jml,以及温习了图的一些算法。架构设计以及面向对象思维没有太大的体现。

架构设计主要影响在你的程序运行时间上,这次卡时间卡的比较严,需要在一些细节上实现程序优化。比如合理的容器选取,设置缓存等。

这一单元强测不强也直接把我不会自我测试的弱点展现的淋漓尽致。

写完程序懒得测试是不可行的。但是不测试也不一定会出bug,都是一些普遍的算法,但是我一旦代码量大的时候,脑子总是会不大清楚,导致会出现很多手误。工程能力还是有待提高。

第四单元

这一单元主要掌握了提取数据、管理数据的能力,架构设计主要需要自己对系统问题进行剖析,分解,逐个抽象。

总体代码量达到我的巅峰,我还是写出了bug。这一单元对于架构设计以及面向对象思维还是有一点考量的,但是对于程序来说,架构影响不大,但需要对大量数据进行合理的抽象管理,所有的数据管理都需要自我去设计,而且数据种类很多,还是有一点麻烦的。

这一单元,对于数据的抽象能力、整合能力有很大提高。

强测中个别点的设置也让自己看到了自己程序的局限性,设计的不合理性。

前两个单元架构设计更加宏观,主要是进行大方向的设计,后两个单元架构设计更加细节,需要对每一个方法进行仔细的考虑。这四个单元下来,可以说对于什么是面向对象有了更深的了解,面向对象就是把有关数据方法抽象成为一个整体,然后各个整体之间进行通信。但是对于问题的抽象建模能力还是没有很大的提高,需要更加的努力。

以及深刻的体会到了程序的灵魂在于架构,架构的设计才是我更多需要去考虑的。

3.测试理解与实践的演进

完全不会自动化测试的菜,第一单元勉强可以靠着手动测试苟延残喘。

第二单元和室友合作写了自动测试程序,但是写的比较low,也没什么大的用处。

第三、四单元,疏忽大意,随意测了几个样例,以为比较简单就没有深度测试,导致全面翻车。后来在博客完成环节尝试使用Junit进行自动测试 。但是我现在对于Junit还是没能掌握很好,没能很好地利用这一工具,感到有些遗憾,假期可以再学习。

测试这一方面完成的很不好,直接导致我强测翻车还有实验的困难,希望假期可以完善对于程序的测试能力。

从前一直都是写完上交,从不自己测试,没有意识到测试的重要性。现在意识到了,但是能力有限,需要更多的时间来进行学习,在测试能力上还没有得到提高。

4.课程收获

OO课程开始之前,有关的传闻听到不少,着实令人头秃。

没想到,竟然这么快也一路走过了,感觉这门课累是真挺累的,但是也真的给人带来了很大的提高,无论是编程能力,还有编程思维。

首先在编程能力上,我完成了很大的代码量、对于处理较大问题的能力有了一定的提高,熟练掌握了java,了解多线程等相关知识、掌握了一些优化方法,比如缓存、多个容器等。

思维能力的培养是课程更加看重的,也是我收获更大的。

在编写程序时,不再上来就写,一边写一边想。而是尝试着去思考问题,将问题抽象成几个方面,逐步进行解决,首次尝试在一个更加宏观的角度上,更贴近生活的角度去概括问题,建立对象。也是首次意识到,程序的架构设计不仅仅有关代码的美丑,而且直接关系到程序实现的难易、程序稳定性、以及程序的速度。

研讨课上,老师总说,在写程序前,先想象,你手下有好几个程序员,如何合理的把任务分配给他们?现在有点感受到这句话的意思了,我现在基本能做到可以把任务分配给几个程序员去做,但是可能有时候分配的不合理,导致他们非常痛苦。所以,我对于问题的宏观抽象能力,还有待提高。

除此以外,对于程序的优化考虑的也更多,程序能够实现功能是太低级的要求了,如何能让程序跑出可用的结果才是更加难以突破的。第一单元,对于优化,只是浅浅的优化了一下,第二单元,优化主要还是从调度算法上进行的考虑,第三单元、第四单元就仅仅从缓存、容器等上面考虑。每次因为我写的也比较慢,能力比较弱,也没有更多精力考虑更深层次的优化,而且更怕做多错多,但是这方面能力还是十分重要的。就像第一单元,一开始大家觉得性能分数占20%,太高了。但是一想,没优化的程序跑出来一大堆结果,完全不能用,这样的程序写出来又有什么意义呢?所以可能今后如何优化也是更加需要考虑和增强的点。

虽然我写出了不少bug,可能会扣很多分,但是好在这些bug我都完成了修复。只要有所收获,其他的也都不是很重要了。

5.建议

在第一单元能在架构上多给一点提示吧,作为刚刚开始OO的小白,我第一单元次次重构,觉得暗无天日,感觉对人生都失去了希望。第三单元的Junit,相关教程太少,安装等等花费很长时间,结果取得的测试效果并不好。

指导书可以详细一点,有时候有很多歧义的地方需要大家在讨论区得到答案,希望这些地方可以得到补充。

研讨课希望可以参与度更高吧,尽管我目前也没想到什么方式。

6.线上学习感受

疫情原因,在家里进行了一整个学期的学习,OO的课程设置导致在家里学习也没什么影响。

而且感觉更加快乐的是课上视频可以保留下来,随时看,反复看。

至于视频缺少了与老师的互动,都在微信群里得到了极大的补充,其实我觉得线下上课,课堂并不会比微信群更加活跃,毕竟社恐的人很多,大家都挺喜欢在屏幕后发表自己的看法。但是唯一遗憾的是不能一睹老师and助教的真容?不过颁奖典礼应该会……

总体来说还是非常满意OO的线上学习的。

posted @ 2020-06-17 19:31  tritri  阅读(205)  评论(0)    收藏  举报