OO终章--总结博客
一、测试与正确性论证的比较
从方法上看,测试是使用大量测试样例来覆盖测试代码,从而能够检测代码的实现是否正确,功能是否完善。而正确性论证是使用代码的规格和逻辑进行严密的推论和证明,从而验证代码的实现正确性。从优缺点来看,测试的优点在于能够直观地看出测试的结果是否正确,而缺点在于难以构造覆盖完整的测试集;正确性论证的优点在于能够保证正确性和覆盖率,但是不够直观,而且论证错误不易察觉,也就是不易二次检查。
因此,在对一个程序进行设计测试检查的时候,需要二者同时使用,相互补充,使用测试集测试程序功能的完备性,使用正确性论证验证代码的逻辑正确性和严密的覆盖所有代码,这样才能对程序进行充分的测试验证。
二、OCL与JSF的比较
OCL,即Object Constraint Language, 中文译为对象约束语言。OCL是一种用来在指定的模型单元上施加约束的语言。同时OCL也不仅用来写约束,还能够对UML图中的任何元素写表达式。OCL是约束和查询语言,有一个形式化的数学语义,并且允许用户定义自己的OCL符号集。
与JSF的相同之处:OCL和JSF都是形式化的语言,都有同样的规格即前置、后置条件以及不变式。
与JSF的不同之处:JSF基本上使用的是逻辑表达式,少量使用自然语言。而OCL的表达式具有类型,且数据也有基本类型,这点和JSF有较大区别。
三、UML图
类图:

时序图:

状态图:

