ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

BUAA面向对象2022第四单元总结

2022-06-28 10:35:30  阅读:131  来源: 互联网

标签:作业 BUAA CLASS bfs 面向对象 2022 UML 就行 单元


BUAA面向对象2022第四单元总结

第四次作业

总览

作业内容

本单元的主要作业内容为实现UML类图/顺序图/状态图的解析,需要提出UML中的一些信息,并判断图的合法性。实际上就是对图的一些操作。共有3次作业,为迭代开发。

第一次作业为类图解析。

第二次作业增加了顺序图/状态图的解析。

第三次作业增加了合法性检验。

完成情况

第一次作业强测挂了一个点,因为hashmap判相等搞错了,后来发现用equal就行。

第二次作业没有错误。

第三次作业强测挂了一个点,因为R002的Class和Attribute弄反了。

实现过程

总体思路

我比较懒,甚至几乎没有对传进来的UMLelement进行进一步的分类,需要什么就整个for一遍就行。

除了MyImplementation以外还有一个Fuck和Checker类,完全是因为500行写不下。Fuck类主要是一些询问exception的判断,Checker是对图的合法性检验。

难点

其实本质上还是对图的操作。有几个比较麻烦的操作。

CLASS_OPERATION_COUPLING_DEGREE:这个主要是判断重复操作,把两个method的Attribute扔到HashMap最后看是不是相同。

CLASS_ATTR_COUPLING_DEGREE:用UmlGeneralization跳父类之后统计就行。

CLASS_DEPTH_OF_INHERITANCE:同上,统计跳了几次。

CLASS_IMPLEMENT_INTERFACE_LIST:bfs就行,遇到的接口扔HashMap里。

STATE_IS_CRITICAL_POINT:两遍bfs,删去节点相当于直接vis标1,所以一个方法就能搞定。

TRANSITION_TRIGGER:遍历UmlTransition类型的边即可。

R002:每个Class有一个HashSet存所有相关的Attribute的名字。

R003:判循环继承,直接每个点bfs一遍就行,能搜到自己的就是不合法。

R004:从每个点开始bfs,能访问任意一个点超过一次就是不合法。

R009:两重循环遍历event,如果名字,src都相同且guard相同或为空就不合法。

总结与反思

HashMap判相等直接用equals就行。

这个单元让我们对UML有更深刻的理解,虽然题目细节过多有点烦。

课程总结

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

在第一单元,我初步体会到了架构设计的重要性。第一次任务刚发下来的时候,我对于如何解析表达式还是感觉很困难,觉得细节太多难以实现。直到我看到了训练中提到的递归下降法,这是一种可扩展性很好的算法,在我理解之后我也就顺利的完成了三次作业。回想当时如果我用一大堆if,那我几乎不可能完成作业。

在第二单元,我几乎通过独立思考实现了整个多线程的架构。多线程和单线程最大的不同就是线程安全问题,在我了解了生产者消费者算法之后,我发现这很适合单元的作业。在二三次作业中加入了电梯的换乘等问题,我从中意识到了调度器的重要性。因为一个电梯并不能看到其他电梯的情况,那么就需要一个调度器去管理所有的电梯。换乘的时候只需要把中转层的乘客扔回调度器的分配队列中就行,实现起来非常方便,且不容易出现bug。

在第三单元,我学习了JML规格,虽然作业任务很简单,但是我对代码及架构的严谨性有了更深的理解。

在第四单元,我学习了UML图,这是对整个代码的一个更加抽象的概括。

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

刚开始,我只能手造一些样例进行测试,但是这样效率很低。

后来我选择跟同学的程序进行对拍,但是它很依赖于数据生成器。

这两种方法各有利弊,应该综合使用。

总结自己的课程收获

1.学会了java语言。

2.学到了递归下降/多线程/JML/UML相关知识。

3.学到了面向对象的思想。

4.增强了架构设计的能力,写的代码可维护性增加。

5.代码能力提升了,代码风格也变好了。

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

1.强测真的太弱了,如果构造数据很难的话,可以考虑把hack成功的部分数据追加进强测。

2.研讨课比较鸡肋,大家的发言都大同小异,可以增加一些更加开放性的问题,例如给出一个需求让大家说说思路。

3.如果能做到的话,可以考虑换一下作业的内容,这几年的作业还是过于相似了(尤其是1/4单元)。

 

标签:作业,BUAA,CLASS,bfs,面向对象,2022,UML,就行,单元
来源: https://www.cnblogs.com/wzy2001wzy/p/16418585.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有