BUAA OO第四单元期末总结

OO第四单元总结

第四单元总结

13次作业

作业要求

实现一个 UML 解析器,使其支持对 UML 类图的分析,可以通过输入相应的指令来进行相关查询。

 

架构设计

首先要对UML类图有一个深入的了解,对类、接口、属性、方法等UML图中的元素之间的关系有一个充分的了解,这些元素可以构成一个树状结构,类和接口中包含属性和方法,方法中又包含属性。其次要对UML图中的继承、实现关系有所认识,同时要结合题目中对各种元素的限制仔细分析。

具体来说,我根据自己的需要又写了自己的UMLClass,UMLInterface,UMLOpearate以便于建立起它们之间的树状关系,在每个UMLClass和UMLInterface中维护自己的父类。用一个容器来表示类或接口实现的所有接口。

 

14次作业

作业要求

要求支持顺序图、状态图的分析。

架构设计

和上次类似,这次的作业只需要将状态图和顺序图的参次结构分析准确即可。

对于顺序图,要理清UmlCollaboration、UmlInteraction、UmlLifeline、UmlMessage以及UmlEndPoint之间的关系。

对于状态图,重点是各个state(包括初始状态和终止状态)和UmlTransition以及UmlEvent之间的层次关系。要注意的是,初始状态和终止状态在官方包中不属于UmlState类,需另行判断。

与上次相同,也需要建立自己的相关的类,以方便表示出它们之间的树形结构。

15次作业

作业要求

扩展 UML 解析器,使其支持对 UML 类图、状态图和顺序图的分析,可以通过输入相应的指令来进行相关查询,并能根据 UML 规则进行一定的规范性验证,即判断UML图中的九种不合法行为

架构设计

本次作业的基本架构与上次作业完全相同。

本次作业的关键在于如何判断循环继承、重复继承、重复实现。

根据需要,我在实现中加入了两个图,一个由所有的继承关系构成,另一个由所有的实现关系的构成,前者用来判断来判断循环继承和重复继承,后者用来判断重复实现。循环继承我采用的是dfs的方法,从每个点遍历,并在过程中记录下它们的路径。当起点和终点相同时,则代表有环路。重复继承和重复实现我采用的是bfs进行搜索。

 

自己在四个单元中架构设计及OO方法理解的演进

第一单元--表达式求导

  最开始还没有面向对象的思维,也没有意识到一个好的框架的重要性。所以第一次作业基本上还是上按照给定的架构来完成的,但是在第二、第三单元中,我深刻的意识到了一个好的架构的重要性,它可以让我们的功能扩展,功能修改等等变的更加简便。所以在写代码之前,我们应该在写之前多花一些时间思考架构问题,而不是一开始就上手直接写代码。

 

第二单元--电梯

  在这个单元我们学习了多线程的知识,架构问题同样十分重要。同时我在这个单元中了解了很多以后实际工作中可能遇到的问题,比如线程安全问题,以及如何让多线程之间更好的并发以提高工作效率,还有如何使得线程之间安全有效的交互。同时也让我了解了许多调度算法,明白了没有一种调度算法能保证在每种情况下都是最优,但是我们可以根据具体的场景来选择适合自己的算法。

 

第三单元--JML

 

  在这一单元中官方代码已经给出了架构,因此在这一单元中架构不是我们考虑的重点,我们只需要根据JML来完成具体的实现。通过这一单元的学习,我了解了规范化的方法,以及如何实现JML。针对特定的JML规格,方法的具体实现方法有许多种,但总有效果更好的一种。我认为在阅读JML时,最重要的是要深层次理解其设计目标的内涵,而不应该仅停留在JML字面意思,否则将难以将需求抽象出来,可能造成方法复杂度过高且难以设计等后果。

 

第四单元--UML

  第四单元的一个重点就是将类图、顺序图以及状态图所有的元素之间建立起一个树形结构,并将所有实现、继承关系用容器保存。做完以上两个工作,第四单元的作业就成功了一半。

 

测试理解与实践

  开始两个单元的作业中,我采用的都是自己手动构造一些数据来进行测试,这样可能会遗漏很多情况,而且效率也不尽如人意。那个时候认为评测机还是一个很神奇的东西,一直都没有尝试过自己搭建一个评测机。第三单元由于写代码的难度暂时下降,于是有了更多的课外时间,又恰逢五一假期,因此我第一次尝试搭建了一个评测机,借此掌握了一些搭建评测机的基本流程,也算是一种进步和提高吧。我在写评测机的时候,发现数据如果全随机的话质量会不高,所以在必要的时候我们应该在随机的基础之上辅以自己的构造方法来构造数据。

 

 

课程的收获

  1. 理解了面向对象编程的思想以及架构的重要性,以及掌握了一种重要的解析方法——递归下降法。

  2. 理解多线程的开发机制,了解了线程安全、线程并发等问题。

  3. 学会规格化开发程序,知道了如何读JML以及如何写JML。

  4. 学习了类图相关的知识,了解了UML图。

 

改进建议

  1.第一单元对于大部分同学可能不太友好,我觉得可以在寒假的预习阶段介绍递归下降的思想并辅以相关习题。

  2.希望互测提交数据的时间间隔能有所缩短,在第二单元多线程的评测时能提高并发率。

  3.希望实验课的结果可以有反馈。

  最后,这门课给我带来了无数的收获与乐趣。同时老师和助教负责任的态度也让这门课填色不少,衷心希望OO课能发展的越来越好。

 

posted @ 2022-06-29 14:52  郑凯荠  阅读(33)  评论(1编辑  收藏  举报