OO第四单元总结暨学期总结
一、第四单元作业架构设计
我们第四单元围绕UML图展开,在第四单元开始之前,本来以为我们的工作是学习如何使用UML工具,开始后才意识到我们要做的是解析UML类图、顺序图和状态图。当然,让我们解析的只是冰山一角,但我必须说解析UML图真的是太面向对象了。
1.第一次作业
第一次作业中我们要完成的是实现一个UML类图解析器UmlInteraction,同时有对UML的入门级了解(原来学习UML类图也是这个单元的目的之一),在这次作业中我本来想的是把之前学到的众多面向对象的知识结合起来写一次漂亮的作业,没想到写着写着就一个类写到底了 orz... 所幸在一个类中还算是条理清楚。

从上图可以看出我只用了两个类,Main类和MyUmlInteraction类,而我们主要实现的为后者,我在构造方法中实现了诸多的HashMap,用来保存各个UML属性的对应关系以保证在需要时我们可以直接使用,在所需实现的各个方法中,我多采用了直接返回值(如:getClassCount)或者BFS(如:getImplementInterfaceList),因此在编码上不是很费力。但我后来还是发现了空指针异常等诸多问题,还需进一步提升自己的码力。
2.第二次作业
这次的作业在第一次作业的基础上,我们需要进一步拓展,使得我们的程序支持对UML顺序图和UML状态图的简单验证,以及对类图的几个基本规则的验证。这一次的代码面向对象的特征更为鲜明,以一个类MyUmlGeneralInterface为载体,承载了MyUmlClassModelInteraction、MyUmlStandardPreCheck、MyUmlCollaborationInteraction、MyUmlStateChartInteraction几个类,各个类实现了各个类相应的功能,配合的比较好。

