面向对象第四单元总结&&课程总结

目录
  • 单元内容
  • UML的结构
  • 架构分析
  • 四个单元架构设计演进
  • 四个单元测试演进
  • 课程收获
  • 课程建议
  • 心得和体会


单元内容

本单元的内容是实现一个UML解析器,可以通过输入各种指令来进行UML图有关信息的查询,具体内容如下:

  • 支持对UML类图的解析
  • 支持对UML顺序图和状态图的解析
  • 支持对UML模型进行有效性检查

UML的结构

UML这一单元可能是我上手最慢的一单元了,听课一脸懵,看作业一脸懵。事后总结起来,有一张清晰的UML结构图,可以省去不少麻烦,所以将课程涉及的元素总结一下放在这里,希望能帮到有缘人。

面向对象第四单元总结&&课程总结_第1张图片

面向对象第四单元总结&&课程总结_第2张图片

面向对象第四单元总结&&课程总结_第3张图片

面向对象第四单元总结&&课程总结_第4张图片

架构分析

面向对象第四单元总结&&课程总结_第5张图片

  • 基本按照UML的树结构进行类的创建,除了底层的元素外,其余的UMLElement都创建了相应的MyElement

  • 为了方便管理:
    MyPseudoStateMyStateMyFinalState继承一个共同父类State
    MyClassMyInterface实现一个公众接口MyObject

  • 除此之外,建立了UMLCreate类,专门用于UML图的创建

四个单元架构设计演进

  • 第一单元的架构做得比较乱,进行了多次重构,bug也很多。

    第二次作业采用的是“表达式——项——因子”三层结构进行函数的储存求导,这样的架构扩展性很差,因为“表达式”、“项”、“因子”的界限并不是那么清晰,例如表达式也可以作为一个因子,用这样的结构就很难理清。于是进行了重构

    第三次作业摒弃了“表达式”、“项”、“因子”的概念,而用统一的类Tree进行数据的管理,整个大表达式也采用二叉树的结构储存求导,而最底层的常函数、幂函数、三角函数等则是继承自类Tree,作为二叉树的叶子节点

    有一点可取之处是采用了工厂模式生产最底层的函数,当然如果想优化的话,所有的Tree都可以用工厂生产

第二单元开始,基本没有重构的现象了,确实说明架构水平有一定提高

  • 第二单元总体采用worker-thread模式请求线程不断地将请求放入调度器中,调度器线程将请求分配给各个Elevator电梯线程运行电梯。根据每次作业的特点,架构略有不同。

    第一次单电梯,不存在请求分配问题,不设调度器线程

    第二次电梯数量确定,所有线程都是Main创造

    第三次电梯数量动态,电梯线程由请求线程创造。为了处理换乘问题,专门在调度器和电梯之间设立了一个缓冲区,采用生产者——消费者模式

  • 第三单元的架构主要是按照JML规格,要说不同之处就是设置了一个“连通分支”类,储存所有有关系的人,所有关系查询的方法都在其中实现。

  • 第四单元采用适配器模式,将UMLXXX转换为MyXXX,并做了一些抽象,结构比较简单,具体见上。

四个单元测试演进

测试这部分确实是我做得不好的地方,既不全面也不细致,要向dalao们学习(递头

  • 第一单元感觉很典型,用来练习黑盒测试非常合适,测试手法是搭评测机对拍 + 样例 。但是我蠢了,并没有跑自己的程序,导致出现了很严重的错误,被丢进C屋,十分惨烈。
  • 第二单元的测试就很有难度了,多线程不稳定且难复现,所以我其实是有点知难而退的意思了,到最后也才交了几个naive。WA暂且不谈,很多超时问题,从结果来看,都是算法的设计过于极端(FIFO都不会超时),这个时候用评测机生成的随机数据反而效果不好,应该用极端数据进行测试,比如大量的20 - -3等等。
  • 第三单元可以说是我测试做得最不好的单元,结果也是很糟糕。我只测试了比较难的函数的正确性问题(手搓数据),这就有两个疏漏:一是超时问题完全没测,二是非常简单的地方出错。当然我也是以这样的思维进行互测,对较复杂的函数进行大量数据的轰炸。结果就是互测情况好看,而强测爆炸,这个现象其实是很值得反思的。
  • 第四单元依然是手搓数据,还是因为不全面的测试,找对端的地方出错。四个单元的演进,其实可以感觉到测试的重要性是和写代码一个等级的,而经过四个单元的训练,我的测试手段还是比较单一,很遗憾,也可以说是自食恶果。

课程收获

  • java语言(容器、多线程),IDEA操作,git
  • 程序架构能力提升
  • 测试能力提升(自测、互测)

课程建议

  1. 希望在单元一开始透露一点迭代开发的方向

    虽然考虑到荣老师所说的“用户需求不可预测”,但我们大多刚刚接触,给一点方向是比较友好的(主要是刚上来第一单元)

  2. 希望UML知识的讲解可以提前一些

    前面要求画类图顺序图的时候,UML的知识还完全没学,画也是瞎画(捂脸

  3. 三四单元都在大量考察“图”的各种算法,感觉有点重复

心得和体会

  1. 从我的角度来看,OO课程是一门体验良好的课程

    • 时间安排合理,一周七天都有活干,很充实,又达不到紧迫的程度
    • 收获感很丰富,可以清晰地感觉到自身的成长,而不是单纯地完成一门课
    • 鉴于其考核的独特性(作业+实验,没有理论考试),确实是线上完成影响最小的课之一
  2. 关于成绩

    我的感觉是一分耕耘一分收获

    第一点,分数都分散在无数次的作业和实验中了,而不是一个期末考试90分,偶然的因素被降到最低,可以说比较反映水平,当然分数高低另说(……)

    第二点,强测分数和课下花费的时间绝对是息息相关的,这里的时间不仅是写代码的时间,更主要的是自我测试的时间。不要相信简单的内容不会出错!如果没时间,或者没能力做好自测,就必然要承受相应分数的损失(说的就是我)

你可能感兴趣的:(面向对象第四单元总结&&课程总结)