OO第四单元总结
前言
随着第四单元解析uml的两次作业的完结,本学期的oo课程落下帷幕。从最开始的oo思想,到多线程程序设计,到规格化设计,到最后的uml建模语言,可以说每个单元的学习,都让我收获颇丰。本单元的练习,旨在学习、理解并简单解析uml模型。第一次作业是对uml的类图进行查询;第二次作业,在其基础上,增加了顺序图和状态图。这两次作业让我对uml语言有了更深的认识。
一、作业架构设计
第一次作业
因为只有一个类图,我就直接一个类把图存储、计算都解决了。
对UmlElement的type进行分类,将需要的数据用hashmap存起来,
查找的时候直接通过UmlClass的id进行数据获取。
由于使用了switch,加上较长的case,进行分类(包括参数的direction和UmlElememt的type),
因而部分方法复杂度有些高,但实际上代码还是很清晰的。
第二次作业
主要有四个类,MyUmlGeneralInteraction类对UmlElement进行初步整理,
并分发给MyUmlModel, MyUmlCollaboration, MyUmlStateMachine,
三个类分别进行类图、顺序图、状态图的存储、计算。
MyUmlGeneralInteraction类,通过调用这三个类的方法,实现了所有的交互接口。
类图的部分,几乎完全重用了第一次作业的代码。
二、架构设计与oo方法理解的演进
第一次作业中,完全没有考虑过架构问题;
第二次作业开始,就开始用层次化的方法处理数据:表达式、项、因子;
在第二单元中,开始了解到了设计模式,更多的考虑了架构
在电梯问题中,电梯线程、请求器线程和共享对象调度器(队列)的设计,就有比较好的考虑架构问题。
第三、四单元中,频繁的使用接口实现、继承重用的方式,去满足规格或需求的要求。
对于架构设计的问题,其实每次写程序都有考虑很久,感觉自己还是不太能够从容的边想边写的完成一个很好的架构。还需要熟悉一些经典的设计模式,同时多读、多写一些代码。
三、测试理解与实践的演进
最开始是,自己手工分类各种易错的数据,进行测试;
到第二单元,多线程程序的测试有一定的偶然性,因而开始使用大量随机数据进行测试,与其他同学程序输出结果进行对比;
第三单元,学习了规格化设计jml语言。学习了通过junit进行单元测试,还尝试了JMLunit测试代码实现是否符合规格要求。
第四单元,涉及各种查询指令,对这些查询指令的方法,用junit进行了单元测试。
四、课程收获
1、面向对象程序设计思想,层次化、代码重用;
2、多线程程序设计:线程安全问题,线程同步与互斥、共享对象访问控制;
3、规格化设计:jml语言的学习,规格化设计的优势,各种相关软件的使用;
4、能较好的考虑架构问题;
5、uml建模语言:学习了uml模型;
6、熟悉使用了java语言;
五、课程建议
1、可以精选出开源代码,让同学们课下学习。甚至可以选择非常有代表性的,课上集体讲解面向对象的思想在其中具体发挥了什么样的作用,给程序带来了什么样的好处,利于同学更好的理解、运用。
2、优化评分规则,给发挥失常的同学机会(例如去掉一个最高分和最低分)。
3、设计并组织互帮互助服务(可有偿)。