OO第四单元总结暨期末总结


第四单元三次作业架构与迭代

整体感受

第四单元主要学习的是UML相关的知识,大体包括类图,顺序图与状态图。在理论课掌握了所有知识点的前提下,代码实践部分的难点则集中在初期阅读大量官方代码(yysy,第一次作业开始写代码前我至少花了3h+的时间理解到底要做什么,开局处于完全蒙蔽的状态,有OS那味儿了,中后期则主要在各种element之间的结构设计方面,只要搭好了整体的框架,剩下的就是简单而冗杂的填写代码了。用我在通宵肝完第二次作业后发的pyq做个总结,“写UML和建高楼一样,设计师先绞尽脑汁想出一个完美的架构,接着无数工人日以继夜的重复着机械性的工作,思考和建造都十分痛苦,等大楼建好,会有一瞬间的成就感。然而万幸又不幸的是,coder是设计师和工人的结合体。。。”

HW1

第一次作业主要任务为完成类图的识别处理。整体的element结构可以归为一个树形,顶层为UmlInteraction,用于储存多个class,第二层为class,储存了所有Operation和实现的Interface,剩下的Parameter则储存在Operation中。并且由于mdj文件格式读入顺序的原因,需要两次读入才能读取全部的element,因此我设计了两次Build类来进行读入刷新。

HW2

第二次作业相比第一次作业新引入了状态图与顺序图的解析,因此可以将三者的顶层父类设置为UmlGeneralInteraction,类比第一次的作业,在UmlCollaborationInteraction与UmlStateChartInteraction中分别实现顺序图与状态图,其中UmlStateChartInteraction -> UmlStateMachine -> UmlRegion。在代码实现部分,由于本身对运行时间的要求不高,大部分的容器选择HashMap,能有效的去重与快速查询。值得一提的而是,需要为每种查询方法的结构设置专门的容器并且设置标记,来节约时间。

HW3

第三次作业去前两次比在架构上没有过多的改动,只是加入了异常检测,因此只需将各个异常下发至UmlClassModeInteraction,UmlCollaborationInteraction与UmlStateChartInteraction三个大类中即可。最大的难点在于对图的优化,这里我学习了Floyd来检测循环图,还有便是由于要对重复输入的各种element进行反馈,则需要将前两次作业中“自动去重”Map换为Arraylist来获得全部的element。

下面是我最终作业的整体结构UML分析图:

四个单元架构设计与方法演进

Unit1

第一单元YYSY由于初次接触面向对象,我对单独一个问题的分析还主要停留在面向过程的思路。虽然能勉勉强强分出 输入字符串 -> 多项式 ->项 -> 因子 -> 求导结果 的链式结构,但在具体解析,异常判断,结算,输出等功能模块上架构一塌糊涂。全部塞到Main里,光荣的继承了一main到底的传统,也直接导致了我整个OO课程中唯一次通宵重构情况的出现QAQ。

Unit2

第二单元在整体架构上其实考察较少,主要难点在于对多线程的理解,测试,与电梯算法的实现。架构方面主要还是以生产-消费者模式为主,将输入的Passengers和电梯elevator分别当作生产者与消费者线程,等待缓冲区中的乘客作为共享资源,同时为调度器Controller专门开一个线程,以减少电梯线程和输入线程的交集,减少死锁发生的概率。剩下的便是电梯算法的选择,我使用了改良版的LOOK算法,最终性能测试效果很好。处理死锁则分为两个部分,在代码实现阶段通过synchronized同步锁保护共享资源,而第二部分则是在测试阶段通过构造的大量随机边界数据来试错。第三次新增的换乘则通过加入Changer换乘线程与之前的Passenger与elevator线程共享等待队列即可,具体实现则需加入各种标记来确定该Passenger所处的状态与目的。

Unit3

第三单元JML在架构设计上也较为简单,主体的代码结构已经给出,难点则在对图的理解与算法层面。架构中考察的核心也在于如何选择合适的容器类型来提高效率,我选择设置缓冲区,Map处理查询,List处理遍历,二者双剑合璧的设计思路。在算法层面,难点集中在双连通,最短路径,循环回路判断,需要阅读自学大量网上和同学提供的资料博客,恶补遗忘的离散。

Unit4

第四单元架构方面上文已经提到,可以说本Unit对架构的要求是所有作业中最高的,思考出一个好的架构能一劳永逸,让整个单元演变为简单平淡的代码填写任务(类似隔壁OS实验)。总体来讲我采用了树状的架构,保持子类与父类的通信,同时设计出明显的递进迭代关系,总体单元体验较佳。

四个单元测试理解与实践的演进

每个单元具体的测试方法在该单元总结中已经提到,总的来讲,第一单元主要通过手捏边界数据,用Python自带的库写评测机两个方法来实现,yysy感觉第一单元单纯在想要实现全部数据的覆盖方面,是在四个单元中难度排在较前的,主要在于很容易遗漏许多特殊情况,这时讨论区和朋友的重要性就体现出来了。第二单元由于多线程的原因,对测试的要求便是全面覆盖与大量数据试错,通过随机数据搭建评测机即可。第三四单元由于实现的功能较多,除去明确考察性能的点(例如双连通)需要手捏测试数据外(肖学姐的万恶菱形图历历在目),剩下的我均采用与同学对拍的方式进行,效果很好。

课程收获

可以说OO是目前为止来到北航后我上的最好,最接近实际应用的课程了。不仅学习到了实现各种测试方法工具与OO代码实现的知识,更重要的是结合理论课上老师讲述的知识,理解了从接手一个项目,到分析设计架构,选择合适的模型,再到实现这个整体的工作框架与面向对象的思考思路,我认为这个是我本学期最大的收获了,也对我以后的学习,实验乃至工作,都有很大作用。

课程建议

  • 我一直认为第一单元作业的设计有可以改进的地方。综合来讲,我在第一单元花费的精力与掉的头发是最多的,当然有一定原因是第一次接触OO,但绝大功夫都花在思考读入多项式算法,正则的构造与拼凑各种古怪的测试数据我认为应该也不是个例,相信很多同学的第一次或者说唯一一次重构都交代在了第一单元,而重构的原因大多都是读入数据格式的变化与要求的变化。因此我认为在初入OO的第一单元作业,可以将考察重点放在架构的分析设计上,而不是形如程设DS的面向过程数据处理上。
  • 希望能将实验每次的成绩透明话,yysy目前都不清楚自己实验的得分,感觉怪怪的,并且有几次的实验难度离奇的高,需要阅读理解的代码太多,很难get到考察的点。
  • 希望对互测时提交的次数设置上限,或者对多次提交针对他人的同质问题设置一定的惩罚措施,有次一个bug被某个小朋友爆破了8次感觉着实不爽,虽然最后合并修复了,但也能猜到该同学抱着赌对面不修复的心理,来回提交类似的手捏数据,并不是评测机生成的随机数据,让整个互测的用意都变了味儿。。。

线上学习体会

感觉线上与线下的学习效果区别不大,除去无法见到可爱的老师与助教们外,剩下的遗憾就是缺少了研讨课听行业大牛谈心得的机会,希望以后能蹭课补上hh。

OO第四单元总结暨期末总结的更多相关文章

  1. OO第四单元总结暨OO课程总结

    一.第四单元作业总结 本单元的主要任务是对 Uml 图元素进行管理和查询,测试一开始会输入一个静态图,之后会对图中相关内容进行查询. 第13,14次作业 第14次作业新增内容很少,故与第13次作业放在 ...

  2. 返璞归真——OO第四单元总结暨学期总结

    本次作业是第四单元的最后一次作业,也是本学期面向对象的最后一次作业,在此我将分别对第四单元和整个学期进行总结. 一.本单元的两次作业 第四单元的作业是关于UML的一些处理.UML语言是一种区别于具体语 ...

  3. OO第四单元总结暨学期总结

    一.第四单元作业架构设计 我们第四单元围绕UML图展开,在第四单元开始之前,本来以为我们的工作是学习如何使用UML工具,开始后才意识到我们要做的是解析UML类图.顺序图和状态图.当然,让我们解析的只是 ...

  4. oo第四单元作业总结暨课程总结

    oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...

  5. OO第四单元(UML)单元总结

    OO第四单元(UML)单元总结 这是OO课程的第四个单元,也是最后一个单元.这个单元只有两次作业,相比前三个单元少一次作业.而且从内容上讲这个单元的作业目的以了解UML为主,所以相对前三个单元比较简单 ...

  6. 2020 OO 第四单元总结 UML

    title: 2020 OO 第四单元总结 date: 2020-06-14 19:10:06 tags: OO categories: 学习 1. 本单元三次作业的架构设计 本单元的代码编写与第三单 ...

  7. 【OO学习】OO第四单元作业总结及OO课程总结

    [OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...

  8. OO第四单元总结及课程总结

    OO第四单元总结及课程总结 一.前言 紧张刺激的OO“昆仑课程”接近尾声,经过一个学期的学习,我的收获和感触颇多,借此博客作业的机会,对自己OO这门课程做一个总结.本博客主要有以下五个方面,一是第UM ...

  9. OO第四单元博客作业

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

随机推荐

  1. Linux & SIGUSER1

    Linux & SIGUSER1 https://stackoverflow.com/questions/10824886/how-to-signal-an-application-witho ...

  2. dynamic creat svg in js

    dynamic creat svg in js SVG title https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title < ...

  3. Android Studio 3.3.1 向avd模拟器发送本地文件

    "工具栏/View/Tool Windows/Device File Pxplorer" 选择模拟器在找到对应的文件夹upload即可

  4. AtCoder Beginner Contest 192 F - Potion

    题目链接 点我跳转 题目大意 给定 \(N\) 个物品和一个 \(X\) ,第 \(i\) 个物品的重量为 \(ai\),你可以从中选择任意个物品(不能不选) 假定选择了 \(S\) 个物品,物品的总 ...

  5. 1047 Student List for Course ——PAT甲级真题

    1047 Student List for Course Zhejiang University has 40,000 students and provides 2,500 courses. Now ...

  6. 【死磕JVM】JVM快速入门之前戏篇

    简介 Java是一门可以跨平台的语言,但是Java本身是不可以实现跨平台的,需要JVM实现跨平台.javac编译好后的class文件,在Windows.Linux.Mac等系统上,只要该系统安装对应的 ...

  7. 这一篇TCP总结请收下

    前言 很高兴遇见你~ TCP这些东西,基本每个程序猿都或多或少是掌握的了.虽然感觉在实际开发中没有什么用武之处,但,面试他要问啊 而最近大家伙过完年,也都在准备春招,我也一样.阅读了一些okHttp源 ...

  8. 看完我的笔记不懂也会懂----Ajax

    Ajax(Asynchronous JavaScript And XML) - 本次学习所用到的插件 - XML - JSON - 关于AJAX - HTTP协议 - AJAX重点之XMLHttpRe ...

  9. 小心你的个人信息——GitHub 热点速览 v.21.09

    作者:HelloGitHub-小鱼干 浏览过必有痕迹,有什么可以抹去社交痕迹的方法呢?social-analyzer 是一个可在 350+ 网站分析特定用户资料的工具,你可以用它来"人肉&q ...

  10. 如何快速开发Winform应用系统

    在实际的业务中,往往还有很多需要使用Winform来开发应用系统的,如一些HIS.MIS.MES等系统,由于Winform开发出来的系统界面友好,响应快速,开发效率高等各方面原因,还有一些原因是独立的 ...