OO第四单元

OO第四单元总结

第四单元架构设计

第一次作业

uml类图

  • 这次作业我采取的基本思路就是根据指令来建造一个简易的类图,用于查询,其中umlclass中包含了umlAttraibute,umlOperation等.整个架构分为四层,首先是main函数,然后是交互类intreation,交互类每获得一个元素,就将其送入ananlyze进行分析,analyze通过分析来将其添加到适合的位置以建造类图.最终当所有的元素都被分析完了,我们就得到了一个简易的类图,接下来交互类中的各种查询就非常简单了,仅仅就是查询类图的相关信息即可,而不是面对极其抽象的语言.但是使用此架构一定要注意分析元素的顺序,再分析元素之前要保证顺序合适以避免类的属性在类被建好之前就被分析,从而添加不到合适的位置.

第二次作业

uml类图

(由于这次作业的类非常多,所以uml类图只截取了部分,总代码约2200行.....)

  • 这次的架构相对于上次来说基本上没有太大的变化,还是分为交互层,分析层,和基础层,交互层获取元素并送入分析层进行分析,分析层分析元素并使用基础层的类构建类图,最终由交互层对建好的类图进行进行查询操作,对比于上次,仅仅是在基础层增加了一些新的元素,在分析层增加了分析类,在交互层设置了顶层交互和三个不同类型的(类图,状态图,顺序图)的交互类.第二次沿用了第一次的代码,对原来的代码几乎没有改动,也没改变架构,仅仅是增加了一些种类.

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

第一单元

  • 第一单元基本上谈不上什么架构设计,甚至是连基本的面向对象的思想还不是很适应,还是用的老一套的面向过程式的写程序,几乎所有的代码都集中在一个类中,就是main类,导致这个类非常臃肿,基本就是为了完成任务而应付着写的,也谈不上会考虑迭代方面的问题,第一次的作业代码,基本上第二次就用不上,所以几乎是次次重构,类的数目虽然每次作业也有所提升但基本是为了应付,是为了分类而分类,多个类在当时使用时也非常的别扭,还是在想为什么不把所有东西放入一个类中,这样写着也方便.

第二单元

  • 第二单元是多线程,这一单元的最大收获也是多线程,并发的理解,一千从未接触过,甚至是根本无法想象多线程并发的程序是怎么写的,经过这个单元,从最初的只会一条道路看问题到学会用并发的角度来看待问题.当然,除此之外,就是对面向对象的概念总算有了初步的适应,已经开始习惯着用面向对象的方式来思考问题,写代码了.至于说架构方面,就是开始以类为单位来思考架构了,以及以多线程资源共享的架构来思考问题,还知道了设计模式的概念,整个单元运用了单例模式,观察者模式,还有生产者-消费者模型等等.

第三单元

  • 第三单元是JML,通过这一单元知道了规格化的方法,也初步体会到了规格的威力,自然语言的二义性真的是一个硬伤,我个人也有很多关于理解错题意而导致出错的不好的回忆.使用规格化语言就可以避免自然语言的二义性问题,这无疑是极好的,有了规格,无论是写代码也好,测试也好都会变得非常的方便.但是硬伤是规格写起来真的是非常麻烦,简单的方法,本身实现就很简单再去专门去写规格就会显得非常的不值,而复杂的方法写起规格就会极其复杂,首先要确保你的规格是绝对正确的,这一点就已经非常困难了,其次,写出来的规格又极其抽象复杂,读起来非常不友好.所以这样下来,规格化语言的地位就会显得非常尴尬了.至于这一单元的架构设计,我首先要吐槽一句了,说好的最难的都在前两单元,最后两单元非常简单呢?,尤其是第三单元的第三次作业,我个人认为可谓是整个OO的难度巅峰了,在这次作业里,你要有扎实的数据结构知识,你需要有一个性能良好的算法来保证你的程序不会超时,而由于这次代码量也很大,所以还要有一个清晰的架构.当然,与之相对的,对算法,架构,基础知识等都是一个很大的考验,做完之后提升也不小,对OO又有了更深一层的理解.

第四单元

  • 第四单元是UML,UML比起JML就显得非常直观,通俗易懂了.在真正下手之前,有一个UML图还是非常不错的,对自己来说,先构造一个清晰易懂的图形会使得接下来写代码的过程中不会迷茫和混乱.我以为这一单元会是让大家真正动手画UML图,还在考虑该怎么评判,结果作业竟然是一个UML分析器.当然,这次的收获也非常多,主要是学会了对代码进行层次化封装,我这次作业就将其分为了交互层,分析层,和基础层三层,然后接下来的代码之路就异常清晰和简易,所以可以看到一个良好的架构对编程效率是多么的重要

四个单元中测试理解与实践的演进

第一单元

  • 第一单元的测试方法非常简单,就是人肉测试,自己会想一些边界数据,或者特殊值等,以及自己在写代码的过程中写出的bug所对应的测试数据,然后是一些随便编的数据.

第二单元

  • 第二单元是多线程,多线程测试起来非常复杂,主要是因为很多的bug都不能复现,而直接使用idea的单步运行在多线程里就几乎无用了,最原始的测试方法就是printf这样其实测试起来效果还不错,但是和其他同学交流后知道直接输出的话是有一些问题在里面的,之后在课上又听说了断言测试,以及可以使用log的方式进行测试.

第三单元

  • 第三单元是JML,既然是JML当然是使用JML独有的自动化测试咯,但是,老实说,测试用的那几个软件安装起来非常复杂和繁琐,废了很大功夫安装好后发现所谓的自动化测试的效果却非常不仅人意,测试的事件消耗非常长,却仅仅是测试了它所谓的边界数据(其实一点也不边界),导致真正的bug并没有被测出来,所以对我个人来讲就全当摆设了.这一单元的最大收获还是Junit,Junit的体验就非常好了,测试起来非常舒服和方便,简直是为我的测试手段打开了一个新世界一般.

第四单元

  • 老实说,这一单元在测试手段上并没有什么突飞猛进,而由于源文件是个图,我也没办法进行自动化测试,不过倒是对以前掌握的一些测试方法进行了巩固.

课程收获

  • 通过这门课,我从一个只会写C代码,毫无架构,随心命名,面向过程的小白初步成长了很多,对代码规范,代码架构,代码测试等都有了非常大的提高.尤其是掌握了面向对象的思维方式,使得我现在的思考问题角度有了很大的扩展,在以前写一个一二百行的代码都痛苦无比,整个代码一团乱麻,抽象难懂.现在最后竟然写了一个两千多行的代码还能保有一个清晰的架构.感觉我也没有经历过什么算法上的提升,也没有经过真正意义上的代码的大量训练,而能够提上如此之多,关键是思想上和以前完全不一样了.

建议

  • JML这一单元的体验真的非常不好,非但没有让人想去使用它,反而对其更加反感
  • 一个小bug可能导致强测全面崩塌,导致最终付出和汇报的比例严重失衡,所以建议强测也可以修复
  • 说好的后两个单元简单,结果第三单元第三次作业难度直接在所有作业上提升了一个量级,第四单元则直接让我写出了2200行的历史新高.
posted @ 2019-06-23 23:11  MioKun  阅读(253)  评论(0编辑  收藏  举报