一、第四单元架构设计

1.第一次作业

我在本次作业中设置了多个储存结构:Directory,ElementsInName,ElementsInId,Cache。

Directory: 顾名思义,这是个目录结构,可以通过一个UmlElement的id来获得他的子元素(储存结构上的子元素)。之所以设置这个结构是因为这个结构是UML中最基本的组织结构,通过UmlElement的一些属性可以快速的建立起来。

ElementsInName: 在这个结构中,可以通过一个元素的名字,获取所有同名的元素。设置这个结构的原因是由于第一次作业中多个查询语句都使用了元素名字来进行查询。

ElementsInId:在这个结构中,可以通过一个id来获取该id对应的UmlElement。设置这个的结构是因为1.id是一个UmlElement独一无二的标识。2.id在很多元素(UmlElement)的属性中充当其他元素的引用。

Cache:用来存储一些查询结果,以优化之后的使用。存储的结果具有以下特征:1.完全从头开始查询需要较大的开销,比如图搜索。2.查询的结果可能再之后被用到,比如查询类的属性中一个父类查询到的属性可以被他子类再利用。

2.第二次作业

为了在第一次作业的基础上直接扩展,为每个图的解析实现了一个类:MyUmlClassModelInteraction,MyUmlCollaborationInteraction,MyUmlStateChartInteraction。

设置公共的储存结构Directory,ElementsInName,ElementsInId用来给解析类提供查询方法。同时为每个类实现专门的Cache来保存对应类查询过程中产生的可缓存数据。

3.第三次作业

在第一次、第二次作业的基础上,大部分检查都不是特别复杂。主要的工作量在于R002-R004。

R002: 使用tarjan算法得到双连通分量,如果存在多顶点的双连通分量,以及单顶点但有自继承的双连通分量,则存在循环继承。

R003、R004: 每次从入度为0的根节点开始bfs,每次搜索过程中,被重复访问到的顶点即存在重复继承或是重复实现问题。

二、架构及OO方法演进

1.第一单元

第一单元是表达式相关。这一单元给我留下较多印象的就是对正则表达式的使用,正则表达式在其中主要起到了两方面作用:1. 通过正则表达式匹配来检查输入的表达式是否符合我们的要求。2. 通过正则表达式来提取表达式中的不同部分以供处理。对于提取出的不同部分,抽象为不同对象来分别处理,算是面向对象的第一次尝试。

2.第二单元

第二单元是多线程相关。这单元告诉了我什么叫架构的重要性,由于从始至终控制器都设置为了单独的线程以及一些其他的原因,导致总是有一些场景有复杂的多线程冲突问题,较大的增加了当时的工作量,同时也限制了控制策略的发展导致这一单元完成起来不是特别轻松。但在本单元中还是初步了解多线程的相关知识以及经典的生产者消费者模型。

3.第三单元

第三单元是JML相关。重点学习了规格化设计思想(官话)。简单来说就是对着JML写自己的代码,由于各个方法的规格都已经有所限制,所以在自己的水平之内也想不到别的架构以及面向对象相关的内容。

4.第四单元

第四单元是UML相关。总体还是在UML的理解上,就我自己来说这一单元倒是更接近面向过程了,除了几个储存结构,其他时候大致都是再思考如何实现工能,特别是第三次作业,更有点像是算法训练了。

总体来看,非要说自己的OO方法在几个单元的作业中不断演进有点不太现实。只能说在几个单元中分别从不同方向上初步了解了面向对象的思想,对面向对象有了一个大致轮廓上的了解。

三、测试理解与的演进

惭愧的说,自己在测试方面的精力花费可以说是少之又少,从第一单元到第四单元,每次都只是写完代码后就几个点进行完一般的测试就过了,大部分时间都把测试的关键部分交给了和同学的自动对拍来完成(在此谢谢各位大佬)。但这种做法可以说是很不推崇了(但自己还是由于怠惰而选了这么干),偷懒往往只能使麻烦事晚点到来,所以还是希望自己以后能突破自己的怠惰吧(虽然很难)。

四、课程收获

从大的角度来说,学习了java,了解了面向对象,提高了自己的编程能力。从小的来说,这种每周来一份作业且每份作业都需要较多精力的模式也锻炼了自己,培养了自己先思考架构再开始写代码的习惯。同时在平时与同学探讨问题以及在研讨课上听大佬分享都在一定程度上扩展了自己的知识面。

五、改进建议

1. 首先是课程作业与上课内容的联系。总说OO这门课好,但我认为是好在围绕着作业所构建起来的一整套体系,让我去回忆这学期学到什么时,我也只是记住作业相关内容以及在作业驱动下所学习到的知识。也就是说,我所认识到的OO这门课的优势在于每周一次的作业。而在这种以作业为中心的体系下,上课的内容却总是很少能和作业产生联动,不免会使得上课的内容被边缘化了,所以我认为是否能在上课内容上做出一些改变,增加其与作业的关联性。

2. 关与JML这一单元,一开始的想法很美好,希望在学习JML的过程中,通过利用JML相关工具链来提高效率。但最后只能说效果很差,在几个工具的配置上都没能得到很好的效果还浪费了较多时间。所以是否可以对工具链这一部分多做些介绍或是提供几个较为可行的方法来提高同学们对这一单元的总体感受。

3. 关与UML部分,实验课会专门要求对关联、依赖、组合、聚合进行区分,但课程组对这部分的介绍又难以帮助我对他们进行细致的区分,所以以后是否能在这方面进行更细致的区分。

