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替代了。
这些框架可以在课程结束中稍微实践一下(当然,可能难度更高了,没事,反正不是我学*-*)

OO课程总结的更多相关文章

  1. OO课程第三次总结QWQ

    调研,然后总结介绍规格化设计的大致发展历史和为什么得到了人们的重视 emmm为这个问题翻遍百度谷歌知乎也没有得到答案,那我就把自己认为最重要的两点简要说明一下吧,欢迎大家补充~ 1.便于完成代码的重用 ...

  2. OO课程中IDEA相关插件的使用

    写在前面   由于OO课程博客作业的需要分析代码的复杂度并绘制UML图,但是课件上推荐的分析工具(http://metrics.sourceforge.net )经过自己几个小时的折腾还是没有安装成功 ...

  3. OO课程学期末总结

    OO课程学期末总结 测试VS正确性论证 OCL vs JSF 对象约束语言(Object Constraint Language), 简称OCL, 是一种指示用户建模系统中的限制方式. 他是UML可选 ...

  4. 面向对象设计与构造:oo课程总结

    面向对象设计与构造:OO课程总结 第一部分:UML单元架构设计 第一次作业 UML图 MyUmlInteraction类实现接口方法,ClassUnit和InterfaceUnit管理UML图中的类和 ...

  5. OO第四单元总结——查询UML类图 暨 OO课程总结

    一.本单元两次作业的架构设计总结 作业一.UML类图查询 1. 统计信息图 2. 复杂度分析 基本复杂度(Essential Complexity (ev(G)).模块设计复杂度(Module Des ...

  6. 【OO学习】OO第四单元作业总结及OO课程总结

    [OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...

  7. OO课程的完结,软件工程学习的开始

    目录 UML小结 阅读学习 大象:Thinking in UML UML精粹 UML和模式应用 本单元作业的架构设计 四个单元中架构设计及OO方法的演进 四个单元中测试与实践的演进 课程收获 三个具体 ...

  8. OO第四单元——基于UML的UML解析器总结&OO课程总结

    OO第四单元--基于UML的UML解析器总结&OO课程总结 前言:一学期愉快(痛苦)的OO课程学习结束了,OO几个单元作业都各有特色,实验也各有特色,仔细回味起来,不再是单纯的敲代码(但自己还 ...

  9. OO第四单元总结暨OO课程总结

    一.第四单元作业总结 本单元的主要任务是对 Uml 图元素进行管理和查询,测试一开始会输入一个静态图,之后会对图中相关内容进行查询. 第13,14次作业 第14次作业新增内容很少,故与第13次作业放在 ...

随机推荐

  1. .net reflector+reflexil修改编译后的dll文件

    1.用reflector打开相关的dll文件. 2.如果reflector中没有reflexil插件,点击工具栏中的Tools->Add-Ins 3.找到需要修改的文件,双击打开该文件:点击To ...

  2. Vue小案例(一)

    案例需求: 创建一个品牌展示表格,表头有编号(id),品牌名称(name),创建时间(time)和操作,需要实现的功能是对数据的增删操作,和时间的格式化. 思路分析:在开发之前需要想清楚要用到Vue中 ...

  3. August 08th 2017 Week 32nd Tuesday

    The very essence of romance is uncertainty. 浪漫的精髓就在于它充满种种可能. Romance is the glamour that can turn th ...

  4. scala基础入门

    1.scala当中申明值和变量 scala当中的变量申明可以使用两种方式,第一种使用val来申明变量.第二种使用var来申明变量. 申明变量语法 val/var 变量名 [:变量类型] = 变量值 其 ...

  5. Git本地服务器搭建

    安装编译环境,执行以下命令 [root@centos6 ~]# yum -y install curl curl-devel zlib-devel openssl-devel perl cpio ex ...

  6. java抽象继承-模板方法

    //模板方法:步骤提前设计好,用的时候只需要改步骤内容 public class TemplateDemo { public static void main(String[] args) { // ...

  7. SpringMvc+Spring+MyBatis+Maven

    使用Maven构建项目 1) 创建一个Maven的war工程 2) 在webapp/WEB-INF下创建一个web.xml文件 <?xml version="1.0" enc ...

  8. layui渲染form表单

    有时ajax请求的数据返回时,页面已经加载了,此时就无法展示ajax加载的内容,如果要局部刷新表单,则加上如下代码: layui.use('form', function() { var form = ...

  9. 1、Python代码初识

    由于python2.7版本默认使用的是ASCII码,必须在编写前加入两行代码,表示使用UTF-8码. #!/usr/bin/python # -*- coding:utf-8 -*- print('你 ...

  10. jQuery Datatable 表格插件

    Datatable 总体来说很好用,可以实现即时搜索和排序.但是只能用于数据量较少的情况下,如果数据量超过1K建议还是用表格加翻页,不然会很慢. datatable 中文网  http://datat ...