OO_UNIT4

OO_UNIT4

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

本单元的作业要求我们实现对UML语言的解析,要完成对类图,状态图,时序图的解析以及对其异常的处理。在解析过程中主要就是需要首先对输入的UML元素进行解析和存储之后建立UML元素对应的图,随后在元素图的基础上来进行分析和处理。

在建立模型的时候完全可以对于每一种UML元素进行一次循环,当然也可以将互相不冲突的元素放在同一个循环内进行解析。因此在考虑到不同的元素之间的层次关系后,我最终初始化的过程分为五个循环:

第一次循环:UmlStateMachineUmlCollaborationUmlInteraction

第二次循环:UmlClass UmlInterface UmlRegion UmlAssociationEnd UmlLifeline UmlEndpoint

第三次循环:UmlAttribute UmlOperation UmlGeneralization UmlPseudostate UmlState UmlFinalState UmlMessage

第四次循环: UmlParameter UmlInterfaceRealization UmlTransition UmlAssociation

第五次循环:UmlEvent UmlOpaqueBehavior

五次循环后就可以保证所有有用的UML元素均正确地被加载进了我所实现的元素图中。

而对于元素的初始化、存储和查询,我单独实现了一个SearchMap的单例容器,来存储所有的元素并且提供方便的查询方法,并且将每一次循环中处理相应元素的方法集合在此容器中实现,来使MyImplementation只负责最顶层的设计。当然如果深入看我的SearchMap容器会发现里面十分冗杂,因为我在设计时考虑以空间换时间因此里面实现了每一种元素的HashMap

实现了元素图的构建之后,对于元素结构的检查以及查询操作,我全部放置在了另外一个类SolveClass中,通过单例访问相应的元素并在此类中实现了后面的查询和检查操作。

其中主要的复杂度就来自于SearchMap SolveClass两个类。

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

在这四个单元的作业过程中,我明显感受到自己设计能力在逐步提升,在逐步学习了多种设计模式以及熟悉了Java面向对象的能力后,我在对于项目架构的设计能力得到了很大的提升。在后面的作业中,我会很自然地利用单例模式等设计模式来简化自己项目的结构。

在第一单元中我自己的感受是首先体会了架构的重要性,但是并没有真正掌握架构设计的能力,但是感受到自己的OO思想得到了很大的提升,尤其是结合课上讲述理解了面向对象的封装性,多态性等特征。

在第二单元中我们完成了多线程下的电梯问题,学习了多线程编程,理解了多线程中的线程锁的应用方法,尽可能实现了线程安全。

在第三单元中学习了JML规格,在相应规格下设计实现具体功能,理解了规范的设计语言的应用。

第四单元学习了对UML语言的解析。对给出的UML文件进行解析和查错。

三、四个单元的测试、实践的演进

首先我个人在这四个单元的bug中主要的bug还是在编写程序中出现的低级错误,例如在循环中对容器进行操作,代码中相似部分复制粘贴忘记修改等。在测试过程中这一部分的bug完全可以依靠大量的随机数据来找到。但是还有另外的一部分bug就是自己架构设计,算法设计以及题目理解上的问题,这一部分的bug就需要针对具体的部分进行单独的压力测试。

四、课程收获

  1. 学习了Java编程方法
  2. 理解了面向对象的封装性、多态性等特性
  3. 学习了多线程编程思想以及如何保证线程安全
  4. 学习了JML描述规格

五、改进建议

  1. 评测机搭建上希望可以有一个pre的课程,可以帮助更多同学搭建评测机
  2. 在多线程这一单元中,希望减少一些不太符合实际的需求设计
  3. 在每一单元的第一次作业前增加一些training帮助同学熟悉本单元的设计思想。
posted @ 2022-06-28 14:35  SKiToul  阅读(24)  评论(0编辑  收藏  举报