一、第四单元架构设计

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. python 查看模块中的方法

    way 1.help() way 2.dir() # dir() 函数不带参数时,返回当前范围内的变量.方法和定义的类型列表: way 3. 使用inspect模块, inspect.getmembe ...

  2. 攻防世界 reverse seven

    seven  hctf2018 这是一个驱动文件 ida载入,查找字符串 根据字符串来到函数:sub_1400012F0 __int64 __fastcall sub_1400012F0(__int6 ...

  3. 实验四 Python综合实践

    课程:<Python程序设计> 班级:1843 姓名:章森洋 学号:20184307 实验教师:王志强 实验日期:2020年5月16日 必修/选修: 公选课 1.实验内容 此处填写实验的具 ...

  4. linux安装nginx 并配置文件服务器和代理服务器

    linux安装nginx搭建服务并实现文件服务器和代理服务器配置 1.课题的背景和意义 由于编码过程中需要进行文件上传服务,文件上传后 需要有http资源的路径需要访问.原则上可以通过Apache . ...

  5. CSS 文字装饰 text-decoration & text-emphasis

    在 CSS 中,文字算是我们天天会打交道的一大类了,有了文字,则必不可少一些文字装饰. 本文将讲讲两个比较新的文字装饰的概念 text-decoration 与 text-emphasis,在最后,还 ...

  6. 【oracle学习笔记02】Oracle Architecture —— Process Structure

    Oracle中有三类进程: 1 User Process 2 Server Process Server Process is a program that directly interacts wi ...

  7. docker部署skywalking

    https://www.cnblogs.com/xiao987334176/p/13530575.html

  8. Google不兼容ShowModalDialog()弹出对话框的解决办法

    <script type="text/javascript"> //弹窗函数 function openDialog() { var url = "https ...

  9. IdentityServer4+OAuth2.0+OpenId Connect 详解

    一  Oauth 2.0 1 定义 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. ...

  10. 面试系列<5>——面向对象

    面试系列--面向对象思想 一.三大特性 封装 利用抽象数据类型将数据和基于数据的操作封装在一起,使其成为一个不可分割的独立实体.数据被保护在抽象数据类型内部,尽可能地隐藏内部细节,只保留一些对外的接口 ...