OO第四单元总结~~

Posted ziyeryyyyyyyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OO第四单元总结~~相关的知识,希望对你有一定的参考价值。

OO第四单元总结~~

        紧张刺激的一学期OO课程结束了,咸鱼们留下了悲喜交加的泪水。在说这整个学期的OO感想之前,先总结一下第四单元学到的知识。


 

一、第四单元总结

  这一单元我们学习了UML有关的内容。 首先是理论课学习了什么是类图,类与类之间都有什么关系,怎样在类图中进行体现。实验课学习了如何使用StarUML绘制UML图。

  第一次作业只有关于UML类图的查询,但是这一部分我认为实现的难度还是很大的。主要是第一次接触这样的作业,对于UmlElement解析出来的各个元素里所包含的各个内容都不是很了解,所以这两次的作业都多亏了有大佬在评论区扫除疑惑。

  第一次作业的难度主要体现在这几个查询上:查找顶级父类、查找类实现的全部接口、查找所有不隐藏的属性(因为要包括父类继承来的属性)。

  在这里就使用了暴力递归,差一个类的时候一直往上循环去找它的父类,在每一个类的一次向上循环中,就拾取并保存其所有父类的所有信息,以便于后来查询,比如所有父类的所有属性、所实现的接口,所关联的类等。

  全部接口的实现需要用到bfs,不过为了简单起见,我使用了一个循环

  其中inter是这个类和其父类直接实现的接口,interGene是表示了接口继承关系的一个HashMap<String,Arraylist<String>>,前面是该接口的id,后面是其直接继承的所有接口的id。

技术图片

 

这次的结构主要就是自己建立了一个Class类,把UML图拆分好的信息又组合在了一起,形成了一个整体,把所有信息都存起来的做法看起来直观明了,但是缺点是可能会有一点点占用空间。

 

 


 

  第二次作业新加入了顺序图与状态图的查询,我感觉这两个部分都比较简单,唯一有一点值得注意的是,对于状态图的求后继状态,如果能够回到自身,就要把自身也算上…

  第二次作业主要的难点是3个rule的检查,001的难点在于读题(QAQ),是查询自己关联对端所在end的名字,而不是自己类所在的end的名字(悲)。

  002和003本质上来说是一个套路。这里面类与接口、接口与接口、类与类,继承与实现,关系很复杂,直接想的话会很乱,所以这里我觉得直接把继承、实现两种关系抽象为一种关系,即一个图中两个结点的单向边关系,并且把类与接口当成一种相同的结点,如果是继承,就由子结点指向父结点;实现,就由实现者结点指向被实现者结点,(由于接口不能实现类,所以在002的循环继承检查中,类与接口的结点无法形成循环边,所以直接在一次建图中把所有的继承与实现的关系全部加入进去就可以)。

  接下来就是紧张刺激的dfs时间,对于002来说,对于每一个结点,看看其能否通过某一条路径回到自身,这里有一个因为dfs的写法导致的易错情况,就是如下图所示的关系,

 技术图片

  这里写的时候需要注意不能在BC之间循环往复,否则可能会爆栈(别问我怎么知道的),所以可以设置一个表示每个结点访问次数的变量,访问这个结点的时候,如果访问过一次,就直接return.

 

  003的写法和002几乎一样,改变的是结束条件,即对于每一个结点,用dfs遍历全图,每访问某结点,该结点的访问次数+1,如果访问到某个结点,发现之前已经访问过,就可以直接结束递归,说明本次的初始结点存在重复继承。

 


 

  这两次的整体架构是分模块,即类图查讯类一个模块,顺序图一个模块,状态图一个模块,check也可以单独取一个模块,该模块只保存自己需要的那些信息。

 


 

二、对于这一个学期的OO总结(接下来是小嘴抹蜜时间

  有一句话我一定要讲:我要夸爆这一届OO课程的改革组!感觉整体的改变真的太好啦,不论是课制还是互测,和之前的比起来好得没话说,成功的将6系的一个祖传的怨声载道的课程变成了一个真正能学到知识、学习体验很好的课程。我觉得所有的地方基本上没有什么不好的,除了这个强测点扣分的bug在修复了之后还要再扣一次分,我留下了亿滴泪,就亿滴(大悲怆)。

  感觉这一个学期的OO做下来,收获真的是很多的。最明显的是我感觉我的代码能力和debug能力都有了质的飞跃。

  预习的单元熟悉了JAVA的语法。第一单元的实现中主要是对架构设计与方法上有了更多的认识。第二单元就是大家闻风丧胆的电梯了,记得第一次作业我写了一个完全不是多线程的“多线程”,所以导致我当时完全没有理解什么是多线程,到了第二单元和第三单元我才搞明白什么是多线程,怎么样去设计控制器,怎么样去规划共享资源,这都是我所学到的东西。第三单元JML语言的学习,让我们更好的规范了代码,而且这一个单元,我感觉在代码部分最重要的就是算法和数据结构的使用,在这些方面要用心思考,否则一不小心就会TLE了。第四个单元的UML是一个上手比较劝退,但实际上后面写起来还是蛮带劲的东西,主要是一开始拿到指导书和解析出来的一堆东西完全不知道那是什么…

  总之,一个学期的OO愉快的结束了,作为一个bug修复界面“大宝天天见”的鶸,我觉得我的分数可能虽然不会很高,但是我还是觉得这门课对于我来说意义非常大,每一个工程,每一次设计,每一次调试,对于我来说都是满满的人生经验(六月加急.jpg)。

  最后,祝OO越来越好~祝老师和助教大大们暑假愉快~

以上是关于OO第四单元总结~~的主要内容,如果未能解决你的问题,请参考以下文章

OO第四单元——基于UML的UML解析器总结&OO课程总结

OO第四单元及课程总结

BUAA_OO 第四单元总结——UML

OO第四单元总结

oo 第四单元UML&课程总结

OO第四单元暨课程总结