六、线上学习体会

与其他课程相比,我认为面向对象课程是受线上教学影响最小的学科了,因为就像我上面说的,我认为本身课程的核心就不是上课内容而是每周一次的作业以及围绕作业所构造的一套体系,而围绕着作业的这套体系似乎不管是线上教学还是线下教学效果都差不多,受影响较大的研讨课部分也被腾讯会议给很好的弥补了。所以总的来说面向对象的线上教学体验还是很不错的,可以称得上本学期给我感受最好的课了。

最后也希望面向对象的课程组以后能发展的越来越好。

北航OO(2020)第四单元博客作业暨学期总结的更多相关文章

  1. 北航OO(2020)第三单元博客作业

    一.JML理论基础及相关工具链 1.JML理论基础 该部分梳理本单元作业中涉及到的JML知识. 1.1注释结构 JML采用javadoc注释的方式来表示规格,且每行以@开头.通过使用//@annota ...

  2. OO第四单元博客作业

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

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

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

  4. oo第四次博客-UML暨学期总结

    一. 本单元两次作业架构设计 这两次作业实际上难度不大,不存在算法上的难题,大部分时间都是用在处理UML图中各个元素的关系上. 第一次UML主要处理UML类图.有UMLclass,UMLinterfa ...

  5. OO第四单元博客

    第四单元博客 这个单元的作业,emmmm助教们做的工作还是一如既往的多,我们只负责添一添代码,最后一次作业了,感谢各位助教和老师,同时也希望我能顺利通过这最后一关. 架构设计 第一次作业架构展示 第一 ...

  6. OO第四次博客作业!

    oo第四次博客作业 一.测试与正确性论证比较 测试只是单方面片面的证明对于当前的输入程序是正确的,测试只能证明程序有错误,不能说明程序是对的. 正确性论证是程序达到预期目的的一般性陈述,是通过规范化的 ...

  7. OO第四次博客作业(第四单元作业及期末总结)

    (注意:本文写作顺序与作业要求不完全一致,但涵盖了作业的所有要求) 一学期的BUAA特色OO课程结束了. PART 1  我想先写我这一学期的感想 从第一单元满怀期待地写完多项式求值到最后看着60分不 ...

  8. OO第四次博客作业--第四单元总结及课程总结

    一.总结第四单元两次作业的架构设计 1.1 第一次作业 类图如下: 为了突出类.接口.方法.属性.和参数之间的层次结构关系,我为 Class 和 Interface 和 Operation 分别建立了 ...

  9. C语言I博客作业12—学期总结

    一.我学到的内容 二.我的收获(包括我完成的所有作业的链接+收获)不能只有作业链接,没有收获 作业次数 作业链接 第一次 C语言I博客作业01 第二次 C语言I博客作业02 第三次 C语言I博客作业0 ...

随机推荐

  1. 攻防世界 reverse easy_Maze

    easy_Maze 从题目可得知是简单的迷宫问题 int __cdecl main(int argc, const char **argv, const char **envp) { __int64 ...

  2. java进阶(40)--wait与notify(生产者与消费者模式)

    文档目录: 一.概念 二.wait的作用 三.notify的作用 四.生产者消费者模式 五.举例 ---------------------------------------分割线:正文------ ...

  3. PAT (Basic Level) Practice (中文)1078 字符串压缩与解压 (20 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1078 字符串压缩与解压 (20 分) 凌宸1642 题目描述: 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一 ...

  4. 【10.5NOIP普及模拟】sum

    [10.5NOIP普及模拟]sum 文章目录 [10.5NOIP普及模拟]sum 题目描述 输入 输出 输入输出样例 样例输入 样例输出 解析 code 题目描述 小x有很多糖果,分成了 N 堆,排成 ...

  5. vue-router 监控全局路由,在路由中改变vuex中的状态值

  6. 201871030127-王明强 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 18级卓越班 这个作业要求链接 实验三 软件工程结对项目 我的课程学习目标 1.熟悉PSP流程2. 熟悉github操作3.加深对D{0-1}问题的解法的理解4.熟悉ja ...

  7. Python 高级特性(4)- 生成器

    列表生成式 通过上一篇介绍 列表生成式文章可以知道,它可以快速创建我们需要的列表 局限性 受内存限制,列表生成式创建的列表的容量肯定有限的 不仅占用很大的存储空间,如果我们仅仅需要访问前几个元素,那后 ...

  8. libnet的使用详解

    最近搬砖需要对libnet进行介绍在这里对知识进行汇总. 1.libnet简介 在libnet出现以前,如果要构造数据包并发送到网络中,程序员要通过一些复杂的接口来处理.libnet的出现,为程序员提 ...

  9. Unity2D项目-平台、解谜、战斗! 1.5 Player框架、技能管理组件

    各位看官老爷们,这里是RuaiRuai工作室,一个做单机游戏的兴趣作坊. 前文提到,凡是有"攻击"语义的对象,在游戏中,我们给予其一个"CanFight"组件予 ...

  10. 学习WEB前端是应该自学还是参加培训机构?

    先说观点,我强烈建议每个人都要自学,不要参加培训班. 我干web前端工程师这个职位已经有6年多的时间,之前在蚂蚁金服做过2年,后来离开是因为加班实在熬不住才走的,像这些已经上市的互联网公司几乎没有不加 ...