本单元架构总结

第一次作业



第一次作业按照UML正常的结构来组织,把某些UML中非底层类提取出来构建方法,采用逐层关联的方式实现内部的层次关系,同时考虑将来的需求,把一些没有用到的类也提取出来。

第二次作业

和第一次作业差别不大,任然是逐层关联的方式,每两层间不可见。区别是这次加了一个ElementData的分发器,把不同属性分发到类图 ,状态图,顺序图中。

第三次作业

和前两次大同小异,加入了异常处理模块。

架构设计总结

第一单元

第一单元可以说OO实验中最难的一个单元,难点主要在于WF的判断和字符串的解析上,在本单元中
我前两次作业都是直接采用map的方式,第三次作业为了减少重构,把第二次作业的表达式类直接重用
再加入了加减嵌套等类,结果由于表达式类覆盖范围太广给解析字符串造成了很大的麻烦。

第二单元

第二单元我认为是写得比较轻松的一个单元,本单元我一开始就提取到了调度器,电梯,还有输入的三个类,后面按照这个顺序写下去,不过第三单元由于分派策略出现问题,我采用的是最短距离的固定策略划分任务,没有考虑到多次换乘可能会带来的巨大开销,导致丢失了很多性能分。

第三单元

第三单元也是比较轻松的一个单元,这个单元基本架构jml都提供了,除了最后封装了一个算法类之外架构没有什么特别值得说的,但是这个单元给我最大的教训就是要做好充分的测试,不能依赖评测及。这单元由于测试不充分拿了一次零分一次四十五分血亏啊

对测试演进

对于测试的演进可以说是OO最大收获之一了。本学期中有三次作业促进了我对于测试的理解,第一次是OO的第一单元的第三次作业,这次作业由于我没有自动对拍&样例生产导致自己一直在手动构造样例,效率非常低下,想在想起来当初要是能写个自动生产样例的也不至于这么狼狈。第二次是第二单元的电梯,在研讨课上看到同学们的测试代码我的充分测试给惊到了,看了看自己的垃圾数据生成器,我暗下决心下一单元一定好好测试。第三次就是第三单元的作业了,第一次没有测试手动瞎测了一下,结果强测只有45分,有一个函数写错了。第二次作业自己用Junit进行了充分的测试,结果强测0分发现自己Junit写错了,,看到零分的时候整个人都没了于是从第三次作业我写了自动化的测试+Junit最后再找同学进行了对拍。对于测试也有了更深的认识,对于如何构造边界数据,如何对拍等方式有了更加深刻的理解,同时对于TDD如何驱动开发高质量软件有了进一步认识,比如预先设置WF等方式。

课程收获

OO课程中我收获了非常。主要来自于对于代码架构设计和对于代码认识的深入理解。

通过一二单元教会了我根据根据数据流和职责来构造相应类的架构设计方式,同时开始对于软件未来需求拓展
增加了更多注意了,在设计的模式方面,明白关注点集中,封装,SOLID等设计原则。

通过三四单元的学习我对于软件的设计有了一个更加宏大的脉络,特别是第四单元的学习,给我提供了一个
全新的认识代码的视角,譬如把代码构造成一个状态转移图的方式。我以前接触的状态机,都是对于外部的响应,而状态图中的状态变化是依据代码的逻辑来构造出来的,反映的是代码的结构。这也让我对于状态机的描述能力有了更加清晰地认识。

改进建议

1.我认为第一单元可以去掉性能分的条件,因为是刚开始第一单元的时候如果强调性能分会让有些同学把关注点放到性能上,而忽视架构。

2.我认为可以再课程早期强调一下同学间合作的重要性,鼓励同学们互相交流合作搭建自动化评测的方式,不然像某些呆呆社恐同学没错,就是我可能到学期末追悔莫及。

3.关于第三单元JML建议给自己搭建形式化评测机的方式,我看到有一位助教哥哥的blog里面好像有提及,因为感觉第三单元如果只是完成任务的化照葫芦画瓢一下就行了,最多封装几个算法。

线上学习体验

  • 理论课

    线上学习体验不错,可以倍速,可以选择时间,很nice

  • 实验课&研讨课

    线上学习体验一般,没有什么氛围。

  • 作业

    线上学习体验一般,没有面对面交流机会,加上自己比较捞,不怎么和人交流,感觉失去很多提高的机会。

