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. C#可遍历的集合

    public class Product { /// <summary> /// 自增ID /// </summary> public int ID { get; set; } ...

  2. sort 、sorted、range、join方法 数字的正序、倒叙、翻转

    大家可以想象一下 如果一串数字 是混乱的没有顺序这个时候你想要排序怎么办呢?  这个时候顺势而生的就有了sort方法 把数字从大到小的排列----->sort() 只对列表 li = [3, 5 ...

  3. switch结构可以更好的解决等值判断问题

    switch 选择结构的语法:switch (表达式){case 常量 1://代码块1:break;case 常量 2://代码块2:break;......default://代码块n:break ...

  4. Nginx学习---Nginx的详解_【all】

    1.1. Nginx简介 1.什么是nginx nginx:静态的,开源的www软件,可以解析静态的小文件(低于1M ),支持高并发占用较发少的资源(3W并发,10个进程,内存150M),跨平台 te ...

  5. Exchange Server 2007 多名称证书配置

    Exchange Server 2007上配置多名称证书,有两种方式,一种是通过Exchange Management Shell利用命令行工具进行创建:另一种是通过证书管理器控制台进行创建.本文将介 ...

  6. codeforces 812E Sagheer and Apple Tree(思维、nim博弈)

    codeforces 812E Sagheer and Apple Tree 题意 一棵带点权有根树,保证所有叶子节点到根的距离同奇偶. 每次可以选择一个点,把它的点权删除x,它的某个儿子的点权增加x ...

  7. PhoneGap 介绍

    一.PhoneGap 是什么 1.PhoneGap 是一个用基于 HTML,CSS 和 JavaScript 的,创建移动跨平台移动应用程序的快速开发框架. 2.它使开发者能够利用 iPhone,An ...

  8. maven的pom.xml文件报错问题

    第一次用 Spring Starter Project 创建一个Spring应用时,POM 文件报错: Project build error: Non-resolvable parent POM f ...

  9. iOS UI的几种模式

    iOS UI的几种模式: 1.平凡模式(原生控件组合): 2.新闻模式: 3.播放器模式: 4.微博模式:

  10. swift中的"类型擦除"

    代理模式.或者协议模式 因为swift泛型还不支持逆变和协变也就不会有真的类型擦除,而这里说的"类型擦除"是指:利用一个具体实现的通用泛型类(参看系统库的AnySequence), ...