OO第四次博客做业

OO第四次博客做业java

1、总结本单元两次做业的架构设计  git

(一)第一次UML做业正则表达式

 先po一个类图来从总体角度看一下类的设计:编程

从类图能够看出来,在类的设计上,我除了Main类之外,额外加入了四个类,其中MyUMLInteraction类仍是起到主要的解析做用,而后MyUMLClass、MyUMLInterface和MyOperation都是辅助查询的类。bash

而后在具体细节实现上,主要就是MyUMLInteraction类承担了大部分的任务,我使用了200多行代码来用做构造函数,经过两个for循环来解析出全部须要的类型,这个类的数据成员是一大堆HashMap用于存储各类UML图的类型,方便查找。多线程

而后须要我实现的各个指令的成员函数我都是在这个类中实现的,由于个人各个元素都是直接存储在各个HashMap中的,因此各类查询只能直接在这个类具体实现。架构

其余三个类都是存储一些须要的信息比较复杂,要单独统计或者单独存储的。函数

(二)第二次UML做业工具

 也先给出一个类图看一下总体的结构:单元测试

能够看出来跟第一次的架构设计几乎彻底同样。这种简单粗暴的设计直接致使了个人MyUMLGeneralInteraction类的行数高达1000行(在没有调整checkstyle以前),由于我全部的方法都是直接在这个类中实现的,而后构造函数也是高达200多行,全部的须要存储的元素我都几乎存在了这个类的HashMap中,而后其余5个类就是辅助查询的,在遇到一些具体针对某类元素的指令时能够在构造函数中统计存储好,方便在方法实现时使用。

架构的细节跟第一次做业几乎没有区别,关于类的查询彻底复制的第一次做业(这个我不知道怎么使用继承来复用上次的代码)。而后剩下的一些指令涉及到图的比较复杂的指令,我都是使用递归实现的,所以也出现了一些难以预料的bug。

2、总结本身在四个单元中架构设计及OO方法理解的演进  

(一)第一单元

第一单元其实主要是摸索面向对象思惟方式,因此架构设计几乎是没有,能把功能分摊到不一样的class类对于我来讲都是一件很是艰难的事情。

我第一次做业就是面向过程的写法,一main到底,彻底没有关于类的解析的考虑。

第二次做业天然要重构,个人第二次做业开始考虑将任务分配到Poly和Term中,细分每个部分。

第三次做业也是这个思路,只不过更加复杂,我使用递归的方法来完成任务。

感受第一单元我对面向对象的这种编程思想了解的不多,架构设计几乎是零。

(二)第二单元

到了第二单元,我以为我在一些同窗发的帖子里我获得了一些启示,尤为是第三次做业中的三部电梯,我是赞成建模的,在细节上各有不一样,这是在构造的时候须要考虑的事情,而后调度器、输入都是单独的类,将电梯这些所有分开单独建模,结构上清晰了不少。

其实第二单元是我对OO中的面向对象思惟理解跨越最深的一步,由于第二单元很是适合这种分开建模的方式,使用起来驾轻就熟。

(三)第三单元

第三单元我完成的状况不是很好,前两次做业都是一些很细小的地方出问题,而后到了第三次做业的图,我真的很晕,而后就没能交上去。

对于第三单元的架构设计,我就是按照课程组的要求来建的类,本身的架构设计考虑不多。

(四)第四单元

实际上第四单元是很是开放的单元,很是适合用来训练OO编程思惟,可是我本来这方面比较薄弱,而后加上考试之类的,我又比较笨,我写完就须要不少时间,就没有花费太多时间在架构设计上。我是采用的很是粗暴的方式(详情见一中个人这两次架构设计)。可是对于课程组下发的标程我仔细研究了一下他的架构设计,感受在这里面学习了不少。感受在第四单元的标程中,我对OO方法的理解在第二单元上又前进了一步。

3、总结本身在四个单元中测试理解与实践的演进

说实话我对于测试的掌握一直不是很好,这几个单元的测试方面作得不好。

(一)第一单元

第一单元我以前忙于写代码,没怎么看同窗们的帖子,怎么来构造随机数据,怎么使用数学工具计算获得结果,怎么批量测试。这些是我第一单元快要结束的时候我才看了这些帖子。从总的四个单元的练习来看,其实这一个单元最适合批量测试本身的程序,最适合锻炼本身使用工具测试程序的能力。

然而我第一单元测试本身包括别人的代码都没有这么作,我都是经过看代码(其实是看正则表达式)来找程序的漏洞。

(二)第二单元

第二单元中的多线程较为容易产生测试样例,可是结果判断我不太会写。后来意识到指导书中后面有提示结果的有效性有几条能够依据来写测试程序。不过我感受这个单元其实肉眼debug比其余的方法要使用,就是经过看逻辑上对不对,能够避免出现一些奇怪的bug。

(三)第三单元和第四单元

第三和第四单元能够采用老师提过的单元测试的方法,针对每一个方法进行测试,颇有针对性;也可使用JMLUnitNG来自动生成测试样例对方法进行测试。可是这些方法都是比较有限的,由于这两个单元的测试样例和结果判断不太好本身生成,尤为是第四单元的UML图,指令生成倒不是很难,可是结果判断不是很好判断。我在这两个单元本身尝试了带包编译运行,这种方法仍是要本身生成测试样例,并且还须要至少两个程序对拍,由于我本身不知道答案,只能经过与别人的对比来判断程序的正确性。

(四)总结

这从这四个单元的状况来看,第四单元的时候确定比第一单元的时候对测试的理解更加深入,对于一些方法的掌握也更多。可是自动化测试的方法掌握状况仍是不太好。