四单元总结&OO总结的更多相关文章

  1. OO第四单元总结

    单元架构设计 本单元OO作业主要涉及两个过程,即先根据输入的elements数组建立UML存储模型,而后基于这个模型实现一系列查询判断功能.汲取上单元的经验,建模过程中模型数据容器的选择依据要求实现的 ...

  2. 北航oo作业第四单元小结

    1.总结本单元两次作业的架构设计 在我动手开始总结我的设计之前,我看了其他同学已经提交在班级群里的博客,不禁汗颜,我是真的偷懒.其他同学大多使用了新建一个类,用以储存每一个UMLelemet元素的具体 ...

  3. OO 第四单元总结

    一.总结本单元两次作业的框架设计 1.1. 需求分析 通过分析mdj文件可知,两次作业如果对于时间复杂度没有要求,可以不涉及任何数据结构,直接根据读入的UML_ELEMENT逐个分析得到各个函数的结果 ...

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

    目录 一.第四单元作业架构设计 1.第一次UML作业架构设计 2.第二次UML作业架构设计 二.架构设计和OO方法理解演进 三.测试理解与实践的演进 四.课程收获总结 五.三个具体改进建议 一.第四单 ...

  5. OO第四单元博客

    第四单元博客 这个单元的作业,emmmm助教们做的工作还是一如既往的多,我们只负责添一添代码,最后一次作业了,感谢各位助教和老师,同时也希望我能顺利通过这最后一关. 架构设计 第一次作业架构展示 第一 ...

  6. OO第四单元总结——查询UML类图 暨 OO课程总结

    一.本单元两次作业的架构设计总结 作业一.UML类图查询 1. 统计信息图 2. 复杂度分析 基本复杂度(Essential Complexity (ev(G)).模块设计复杂度(Module Des ...

  7. 2019年北航OO第四单元(UML任务)及学期总结

    第四单元两次作业总结 第十三次作业 需求分析 本次作业需要完成一个UML类图解析器,所需要解析的只有符合UML标准和能够在Java 8中复现的UML类图.查询指令存在两种:仅与所查对象有关的指令,以及 ...

  8. OO第四单元作业小结

    一.本单元两次作业的架构设计 1.第一次作业 整体思路:以class为核心,建立MyInterface.MyAttribute.MyOperation.MyAssociation四个类分别储存每个类的 ...

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

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

随机推荐

  1. 生态建设者为何青睐低风险、低成本的NGK算力?

    自从BGV推向市场以来,生态建设者的目光都聚集于BGV这个去中心化金融的新星,其实NGK的其他项目也都在稳健进行当中. NGK在未来将推出"算力市场奖励计划",NGK将会对算力市场 ...

  2. 【从零开始撸一个App】Fragment和导航中的使用

    Fragment简介 Fragment自从Android 3.0引入开始,它所承担的角色就是显而易见的.它之于Activity就如html片段之于页面,好处无需赘述. Fragment的生命周期和Ac ...

  3. 06_MySQL数据类型

    MySQL数据类型

  4. JDK源码阅读-Reference

    本文转载自JDK源码阅读-Reference 导语 Java最初只有普通的强引用,只有对象存在引用,则对象就不会被回收,即使内存不足,也是如此,JVM会爆出OOME,也不会去回收存在引用的对象. 如果 ...

  5. 如何使用irealtime.js实现一个基于websocket的同步画板

    同步画板演示 同时打开2个tab,分别在画布上写下任意内容,观察演示结果,同时可设置画笔颜色及线条宽度.演示地址 初始化画布 <canvas id="drawBoard" w ...

  6. 文件下载:报错The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'

    前言:这篇文件下载的后台代码太繁琐,建议参考https://www.cnblogs.com/zwh0910/p/13745947.html 前端: <el-button type="p ...

  7. Redis6.0.9主从搭建

    所谓主从,大家都知道主是写数据,而从是进行数据的拷贝. 1:配置 主节点 127.0.0.1 6379 从节点 127.0.0.1 6378 先将单机版的配置文件赋值两份出来,原先的配置中主要改动有: ...

  8. Kubernetes: NGINX/PHP-FPM 502错误和优雅结束

    我们有一个运行在Kubernetes上的PHP应用,每个POD由两个独立的容器组成 - Nginx和PHP-FPM. 在我们对应用进行缩容时,遇到了502错误,例如,当一个POD在结束中时,POD里面 ...

  9. Linux fork()一个进程内核态的变化

    [前言]用户态的变化,耳熟能详不在赘述.现在支持读时共享,写时复制. 一.内核态的变化 1.fork一个子进程代码 #include <stdio.h> #include <stdl ...

  10. PCA主成分分析的矩阵原理

    [前言]主成分分析(PCA)实现一般有两种,一种是对于方阵用特征值分解去实现的,一种是对于不是方阵的用奇异值(SVD)分解去实现的. 一.特征值 特征值很好理解,特征值和特征向量代表了一个矩阵最鲜明的 ...