OO第四单元总结博客

OO第四单元总结博客

一、第四单元作业架构设计

​ 在本单元的作业中,要求设计者设计一个具有正确性检查功能的UML文件解析器。在深入理解UML语言(类图、状态图、顺序图)的同时,进一步加深了层次化与模型化设计的思想,以下是对本单元及本学期面向对象课程学习的总结。

第十三次作业

​ 通过这次作业,搭建了解析器的基本逻辑框架,在第十三次作业中,涉及到了UML类图的解析。在完成本单元作业的过程中,我认为最关键的一点就是理清UML各个元素之间的层次关系。考虑到本单元的作业是一个离线算法,因此如果一开始就设计好了一个清晰且科学的处理流程,在后续的拓展中就能得心应手。

​ 在第十三次作业中,我将UML元素分为了3个层次

第一层 第二层 第三层
UmlClass UmlAssociation UmlParameter
UmlInterface UmlOperation
UmlAssociationEnd UmlAttribute
UmlGeneralization
UmlInterfaceRealization

架构中主要使用HashSet通过UML元素的id对各个元素进行存储和索引,同时在每个元素的父层中设置合适的容器对其子元素进行存储,再针对作业中题目的要求选择合适的算法进行建模,这样整体架构就已经初步建立。

第十四次作业

​ 这次作业加入了顺序图和状态图的解析,设计的架构整体上没有改变,主要工作是将新加入的元素进行同样的层次化建模,这次作业我将UML元素分为了4个层次

第一层 第二层 第三层 第四层
UmlClass UmlAssociation UmlParameter UmlMessage
UmlInterface UmlAttribute UmlLifeline UmlEvent
UmlAssociationEnd UmlOperation UmlEndpoint UmlOpaqueBehavior
UmlCollaboration UmlGeneralization UmlPseudostate
UmlStateMachine UmlInterfaceRealization UmlFinalState
UmlInteraction UmlState
UmlRegion UmlTransition

​ 这次作业基本上就是上次作业的拓展,只要相应算法实现正确就不会出现什么问题

第十五次作业

​ 这次作业加入了规范性验证,我实现的思路是根据UML规则将规范性验证过程中可能相关联的元素在前两次作业的基础之上建立起联系,第四单元作业的整体架构如下

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

第一单元

第一单元作业的内容为表达式的解析,这一单元是我第一次接触面向对象编程,这个单元的难点主要是改变以往固有的编程思维,学习了层次化建模,了解了封装、继承、多态等OO主要思想。

设计架构方面,学习了递归下降法,将表达式中各个元素都视为一个对象,理清各个对象间的层次关系。另外就是认识到了好的架构对于迭代和维护的重要性,受益匪浅。

第二单元

第二单元涉及到了多线程编程,不仅要求我们设计一个科学且合理的电梯调度算法,还要求我们能够正确协调各个线程之间的配合使其正常工作,本单元涉及到了同步、互斥、死锁、信号量等多线程编程相关问题,难度较大。

在本单元我吸取了前一单元的教训,在第一次作业中就设计了一个扩展性较强的架构,为之后两次作业打好了基础,但是由于对线程安全问题处理的不够好,导致这一单元出现的错误较多而且耗费了很多精力。

第三单元

第三单元以社交网络为背景引入了契约式编程,通过学习和阅读JML规格化语言,了解了工业界的编程规范。

本单元的难点就是能够正确理解JML规格的要求并且能够自己设计相应JML规格,通过本单元的作业还巩固了图论相关的算法,如最小生成树、最短路、并查集等。

第四单元

第四单元涉及到了UML元素的相关问题,加强了层次化设计的思想,设计架构已在前文介绍,不在此处赘述。

三、测试与实践的演进

  1. 在前两个单元我并没有意识到测试的重要性,基本上在通过中测之后就没有再去管该次作业,测试主要是通过样例和手搓数据进行,这导致数据的覆盖率很低,强测得分不是很理想。
  2. 在被强测数次gank之后,痛定思痛写了评测机和数据生成器,通过边界数据和大量数据覆盖,bug率明显降低,同时和舍友进行对拍,后两个单元作业效果明显变好。
  3. 在第三单元还接触到了junit,通过junit进行单元测试,但是我并没有主要使用该方法,今后需要进一步学习。

四、课程收获

可以说,通过OO课程自己的代码能力较于以前有了很大提升,不仅接触了Java语言和面向对象编程思想,而且通过一次次作业的实践不断巩固和提高,通过OO课程,我

  1. 熟悉了Java语法和面向对象编程继承、封装、多态等重要思想
  2. 学习了多线程编程,了解了线程安全的重要性
  3. 意识到了测试对于一个大型项目的重要性,能够自己编写评测机、数据生成器
  4. 学习了JML规格化语言,并且能够自行编写一定复杂度的JML规格
  5. 学习了UML类图、顺序图和状态图的相关知识,通过它们可以更好的了解一个架构内部的信息,有助于我们快速理清一套代码结构
  6. 强化了建模能力、层次化编程,意识到了架构的重要性

五、课程建议

  1. OO实验课没有反馈,不知道自己的缺陷和错误点,希望今后能加入实验课的反馈环节
  2. 前两个单元难度有些偏大,与pre风格迥然不同,刚开始适应比较费劲,也许可以调整一下单元作业的顺序
  3. 理论课相关的知识在作业中的体现不够,可以减少每个单元的作业次数加入一些与理论相关的小实验
posted @ 2022-06-27 13:24  Tsundokku  阅读(17)  评论(0编辑  收藏  举报