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

第一次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. Hamcrest 断言框架

    Hamcrest是一个为了测试为目的,能组合成灵活表达式的匹配器类库.用于编断言的框架,使用这个框架编写断言,提高可读性及开发测试的效率,提供了大量"匹配器"方法,每个匹配器用于执 ...

  2. Linux内核学习之2号进程kthreadd

    Author       : Toney Email         : vip_13031075266@163.com Date          : 2020.12.04 Copyright : ...

  3. openswan协商流程之(七):main_inR3

    主模式第六包(收包):main_inR3 1. 序言 main_inR3()函数是ISAKMP协商过程中第一阶段的最后一个报文的接收处理函数,它的作用同main_inI3_outR3()部分功能相同: ...

  4. Linux原始套接字抓取底层报文

    1.原始套接字使用场景 我们平常所用到的网络编程都是在应用层收发数据,每个程序只能收到发给自己的数据,即每个程序只能收到来自该程序绑定的端口的数据.收到的数据往往只包括应用层数据,原有的头部信息在传递 ...

  5. Excel导入保存附件和解析数据

    Excel导入保存附件和解析数据 一,前端上传附件的组件 1.先给一个下载模板的按钮 // 下载Excel模板 downLoadExcel: function () { window.open(GLO ...

  6. Apollo 配置中心详细教程

    一.简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理 ...

  7. DS博客作业05--查找

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业05--查找 这个作业的目标 学习查找的相关结构 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1.1 ...

  8. vue实现事件代理(通过事件冒泡实现)

    事件代理/事件委托以ul>li来模拟 使用冒泡的用法:使用冒泡的用法来实现事件代理 分离出来 动态根据索引添加类名:

  9. K8s一键安装

    安装案例: 系统:Centos可以多台Master(Master不能低于3台)多台Node此案例使用三台Master两台Node,用户名root,密码均为123456 master 192.168.2 ...

  10. python学习笔记(十六)-Python多线程多进程

    一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...