本单元架构总结

第一次作业



第一次作业按照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. .NET探索模型路由约定实现伪静态

    概述 IPageRouteModelConvention接口用于自定义PageRouteModel,这个对象在Microsoft.AspNetCore.Mvc.ApplicationModels命名空 ...

  2. 教你玩转CSS 居中

    1.元素居中对齐 要水平居中对齐一个元素(如 <div>), 可以使用 margin: auto;. 设置到元素的宽度将防止它溢出到容器的边缘. 元素通过指定宽度,并将两边的空外边距平均分 ...

  3. 嵌入式开发板使用网口和nfs进行文件共享

    如果你的开发板有网口,类似于这玩意. 那么,你可以去买根网线,类似于这玩意. 然后你就可以将你的电脑和开发板用网线连起来,通过nfs(网络文件系统)来进行文件夹共享,文件夹共享就相当于挂载,nfs是利 ...

  4. Java自学第10期——File类与IO流(输入输出流、处理流、转换流、缓冲流、Properties集合、打印流)

    1.IO简介 IO(输入输出)通过java.io包下的类和接口来支持,包下包括输入.输出两种IO流,每种输入输出流又可分为字符流和字节流两大类. 2.File类 File类是io包下与平台无关的文件和 ...

  5. Elasticsearch CRUD基本操作

    前言 本次我们聊一聊Elasticsearch的基本操作CRUD,他跟我们常用的关系型数据库的操作又有什么不一样的地方呢?今天我们就来好好讲解一番. 说明 本次演示用的版本是7.11. 工具可以使用K ...

  6. DRF 三大认证之身份认证

    目录 路由组件补充 三大认证 一.身份认证 1.如何进行身份认证 2.jwt认证规则原理 3.jwt的组成 4.jwt的使用方法 4.1 签发算法 4.2 校验算法 4.3 刷新算法 二.权限认证 三 ...

  7. Docker的架构

    一.Docker引擎 docker引擎是一个c/s结构的应用,主要组件见下图: Server是一个常驻进程 REST API 实现了client和server间的交互协议 CLI 实现容器和镜像的管理 ...

  8. RabbitMQ(二) Java使用RabbitMQ

    2-1 RabbitMQ 生产者消息发送 创建 Maven 项目 Send 加入依赖 <dependency> <groupId>com.rabbitmq</groupI ...

  9. MySQL注入与informantion_schema库

    目录 只可读 自动开启 和MySQL注入有关的3个表 手动注入的使用案例 表介绍 查询一个表中全部字段的过程 MySQL V5.0安装完成会默认会生成一个库(informantion_schema), ...

  10. C#正则实现匹配一块代码段

    最近项目,生成聚合网关,但是生成的网关文件中,存在着不必要的代码段,比如一个类A,类B等 之前一直使用手动删除,这么做劳民伤财,浪费时间,考虑使用正则写一个工具实现自动删除. 正则写法: string ...