【BUAA-OO】第四单元作业总结

第四单元作业总结

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

1.第一次作业

  第一次作业要求针对类图进行分析,从而实现一个UML类图解析器,分析内容涵盖类及其属性、操作的统计和可见性分析、关联及关联对端的分析、继承及实现关系的分析等,实现方式与上单元类似,只需要实现UmlInteraction接口以完成解析。

  由于只需要对类图分析,因此所有的数据存储和方法实现都在同一个类中完成,如下图所示:

 

  在构造MyUmlInteraction类时,存储UMLElement对象与id的关系、类与其属性、操作的关系以及关联、继承和实现的关系;在得到指令进行分析时,根据存储数据进行分析,并存储分析结果,方便下次使用。

2.第二次作业

  第二次作业在第一次作业的基础上进行了扩展,为解析器增加了解析顺序图和状态图以及基本规则验证的功能。因此,在实现上,保留上次作业中对类图解析的功能,将其作为一个单独的类,并增加新的类以实现对顺序图、状态图的解析和基本规则的验证即可。

 

  由于一次输入可以输入一张类图、多张顺序图和多张状态图,因此每个解析器可以持有一个规则检查器UmlCheck、一个类图解析器UmlClassMode、多个顺序图解析器UmlCollaboration和多个状态图解析器UmlStateChart,其中顺序图解析器和状态图解析器分别由其UmlInteraction和UmlStateMachine下的UMLRegion的id索引。图的解析器存储图的相关信息,并完成对图的解析;解析器根据指令得到对应的图的解析器,发出指令并得到解析结果。

 

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

  • 第一单元

  第一单元通过实现多项式导函数求解的方式引导我们初步建立了对象与对象化编程的意识,明确面向过程编程与面向对象的区别,通过继承、多态、抽象等方法实现层次化设计,并针对每一次作业做出了可拓展的设计。

  从第一次作业简单粗暴的使用List方式存储所有数据,并且只使用一个类完成所有的工作,到第二次作业开始尝试使用HashMap构建数据结构存储数据,为项、多项式和输入处理建立不同的类,并各司其职的完成求导工作,再到第三次作业分别按照因子—项—多项式的函数结构和加减法—乘法—嵌套的运算结构建立类并将其组合,建立起更加逻辑清晰、简洁明了的架构层次。

  比起一边书写一边思考的方式,提前考虑好架构、数据结构与算法,通过化整为零的方式一点点完成作业,在大大降低代码书写和逻辑思考的难度的同时,对正确性也有一定的提高。

  • 第二单元

  第二单元通过对电梯的模拟带领我们学习并掌握了多线程的相关知识,初识面向对象程序的需求分析与设计原则,让我们亲身体验了“多思考,多设计,少写码”的重要性。

  通过对课上讲解的生产者-消费者模式、单例模式、工厂模式等经典模式的分析与应用,可以进一步感受到轻线程体设计、均衡层次化共享数据设计、局部化算法作用范围的思想,从而在书写自己的代码的时候进行调整与改进。通过对面向对象程序的需求分析与设计原则的学习,可以进一步明确设计的重要性。

  通过方法与类之间的合作可以使得每个方法都只负责很基础的一部分功能,从而使得架构更加简洁清晰,代码的可读性和可扩展性也可以得到进一步的加强。实现设计之后再进行设计检查,则可以快速的发现问题,加以改进。

  • 第三单元

  第三单元通过对JML规格的实现指导我们建立起设计与实现分离的思考方式,脱离代码层次,在更高一级的层次上感受面向对象的思想,进一步加深对层次化设计的理解。

  通过对JML的理解,可以从细节上理解架构,从宏观上掌握每一个方法的行为模式和作用;通过对官方代码包的分析与阅读,则可以进一步加深对架构的理解。

  另一方面,本单元注重对时间复杂度的控制,需要对复杂的中间数据模型的处理,我们需要通过分析不同代码段的使用频率,合理分配每一部分的功能,对代码具有更加全面的掌握,从而对整体时间复杂度有一个良好的把控,根据功能需要构建适应性能要求的中间数据模型和协同架构,进一步了解了性能和架构设计之间的关系。

  • 第四单元

  第四单元通过对UML类图、顺序图和状态图的分析,将格式解析与语义提取分离,实现了抽象化的处理,是面向对象设计的图形化表达的深入理解,也是针对诸多不同类型的对象构造层次和关系,在构造UML模型的过程中动态维护相关的查询数据的一次实战演练。

  从UML中,我们可以学习到模型化设计的思想,进一步训练架构与设计的能力,可以说是对之前所学内容的一次深化与应用。

 

三、测试理解与实践的演进

  • 第一单元

o     边缘测试与压力测试

o     覆盖性测试

o     异常输入测试

  • 第二单元

o     线程安全测试

  • 第三单元

o     JML规格的验证

o     JMLunit自动生成测试样例进行覆盖性测试

  • 第四单元

o    关于正确理解题意的重要性???

 

四、课程收获

  • 第一单元

o     初识面向对象编程的思想与架构意识

o     继承、多态与抽象的知识

o     Java语言进阶

  • 第二单元

o     多线程机制与其经典模型

o     线程安全设计与死锁避免

o     工程化设计思想与SOLID检查

o     Java的多线程实现

  • 第三单元

o     JML基本知识与应用

o     关于异常的处理

o     规格化的思想

  • 第四单元

o     UML类图、顺序图和状态图基本知识

        • 图、模型层次、规则检查

o     模式化设计思想

 

 

五、改进建议

1. 关于作业的关注重点

  感觉在每次作业中,同学们关注的重点或多或少都有些偏离本单元的理论知识和思想,比如第一单元疯狂优化的性能分,比如第二单元疯狂优化的调度算法,比如第三单元摆在明面上的数据结构,比如第四单元模棱两可的规则说明,而上课讲的诸如架构涉及、规格模型等思想在实际运用中考虑的反而较少。

2.关于上机实验的题目

  实验的题目与理论课联系还算紧密,但是上午学习完理论知识下午直接上机实验容易造成大面积懵圈的现象,大家对刚学习的新知识了解和掌握都不太好。

而且上机实验内容与作业的关系就不大,相关知识点几乎都是上课学会下课忘完,效果不显著。历次实验难度差别也较大,前两次实验和UML第一次实验难度显著高于其他实验,并且部分实验题意描述并不清晰。

3.关于PPT

  希望PPT能及时下发一下,尤其是下午有实验课的时候。

4.关于博客作业

  希望能换个平台,博客园的后台真的是又难用排版还丑。 

5.关于时间安排

最后一次作业和博客进烤漆真的要人命啊!!!!!

每个DDL还都在考试当天啊!!!!!

真的夭寿了马上就要考试了还一点都没复习啊!!!!!

助教大大体谅一下我们这些不是6系的崽儿吧!!!!!

 

第一单元

猜你喜欢

转载自www.cnblogs.com/junzy/p/11070127.html
今日推荐