一、面向对象第四单元总结
1.1 第一次作业总结
1.1.1设计思路
在本次的作业中,主体是类和接口,只要要处理的是类和接口自身的实现以及他们之间的继承和实现关系,而反应在输入标签上,主要是要理解各种类图元素的意义和关系。类图中的标签主要有:
标签 |
意义 |
UMLClass |
类标签 |
UMLOperation |
方法中的操作 |
UMLParameter |
操作中的变量 |
UMLAssociation |
互关联 |
UMLAssociationEnd |
关联一端 |
UMLInterface |
接口标签 |
UMLInterfaceRealization |
类实现接口 |
UMLGeneralization |
继承标签 |
UMLAttribute |
属性标签 |
每个标签内部有许多元素,就是这些元素和标签展现了整个UML类图的架构。在完成“类实现的全部接口”等操作时,需要采用递归查询的方法查询其父类实现的接口和他自身实现的接口,总的来说也不是很复杂。
1.1.2 类图
1.2 第14次作业总结
1.2.1 设计思路
此次作业新加的标签主要有:
标签 |
意义 |
UmlStateMachine |
状态机名称 |
UmlRegion |
画布 |
UmlPseudostate |
起始状态 |
UmlState |
中间状态 |
UmlFinalState |
终止状态 |
UmlEvent |
响应事件 |
UmlOPaqueBehavior |
状态转移结果 |
UmlTransition |
状态机的状态转换 |
UmlInteraction |
顺序图名称 |
UmlLifeline |
生命线 |
UmlMessage |
交互消息 |
UmlEndPoint |
顺序图终结点 |
UML002规则实现时,需要正确理解规则的含义,找到需要检查是否重名的元素集,即类图中的类(UMLClass)的名字,其成员属性(UMLAttribute)的名字和关联对端所连接的UMLAssociationEnd的名字不能有重名。 在上次UML作业的基础上,本次加入了类图模型有效性检查,这部分是实现的难点。此外还有状态图和顺序图的一些查询操作。状态图和顺序图的一些查询操作和第一次作业很相似,采用直接遍历或者递归查询的方法就可以解决问题。关于有效性检查则比较麻烦。
UML008规则实现时,看似简单的需求,实现起来却十分不容易,这里我上网查了算法,最后用Tarjan算法实现了对UML008规则的检查。
UML009规则的实现比较容易,我将目标所有的父类和实现接口都递归遍历一遍,如果发现重名,则可认为违反了规则。
1.2.2 类图
二、总结自己在四个单元中架构设计及OO方法理解的演进
第一单元的三次作业都是实现多项式的求导运算,由简到难,处理的难度越来越大,由于我是第一次写面向对象的程序,面对难度递进的任务,我三次都重写了代码,但是每一次重写我的代码,我都使用了新的方法,使得能够处理更复杂的问题。经过这三周的练习,我能深深的感受到我的进步,也理解到代码可扩展性的重要性
第二单元是多线程练习,我是第一次写多线程程序,本来第一次应该会比较难上手,但是傻瓜电梯是真的很好上手,我在网上找了找生产者消费者程序的例子,并且结合ppt上的例题,照着照着就写出来了,第一次体会到了多线程程序的结构是多么的清晰。紧接着第二次作业让我熟悉了调度器的作用,第三次作业则是更贴近现实的情景,在仅有的三次训练中,多线程该踩的坑我踩过了,多线程的各种方法早已铭记于心。
第三单元要是规格的处理,在这次作业中,也让我深刻理解了仔细读规格的重要性,第一次和第二次作业的bug都是因为没有好好的读规格,写程序都按照自己想当然的想法,没有深挖规格体现的意思,才导致了bug的产生。因为为自己也参与写过一些比较复杂规格比较大的程序,能深刻理解到规格的重要性。规格能让合作伙伴知道你写代码的功能,规格能让自己在很久之后也能明白自己写的程序的功能,规格还能让客户更好的理解自己写的程序的功能。特别是函数具体代码没开源的一些程序,有一个好的规格,才能让客户明白这个函数的作用。这次作业更加加深了我对规格的理解
第四单元是对UML类图的理解,通过这个单元的学习,一方面学习到了UML类图的知识,另外一方面也加深了我对Java接口,类,继承,实现等之间关系的理解,让我更加的了解了Java代码的结构。
三、总结自己在四个单元中测试理解与实践的演进
经过这几个单元的学习,我对于自己代码的测试也有了非常大的提升。第一单元学习时,我仅仅只是随便想几个表达式,输进去对了,就提交程序,然后再通过弱测时出现的错误更改自己的程序,一旦弱测通过,就觉得自己代码没问题了,最后强测结果就十分惨烈。第二单元开始多线程的学习,电梯楼层有限,出现的情况并不太多,于是我第一次开始自己罗列所有情况的测试集。最后弱测中测很容易过了,但是强测时却出现了超时情况,我意识到自己的测试集能检测正确性,却不能提供压力测试。第三单元时,对自己代码的执行速度有很大的要求,一旦时间复杂度过高,就可能导致cpu超时,这时我主要的测试手段是向各位大佬寻求输入集合很大,能够提供压力测试的测试数据。最后一次作业,主要测试手段是自己画图检测类图模型有效性。
四、总结自己的课程收获
通过这门课程的学习,我从对java一窍不通,到能够一个人两三天写出两千行Java代码,我都对自己的进步感到震惊。当然学习到一门语言很重要,但同时,这也是我学到的第一门面向对象的语言,这门课教给我的对面向对象语言的理解,我认为是更重要的。另外多线程的实现和安全,代码架构设计的的可扩展性,代码风格的规范性,这些同样已经深深刻在了我的心中。
五、立足于自己的体会给课程提三个具体改进建议
1、更加注重强测后bug的修复,特别是每个单元最后一次任务结束之后,部分同学可能没有改bug的动力。建议强测结束后开一个补测窗口。
2、希望老师和助教们能在每次作业强测之后,给出设计思路,方便没有完成的同学及时解决问题,不耽搁下一次的测试。强测通过的同学也能优化自己的代码。
3、课上上机测试的内容最好能在学生消化一周之后再测试。本学期出现很多次周四讲的新类容,周五马上就要测试,根本来不及练手理解。