dyxdyx2333  

OO第四单元总结

一、第四单元总结

本单元实现了一个UML解析器,实现了对UML源码的读入以及有关信息指令的查询。第一次作业中要完成的是将UML的输入信息进行解析,建立相应的数据结构,需满足能够处理多种不同的对类图的信息进行查询的指令。

在官方所给的架构的基础之上,只需要我们调用AppRunner运行程序,并且实现自己的Implement类,完成对UML中不同成员的读入、解析与存储,同时完成对类图中各种信息的查询方法。

         由于输入数据并不对输入顺序作任何保证,故我在对各有元素的处理上我采用了三轮处理的方式。

         第一轮:每一种数据类型建立一个ArrayList队列,将每种类型放入相应的队列中,同时,对于一些需要存储和其他类型有关联的类型,我们建立了对应的MyElement类,其中包含UMLElement以及其他需要用到的变量。

         第二轮:

                          

 

         这一轮中主要处理的是需要被其他类型所调用的类型,需要提前与其建立完成。比如说Attribute类型需要放入MyClass类中的Arributes队列之中,Generalization类需要其source和target两个类都已经完成了读入,才能创建相应的图。

         同时,为了方便之后的查询方法,我们建立几个HashMap用来完成图的创建。

 

         其中,fatherTree用来查询当前类的父类是谁,由于本单元中不会出现类的多继承行为,所以每个类只会有一个父类。critical用来实现状态图中当前状态之后可能进入的所有状态,用来建立状态的路径图,从而判断关键节点。

         第三轮:

 

         第三轮实现的是最底层的类型,如Parameter、Message之类本身并不需要调用其他类型,但是其他类型需要知道自己所拥有的这些类型。

 

部分自己的MyElement类:

 

MyClass:包含operations用来保存类中的方法、parentClasses和sonClasses用来保存当前类的父子关系类、myInterface用来保存实现的所有接口,便于接口查询的O(1)复杂度、myAttribute用来保存类中的元素。

 

MyCollaboration:interactions和attributes用来保存collaboration中所有的元素。

 

MyInteraction:participants用来保存所有的生命线、umlMessage用来保存所有的消息。

 

MyInterface:fatherInterface和sonInterface用来保存接口的父子关系,同样是为了降低接口查询的实践复杂度。

 

MyLifeLine:将UmlLifeLine和UmlEndPoint全部统一到MyLifeLine中,通过在MyLifeLine中加入Type属性来判断MyLifeLine的类型,father和son记录了LifeLine和endPoint的消息传递关系。

 

MyState:将UmlState、UmlFinalState和Pseudostate统一进MyState中,通过Type进行区分,nextStates记录当前state可以迁移的所有状态。

 

MyTransition:保存了该迁移的所属事件和条件。

 

各类型关系图:

 

 

复杂度分析:

 

 

 

二、总结自己在四个单元中架构设计思维及OO方法理解的演进

         在我的感觉里,每个单元最为重要的就是第一次作业。第一次作业应该尽可能的将整个单元的架构给建立好,这样在之后的两次作业中才能避免重构,耽误时间,同时也能让自己更好地理解这个单元作业的目的所在。

         在架构设计方面,首先应该充分阅读指导书,明确本单元的目的。之后仔细地阅读官方包所给的代码,根据官方包和训练代码,对于架构有一个初步的设想,完成各级抽象,试着将需要自己完成的类的大概先搭好,完成读入工作和数据结构的建立。最后再次阅读指导书,搜索指导书中给出的各种条件,完善自己的代码,对各种边界情况有一个初步的映像,在写代码的时候能想起来。最后才是完成要求和算法优化。

 

三、       总结自己在四个单元中测试理解与实践的演进

四个单元的学习中学会了如何自己根据指导书中的条件来构造数据,学会了如何自己编写评测机。

 

四、       总结自己的课程收获

学习熟悉JAVA语言,能够根据需求实现类继承、接口继承等。自身的代码架构思路得到了锻炼,在设计架构的时候会考虑到客户的需求变更与版本迭代。了解多线程运作机制,建立了面向对象的思维,摆脱了面向过程的单一设计模式。

 

五、立足于自己的体会给课程提三个具体的改进建议

         1)在第一单元或者pre训练的时候可以多增加一些java语法的教学或者相关的链接

         2)bug修复的冷静期可以缩短

         3)指导书将需要注意可能会遗漏的地方加粗

 

posted on 2022-06-28 12:49  欧德要斯  阅读(25)  评论(0编辑  收藏  举报