OO课程总结

OO课程总结

OO终于划上了句号,这学期熬夜熬得最多的一门课,掉了最多头发的一门课。

一、测试与正确性

测试是最最最常见的用来找到程序错误以及验证程序正确的手段,在之前的作业中,写完代码还是会存在很多bug,这些bug基本上都是通过测试来进行的。构建小的简单的测试样例,用来测试基本的功能,复杂的测试样例,用来测试捎带等特殊情况。

测试的优点在于,简单快捷,通过一个实际的测试样例来比对程序运行的结果和理论结果,如果相同,说明测试的功能或者模块是对的,如果不相同,说明错误。结果决定了这条测试的有效性,对比很快,测试本身不在意程序的具体实现,只是运行得到结果,出现了错误,则需要程序猿去定位错误。有效的测试数据能够规避大部分的程序错误。举个栗子,一段简单的#define pow(x) x*x,由于括号的的存在,使得这宏定义函数并不能完成应当完成的功能,从程序正确性角度很难发现问题,但是如果构造了pow(2+1)结果就会出现错误,bug就可以被定位。

测试的缺点在于,不完全。对于测试来说,想要实现全覆盖是很困难的,尤其是对于比较复杂的情况,可以实现,但是需要花费巨大的精力,无法体现简单快捷的优点。

而对于正确性论证来说,覆盖的全面就是优点。在正确性论证之前,其实我一直不太清楚JSF的正确使用方法,在论证正确性的过程中,JSF的作用立马就显现了出来,如果没有JSF,就无法得知论证过程中,需要论证的是什么。在论证的过程中,我发现了自己的代码有些繁琐,有些地方甚至是毫无用处的代码,我在论证作业中进行了整理与优化。

二、OCL语言:

OCL(object constraint language)对象约束语言,一种用来进行约束定义的,形式化的无二义的语言。作为形式化语言,有以下基本语言要素,类型,操作,表达式,语句。其中,表达式有个叫做上下文的概念,表示这个表达式所作用的范围,可以是类,类的属性和操作。

简单来说,OCL中拥有了一个编程语言需要的几种必要元素,而JSF更像是一种规范,要比OCL简洁自由很多。

三、第十四次作业

1、UML类图

2、顺序图

3、状态图

四、总结:

1、四个单元

第一个单元注重入门,现在来看第一个单元的三次作业都比较简单,多项式,简单的电梯,ALS电梯,现在来看,这三次作业对于初学者的我来说,花了很多功夫在设计以及适应java语法上。逐步优化,这三次作业基本能够适应java语言,但是让我现在再回头去看,写的十分菜,简直看不下去

第二个单元比较注重设计,起码在我编程过程中,我花了很大功夫在设计具体的类结构,数据结构上

第三单元注重工程化设计,包括JSF等等,逐次增加需求

第四单元注重于项目本身,不在局限于代码层面,包括正确性论证,junit测试,是从未接触过的船新版本

2、自己的体会

四个单元的单元式递进式设计,要比别的学校的面相对象课程难全系统很多,也更有实践性。从开始使用java都磕磕绊绊,到突然处理多线程的懵逼,到能够处理多线程问题,真的觉得自己的代码能力得到了很大的提升,熬的夜没有白熬。但是代码还是又臭又长,还需要继续码码码

经过了一个学期的OO洗礼,印象最深刻的两件事之一就是第三次作业被无效作业之后,IFTTT周三中午程序还有一个巨大的bug,甚至影响到了程序的正常运行,心态几乎崩溃,好在赶回宿舍成功找到了bug。有很多收获,更多的是教训,还能做的更好,这方面要感谢OO课程和上学期的计组课程,成长了很多。

3、对工程化开发的理解

工程化开发是OO课程另一个核心内容。从JSF到后面的Junit测试,都体现着工程化开发。一个100行的oj题,1个月以后基本就不太能记得这个函数是干嘛的,得重新看。我理解的工程化是一种更适合大项目,更适合管理的开发方式。但是对于以后的项目开发就很有益。

4、对课程的建议

1,互测与公测的关系,我是一个公测受害者,没错,公测被判无效是个挺难受的事,因为一条输出中的某一条指令缺了一个符号就被挂了所有公测点,于是换了个无效。我承认这是我自己的疏忽,无关课程组,但是我想很多有过无效经历的同学都有同感,不是因为分数没了,而是自己三四天的努力因为个人信息或者一个微小的失误没有任何的回报。

2,基于以上,建议是
个人信息应当适当放松,由助教进行管理,让学生还需要花精力在个人信息一类的细枝末节实为本末倒置。至于我这种错误,怎么说呢,我只是希望有人再因为这种低级错误被无效

3,临时变需求其实都是(指导书)的锅,助教群信息不对等,重要信息可能被水。。大家都懂

4,OO的互测机制注定了猜疑链是不可能解决的

 3,一些杂七杂八的建议
最近接触了一丢丢Spring框架,AOP依赖注入之类的概念是在课程中完全没有涉及到的。不管是国内还是国外,计算机课程都存在跟不上潮流的问题。我记得斯坦福曾经开过ios开发课程,讲oc,但是很快就被swift替代了。
这些框架可以在课程结束中稍微实践一下(当然,可能难度更高了,没事,反正不是我学*-*)
posted @ 2018-06-23 17:57  xiaoxin83121  阅读(371)  评论(3编辑  收藏  举报