BUAA_OO_Unit4 单元总结

BUAA_OO_Unit4 单元总结

单元架构设计

本单元的作业要求是实现一个UML图的解析器,前两次作业分别要求对UML类图、UML顺序图以及UML状态图进行分析建模;第三次作业则是要求实现一定的异常检测功能。

在本次作业提供的官方包中,已经对UML图中的各种元素进行初步建模,而为了更好的实现针对UML图的解析功能,我将不同类型的UML图中的元素进行了封装建模,建立了如MyClass、MyInterface等元素类,并将他们封装在class、sequence和state三个包中,将不同类型的图分开解析。

针对作业中对于不同图的指令查询要求,为了避免个人实现类中方法过多导致整个类的结构过于复杂,我也将针对三类图的查询指令进行了封装,这样在顶层只要调用这些类中的同名方法即可:

    private final ClassMethods classMethods;
   private final SequenceMethods sequenceMethods;
   private final StateMethods stateMethods;
   private final CheckMethods checkMethods;

针对UMLElement的解析工作,我按照不同element的前后依赖层次,利用多个循环进行分层解析,保证了整体结构的稳定性:

  • 类图

第一层第二层第三层
Class, Interface, AssociationEnd,Association Attribute, Operation, Generalization InterfaceRealization,Parameter
  • 顺序图

第一层第二层第三层
Collaboration,Interaction,Endpoint Attribute Message, Lifeline
  • 状态图

第一层第二层第三层第四层第五层
StateMachine Region Pseudostate, state,Finalstate Transition Event

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

第一单元的作业是关于表达式建模的作业,因为初次接触到面向对象设计的思想,这一单元的作业代码明显青涩,尤其是第一次作业中,整个作业就像是将一个普通的面向过程代码翻译成了java语言形式一样。在这个单元的作业中,对于表达式的分层分析让我逐渐理解了架构层次设计的重要性,作业逐步由几个类随意组成转向了利用好包进行结构的分类,将不同功能的代码分解到不同的类中,实现模块化的构造。

第二单元涉及的主要问题是多线程编程以及在这个场景之中如何实现线程之间的安全问题。在这里我们接触到了如何将方法或者类进行同步。整体来说,这一单元作业的架构涉及尤为重要,因为这个单元中的不同模块之间经常是并发运行,而不是像之前我们接触到的大部分程序一样顺序执行。但在并发执行之上,整个程序其实又分为了几个大层次,这就更加考验我们对于程序层次的分解建模能力。

第三单元作业的主要内容是契约式编程,这一单元因为主要是针对JML语言进行一个“翻译”工作,所以整体架构方面无需过多考虑。但是这一单元的学习中我对OO方法有更多的理解,JML提供的是一种程序尤其是其中方法的抽象性描述,这种统一的规定有利于在多人合作的复杂项目中保证程序的统一与正确性。而针对每个方法的具体实现,我们其实不仅要考虑其正确性,也还要考虑到方法的效率高低。

第四单元学习了UML图的解析,这也是我对于结构层次有着最为直观感受的一个单元的作业,因为UML图自己本身就有着强烈的结构层次,这也使得我们在建立解析器时需要顺着其架构进行,不然会平白增加大量的工作量。在这个过程中,我学会了深入理解UML图的本质,并采用某种数据结构将元素进行统筹整理。在整个单元的设计中,我也不断的思考如何进行构造封装,能够使得整个程序更为清晰简洁。

测试理解与实践的演进

说来惭愧,这个学期因为个人能力以及时间的原因,我并没有完成自动评测机的搭建,大部分作业的测试都是利用了其他同学的评测机和自己手动构造一些边界数据来进行测试。这样的后果也是很惨重的,那就是我经常可能会出现一些意想不到的bug,导致作业在强测与互测中扣分。除此之外,通过测试我发现子啊程序设计时也很需要注重时效性的问题,过长的运行时间也很有可能导致bug的出现。经过四个单元的学习,我已经深深的认识到,测试也是工程中十分重要的一部分。

总结课程的收获

  • 理解并掌握了java语言的使用方法

    本学期编写了大量java代码,对于这个语言已经有了较为熟练的掌握

  • 建立了面向对象的编程思想

    在程序的编写之中,我们并不是单纯的学习java语言的使用,而是要理解面向对象这种全新的编程模式。通过本课程的学习,我深入的理解了这种编程模式的思考方法。

  • 理解了多线程编程的基本模式

    利用第二单元作业接触了多线程编程,对于这类问题有了基本的了解

  • 设计程序架构的能力大大提升

四个单元的作业都要求我们对于架构有着很好的设计以及每个单元的博客还要我们自己总结提炼反思,经过这样的练习,我的设计能 力大大提高。

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

  • 可以针对测试方面给出更加细致一点的教程,让没接触过测试的同学有更好的学习机会

  • 实验课的教程希望能在实验结束后也能继续查看

  • 调整一下单元难度顺序,个人在学习过程中感觉第一单元难度最大,加之刚刚接触面向对象,导致时间很紧张

posted @ 2022-06-28 21:38  wodsk  阅读(29)  评论(1编辑  收藏  举报