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

第一次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. Postman调试Abp API

    在swagger中查看登录需要用post方式访问,Abp需要用application/json方式调用 请求体 Postman调用方式 例:访问所有用户,调用Api地址为http://localhos ...

  2. 第七章:网络优化与正则化(Part2)

    文章相关 1 第七章:网络优化与正则化(Part1) 2 第七章:网络优化与正则化(Part2) 7.3 参数初始化 神经网络的参数学习是一个非凸优化问题.当使用梯度下降法来进行优化网络参数时,参数初 ...

  3. PHP中的日期相关函数(一)

    日期相关的操作函数是我们在日常的工作开发中最常接触到的功能.当然,大部分同学可能最多用到的就是 date() . time() 这两个函数,我们今天先不讲这两个函数,或许后面的文章也不太会讲它们,毕竟 ...

  4. mysql将语句写入表中

    使用create table语句即可 CREATE TABLE membertmp (select a.* from member as a where a.phone <> '' and ...

  5. Linux系列(30) - rpm命令管理之安装命令(2)

    包全名与包名 包全名:操作的包是没有安装的软件包时,使用包全名,而且注意路径.如:/mnt/cdrom/Packags/zlib-devel-1.2.3.-27.e16.i686.rpm 包名:操作已 ...

  6. 大前端快闪:package.json文件知多少?

    最近在公司某项目参与了一些前端工作,作为后端抠脚大汉,改点前端细节磕磕绊绊,改点大前端.工程化.HTTP交互倒也还能做到柳暗花明. 于是打算用后端程序猿的视角记录一些{大前端}的知识快闪,也算是帮助读 ...

  7. 定要过python二级 第10套

    第一部分 第一题 1. int* 字符串 =几个东西 2. 此题的最开始的疑惑 (1)01 02 03  怎么产生  for 循环 (2)<<< 这个怎么产生 (3)<这个&l ...

  8. 软件测试工程师简历要怎么写,才能让HR看到

    作为软件测试的从业者,面试或者被面试都是常有的事. 可是不管怎样,和简历有着理不清的关系,面试官要通过简历了解面试者的基本信息.过往经历等. 面试者希望通过简历把自己最好的一面体现给面试官,所以在这场 ...

  9. Python3模块调用你真的会吗?不懂就来看一看?

    前言 学习Python自动化框架的时候,各种文件会相互之间的调用.刚学的时候是不是很头疼!有木有!!一步步告诉你如何调用文件里的类和方法. 经常会调用同目录下的文件还有跨文件的调用 调用同目录下文件A ...

  10. Ubuntu-mate-20.04-desktop安装总结

    ubuntu-mate-20.04-desktop效果先展示下: Ubuntu用MATE桌面环境同时配合compiz 窗口管理器是目前为止得到的桌面中最喜欢的样式 一.ubuntu-mate官网下载i ...