4、总结本身的课程收获

(一)思惟方式

做为面向对象课程,我以为在课程中的最大收获是get到了一个跟C语言代码彻底不同的模式的代码写法。众所周知,C语言代码是面向过程的,而本课程经过java语言向咱们介绍了面向对象的模式,与面向过程的代码在思惟上其实仍是有很大的差距的。

课程一开始的时候,其实我对于面向对象的编程思想了解的不多,而后第一次做业很简单,用C风格的java代码也能够硬刚出来,而后就感受,哎呀,这个怎么和C好像没有什么太大的区别啊,就只是换了一个语言写代码而已。可是到第二次做业的时候,就发现若是还依然使用C那种面向过程的思惟方式,代码很是的难写,并且一旦出现新的需求,那真的是酸爽。而面向对象的代码在重构方面有很大的优点,代码的可扩展性很是的强。

几回研讨课上同窗们的分享和本身这一个学期面向对象代码的编写,让我了解到了面向对象这种思惟方式和代码编写方式的优点,感受面向对象的代码很是适合作一些需求常常变化可是基本的内容又不会变的项目。固然这也不是说面向过程的C很差,这两种思惟方式各有优缺点。

(二)一些边边角角的东西

好比说我学了一门新的语言[笑哭]。。。

还有一个我以为很重要的就是学以至用吧,咱们OS课上学习了一点编写脚本的知识,而在OO课上,这个就能够拿来用做批量对比测试的工具。其实我不会写评测机,以前的做业基本上都是在理解了代码的逻辑内容来判断代码是否有bug,可是若是大数据量的测试一个一个的在IDEA的cocsole里比较的话会效率很低,因此这时候有一个脚本就会很是方便。

因为本人很是的菜,因此我只会使用git bash来编译和运行java代码并将结果输出到文件中而后使用diff来与其余的人来比较,作不到那些大佬搭的评测机的水平,而后在这么点东西本身摸索的过程当中仍是遇到了一些玄学的问题,因此我以为这也锻炼了我自学的能力吧。

5、立足于本身的体会给课程提三个具体改进建议

(一)每一个单元尤为最后一次做业给一个标程

每一个单元都是学习一类新的知识,好比第一单元学习的正则,第二单元学习的多线程等等。每此做业都要花掉我许多时间,而后还有其余课程的做业,因此我不少时候是没有时间去详细地看关于那部分的内容,而后这单元的代码也不知道能够有哪些比较规范的写法。这样每次都是只有输出没有输入,就感受每次做业只是完成了做业而已,实际上没有学习到一些新的东西。

给标程就是但愿能够经过看标程能够了解一些代码的书写规范,尤为像面向对象的代码编写方式是每次做业都要注意的,例如最后一次做业,我有一个类写了1000多行,由于我不太清楚要怎么把这些分出去,怎么继承上次写的代码,等等。还有好比第二单元,我三次做业都是使用的轮询(sleep)没有用过notify和wait,我但愿能够有一个标程来做为新的思路参考,我以为这样我能够学到不少,而不只仅只是完成每次做业。

(二)每一个单元最后能够给一个总结帖(在你们博客写完以后)

个人想法其实很简单,就是就像之前上数分高代之类的数理课,老师在一个单元结束之后会简单总结一下,这个单元里咱们学习了哪些知识点,有的时候咱们本身可能一些东西注意不到,老师提点一下本身回去再学习巩固一下会更好。

做为与数理彻底不一样的面向对象的课程,我以为这个不是学习语言为主,跟大一的时候学习C语言程序设计不同,这个主要是思惟上的学习。课程组能够配合标程,至关于给标程加的注释,标程使用了哪些重要的内容,这些东西在面向对象中对应了什么重要的东西,好比说使用了什么模式之类的。

总结帖能够很简略的提一下本单元咱们学习的重点内容,好比第一单元的重点内容在于入门面向对象程序设计和正则表达式的学习,而后配合标程能够介绍一些面向对象里的经常使用知识。

由于OO理论课不像OS、计组的理论课,介绍理论知识,而后理论知识和上机实践结合,能够明确本身要学些什么。OO就彻底是经过平时的编程做业来本身感悟要学什么,理论课上的不少东西我听了感受很是的抽象而后就不太能懂,以致于有的时候我硬刚也能够经过测试。经过这样一个帖子,明确咱们这个单元除了代码还有什么须要去学习运用的,我以为比单纯只写代码会好不少。本身总结当然有用,可是别人尤为是助教们的总结,能够给咱们指导做用,和本身的总结不是一种做用。

(三)关于评测机

评测机我以为是一个测试必备的好工具然而不是每一个人都会写评测机,关于测试方面虽然不少同窗在研讨课上作过度享,可是是一开始的时候,不少东西到了后面就不同了,好比一开始就只是单独的java文件编译运行,到后面不只是多个文件,并且会带包一块儿编译运行,而后这之中就会出现不少玄学问题,我又一次尝试带包的命令行编译运行,试了一个下午才发现了一个玄学的问题在哪里,就这种东西若是别人提醒一下就会好不少,不用花费不少时间在这种实际上没有太大价值的东西上。

我以为课程组发评测机是一个不现实的问题[捂脸],可是我但愿课程组在测试这方面能够稍微提醒一下,在关键的地方能够点一下,让咱们不至于走太多的弯路,毕竟咱们时间少,任务多。我以为测试也能够算在这个课程教授的内容里面,也是一个重要的知识点,因此但愿课程组在测试方面能够官方发一些帖子,在适当的时候能够提供一些帮助。

相关文章
相关标签/搜索