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类图数据的结构,并形成自 ...
随机推荐
- parcel bug & not support normal import React & ReactDOM module
bug report not support normal import React & ReactDOM module, why Code Sample OK import * as Rea ...
- Dart 编写Api弃用警告
例如body2在以后的版本将被bodyText1代替 @Deprecated( 'This is the term used in the 2014 version of material desig ...
- NGK的发行量是多少?NGK销毁机制是怎么样的?
代币销毁(Coin Burning),是指将代币从流通中永久性去除.换句话说,被销毁的代币相当于被永久性冻结,再也无法流入市场.那为什么要进行代币销毁呢? 销毁加密货币,可以使剩余加密货币的价值升高, ...
- go-admin在线开发平台学习-4[细节解析]
紧接着上一期的内容,继续对go-admin的一些细节进行解析. 通用的增删改查方法 在go-admin/common/actions下封装了通用的增删改查方法.在对这些方法进行说明前,先移步到另一个文 ...
- django学习-22.admi管理后台页面的文案展示等相关配置
目录结果 1.前言 2.完整的操作步骤 2.1.第一步:对[settings.py]里的相关常量的值做如下修改 2.2.第二步:重启django项目[helloworld]的服务 2.3.第三步:重新 ...
- go语言第一天(变量与基本类型)
第一个go程序: //导入主函数的包package main//fmt format 包含格式化输入输出import "fmt"//注释 注释不参与程序编译 可以帮助可以程序//行 ...
- CentOS7安装Mysql并配置远程访问
(su root登录到root账户) 下载repo源 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 安装rpm ...
- SpringBoot注解集合
使用注解的优势: 1.采用纯java代码,不在需要配置繁杂的xml文件 2.在配置中也可享受面向对象带来的好处 3.减少复杂配置文件的同时亦能享受到springIoC容器提供的功能 @SpringBo ...
- Vue框架- 指令操作
目录 一.Vue指令操作 1. 表单指令 2. 条件指令 3. 循环指令 4. 斗篷指令 5. 实例成员:delimiter分隔符(了解) 6. filter过滤器 7. computed计算属性 8 ...
- System.IO.IOException:“找不到资源“window1.xaml”。” 解决方法
报错:找不到资源"window1.xaml 原因:在编译时使用的是en-US选项进行编译并生成了en-US为名的文件夹,里面包含了可本地化的内容:但是你的本地系统使用的是zh-CN,在你运行 ...