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分不 ...
随机推荐
- utf-8 转码--网址转码
NSString *name = @"联通测试"; NSString *utfName = [name stringByAddingPercentEncodingWithAllow ...
- RadioButtonFor值为false.默认选中的问题
(自己看了下.图片有点宽.显示的不全.可以右键新标签查看) 作为一个新手.今天又开始了mvc的学习之旅.然而学习过程中又遇到了一个奇妙的问题.... 一切按部就班到了这里.注册界面. 一眼看上去就不对 ...
- 解决:Cannot load ocl.dll library(error code 126). The ocil.dll library may be missing from the system
因为这两天在做将springboot 项目使用的数据库MySQL转换为Oracle数据库,所以在网上查找相关资料后开始使用 Convert-Mysql-to-Oracle4.0做转换: ...
- #leetcode刷题之路49-字母异位词分组
给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串.示例:输入: ["eat", "tea", "tan" ...
- react fake double , bind click and dblclick on the same element
smartClick:function(id,name,waiter,e){ var desk = $$(e.currentTarget).data('raw'); if(this.lastClick ...
- 20155236范晨歌 Exp2后门原理与实践
## 实验二 后门原理与实践 1.Windows获得Linux Shell 在windows下,打开CMD,使用ipconfig指令查看本机IP ncat.exe -l -p 5236监听本机的523 ...
- 20145209刘一阳《JAVA程序设计》第十五周补充测试
第十五周补充测试 1.实验楼Linux中可以通过(ABC)查看用户登录情况. A .who B .who am i C .who mom likes D .who are you 2.在 Linux ...
- css文字环绕
html: <div class="wrap-div-topSpacer"></div> <div class="wrap-div" ...
- jQuery学习-显示与隐藏
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Gitlab+Jenkins学习之路(九)之Jenkins的远程管理和集群
一.Jenkins的远程管理 Jenkins的远程管理方式包含: Shell ssh SSH Plugin ansible.saltstack (1)Shell ssh在项目构建时,jenkins使用 ...