四、学期总结
1. 知识点总结:
第一阶段:从多项式加减到ALS电梯,一个入门的阶段,主要的知识是面向对象编程的思想,以及java语言一些基础的语法,比如正则匹配等等,较为简单,属于经验怪,前期给玩家升级用的。
第二阶段:从多线程电梯、IFTTT到第一次出租车作业,一个逐渐熟悉的阶段。主要讲解了多线程的机制,竞争和同步机制、文件监测和操作等等知识,同时对规格有了一定的要求,代码质量也更高了。这属于精英怪,对于在第一阶段没有花时间认真打怪升级的玩家来说,可能就会被这个阶段的精英怪秒杀了,然后消耗一次复活(无效作业)的机会来从头打怪升级,苦肝到深夜。
第三阶段:对出租车进行功能上的完善,添加了许多功能。这个阶段主要是对程序有了规格化要求的设计,包括JSF规格的书写,和程序的规格化设计,在总体的代码量上也有显著提升。属于boss级别的怪物,需要苦战几日,熬夜连战,才能最后干掉boss。
第四阶段:这个阶段的主要作业是对以往的代码进行验证和测试,以及正确性论证。虽然总体作业量小了很多,不用写大量代码,也不用构造复杂的结构。但是这个阶段的知识是很重要的,放在课程的最后,重要性也不言而喻。
2. 个人总结:
从一开始的多项式加减,到最后的功能强大的出租车,总共9次编程作业,说多不多,说少不少,总而言之,对于我的编程能力还是有较大提升的。最开始的作业,对于面向对象的思想还是不够理解,写出来的程序只是有面向对象的外壳,但是实际上还是一个面向过程的程序,一个方法占了100多行,质量也不高,debug还十分困难。到最后几次作业时,对面向对象已经有了比较深入的见解,对类和方法的区分比较严格,方法的代码量也不多,嵌套深度也少了,把各个模块和功能安排得比较明白,质量有了明显的提升,debug也容易多了。尽管如此,但还是有一些不足的地方,需要更深入的学习。
3. 工程化开发:
我认为工程化开发就是,首先需要规范设计好每个功能的规格。然后将各个功能的实现分发给不同的程序员实现,团队的各个成员负责自己的模块,同时又可以相互协调合作,提高总体效率,降低成本。在此基础上,良好的规格化设计和封装是必要的,大部分程序需要实现大量的功能,这对于工程化开发是必不可少的条件。
4. 对课程的建议:
其实要说平时的吐槽倒挺多的,真要给实际建议的时候,还找不到几条。首先就是指导书的问题,我相信绝大部分的同学都会提到这个,指导书写的实在是很粗糙,对于一些细节上的问题,还有几次作业的扣分点都交代得不清楚。有很多次情况就是,一些摸棱两可的问题,一开始说readme自行定义,然后发现这些条件又是必要的,在提交作业前突然通知说要改指导书的内容,这让很多同学心态会崩的。还有就是在issue里提到要更改的地方,没有正式的通知,最后询问得到的结果是自己没看issues。虽然有各种吐槽,但确实找不到更好的替代方法,包括互测的面向运气得分机制。希望学弟学妹们能存活吧。。
OO终章--总结博客的更多相关文章
- OO第4次博客作业
OO第4次博客作业 一.第4单元设计 第四单元主要围绕UML图的结构进行JAVA代码编写,对JAVA的层次结构进行更多的认识.个人认为编程操作在实质上与上一章的PathContainer有许多的相同之 ...
- OO第二单元优化博客
OO第二单元优化博客 第五次作业没有性能分,但是,我在这一单元的宗旨就是写一个日常生活中 最常见的那种电梯,所以第五次我没有写傻瓜电梯,而是直接写了个\(look\),和第六次基本相同. 总计一下lo ...
- OO第一单元优化博客
OO第一单元优化博客 第一次作业: 合并同类项+提正系数项+优化系数指数0/1=满分 第二次作业: 初始想法 一开始是想以\(sin(x)\)和\(cos(x)\)的指数作为坐标,在图上画出来就可 ...
- OO第四次博客作业!
oo第四次博客作业 一.测试与正确性论证比较 测试只是单方面片面的证明对于当前的输入程序是正确的,测试只能证明程序有错误,不能说明程序是对的. 正确性论证是程序达到预期目的的一般性陈述,是通过规范化的 ...
- [BUAA OO]第三次博客作业
OO第三次博客作业 1. 规格化设计的发展 我认为,规格化设计主要源自于软件设计的两次危机.第一次是由于大量存在的goto语句,让当时被广泛应用的面向过程式的编程语言臃肿不堪,在逻辑性上与工程规模上鱼 ...
- OO第三次博客作业——规格
OO第三次博客作业——规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...
- OO第四单元博客作业
OO第四单元博客作业 BUAA_1706_HugeGun 目录 第四单元作业架构设计 四个单元架构设计及OO方法理解 四个单元测试理解与实践演进 课程收获 一点建议 第四单元作业架构设计 ### 第十 ...
- OO第四单元博客
第四单元博客 这个单元的作业,emmmm助教们做的工作还是一如既往的多,我们只负责添一添代码,最后一次作业了,感谢各位助教和老师,同时也希望我能顺利通过这最后一关. 架构设计 第一次作业架构展示 第一 ...
- OO第四次博客作业(第四单元作业及期末总结)
(注意:本文写作顺序与作业要求不完全一致,但涵盖了作业的所有要求) 一学期的BUAA特色OO课程结束了. PART 1 我想先写我这一学期的感想 从第一单元满怀期待地写完多项式求值到最后看着60分不 ...
随机推荐
- P1006 传纸条
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- kubernetes pvc pv 坑
这里遇到一个问题,开始建立的pv死活claim为空,查看pv以及pvc的配置发现并没有任何名称上的关联,继续研究,发现纯粹是通过storage大小进行匹配的,之前因为照抄书本,一个是5G,一个是8G所 ...
- caffe 安装记录
为了使用caffe,特地装了linux系统,版本:Ubuntu14.04 X64 可参照 http://www.cnblogs.com/platero/p/3993877.html 这个博客写的更好h ...
- Notes 20180508 : Java基本程序设计结构之关键字与标识符
我们成功书写了HelloWorld后,又深入了解了main函数,提到过main并非是关键字,可什么又是关键字呢?这其实就是这章要研究的内容,本节研究关键字与标识符,在标识符中我们也会讲解一下Java中 ...
- 第一次作业:基于Linux 4.5的进程模型与调度器分析
1.操作系统是怎么组织进程的? 1.1什么是线程,什么是进程: 刚接触时可能经常会将这两个东西搞混.简单一点的说,进程是一个大工程,线程则是这个大工程中每个小地方需要做的东西(在linux下看作&qu ...
- MongoDB Python官方驱动 PyMongo 的简单封装
最近,需要使用 Python 对 MongodB 做一些简单的操作,不想使用各种繁重的框架.出于可重用性的考虑,想对 MongoDB Python 官方驱动 PyMongo 做下简单封装,百度一如既往 ...
- linux下pcf8563驱动时钟使用
环境: HelperA64开发板 Linux3.10内核 时间:2019.01.17 目标:PCF8563实时时钟驱动的使用 问题:因为pcf8563的驱动是linux内核自带的,网上也有很多分析的方 ...
- Angular vs. React - the tie breaker
https://www.airpair.com/angularjs/posts/angular-vs-react-the-tie-breaker
- c++ 变量 常量
- JAVA中使用RSA通过秘钥文件对字符串进行加密解密
技术交流群: 233513714 //字符串进行加密算法的名称 public static final String ALGORITHM = "RSA"; //字符串进行加密填充的 ...