一、第四单元架构设计

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. c++ 反汇编 除法优化

    接上篇:<C++反汇编与逆向分析技术揭秘>--算术运算和赋值 printf("argc / 4 = %d\n", argc / 4); printf("arg ...

  2. 攻防世界 reverse 新手练习区

    1.re1 DUTCTF IDA shift+F12 查看字符串 DUTCTF{We1c0met0DUTCTF} 2.game ZSCTF zsctf{T9is_tOpic_1s_v5ry_int7r ...

  3. PHP并发抢购解决方案

    Mysql版 逻辑步骤 mysql存储引擎使用Innodb 开始事务,查询商品库存并加上共享锁 判断库存是否足够,进行商品/订单/用户等操作 提交事务,完成下单抢购 代码参考 // 关闭自动提交 $t ...

  4. Redis持久化——内存快照(RDB)

    最新:Redis持久化--如何选择合适的持久化方式 最新:Redis持久化--AOF日志 最新:Redis持久化--内存快照(RDB) 一文回顾Redis五大对象(数据类型) Redis对象--有序集 ...

  5. 借鉴Elasticsearch 7.x 深入系列学习

    开始 Elasticsearch 深入系列目录如下: Elasticsearch 7.x 深入 数据准备 Elasticsearch 7.x 深入[1]索引[一]原理 Elasticsearch 7. ...

  6. c 结构体内存对齐详解

    0x00简介 首先要知道结构体的对齐规制 1.第一个成员在结构体变量偏移量为0的地址处 2.其他成员变量对齐到某个数字的整数倍的地址处 对齐数=编辑器默认的一个对齐数与该成员大小的较小值 vs中默认的 ...

  7. Dynamics CRM与ADFS安装到同一台服务器后ADFS服务与Dynamics CRM沙盒服务冲突提示808端口占用问题

    当我们安装Dynamics CRM的产品时如果是单台服务器部署而且部署了IFD的情况会遇到一个问题就是ADFS服务的监听端口和Dynamics CRM沙盒服务的端口冲突了. 这样会导致两个服务中的一个 ...

  8. oo第四单元暨课程总结

    第四单元架构设计总结 第一次作业 单独写了MyUmlClass.MyUmlInterface.MyUmlOperation三个类对应UML中相应元素,在UML图中这几个元素包含一些下级元素,如Clas ...

  9. IDEA如何在一个项目空间下管理多个项目?

    用过Eclipse和IDEA编程工具都知道,Eclipse创建新项目时都是在同一项目空间下,而IDEA一个项目空间只能有一个项目,创建项目时会创建.idea文件. 所以每次创建完项目或者打开另一个项目 ...

  10. 数据库MySQL二

    注意拼接的时候如果为null则都为null 用if null 1.条件查询 2.按逻辑表达式筛选 3.模糊查询 还有not like 用转义字符\ #2.in 数值型的常量值都不用单引号,非数值型的都 ...