可以看出几个类之间有较为密切的联系。这次的作业中对于UML顺序图相关的内容非常的简单,只需要建立HashMap在查询时之间返回相应结果即可;对于UML状态图前两个也只是需要直接查询,第三个找后继状态的时候我用了BFS算法来寻找后继;这次作业比较难的部分是规则的检查,规则R001相对简单,只需要找到每个类所有的Attribute和关联对端并检查有无重名,规则R002我采用了DFS的方式来判断每个顶点是否处于一个圈中,规则R003则相对复杂,因为类实现接口也会导致类的多继承问题,但只要考虑到这一点就依旧可以通过BFS算法来判断每一个顶点有无违反多继承的规则。
总之,我在这个单元的两次作业的架构不是很复杂,完成的效果也比较理想,至少在强测中没有暴露出问题。
二、四个单元作业架构设计及OO方法理解的演进
1.第一单元
第一单元围绕多项式求导展开,当时的我不仅是对面向对象一无所知,甚至对我们学习面向对象的载体——JAVA也是一知半解,第一单元作业的完成自然会花费大量的时间,在完成了整个OO课程的学习后来回顾第一单元的内容,我觉得这一单元应该是想要让我们掌握继承、接口以及多态这些面向对象中最为基本的内容有一个大致的掌握,但是在我完成作业的过程中并没有很好的做到这一点,三次作业中甚至一次继承都没有用,可以说是虽然完成了作业,但是没有很好的完成这一单元要学习的目标,通过这一单元我基本了解了如何实现类与类之间的配合。
2.第二单元
第二单元围绕多线程展开,这一单元可以说是最难理解的一个单元,而且不仅要求正确性,对性能也有要求,这对我是一个非常大的挑战。在这个单元我也初步接触到了设计模式,虽然我在完成作业时并没有用到老师所讲的单例模式,但是对其有了一定的了解,在后面的作业中也是用到了观察者模式,收获不小。但这个单元是我表现最差的一个单元,不仅在课上实验的时候无从下手,在第三次作业不仅设计的时候出现了很多的问题,更是因为一个非常naive的问题强测爆炸,可以说这个非常重要的单元我掌握的不是很好,但也从中学到了很多东西。
3.第三单元
第三单元围绕JML展开,这一单元是我写得最顺畅的一个单元,可能是因为其难度本身就比上个单元的多线程简单地多,而且给出的描述相当严谨,让人一看就知道想得到什么东西,似乎在这个单元我比较好地完成了设想的教学目标,就是拿到一个任务,先想需要那些类,类中的方法需要返回什么,再去想如何实现。这个单元我也比较好地运用了最开始学习的面向对象知识,代码的拓展性也有所提高,使得在复用时方便了不少(感觉人生到达了巅峰)。
4.第四单元
第四单元围绕UML展开,这一单元难度不是很大,只要理解element之间的关系就可以轻松完成,但我反而在这个单元架构设计地不是很好,第一次作业只用一个类就完成了所有任务,第二次作业还相当好看一点。这并不能说明我之前学的知识都忘掉了,在写码的过程中,我还是很好地运用了学到的各种知识,类与类之间的交互变得流畅了许多,对继承、多态等也有了更加深刻的体会。
三、四个单元作业测试理解与实践的推进
在四个单元的学习过程中,我对测试的认识有了更多的理解,在最开始的时候,我对测试的理解是简单的构造测试数据,而且那时的我认为评测用的数据也仅仅是人为构造的比较复杂的数据,所以一开始我都是构造边缘测试用例来验证自己程序的正确性。之后我的认识可以说是脱胎换骨,从第一单元开始,就看各路大佬构造数据生成器进行随机的覆盖性测试,我就感觉到非常神奇,后来又接触了形式化验证和junit,在使用的过程中我发现junit这种单元测试实际上就是对一个方法的全面检测。
在经历了四个单元的学习,我似乎有了一定的灵敏性,对容易产生bug的地方多了一份直觉,这应该是随着代码量的积累相伴随的现象吧。
四、课程收获
OO这门课是我在经历过计组之后感觉非常实在的另一门课,其虐的程度不亚于计组,正如老师说的,“我们很难用一门课完全让你们学会面向对象的全部知识,只能是师傅领进门,修行看个人”,我十分地赞同这句话,我也始终相信付出越多收获就越多,硬核的专业能让你学到更多的知识。那么OO这门课让我学到了哪些呢?
- 面向对象的基本知识和基础应用
- 写1000+行工程化代码的能力
- 运用Java语言编程的能力
- 简单了解了设计模式
- 简单了解了测试模式
- 了解了JML这个程序规范工具
- 了解了UML类图、顺序图、状态图相关的知识
五、课程建议
- 实验课有较大改进空间,首先是和理论课的配合不太合适,往往是上午刚学完下午就要马上运用,学期中有些许改进,在实验课之前有课程预告,建议在每次实验课之前说明考察内容,避免课上现学无法掌握的情况发生。
- 个人认为第一单元的多项式求解很大程度上实现不了教学要实现的目标,比如我就完全没有用到继承、多态的内容...建议加以改进使其面向对象的特性更加明显。
- 多线程在面向对象中应该占有较大的比重,所以是否可以适当增加第二单元的学时,压缩第三单元的学时,来让学生们更好掌握面向对象相关的内容。
OO第四单元总结暨学期总结的更多相关文章
- 返璞归真——OO第四单元总结暨学期总结
本次作业是第四单元的最后一次作业,也是本学期面向对象的最后一次作业,在此我将分别对第四单元和整个学期进行总结. 一.本单元的两次作业 第四单元的作业是关于UML的一些处理.UML语言是一种区别于具体语 ...
- OO第四单元总结暨期末总结
OO第四单元总结暨期末总结 目录 OO第四单元总结暨期末总结 第四单元三次作业架构与迭代 整体感受 HW1 HW2 HW3 四个单元架构设计与方法演进 Unit1 Unit2 Unit3 Unit4 ...
- OO第四单元总结及学期总结
目录 OO第四单元总结及学期总结 第四单元三次作业架构设计 第十三次作业 第十四次作业 第十五次作业 四个单元中架构设计及OO方法理解的演进 第一单元 第二单元 第三单元 第四单元 四个单元中测试理解 ...
- OO第四单元总结暨OO课程总结
一.第四单元作业总结 本单元的主要任务是对 Uml 图元素进行管理和查询,测试一开始会输入一个静态图,之后会对图中相关内容进行查询. 第13,14次作业 第14次作业新增内容很少,故与第13次作业放在 ...
- OO第四单元总结 and 学期总结
第四次单元总结 本单元架构设计总结 第一次作业:类图解析 本次作业仅仅需要实现官方的UmlInteraction接口,通过反射机制在Runner中实例化一个我们实现的类,来进行类图元素的分类解析,从而 ...
- oo第四单元作业总结暨课程总结
oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...
- OO第四单元及学期总结
OO第四单元及学期总结 第四单元两次作业的架构设计 第一次作业 类图: 树形结构:使用Operation类管理UMLOperation以及parent为该UMLOperation的参数(UMLpara ...
- OO第四单元(UML)单元总结
OO第四单元(UML)单元总结 这是OO课程的第四个单元,也是最后一个单元.这个单元只有两次作业,相比前三个单元少一次作业.而且从内容上讲这个单元的作业目的以了解UML为主,所以相对前三个单元比较简单 ...
- OO第四单元总结及课程总结
OO第四单元总结及课程总结 一.前言 紧张刺激的OO“昆仑课程”接近尾声,经过一个学期的学习,我的收获和感触颇多,借此博客作业的机会,对自己OO这门课程做一个总结.本博客主要有以下五个方面,一是第UM ...
随机推荐
- 利用CSS制作背景变色的横向导航栏
1.表单 页面如下: <html> <head> <title>注册表单页面</title> </head> <body> &l ...
- nginx常见的面试题
问题1:Nginx是用来干嘛的? Nginx是一个高性能的HTTP和反向代理服务器,这个基本是用来前端服务器集群后做负载均衡和动静分离用的. 负载均衡即是代理服务器将接收的请求均衡的分发到各服务器中, ...
- We don't wanna work!
We don't wanna work! [JAG Asia 2016] 两个set,一个代表工作的,一个代表不工作的 其实是一个很简单的模拟,但是我竟然排序之前标号.... 检查代码的时候要从头开始 ...
- 【shell基础】条件测试
例1 判断目录是否存在 #!/usr/bin/bash back_dir=/var/mysql_back if ! test -d $back_dir;then mkdir -p $back_dir ...
- 六、linux-mysql的mysql字符集问题
一.什么是字符集? 字符集是用来定义mysql数据字符串的存储方式,而校对规则则是定义比较字符串的方式.mysql字符集包含字符集和校对规则. 二.字符集的选择 常见的字符集中,中英混合环境建议用UT ...
- 基于soap 的 python web services 服务开发指南
文章大纲 序言 相关概念 SOA web services SOAP WSDL UDDI 环境搭建 我们使用 python 3.6 这个较新python 版本 服务端开发 客户端开发 suds-jur ...
- springboot shiro ehcache redis 简单使用
引入相关pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- BucketSort(桶排序)原理及C++代码实现
桶排序假设输入数据服从均匀分布,平均情况下它的时间复杂度为O(n). 桶排序将输入数据的区间均匀分成若干份,每一份称作“桶”.分别对每一个桶的内容进行排序,再按桶的顺序输出则完成排序. 通常使用链表来 ...
- C++头文件和std命名空间
C++ 是在C语言的基础上开发的,早期的 C++ 还不完善,不支持命名空间,没有自己的编译器,而是将 C++ 代码翻译成C代码,再通过C编译器完成编译.这个时候的 C++ 仍然在使用C语言的库,std ...
- Android USB应用开发指南
调试 USB接口被占用后使用wifi调试模式 详见:https://blog.csdn.net/u013758456/article/details/78911812 开发