第四单元架构设计总结

第一次作业

单独写了MyUmlClass、MyUmlInterface、MyUmlOperation三个类对应UML中相应元素,在UML图中这几个元素包含一些下级元素,如Class包含Operation、Attribute,Operation包含Parameter等,所以就单独设立了新类,将下级元素当作新类的属性存储。所以如果要找一个类的某个方法的参数,就可以找到对应的MyUmlClass,然后根据其属性依次向下级查找即可。另外在MyUmlInteraction的构造方法中对elements进行解析分类,并主要用HashmapArraylist容器存储,方便查询和遍历。

第二次作业

因为这次作业有三种图,就分别在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第四单元暨课程总结的更多相关文章

  1. oo第四单元及课程总结

    一.第四单元作业总结 第四单元有两次作业,第十三次作业是实现一个UML类图解析器,可以通过输入一些查询指令来查询一些类图的信息.程序的主干部分已经提供,我们的任务就是实现给出的接口,过程并不繁琐.第十 ...

  2. oo第四单元与课程总结

    Part1 本单元三次作业架构设计总结 1.组织结构 由于官方代码中已经给我们提供了许多零散的类元素,如UmlClass``UmlAssociation``UmlParameter等,因此我首先将某些 ...

  3. oo第四单元作业总结暨课程总结

    oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...

  4. OO第四单元总结暨期末总结

    OO第四单元总结暨期末总结 目录 OO第四单元总结暨期末总结 第四单元三次作业架构与迭代 整体感受 HW1 HW2 HW3 四个单元架构设计与方法演进 Unit1 Unit2 Unit3 Unit4 ...

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

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

  6. OO第四单元总结及课程总结

    OO第四单元总结及课程总结 一.前言 紧张刺激的OO“昆仑课程”接近尾声,经过一个学期的学习,我的收获和感触颇多,借此博客作业的机会,对自己OO这门课程做一个总结.本博客主要有以下五个方面,一是第UM ...

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

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

  8. OO第四单元总结与课程总结

    OO第四单元总结与课程总结 第四单元作业架构设计 总体分析:本单元作业的需求集中于对UML类图进行查询.对于查询操作来说自然的想法是提前预见到需要查询的内容,在一开始就采用适当的数据结构将必要的信息进 ...

  9. OO第四单元与全课程总结

    OO第四单元与全课程总结 一.作业代码架构设计 1.第一次作业 作业类图如下: 具体架构设计: 第一次作业的全部查询工作都是和类图有关,需要解决的主要问题就是如何解析原有UML类图数据的结构,并形成自 ...

随机推荐

  1. transient的作用及序列化

    1.transient 介绍 Java中的transient关键字,transient是短暂的意思.对于transient 修饰的成员变量,在类的实例对象的序列化处理过程中会被忽略. 因此,trans ...

  2. RTPS解析

    资料参考: https://blog.csdn.net/HBS2011/article/details/102520704

  3. Java中Singleton的三种实现方式解析

    一.什么是Singleton? <设计模式>的作者.Eclipse和 Junit 的开发者 Erich Gamma 在它的理论体系中将 Singleton 定义为仅仅被实例化一次的类.在当 ...

  4. Python算法_整数反转(02)

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123输出: 321 示例 2: 输入: -123输出: -321 示例 3: 输入: 120 输出: 2 ...

  5. 权限管理整合springsecurity代码执行过程

    (1)输入用户名密码. (2)进入认证过滤器中,执行attemptAuthentication方法, 通过该方法获取输入的用户名和密码. (3)执行实现了UserDetailsService接口的类中 ...

  6. HDFS中的NameNode名节点——FSimage

    HDFS缓冲区 Fsimage 文件映射,Edits文件操作记录. 与ES的缓冲区不同,ES是维护数据的变更,而HDFS缓冲区是用于名结点维护文件系统元数据(目录树)的机制. 在HDFS集群中,Nam ...

  7. Java操作Excel工具类(poi)

    分享一个自己做的poi工具类,写不是很完全,足够我自己当前使用,有兴趣的可以自行扩展 1 import org.apache.commons.lang3.exception.ExceptionUtil ...

  8. SpringBoot(八):SpringBoot中配置字符编码 Springboot中文乱码处理

    SpringBoot中配置字符编码一共有两种方式 方式一: 使用传统的Spring提供的字符编码过滤器(和第二种比较,此方式复杂,由于时间原因这里先不介绍了,后续补上) 方式二(推荐使用) 在appl ...

  9. 利用kali系统制作最简单的OS

    制作最简单的OS 一.生成.bin文件 1.创建Boot.asm文件,输入相应的汇编代码 org 07c00h ; mov ax, cs mov ds, ax mov es, ax call Disp ...

  10. HDU_3359 Kind of a Blur 【浮点型高斯消元+BFS】

    一.题目 Kind of a Blur 二.分析 题目读起来挺费劲的. 主要就是要求一个矩阵,其中每个点及其于这个的曼哈顿距离小于D的点的值总和的平均值就是新生成的矩阵. 给定新生成的矩阵,求初始矩阵 ...