OO第四单元小结

一.作业架构分析。

1.第一次作业

本次作业需要完成UML类图查询。

难点在于初次接触UML,需要对UML进行一定程度的学习和理解。

思路主要是根据每个传进来的element获取其type然后进行分类以及层次化处理,由上而下,先找到所有的接口和类,构建Myclass和MyInterface,来管理类和接口的下层元素以及继承实现关系等信息。由于查询考虑到继承,所以还需要进行适当的信息建模,以便进行记忆化递归搜索。

具体架构如图:

2.第二次作业

  本次作业需要完成UML顺序图和状态图的查询,检测三个规则。

  难点在于三个规则的查询以及新的两个图的建模。

首先根据在第一次作业基础上,新建一个类来检查有效性,考虑使用离散化建模后来进行循环继承的查询。其余的思路同第一次作业,从上往下建模。

具体架构如图:

二.四个单元中架构设计与OO方法理解的演进

第一单元:多项式求导

第一次作业现在看来虽然简单,但是对于当时仅达到了解基本语法水平的我还是比较困难,主要是在于类之间的数据交互以及层次化地设计。但是第一二次作业我都使用了大正则来进行错误格式的判断,以及没有将各种多项式运算组合分散开,导致第三次作业完成得非常困难。但是完成第三次作业之后,发现之后的作业在层次化、基本架构有了较高的提升,代码复用性也慢慢变好。

第二单元:电梯

第二单元是非常有特色的也是发挥上限很高的一个单元。三次作业基本架构都是输入流、调度器、电梯三个线程一起,三者的同步互斥是重点和难点。输入流与调度器共享等待队列,调度器和各个电梯又共享新的待执行队列和单例化后的第二部分指令队列。正确性比较容易完成,但是优化有一定的难度。

完成电梯单元后,对各个对象之间的数据共享的同步互斥有了一定程度的理解,加深了对对象之间的交互、依赖的理解以及进一步提高了自己层次化设计的水平。

第三单元:规格化设计

第三单元我觉得是比较简单的一个单元,原因有二:官方包的提供极大简化了我们的代码设计;之前的训练让自己有了一定的提升。在读懂JML规格后,要做的事情就是:传入数据,离散化建模,统一算法。算法主要使用的是floyd算法,简单高效。层次主要就是path图和path内的节点列的管理。

这个单元的三次作业的代码复用性都明显比前两个单元的好很多,我认为这就是规格化设计的能力和魅力,严谨明确,让自己提前和规范设计的能力有了一定的提升。

前两个单元自己并没有多次使用继承和多态的特点,而这个单元的训练,对OO独特的继承、多态的方法有了更深层次的理解。

第四单元:UML解析

UML类图、顺序图、状态图主要是为了锻炼我们工程化设计的能力,这个单元主要在于对UML各个元素内部要素的理解以及对元素之间层次化的树的关系的理解。理解完成后,就要综合前三单元学到的知识,来对元素分类、层次化设计、设计适当的查询算法。完成这个单元的过程中,我对层次化的设计、对象之间的交互、共享数据的保护、各个类和各个方法的分工等工作的完成流畅度和明显好于前三个单元,可见经过前面三个单元的训练,不知不觉地我们在OO道路上已经前进了不少。

三.四个单元中测试理解与实践的演进

测试的目的一直都是来确认程序的正确性和性能优劣。

我一个学期以来都采用了比较low的测试方法:手动捏数据。根据自己在代码过程中的bug数据,自己总结的一些极端情况的数据以及室友提供的部分大测试数据,来进行自测和互测。

尽管一直都是手搓数据点,但是从第一二单元bug重重到第三四单元bug较少的情况来看,一是随着训练的推进自己的代码水平有了一定提升,二是测试数据的构造思路有了一定的改善,能更快的发现哪里容易有坑,也能较快地对之进行修复。

四.课程收获

自动化测试主要是用于代码的覆盖测试和高效测试,虽然我自己实践不足,所以只有在代码思路设计方面多下功夫。几乎每一次作业我都会在动手写代码之前写一份简要的思路设计,这样做的好处我觉得主要是有:方便自己将一个大问题分成若干小问题,逐个解决;从设计上就杜绝了大部分可能会出现的bug。随着训练的推进,我发现这种方法越来越好用,并且代码时间越来越短,bug出现的概率越来越小,同时也能加深对面向对象方法的理解,提升代码的设计能力。

四个单元,11次代码作业,这一路走来跌跌撞撞,但是也学到了很多很多东西:无论是从面向过程到面向对象,还是从一main到底到多个类的层次化设计,亦或是从艰难几十行到顺利完成千行工程代码,从OO这门课程学到的知识是良多的,但更重要的是在这修罗道路上前进的同时,自己变得更加坚强了。

五.一些建议

1.第一单元建议先来一次较为简单的JML规格作业,能够快速地帮助我们理解层次化设计和OO特点。

