OO_Unit4总结_UML图

一、本单元三次作业架构设计

1. 第一次作业

  第一次作业主要是实现一个UML类图的分析器,对类图中各种元素以及其性质进行了较为全面地分析。涉及元素包括了Class、Atrribute、Parameter、Interface、Generalization、InterfaceRealization、Association、AssociationEnd、ClassAttributeVisibility、TopParentClass等等。针对这些属性,本人新建了UMLClass属性,针对Class和Interface单独建立了树的数据结构,由于前几个单元有过一次Arraylist导致的0分情况,本次作业主要使用hashset对数据进行存取。

UML类图:

 2. 第二次作业

  第二次作业主要增加了顺序图以及状态图的解析以及查询,在本次作业中,本人以第一次作业为基础,增加了两种新增图的对应类,将第一次作业内容放入到MyUmlClassModelInteraction中,再在MyUmlGeneralInteraction中对MyUmlClassModelInteraction,MyUmlCollaborationInteractionMyUmlStateChartInteraction进行实例化,进而完成第二次作业的实现。

UML类图:

2. 第三次作业

  第三次作业在前两次作业的基础上增加了对三种图的有效性检查,本人针对每一个规则新建了一个类,并且在该规则对应类中将该规则进行实例化。

UML类图:

 二、架构设计以及OO方法理解演进

  第一单元为表达式求导作业。由于初次接触面向对象设计的思想,在第一二次作业中面向过程的表现十分明显,同时每一次新作业到来基本都要重构,这也大大地增加了我的工作量。在本单元作业中,本人把主要工作分成了两个部分:输入处理以及数据处理。在输入处理方面,三次作业均使用了正则表达式匹配,在数据处理方面,本人采用的是化整为零的思想将一个多项式进行拆分,拆分到facter之后在进行求导。但由于一些特殊表达式例如四次三角函数的化简等特殊情况的特殊算法导致了部分作业时间性能不佳。

  第二单元为电梯调度作业。相比起第一单元多项式求导作业而言,电梯调度作业在算法的难度上有着很大程度的降低。然而这并不意味着作业整体难度降低了。由于多线程的加入,本单元作业在调试上的难度陡然上升。本人在debug的过程中花掉了不少时间,正所谓编程五分钟,调试两小时。这也极大地锻炼了我们的多线程编程以及调试能力。在这个过程中本人也收获颇丰。三次作业中本人采用的均为改进版的scan算法(look算法),在第三次作业中加入了换乘楼层以及换乘算法,这一单元的作业让我深刻体会到了迭代开发的省时省力。也让我充分意识到了架构设计的重要性。

  第三单元是JML形式化设计作业。本单元作业可以说是这四个单元里面实现起来最为简单的一单元作业。但是本人却也在本单元作业中屡遭重创,甚至有一次强测直接0分。原因在于算法优化程度不够,匆匆实现正确性便以为自己高枕无忧了。同时这一个单元也充分结合了其他科目(尤其是离散数学,其中连通,强连通,最短通路,点双连通等函数的高效实现也是一个难点)。让我在学习OO的同时还巩固了不少数学相关知识。

  第四单元是UML图作业。本单元作业主要难点在于理解UML图的关系以及弄清每一个类所具有的属性还有这些属性的对应功能。由于本单元的三次作业基本没有重复内容,耦合性较低,因而也无需重构。这也让我清晰的认识到了实现一个功能时减少类与类之间的耦合的重要性。

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

  前三个单元本人测试均使用的自动评测机,同时在使用自动评测的时候也加入了一些个人构造的极端数据,这样做在测试的时候确实能省下不少功夫,但是在设计自动评测机以及数据生成器的时候花的功夫较多(还好有大佬带飞,众人拾柴火焰高)在第四个单元本人测试采用的是数据生成器加对拍。由于每一次作业基本上都能做到大量的充分测试,因而绝大部分作业都没有出现过多错误(当然一出现就全炸了,例如第三单元第二次作业的0分强测)

课程收获

  都说6系每学期都有大Boss级别的课程,上学期的CO,这学期的OO,OS着实都让我"受苦"不少。经过了四个单元的OO训练,从偏向于面向过程的多项式求导,到考量多线程的电梯调度,再到根据文档实现代码的JML,最后到UML类图,每一个单元都是不一样的体验。本人从最开始的面向过程编程,到后来逐渐熟悉面向对象的设计模式,每一次作业和实验帮了我不少。在这整整十六次作业还有八次实验中本人也从面向对象小白慢慢成长,学习了多线程,图的基本性质以及算法,脚本自动化数据生成以及测试,单元测试,对拍,工厂模式,类的继承与接口的实现等数不胜数的重要知识。在这一学期的OO长跑中我也意识到了与同学的沟通还有合作的重要性,实现代码过程中互相讲解对方思路,有时也会让我恍然大悟。总而言之,老师和助教精心设计的一次次作业和实验,同学之间的互相帮助,让我本学期的OO课程收获颇丰。

五、三个具体改进建议

 1.鉴于本人在自动评测以及对拍之中受益许多,本人认为可以在下学期单独开设每一个单元作业的自动测试项目作业,让学有余力的同学进行设计并获得一定分数。

  2.第三单元JML格式化设计可以稍微强调一下优化算法时间复杂度的重要性(本人没有特别重视时间复杂度在第三单元第二次作业强测中所有数据tle凉凉)

  3.第四单元的概念可以讲解更加详细一点,例如对输入样例进行解读,稍微降低一下同学们的理解难度。

  

五、线上学习oo课程的体会

  对与计算机专业课而言,受疫情影响基本为0,本人在这学期OO课程中找回了上学期CO的那种刺激,实验作业也按时安排,本人也为在疫情期间还是能体验到如此原汁原味的和核心专业课而庆幸。当然偶尔也会出现不方便的情况,例如与同学和老师的沟通从线下转移到了线上,这是需要我们花时间来适应的。总而言之,个人认为本学期OO课程线上学习体验不亚于线下学习,在高强度的实验与作业下也能够激发自己的潜能,学到更多知识。

猜你喜欢

转载自www.cnblogs.com/1263996368yangxi/p/13166188.html
今日推荐