OO第四单元作业总结

一、本单元两次作业的架构设计

本次作业的架构采用了讨论区杨嘉成同学的建议,构造了MyClass, MyInterface, MyStateMachine, MyInteraction四个一级类用来包装相应的数据,同时构造了二级类MyOperation, MyAssociation。

MyClass

MyInterface

MyStateMachine

MyInteraction

在构造实例时,遍历三次,第一次提取所有的一级对象(UmlClass, UmlInterface, UmlInteraction, UmlMachine),第二次提取二级对象(UmlOperation, UmlAttribute, umlAssociation, umlGeneralization, UmlInterafaceRealization, UmlLifeline, UmlMessage, UmlState, UmlTransition, Umlfinalstate, UmlPseudostate),第三次提取三级对象(UmlParameter, UmlAssociationEnd)。每次将第一级对象利用add()方法填装到上一级对象中。同时为了寻找parent方便,用HashMap存储,键为Id。

第二次作业中的规则检查:

R001:对Myclass中的属性和关联端搜索即可。

R002:利用Tarjin算法求有向图的强连通分量,若一个分量中成员大于1个则构成了循环。

R003:利用队结构列出所有类(或接口)继承的类(或接口),有重复则重复继承。

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

第一单元学习了面向对象基本的数据封装和继承,设计专门的类处理输入达到职责的划分,解决多项式递归分析时使用了递归下降分析法,并学习了助教提出的面向对象式实现,体会了类之间的交互协作。

第二单元学习了多线程设计,基于多线程提高程序的效率,但要格外关注数据的共享和并发访问,做好线程安全防护。

第三单元课程组给出的框架已经实现了大部分内容,只需要依据规格补充相应的方法即可。通过这种方式,我体会到了规格设计的好处,首先是对过程进行了抽象,在设计阶段不必拘泥于具体实现,即将过程式的思考推迟到最后,而更多关注对象之间的交互和整体框架的设计。其次这种方式非常便于测试,想要写出规格需要对方法进行提前的约束,简化了每个方法的职责,同时在实现之后可以基于规格进行测试。

第四单元学习了uml,一种建模语言可以对系统进行描述,用例图类图状态图顺序图等,无关具体的语言,在需求分析、设计阶段都有广泛的应用。

三、在四个单元中测试理解与实践的演进

在课程过程中对测试实践的不够充分,过度依赖于评测结果,也出现了轻松过中测结果强测翻车的情况。在第一单元时,面对多人的作业,尝试通过脚本进行简单的批量化测试,但是第二单元由于多线程又回到了人工测试的方式。在讨论课中学习到了其他同学关于测试驱动编程的思想,在作业的设计阶段阅读指导书时就注意分析一些易错点,构造测试数据,以此规避调一些问题。在第三单元中学习了使用Juint进行单元测试,以及基于jml的验证,我认识到了bug应该防患于未然,通过设计以及简化实现来规避。

四、课程收获

(1)面向对象的分析设计方法。除了面向过程的思维方法,还学会了使用面向对象的思想思考解决问题。在面对需求时,先分析其中的交互关系,确定对象的边界和基本功能,然后进入对象内部设计数据的表示和管理,同时注意对象之间职责的划分,协同控制以及空间性能的平衡,最后进行设计原则的检查。在程序中加入一些数据结构时也可以使用面向对象思想,将他们单独封装起来,形成一个相对独立的部分,比如地铁中计算最短路径的Floyd算法,uml中识别循环使用的Tarjin算法。

(2)设计原则。学习到了一些基本的设计思想,比如依赖倒置原则,依赖于抽象而不是具体,善用接口,提高系统的可扩展性。同时在学习设计模式中发现给出的类图中很多都使用了接口,使模型的通用性增强了不少。

(3)学习并使用了一些设计模式。在多线程单元使用最多的便是生产者消费者模型,解决请求的简单调度。在多电梯的调度中,尝试使用观察者模式,当调度器接受到请求时分发给电梯执行。在电梯换乘借鉴了Worker Thread模式,将一个请求的处理方法作为说明书传递给调度器,再由电梯执行。同时还了解了其他设计模式,比如单例模式,不可变对象模式,线程池模式等。

(4)了解了基于规格的设计方法,利用Junit对方法进行单元测试、使用UML对系统建模。

五、课程建议

(1)建议实验课可以和对应的理论课错开一些,或是提前发布预习任务。上午上完理论课内容还没有吸收,课件也没有下发便进行实验效果不太理想。

(2)建议实验课在考完以后也有一个处理,而不是交了就可以了,不知道自己哪里做错了,如何改进。可以考后下发标程。

(3)建议课前可以下发PPT,PPT上部分内容字体太小看不太清,课上有些费劲。

(4)建议强化自测,感觉自己对于评测机比较依赖,习惯于提交看结果而不是自己构造。

猜你喜欢

转载自www.cnblogs.com/pandaaud/p/11066928.html