2.我认为互测是OO这门课的一大特色以及在助教的努力下,其进步是明显的。但是实际上,我们对互测的热情从第一单元到第三单元是递减的(可能数据体现不出来),或者说几乎没有看别人代码,而是盲狙或者自动化测试,似乎与互测的目的背道而驰,或许互测机制需要更好地完善。

3.说实话,实验课的体验很不好,主要是上完新课下午就去实验,一开始难度太大,后来是现场自学,希望实验课降低分数比例或者改进实验课。

OO完结篇-第四单元小结的更多相关文章

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

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

  2. OO第四单元总结及学期总结

    目录 OO第四单元总结及学期总结 第四单元三次作业架构设计 第十三次作业 第十四次作业 第十五次作业 四个单元中架构设计及OO方法理解的演进 第一单元 第二单元 第三单元 第四单元 四个单元中测试理解 ...

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

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

  4. BUAA OO 2019 第四单元作业总结

    目录 第四单元总结 总 UML UML 类图 UML 时序图 UML 状态图 架构设计 第十三次作业 第十四次作业 课程总结 历次作业总结 架构设计 面向对象方法理解 测试方法理解与实践 改进建议 尽 ...

  5. 第四单元博客总结——暨OO课程总结

    第四单元博客总结--暨OO课程总结 第四单元架构设计 第一次UML作业 简单陈述 第一次作业较为简单,只需要实现查询功能,并在查询的同时考虑到性能问题,即我简单的将每一次查询的结果以及递归的上层结果都 ...

  6. OO第四单元作业小结

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

  7. OO第二单元小结

    OO第二单元小结 一.三次作业代码分析. 1.第一次作业 第一次作业是单部电梯的傻瓜调度,由于其过分傻瓜,所以第一次作业我只有两个类,一个main,一个电梯,main类负责不断从输入流中读取命令,如果 ...

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

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

  9. Appium+python自动化(四十二)-Appium自动化测试框架综合实践- 寿终正寝完结篇(超详解)

    1.简介 按照上一篇的计划,今天给小伙伴们分享执行测试用例,生成测试报告,以及自动化平台.今天这篇分享讲解完.Appium自动化测试框架就要告一段落了. 2.执行测试用例&报告生成 测试报告, ...

随机推荐

  1. babel 的简单使用

    之前在项目中使用.balelrc文件,但是一直不知道具体怎么使用,就知道可以将es6语法转码为es5语法. 今天就简单的做个例子,也算是记录一下困扰了好久的问题. 转码步骤: 首先在项目的目录中安装B ...

  2. jeecgboot数据字典使用

    jeecgboot数据字典使用 input页面下拉框使用 效果展示 实现 定义数据字典 引用并调用JDictSelectTag组件 import JDictSelectTag from '@/comp ...

  3. Learn from Niu 2020.1.28

    1. 泛读和精度的区别和迭代: 泛读: 1个月之内,读50篇论文,进行粗读,了解多维时间序列信号,有哪些research problem, challenges, research groups, r ...

  4. Java修饰符类型

    转自原文:http://www.yiibai.com/java/java_modifier_types.html 修饰符是添加到这些定义来改变它们的含义的关键词. Java语言有各种各样修饰词,其中包 ...

  5. R parallel包实现多线程1

    并行执行 Yes! Well done! Socket clusters are initialized without variables, so a_global_var wasn't found ...

  6. 【算法】状态压缩DP

    状态压缩DP是什么? 答:利用位运算(位运算比加减乘除都快!)来记录状态,并实现动态规划. 适用于什么问题? 答:数据规模较小:不能使用简单的算法解决. 例题: 题目描述 糖果店的老板一共有M 种口味 ...

  7. Linux零碎002

    1.if else就近原则: 2.指针位数与机器地址总线宽度一致: 3.数组即常量指针,用法和指针类似,在操作指针时:p与&p[0]含义一样: 4.编译器按照内存递减的方式来分配变量.

  8. 2019牛客多校第七场E Find the median 离散化+线段树维护区间段

    Find the median 题意 刚开始集合为空,有n次操作,每次操作往集合里面插入[L[i],R[i]]的值,问每次操作后中位数是多少 分析 由于n比较大,并且数可以达到1e9,我们无法通过权值 ...

  9. 普通平衡树 lg3369

    在多次学习splay后,我终于理解并码出了整份代码 参考了https://tiger0132.blog.luogu.org/slay-notes的博客 具体实现原理在上面这篇博客和百度中可以查到,接下 ...

  10. 在多租户(容器)数据库中如何创建PDB:方法1 从种子创建PDB

    基于版本:19c (12.2.0.3) AskScuti 创建方法:从零开始创建一个PDB(从PDB$SEED创建新的PDB) 对应路径:Creating a PDB --> Creating ...