oo第四单元暨课程总结
第四单元架构设计总结
第一次作业
单独写了MyUmlClass、MyUmlInterface、MyUmlOperation
三个类对应UML中相应元素,在UML图中这几个元素包含一些下级元素,如Class包含Operation、Attribute,Operation包含Parameter等,所以就单独设立了新类,将下级元素当作新类的属性存储。所以如果要找一个类的某个方法的参数,就可以找到对应的MyUmlClass
,然后根据其属性依次向下级查找即可。另外在MyUmlInteraction
的构造方法中对elements进行解析分类,并主要用Hashmap
和Arraylist
容器存储,方便查询和遍历。
第二次作业
因为这次作业有三种图,就分别在MyUmlClassModelInteraction、MyUmlCollabroationInteraction、MyUmlStateChartInteraction
三个类中分别解析类图,顺序图和状态图,并都在MyUmlGeneralInteraction
类中实例化,在该类中的方法中直接调用解析对应UML图的类的方法。与第一次作业类似,将有下级元素的元素单独设立一个类,状态图的解析中新增了MyUmlState
类和MyUmlStateMachine
类,顺序图的解析中新增了MyUmlInteraction
类和MyUmlLifeline
类,对应 实现与第一次作业类似。
第三次作业
这次作业新增了异常检测,整体架构上并无改变,就是新增了一个MyUmlStandardPreCheck
类,并在解析UML图的三个类中新增了一些属性,方便检测UML是否有错误。同样将MyUmlStandardPreCheck
类在MyGeneralInteraction
类中实例化,进行错误检查。
四个单元架构设计及OO方法理解的演进
第一单元
写第一单元作业的时候对于面向对象的思想还不是很理解,所以很多类及类之间的关系就写的很丑,现在回头去看简直惨不忍睹。所以在写这一单元的时候基本每一次作业都进行了重构,在最后一次作业才勉强算是符合多项式->项->因子的分层设计,架构也勉强符合高内聚低耦合的原则。不过在错误中学习,效率反而更高。所以第一单元过后,每次写作业都能按照面向对象的思想来设计架构编写代码了。
第二单元
这个单元同样涉及到以前从未接触到的新知识——多线程。第一次作业的时候真的是对于多线程思想难以理解,对于如何进行同步及加锁等问题很是困扰,不过大量看多线程相关知识之后勉强写好了第一次作业。第一次作业之后对于多线程有了一定的理解,第二、三次作业就相对简单了,在第一次作业架构上进行少量扩展就行。这单元主要考察的就是对于多线程的理解和调度算法的设计,只要能理解透彻多线程的概念及选好相应的算法还是比较简单的。
第三单元
第三单元的架构官方包已给出,自己仅需根据JML实现对应方法即可,这个单元考察的应该是算法及对JML的理解还有对细节的把握能力。这个单元理论上是最简单的一个单元,但这个单元的第一次作业却是我扣分最多的一次,原因是少写了一个判断条件,有了第一次作用的教训,后两次作业就仔细看每一处细节,并且为了防止TLE就尽量优化算法。这个单元学到了JML,同时也复习了一下算法。
第四单元
第四单元的架构设计还不错,每次作业都只在上一次基础上新增了一些类以及方法。这个单元最困难的是对于UML图的理解并将其与所给代码关联起来,理解了这个写起代码来还是比较简单的。这单元也是最舒服的一个单元了,代码写起来很平滑,每次新增代码量也不多,写完也没出现什么bug。
四个单元测试与实践的演进
最开始对于测试只停留在肉眼构造数据检查上,但随着作业推进以及讨论区同学们的分享,慢慢也学会了许多测试方法。第一单元的后两次作业就开始自己写评测机自动进行大量测试,效果也很不错,毕竟一个个看代码太累,而且很难发现隐秘bug。
第二单元也学习了定时输入的方法搭建评测机,但遗憾的是生成的数据很少有极端的,互测中没发现几个bug,不过这次也提醒我有了评测机也应该自行多构造一些极端数据,防止评测机难以覆盖到这些极端情况。
第三单元则学会了Junit单元测试,一开始觉得很鸡肋,还是一样要自行构造数据,后来真正上手后才发现用处还是很大,可以针对某一个方法或类进行全方面的测试。第四单元则是自行画一些复杂的UML图来进行测试。
这一路过来学会了很多测试方法,不在停留于以前的手捏数据测试,毕竟这样“手捏”的数据很难保证测试全面,通过了可能还有很多隐秘bug。
课程收获
这学期的OO课程下来,收获还是挺多的,首先学会了面向对象的思想,以及关于java的各种概念知识,还学会了多线程,了解了JML、UML等。同时对于测试方面也有了较深的体会,好的测试时非常重要的,没有经过全面测试的代码表面看上去没什么问题,但其实可能隐含着许多bug,在强测中很容易翻车。
另外很重要的一点就是写的代码变“美”了,现在回头去看以前的代码,是真的“丑”,因为毫无规范,各种方法之间混乱调用,类中的方法胡乱去加,还有“一main到底”、方法臃肿等问题。但经过了一学期OO作业的洗礼,这些问题都改正了回来,而且因为checkstyle,代码不再会有臃肿的地方,看起来简洁易懂,checkstyle对于空行空格等规定也使代码看起来很舒服。
三个具体的改进建议
1、第二单元第一次作业难度可以适当下调一点,而第二次作业可以上调,刚开始对于多线程这一概念很难理解,对于锁这一概念也一窍不通,所以第一次作业花了很多时间来理解概念,而有了第一次作业的基础,后面的作业就有点简单了,只需稍微改一改代码就行。
2、第三单元后面就感觉完全是在考察算法了,跟JML理解关系不大,所以我觉得可以适当减少第三单元作业次数,或者做一些改变增大对JML的考察。
3、另外就是大家都说的实验课吧,我觉得每次实验课后可以公布一下成绩,可以跟平时作业一样分数发布在course上,就算不发布分数,至少也可以发一下答案。不然每次做实验就跟白做一样,完全不知道自己正确与否,也不知道自己哪里还需要改正。
线上学习体会
线上学习OO和线下学习并没有很大区别,理论课采用录播的形式反而更符合自己的学习方式,可以自由安排时间,重点看比较重要的点。平常作业和实验课影响不大,唯一有点影响的是研讨课,不能见到亲爱的老师和助教以及可爱的同学,还是很可惜的。但内容上影响不大,腾讯会议形式同学们也很积极,也可以从研讨课中学到很多干货。
最后感谢助教们和老师们一学期辛勤的付出,为我们可以舒服的学习OO课程做了很大努力,希望OO课程越来越好。
oo第四单元暨课程总结的更多相关文章
- oo第四单元及课程总结
一.第四单元作业总结 第四单元有两次作业,第十三次作业是实现一个UML类图解析器,可以通过输入一些查询指令来查询一些类图的信息.程序的主干部分已经提供,我们的任务就是实现给出的接口,过程并不繁琐.第十 ...
- oo第四单元与课程总结
Part1 本单元三次作业架构设计总结 1.组织结构 由于官方代码中已经给我们提供了许多零散的类元素,如UmlClass``UmlAssociation``UmlParameter等,因此我首先将某些 ...
- oo第四单元作业总结暨课程总结
oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...
- OO第四单元总结暨期末总结
OO第四单元总结暨期末总结 目录 OO第四单元总结暨期末总结 第四单元三次作业架构与迭代 整体感受 HW1 HW2 HW3 四个单元架构设计与方法演进 Unit1 Unit2 Unit3 Unit4 ...
- 【OO学习】OO第四单元作业总结及OO课程总结
[OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...
- OO第四单元总结及课程总结
OO第四单元总结及课程总结 一.前言 紧张刺激的OO“昆仑课程”接近尾声,经过一个学期的学习,我的收获和感触颇多,借此博客作业的机会,对自己OO这门课程做一个总结.本博客主要有以下五个方面,一是第UM ...
- OO第四单元——基于UML的UML解析器总结&OO课程总结
OO第四单元--基于UML的UML解析器总结&OO课程总结 前言:一学期愉快(痛苦)的OO课程学习结束了,OO几个单元作业都各有特色,实验也各有特色,仔细回味起来,不再是单纯的敲代码(但自己还 ...
- OO第四单元总结与课程总结
OO第四单元总结与课程总结 第四单元作业架构设计 总体分析:本单元作业的需求集中于对UML类图进行查询.对于查询操作来说自然的想法是提前预见到需要查询的内容,在一开始就采用适当的数据结构将必要的信息进 ...
- OO第四单元与全课程总结
OO第四单元与全课程总结 一.作业代码架构设计 1.第一次作业 作业类图如下: 具体架构设计: 第一次作业的全部查询工作都是和类图有关,需要解决的主要问题就是如何解析原有UML类图数据的结构,并形成自 ...
随机推荐
- vscode Paste Image插件使用
Paste Image 在编写md需要插入图片,这个插件可以将粘贴板的图片保存到本地资源 假如我在/readme.md中编写文档,我需要将粘贴板的图片放在/images/下面,配置两个关键配置即可: ...
- C++算法代码——质数的和与积
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1682 题目描述 两个质数的和是S,它们的积最大是多少? 输入 输入文件名为prime ...
- Google单元测试框架gtest之官方sample笔记1--简单用例
1.0 通用部分 和常见的测试工具一样,gtest提供了单体测试常见的工具和组件.比如判断各种类型的值相等,大于,小于等,管理多个测试的测试组如testsuit下辖testcase,为了方便处理初始化 ...
- 微信小程序:应用生命周期
小程序的生命周期分为应用生命周期和页面生命周期. 应用指的是一个文件,是小程序的入口文件app.js,入口文件最外层方法名称是App,页面的js文件最外层是page,组件的js文件的最外层是compo ...
- Redis缓存中的常见问题
缓存穿透:是指查询一个Redis和数据库中都不存在的数据. 问题:查询一个Redis和数据库中都不存在的数据,大量请求去访问数据库,导致数据库宕机. 解决办法: 1.根据id查询,如果id是自增的,将 ...
- dpi dp px 换算关系
getResources().getDisplayMetrics().densityDpi 就是屏幕密度.getResources().getDisplayMetrics().density 也可以理 ...
- 查看浏览器 请求网页 中 header body cookie
command + alt + i 进入开发者工具 重新刷新页面进行请求URL 进入Network 选中某个url 右侧会展示详细信息
- 100道Java高频面试题(阿里面试官整理)
我分享文章的时候,有个读者回复说他去年就关注了我的微信公众号,打算看完我的所有文章,然后去面试,结果我后来很长时间不更新了...所以为了弥补一直等我的娃儿们,给大家的金三银四准备了100道花时间准备的 ...
- 小心你的个人信息——GitHub 热点速览 v.21.09
作者:HelloGitHub-小鱼干 浏览过必有痕迹,有什么可以抹去社交痕迹的方法呢?social-analyzer 是一个可在 350+ 网站分析特定用户资料的工具,你可以用它来"人肉&q ...
- 再来认识一下 Java 序列化
前言 在面试中,Java 序列化被问到的几率还是挺高的.所以搜集了 Java 序列化常见的问题,由浅入深的帮助大家进一步学习和理解. 序列化基础知识 什么是序列化? Java 序列化是 JDK 1.1 ...