一.第四单元作业架构总结

第一次UML作业:

  在分析各指令所需要的信息后建立了类(class),操作(operation),属性(Attribute)这几个类用来存储分析后的结果,而接口在本次作业中与类相比只有多继承的差别,因此将接口和类看作是同一个类。在分析完之后所需的信息都储存在了我自建的类中,执行对应指令时很容易就能够得到结果。

  bug分析:本次作业在对接口的遍历中漏写了遍历停止条件导致错误。

第二次UML作业:

  本次作业中多了顺序图和状态图,因此建立了对应的类来储存相应的信息,对顺序图和状态图的处理与第一次作业的处理大同小异,分析出相应的信息存储到对应的类中,简单得出结果,而在检查部分,只需利用上次作业已经得到的结果进行一系列检查即可。本次作业对上次作业的扩展只是增加了相应的类,而对于上次作业的部分没有进行改变。

  bug分析:本次作业在初始化过程中写错了对应的初始化条件导致有一个强侧点出现异常。

二.四个单元作业架构设计及对oo方法理解的演进

第一单元:

  在第一单元作业时,只浅显地认识到需要将诸如多项式,因子,项这类元素分为不同的类进行代码的书写,但是做到的也仅仅停留在表面,每次作业都只针对了这次作业的需求去构建整个代码,而没有去考虑下次作业的可扩展性,带来的结果就是重构,每次作业都进行重构。现象就是每次作业看起来类的名字是一样的,但其实类的内容已经截然不同,并且类和类,方法和方法之间的耦合度很高,代码不堪入目。

第二单元:

  第二单元的作业难度体现在多线程有关知识。首先在本单元的作业中,我的三次作业的架构都是类似的,输入,调度器和电梯三者没有进行变化,每次作业都只在上一次作业的基础上增添了一些功能,而没有大的结构上的变化,因此我认为在本单元的架构设计方面已经是初步达到了目标。然而虽然架构很清晰,但是在理解多线程相关知识时还是出现了问题,在一开始接触多线程时根本不理解怎么让它实现并发,怎么让它符合我想像的多线程运行方式,在经过一系列的思考后最终明白了如何达到我想要的效果。在理解之后本次作业就迎刃而解,没有造成太大的困扰。

第三单元:

  第三单元是JML规格有关内容。JML规格是为了限制代码的一些方面,尽管它有一些不足,但是在代码的规范性方面还是起到了巨大的作用。JML与我们课程所说的架构设计也是有很大关联的。尽管在本单元的作业中,数据结构有关知识占比重更大,但事实上架构对于作业的帮助还是很大的。通过这单元的编写,我尝试了将算法和图有关内容封装到一个类中,方便使用。

第四单元:

  如上所诉,在第四单元中我采用了将对应的信息解读到我所创建的类中,在执行对应指令时只需找到对应的对象直接读取信息即可,方便快捷,不会造成困扰,因此我认为最后一单元时已经能够正确运用面向对象的思想。

三.测试理解与实践的演进

  从学习写代码到现在,测试都是一个必不可少的过程。充分的测试可以让我们发现代码中的错误,在静态检查代码时发现不了的错误通过数据测试可能很快就能发现,因此测试对于我们是至关重要的。而在学习oo课程之前,我测试的方法就只有简单的一种,自己想测试数据然后肉眼对比运行结果和预期结果。这种方法的弊端体现在两方面,第一,测试数据不够强,找不到代码中的bug。第二,对比很费力,尤其是在运行结果很长时,根本无法用肉眼来观察出之间的差异。大佬们提供了解决这两个问题的方法,一是利用数据生成器去随机生成一些数据,尽管可能无法遍历所有的情况,但大部分情况都能够处理到。二是利用对拍器去对比运行结果,可以轻松方便的知道自己的结果是否正确。我对这两种方式进行了简单地尝试,利用python编写了简单地对拍和生成器,效果显著,bug的数量明显下降。

四.课程收获

  首先是整个课程一直在强调的架构设计能力,由于一直在强调这个点,因此即使是一开始不太明白,在查阅相关资料之后也对此有了相应的认识,虽然并不能说自己的架构设计能力达到一个什么样很高的水准,但至少是有了一定的理解,在以后的学习中会进行运用并且进行更深一步地学习。

  其次是对代码的测试,从前虽然也对测试的重要性有着一定地了解但都没有很好的办法,在oo课程的学习中接触到了对拍器数据生成器等方法。还有Junit单元测试,为我们的测试提供了很多方法,也为代码正确性有了更多的保障。

  还有对于代码的阅读能力,无论是每一次重构时对自己上一次代码的阅读还是在互测时对他人代码的阅读都让我对于代码的阅读和理解能力得到了很大的提高。

  最后是编写长代码能力和抗压能力。oo课程每周一次作业的模式,难度还是有一些的,特别是在每一单元的第三次作业那一周,如果还有其他的事情,那简直就是噩梦一周,最后还是全部扛过来了,在这里回头去看自己写的代码,虽然很多瑕疵,很丑,但是还是有一定的成就感的,自己也能感觉到自己代码能力的提高。

