BUAA OO Unit4 总结
1 架构设计
1.1 Homework13
第十三次作业的训练目标是实现一个UML
解析器,使其支持对UML
类图的分析,可以通过输入相应的指令来进行相关查询。
本次作业可以分为两个部分:
- 根据输入的类图的信息,对类图进行建模
- 查询指令的算法,如何获取到需要查询的信息
本次作业主要实现一个MyImplementation
类,为了实现这个主要类,我又增设了MyClass
,MyAttributeN
,MyAttributeR
,MyInterface
,MyOperation
,MyParameterN
和MyParameterR
类,以及MyAttribute
和MyParameter
接口。
1.2 Homework14
第十四次作业的训练目标是扩展UML
解析器,增加了对UML
状态图和顺序图的分析,可以通过相应的指令来进行相关查询。
本次作业我增设了MyInteraction
,MyLifeline
和MyStateMachine
三个类。
1.3 Homework15
第十五次作业的训练目标是在前两次作业的基础上能根据 UML
规则进行一定的规范性验证。
本次作业我修改了之前的架构,将UML
模型初始化新建了一个Initialize
类,并且增设了StandardPreCheck
类来进行规范性验证。
具体关系图如下:
解析顺序:
-
UmlClass
-
UmlInterface
-
UmlAssociationEnd
-
UmlAttribute
-
UmlGeneralization
-
UmlInterfaceRealization
-
UmlOperation
-
UmlAssociation
-
UmlParameter
-
UmlStateMachine
-
UmlRegion
-
UmlState
-
UmlFinalState
-
UmlPseudostate
-
UmlTransition
-
UmlEvent
-
UmlCollaboration
-
UmlInteraction
-
UmlLifeline
-
UmlEndpoint
-
UmlMessage
2 架构设计思维及OO
方法理解的演进
- 第一个单元的目的是完成对一个形式化表达式的去括号并化简的处理。
总结而言,本次作业个人完成的比较曲折,尤其是一开始没有理清架构就开始写代码,导致第二次作业完全推翻了第一次作业的架构,进行了一次非常搞心态的重构。第三次作业在第二次作业上迭代。
第一次作业让我明白了面向过程程序设计和面向对象程序设计的区别,以及体会到了类的思想。
- 第二个单元的目的是模拟多线程实时电梯系统。
本单元和第一个单元相比经验明显丰富了许多,我在开始思考自己的架构之前先充分阅读了往届学长学姐的博客,汲取前人的经验。在写代码的时候思路相对来说比较清楚。完成任务也不那么手忙脚乱了。
如果说有什么遗憾或者失败经验的话,就是性能上面的小遗憾。我在第六次作业中选择了均匀分配的模式,第七次作业试图改为效率更高的自由竞争,发现在最后一次迭代中改策略是一个非常不明智地选择,后来因为真的太复杂了,debug太难了,被迫改回均匀分配模式。所以,如果想追求性能的话,最好在一开始就选择最快速地策略,一定不要半途改策略。
- 第三个单元的目的是实现简单社交关系的模拟和查询。
和前两个单元相比,这个单元更注重算法,以及性能。这个单元比较考验耐心。相比于自己实现函数,这个单元我们先要阅读JML
语言,然后满足其描述的条件下,写函数。如果没有很耐心地读完JML
描述,就无法正确地完成功能。这个单元的作业个人感觉没有上个单元认真,没有做好足够强的课下测试,导致我出现了很多bug。通过本次作业,我复习了图的各种算法。这个单元醉卧最大的意义就是,它培养了我优化的思想。
- 第四个单元的目的是实现一个
UML
解析器,使其支持对UML
类图、状态图和顺序图的分析,可以通过输入相应的指令来进行相关查询,并能根据UML
规则进行一定的规范性验证。
本单元我认为其训练重点在于架构设计,如何更有条理的更高效的保存输入的信息。指令查询部分也用到了一些图的算法。这个单元很考验细致,我们需要明白每一条指令让我们要做什么,才能去更好地实现它。另外,这个单元需要注意异常的条件,第十四次强测的bug就是异常条件判定的顺序反了,导致了一个bug。
3 测试理解与实践的演进
本人能力有限,可以说在大佬之中是一只小菜鸡,所以一直都没有自己构建过一个评测机。但是我会认真阅读强测数据和同学给我的评测机造的数据。
- 第一单元表达式单元是根据一些极端条件构造一些比较极端的表达式的数据,例如在括号上面下功夫。
- 第二单元电梯调度单元测试数据更倾向于压力测试,测试线程是否安全。
- 第三单元社交网络测试可以倾向于性能测试,比如可以集中测试isCircle(),queryLeastConnection(),sendIndirectMessage()等容易超时的指令。
- 第四单元可以通过构建复杂
UML
模型来进行测试。
4 课程收获
- java编程能力
在短短一星期之内速成java基础知识,对java的核心类和编程语法有了较为全面的理解,培养了我的编程能力。
- 从面对过程程序设计到面向对象程序设计的思想转变
第一单元的学习,让我深刻明白了什么是面向对象,什么是类,我们该在什么时候创建一个类,该如何去实用类。
- 多线程编程的设计思想
第二单元的学习,让我对多线程的学习有了较为深刻的了解,我们该如何去保证各个线程之间的安全性,怎么运用锁。
JML/UML
规范化源码的阅读理解能力
第三单元的学习,让我对JML
语言有了较为全面的理解。
- 架构设计能力
四次作业都有一个核心,就是架构设计,架构设计应该在大规模细节化编程之前,这样不但可以使得我们的思路更加清晰,编程效率提升,并且也对往后的迭代有促进作用,减少remake的可能性。
5 给课程提三个具体的改进建议
- 关于指导书
有的时候看指导书会有一些歧义,希望可以让指导书写的更通俗易懂一些,对指导书可以进行一些改进。
- 关于评测机的教学
可以出关于数据生成器和评测机编写的教程,让能力很普通的同学也可以达成评测机构建的小目标。
- 关于研讨课
经历了几次研讨课之后,我感觉研讨课有的组员参与度不是很高,比起平时迭代作业和实验课,研讨课对能力促进的效果就不是很明显,是否可以改进一下研讨课的形式,提高同学们整体的参与度。
原创文章,作者:sunnyman218,如若转载,请注明出处:https://blog.ytso.com/270677.html