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类图数据的结构,并形成自 ...
随机推荐
- js navigator.wakeLock 保持屏幕唤醒状态
let lock; btn.addEventListener("click", async () => { try { if (lock) { lock.release(); ...
- js 使用socket-io发送文件
更多 前端 import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; import { MediaDevice ...
- ng 设置动态的document title
使用Title服务 相关文章 配置路由, 添加data.title参数 import { NgModule } from '@angular/core'; import { RouterModule, ...
- 根据对象,返回'&键名=值&键名=值‘形式
Object.prototype.srcCode=function () { var str=''; for(key in this){ if (this.hasOwnProperty(key) == ...
- VAST上线后,如何提升NGK算力生态的收益和流动性?
自比特币诞生以来,"挖矿"一词就成功地步入了大众的视野,也成为了加密货币领域最重要的组成部分之一.无论是早前基于比特币和以太坊为主的算力挖矿,还是逐步进入大众视野的质押挖矿,亦或是 ...
- NGK Global-下一个千亿市场来袭
6月4日,NGK Global开启了全球巡回路演,NGK全球社区经过激烈的讨论,最终决定由美国社区发起,在纽约举办NGK Global第一场路演. 路演讲师Viko就NGK的IPFS协议以及NGK未来 ...
- django学习-12.访问不同url/接口地址实现对指定数据的增删改查功能
1.前言 通过前面博客[django学习-10.django连接mysql数据库和创建数据表]里的操作,我们已经成功在数据库[hongjingsheng_project]里创建了一张数据表[hello ...
- 【原创】Linux虚拟化KVM-Qemu分析(十)之virtio驱动
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: KVM版本:5.9 ...
- 学习String源码的部分方法
先看构造器: private final char value[]; //char类型的数组 以下均会用到 private int hash; //缓存字符串的哈希值 //以下均会用到 public ...
- eclipse快速定位当前类所在位置
如何快速的找到一个类并且定位它所在的位置呢?这里以搜索Menu类为例说明. 可以通过CTRL + SHIFT +R的组合键,输入Menu 双击Menu.java即可跳转到对应的类上,但此时还不知道此类 ...