BUAA_OO 第四单元总结

一、架构

本单元作业的目的是熟悉UML类图的元素及其解析方法,共三次作业,第一次作业解析类图中的各个元素,第二次作业加入了状态图和时序图,第三次对类图的有效性做分析。

第一次作业

本次作业要求实现类图解析器接口,实现的方法如下:

 

我通过MyUmlInteraction类实现次接口,功能的完成通过对输入元素进行建图实现,针对不同的UML元素,封装不同的类例如针对UMLClass类型封装了ClassType类,存储Class中的各个属性和方法以及父类等信息,类似的封装类型还有AssociationType,OperationType和InterfaceType。

完成对输入的各个UML元素建图之后,接口中需要实现的方法便迎刃而解了,整体的类间关系图如下:

  1. 将MyUmlInteraction当作交互平台使用,其受到请求时向Storage类中查询;
  2. Storage中保存所有MyUmlClass/Interface(我没有区分类和接口),并保存fatherMap类存储类之间的继承关系;
  3. MyUmlClass存储attributionStorage和OperationStorage;
  4. OperationStorage中保存类的parameter;
  5. fatherMap中存储接口实现Map和关联Map;

第二次作业

本次作业在上次的基础上实现对状态图和时序图的解析。这一次我依然采取了和上次类似的形式,创建了和fatherMap类同级别的StateMachineMap和InteractionMap。因为我认为类之间的继承关系、状态机类和顺序图类是平行的关系。这次我尽自己的力量去最大化解耦,但是还是由于算法的问题,导致代码十分的鬼畜。不过在状态图和类图,都存在一个Map和一个Storage存储映射关系、map和其他内容。所以这两部分的代码都是“复制粘贴”一样的。

 

第三次作业

第三次作业我个人认为难度还是比较大的,虽然弱测本身也不是很难,但是强测真的很炸人,中间强测真的是爆炸,但是而且到了期末,本身就不想在这个上面花费太多时间,所以到最后就开始并且一直摸下去了,现在想想真的是很多遗憾有。

 

二、在四个单元中的提升

第一单元

第一单元的主题是求导,共三次进阶性作业

  • 第一次:简单多项式求导
  • 第二次:带简单正余弦函数且带乘积项的求导
  • 第三次:带嵌套函数的求导

在本单元的学习中,我们首先熟悉了java语言的基础语法,然后学习了面向对象程序设计的基本思想,并以代码的形式在作业中实现,包括类,继承派生,多态,基类,接口等等。

第二单元

第二单元作业,由简到难地实现了三版目的选层电梯。本单元主要学习java多线程的编程方法。

  • 第一次:多线程的傻瓜式单电梯
  • 第二次:多线程可捎带电梯
  • 第三次:多线程多部多限制可捎带电梯。

难度逐渐加难,对线程安全性的要求也越来越高。

第三单元

第三单元作业,由简到难地迭代式实现了三种JML需求,主要学习了面向规格的编程方法。

  • 第一次:实现Path类和PathContainer类
  • 第二次:继承PathContainer类实现Graph类
  • 第三次;继承Graph类实现RailwaySystem类

本单元中我们学习并掌握了面向规格的编程方法,会写JML会读JML,能用规格语言描述类和方法。

第四单元

本单元作业的目的是熟悉UML类图的元素及其解析方法,共三次作业,第一次作业解析类图中的各个元素,第二次作业加入了状态图和时序图,第三次作业对类图的有效性做分析。

在这一单元,学习了与用户打交道常用的UML工具,更方便人对程序架构的理解,会写UML,会读UML,会用UML描述类和方法。

小结

这四个单元循序渐进地向我们展示了面向对象编程思想中的各个模块的内容,从最开始的封装继承等面向对象语法特性,到设计架构中常用的JML和UML,我学习并亲自实践了这些知识点,提升了代码能力和架构能力。

三.课程收获

  • 代码方面

  1. 初步了解了“对象”的思维方式。虽然还是会有对一个类“大杂烩”的情况,但每次我都尝试去解耦、精简方法。
  2. 有了一定的架构能力,拿到题目的第一反应是“如何设计”而不是“如何算法”。还存在的一个问题是架构经常产生“头重脚轻”的情况,最后一层负责一切计算而上层起不到作用。
  3. 学习了许多设计模式并去应用。不过有时候由于代码过于“女娲补天”,设计模式被摒弃了,这一点很不好。
  4. 多线程编程时去思考冲突问题。回顾二单元的几个sychronized方法,我发现这一点还有待提高
  • 测试与Debug方面

  1. 使用JML进行测试,分析“边缘”数据构造测试集。每次都从整体上把握程序的架构,分析出深层次BUG(比如上一单元总结中提到的只有特定运行顺序才会出现的bug)。
  2. 每次尝试自己写评测机,工作量有时候有些大但是既能深刻研究指导书,又其乐无穷。
  3. 学会了不printf的debug方法(O_O)/,用电脑而不是使用人脑来调试。但是对于多线程场景调试能力还不是很好。
  4. 帮助同学进行debug也能受益匪浅

  这学期的课程不算多也不算少,OO和OS占用了绝大多数的时间。同时,这两门硬件基础和编程基础的课程在我心中形成了强烈的对比,让我明白了这两门学科是什么,也有了自己的选择。相比于硬件,我发现我更喜欢OO。每一次作业我都能思考上一晚上,每次都考虑自己的收获而不是分数。

四.改进建议

1. 我觉得OO这次是线下教学,不得不说的一点是,线上教学的学习效果还有各种东西完全都跟线下没法比,计算机是一门分享的学科,我觉得在线下学习最大的问题就是没人讨论,因为节奏很难控制,而且自己问别人的时候,别人也不一定能即时回复,就算能及时回复,其实用文字来表述也是很乏力的,很多时候在线下就一句话的事情,到了线上就可能花费大量的时间,所以线上学习的效率真的比线下学习低多了,相应的作业的难度也增加了很多,所以这一学期不得不说过的极其痛苦。

2. 希望OO课程组能够根据实际情况进行难度的调整,既然是线上教学,众所周知肯定没有线下教学学习效率高,学习效果好,那么为何还继续这种高难度呢?为何不适当的降低一下难度呢?或者适当的放宽一下标准呢?学习场景都变了,再不放宽标准,这也未免太不知变通。

你可能感兴趣的:(BUAA_OO 第四单元总结)