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

第一次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. Selenium系列(十八) - Web UI 自动化基础实战(5)

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  2. jvm学习笔记:栈帧

    栈帧内的数据结构 局部变量表(Local Variables):记录非静态方法的this指针.方法参数.局部变量 操作数栈(Operand Stack):用于计算的栈结构 动态链接(Dynamic L ...

  3. Intel® QAT加速卡之Linux上编程说明

    QAT Software for Linux 1. Introduction 该程序员指南提供了有关软件体系结构和使用指南的信息. 相关的英特尔QAT软件库文档中记录了有关使用英特尔QuickAssi ...

  4. openswan发送状态机分析

    openswan发送状态机分析 1. 函数调用关系 2. 函数说明 如果按用户空间.内核空间划分的话,此部分代码更多是运行在内核空间的. 2.1 ipsec_tunnel_init_devices() ...

  5. VUE005. 在data中使用 / 改变data,或在data中调用method函数

    使用三方UI库时经常会遇到在data中写入方法的场景,如Element-UI的级联选择器(动态加载part)需要在data中写入lazyLoad. 但后端总会给出意想不到的需求: 通过接口调取一串数据 ...

  6. window server 2008 系统加固

    1.更改管理员账号: 开始->运行->compmgmt.msc(计算机管理)->本地用户和组->用户,右击Administrator账户并选择"重命名",并 ...

  7. 关于软链接ln -s 的使用

    1.效果跟windows创建快捷方式是一样的,先找到要被创建的原始文件或目录.然后才能创建. 2.格式:ln  -s   [源文件或目录]   [目标文件或目录] 3.源文件或目录必须是绝对目录. 4 ...

  8. PHP中的一些杂项函数学习

    今天来学习的这些杂项函数在官方文档中都是放在一个杂项扩展中的,其实这些函数都并不是什么什么特别的扩展,也不需要安装什么东西就可以使用,它们就是一些简单的功能函数而已.当然,其中不少内容也是我们经常会使 ...

  9. synchronized Lock(本地同步)锁的8种情况

    Lock(本地同步)锁的8种情况 总结与说明: * 题目: * 1.标准访问,请问是先打印邮件还是短信 Email * 2.email方法新增暂停4秒钟,请问是先打印邮件还是短信 Email * 3. ...

  10. Appium WebView控件定位

    背景 移动应用可以粗分为三种:原生应用(native app), 网页应用(web app,或HTML5 app),以及它们的混血儿--混合模式移动应用(hybrid app). 什么是Hybrid ...