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. NGK公链存储技术,如何开创应用落地新格局?

    尽管无人预测未来,但是资本的眼光总是那么灵敏,最近几年,国际资本市场纷纷将目光投到了公链市场上.从TPS高点备受抢占,再到DApp生态的不断涌现,再到目前Staking和Defi的新概念生态的不断发力 ...

  2. 页面导入导出EXCEL

    引用 using Microsoft.Office.Interop.Excel;using System.Reflection;//反射命名空间using System.IO; protected v ...

  3. Spring的BeanFactoryPostProcessor接口

    接口简介 BeanFactoryPostProcessor 接口是 Spring 初始化 BeanFactory 时对外暴露的扩展点,Spring IoC 容器允许 BeanFactoryPostPr ...

  4. JS数组的常用属性或方法

    1.length 数组长度 计算数组的长度 var arr=[1,2,3,4,5]; console.log(arr.length);//输出结果是5 2. push() 添加元素 向数组尾部添加新元 ...

  5. 【翻译】Python PEP8编码规范(中文版)

    原文链接:http://legacy.python.org/dev/peps/pep-0008/ item detail PEP 8 Title Style Guide for Python Code ...

  6. GetQueuedCompletionStatus客户端前端和server之间的通信

    项目中遇到了这个东西,怎么都调试不到.记录下. 一.完成端口IOCP https://www.cnblogs.com/yuanchenhui/p/iocp_windows.html

  7. Java网络编程UDP通信原理

    前言 继续今天我们的Java网络编程--TCP和UDP通信 一.TCP和UDP概述 传输层通常以TCP和UDP协议来控制端点与端点的通信   TCP UDP 协议名称 传输控制协议 用户数据包协议 是 ...

  8. Get和Post请求方式

    Get和Post是两种不同的类型的请求. 它们主要有3点不同. 1.get请求通过浏览器地址栏传递表单数据.post请求通过form data 传递数据,不会通过地址栏. 2.get请求安全性较低,p ...

  9. NET5 ORM 六大新功能 - SqlSugar 5.0.2.7

    介绍 SqlSugar是一款 老牌 .NET 开源ORM框架,并且在第一时间兼容.NET5,由果糖大数据科技团队维护和更新 ,Github star数仅次于EF 和 Dapper 优点: 简单易用.功 ...

  10. HashMap源码阅读(小白的java进阶)

    OverView 构造方法 //构造方法 public HashMap(int initialCapacity, float loadFactor) { if (initialCapacity < ...