五.改进建议

1.在指导书方面,尽管根据学长学姐所说,比起往年的指导书已经好了很多,但是在我们的指导书中还是会有一定的不清晰,在一些定义的书写方面可能助教认为说清楚,但是我们认为有歧义的,可以进行更细致的定义,给出一定的例子。

2.在每次作业结束后可以给出更多的优秀代码展示,如果能够参考更多优秀同学写的代码,可能我们会得到更多的提高。

3.oo实验课,似乎跟理论课和作业的联系都不是特别紧密,希望之后的实验课能够侧重对理论课知识的理解运用或者是侧重对作业有关内容的训练。

  oo课程到此结束了,感谢老师与助教一学期的辛苦,也希望oo课程能够越来越好。

oo第四单元及期末总结的更多相关文章

  1. 第四单元总结&期末总结

    OO第四单元总结&期末总结 一.第四单元总结 第一次作业 在第四单元的作业中,我的架构是逐步演进的.设计第一次作业的架构时并没有考虑到后续作业会增加新的图,所以直接把类图的实现放在UmlInt ...

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

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

  3. OO第四单元(UML)单元总结

    OO第四单元(UML)单元总结 这是OO课程的第四个单元,也是最后一个单元.这个单元只有两次作业,相比前三个单元少一次作业.而且从内容上讲这个单元的作业目的以了解UML为主,所以相对前三个单元比较简单 ...

  4. 2020 OO 第四单元总结 UML

    title: 2020 OO 第四单元总结 date: 2020-06-14 19:10:06 tags: OO categories: 学习 1. 本单元三次作业的架构设计 本单元的代码编写与第三单 ...

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

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

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

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

  7. OO第四单元博客作业

    OO第四单元博客作业 BUAA_1706_HugeGun 目录 第四单元作业架构设计 四个单元架构设计及OO方法理解 四个单元测试理解与实践演进 课程收获 一点建议 第四单元作业架构设计 ### 第十 ...

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

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

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

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

随机推荐

  1. Python - 面向对象编程 - 小实战(1)

    题目 设计一个类Person,生成若干实例,在终端输出如下信息 小明,10岁,男,上山去砍柴 小明,10岁,男,开车去东北 小明,10岁,男,最爱大保健 老李,90岁,男,上山去砍柴 老李,90岁,男 ...

  2. 腾讯与Intel就云游戏的探讨

    今天去参加了在腾讯北京总部的腾讯音视频技术 HUB 技术巡回大会,对其中的云游戏应用的探讨格外感兴趣.正巧最近元宇宙概念很火,这篇文章就大会中对云游戏的探讨进行总结和汇报. 讲述一下来自Intel的工 ...

  3. Linux - 解决使用 apt-get 安装 yum 的时耗报 E: Unable to locate package yum 的错误

    问题背景 在 Linux 系统下使用 apt-get 命令安装 yum 库报错 apt-get install yum E: Unable to locate package yum 问题解决 一行命 ...

  4. Tars | 第7篇 TarsJava Subset最终代码的测试方案设计

    目录 前言 1. SubsetConf配置项的结构 1.1 SubsetConf 1.2 RatioConfig 1.3 KeyConfig 1.4 KeyRoute 1.5 SubsetConf的结 ...

  5. NPOI相关资料

    http://blog.csdn.net/heyangyi_19940703/article/details/52292755 http://www.cnblogs.com/zhengjuzhuan/ ...

  6. Javascript 判断 iframe 中的变量是否为对象

    Javascript 判断 iframe 中的变量是否为对象 前言 公司之前的项目中,为了实现模块化,在 web 后端使用了 iframe 来组织框架和页面.由于当时没有很好地规划,iframe 子页 ...

  7. 机器学习——EM算法

    1 数学基础 在实际中,最小化的函数有几个极值,所以最优化算法得出的极值不确实是否为全局的极值,对于一些特殊的函数,凸函数与凹函数,任何局部极值也是全局极致,因此如果目标函数是凸的或凹的,那么优化算法 ...

  8. 38KHz,NEC红外模拟发送和接收程序

    /*************************************************************************************************/ ...

  9. Go学习【02】:理解Gin,搭一个web demo

    Go Gin 框架 说Gin是一个框架,不如说Gin是一个类库或者工具库,其包含了可以组成框架的组件.这样会更好理解一点. 举个 下面的示例代码在这:github 利用Gin组成最基本的框架.说到框架 ...

  10. 搭建http文件服务器 - python3使用http.server搭建http文件服务器

    适用场景 只要有python3就可以,windows系统cmd窗口直接敲命令,Linux系统,直接敲命令 step-1 cd cd 到需要搭建服务器的目录 step-2 http.server pyt ...