OO 第四单元及课程总结
第四单元作业架构设计
本单元主要实现类图、状态图、顺序图的分析器,并进行合法性检验。理清每一种图各部分的关系是本单元的重点。
第一次作业
第一次作业需要完成类图分析器,根据类图中各部分的关系设计架构,具体如下图所示:

在MyUmlInteraction中按层进行解析,并分别存储。在解析时由于一些element需要利用parentid所以对于解析存储顺序需要进行考虑。本次作业先后进行了三次的解析分类存储:
1、对UmlClass 、UmlInterface、UmlAssociationEnd进行解析
2、对UmlAssociation、UmlAttribute、UmlOperation、UmlGeneralization、UmlInerfaceRealization进行解析
3、对UmlParameter进行解析
在MyClass、MyInerface、MyOperation中实现相应的方法。对于一些方法实行缓存机制,比如在加入attribute时进行出现次数的统计,在加入operation时对操作的可见性进行统计,在查询时可以达到相应的简化。
第二次作业
第二次作业添加了关于顺序图和状态图的解析。架构设计如下图所示:

在本次作业中在MyUmlGeneralInteraction中进行分类存储,将属于类图、状态图、顺序图的部分分别放到对应的类图分析类、状态图分析类、顺序图分析类中进行下一步解析。对于类图部分与第一次作业相同。在状态图和顺序图中依旧进行采用分层解析存储的方法。
第三次作业
第三单元需要完成相应的检验、架构设计与第二次作业基本相同,增加了MyStandardPreCheck类进行检验。架构设计如下图所示:

在四个单元中的架构设计及OO方法
第一单元:第一单元进行表达式的求导。重点是对表达式按层解析,分别存储。每个类各司其职,充分利用继承关系,每个类只需要关注其代表的类型的求导结果,就可以完成相应的内容。
第二单元:第二单元是多线程电梯的实现。设计了输入线程、调度器线程和电梯线程。设计电梯队列和需求队列类来表示相应的请求,并设计单独一个类存储电梯的状态信息。输入线程用于读取请求,调度器线程用于创建电梯线程,根据电梯状态分配请求,电梯线程用于处理请求。在这过程中需要保证线程的安全,使得各部分协调配合。
第三单元:第三单元主要是JML的学习,架构已经给出。重点是理解JML所表述的意义,根据其意义设计自己具体的实现方式,需要考虑性能的优化。
第四单元:第四单元的总体设计如上文所述。重点是理解各部分之间的关系,根据关系进行分层存储、设计架构。根据指令的需要在对应的层次中实现相应的方法。
在四个单元中测试理解与实践的演进
测试是oo课程中的重要部分。总体而言我在四个单元中对测试部分并未做很多的考虑,也没有自己动手写测评机。在中测中出现找不到的bug时,会借助同学的测评机进行测试。
课程收获
总体而言,oo课程让我收获到了许多其他课程不曾收获的内容,给我留下了一些痛苦和美好的回忆,提高了我的能力。
1、学习了java语言,JML,UML的相关知识。通过学习和应用各种容器,对于java容器的选择有了更深的理解。学会了使用继承和接口。
2、收获到了编写大量代码的能力。在oo课程之前,最多完成的只是二三百行的代码。而在oo的课程中需要完成上千行代码的开发,这是一个提升代码编写能力的好方法。随着课程的推进,在不断的学习中可以感受到自己能力的提高。
3、收获到了架构设计和oo的思想。每次作业之前都要思考怎样构建架构,这种思考的过程对我来说是十分宝贵的。
4、收获到了克服困难、精益求精的精神。作业开始时无从下手,需要一点点的学习和分析,有些地方也存在理解上的困难。很多情况下即使通过了中测也依旧进行测试,试图发现问题。
课程建议
1、建议在预习部分加入一些内容,可以提供第二单元多线程的学习内容。这样在第二单元开始时,不会出现从0开始而导致毫无头绪的状态。
2、建议在实验部分结束后公布实验答案。
3、可以提前半天开放新的作业。

浙公网安备 33010602011771号