面向对象第四单元个人总结暨期末总结

面向对象第四单元个人总结暨期末总结

一学期的面向对象课程结束了,从面向过程的思路根深蒂固到习惯面向对象思维,我来回顾一下:

(1)   总结本单元两次作业的架构设计  

第一次作业框架:(截去实现jar包接口部分)

思路解析:

这次是基于对接口的实现构造,首先清楚UML图的三个层次,接口和类,有同级的地方,也有类包含接口的地方,比如类实现接口;其次是方法,方法一定是某个类或接口的方法,是它们的下一级;而同样,变量Attribute也是一个类的下属元素,它的上级就是类,与方法同级;而参数parameter是最低级的,它属于某一个方法。这样各个元素的层次就十分清楚了。

接下来根据每个Elements的值来构造自己的的UMLInteraction,它包含最高层次的Class和Interface,而其它元素都从属于这两种大类,你在UMLInteraction中是不能直接看到它们的,除了为了个别查找方便。

为了在各个层次实现方法,保存下属元素,保存中间变量,我建立了MyUmLClassMyUmlInter以及MyUmlOper类实现方法,它们之间通过包含关系,关联关系链接起来。

要构建与Uml图一样的层次,主要利用的是各个元素的parentId,但是这里有个坑的地方,一个类的parentId并不是其父类。只有找到继承元素,才能判断父类。而我们利用这些关系,在class中都有记录父类的变量(直接改parentId),而interface里有记录父类们的数组。

这就是大体的构建框架方法,与图一致,这样每次查找,层层找下去,一个类的性质可能需要遍历他的方法,参数,变量。

第二次作业框架:(截去实现jar包接口部分)

基本思路和第一次作业一致。只是需要自己建的类更多了,细节更庞杂。但是毫无疑问,仍然层层递进建类,MyStateMachine,MyRegion, MyState和MyInteract, MyTransion这些中间类都能帮助厘清层次。

一旦建好层层的框架,查找各个方法就都很容易了。

但是这次的预检查部分需要动动脑筋,尤其是重复继承的部分。如果没有利用算法,向我这样硬遍历需要厘清和第一次作业的不同。

我主要是利用递归求得类实现的所有接口,和接口实现的所有接口,第一次我采取的是重复则不计入,第二次重复了我算他重复继承,但是没有加入实现的接口,导致递归的下一层接口计算的是消去重复的接口,就会以为该接口没有重复继承。

所以像这种一次次改进的单元作业,一定要理解清楚改了什么需求呀,以及这种改需求会有什么影响。

(2)   总结自己在四个单元中架构设计及OO方法理解的演进  

第一个单元,完全是熟悉Java语法,第一次作业按照c语言的思路写了状态机,代码不合风格。之后逐渐将方法写到不同的类里,这时类的思路还没有,不知道要构造不同类的对象。主要是将方法分类分装到各个类里。

第二个单元,架构设计上有所提高。针对不同的对象建立了线程,并且通过一个公共类进行控制和调控。不过此时还不能说是完全面向对象的思想。我的理解更贴近于几个面向过程的线程,在合理的时间开始和消亡。

第三单元,真正开始理解OO方法。课程组提供了成熟的接口,要我们继承并实现接口,这就是一个针对接口的面向对象结构。此时我能够理解一个对象,比如一个类,它有实现的接口方法,有自己的变量。这就是一个有功能,有值的对象,你可以放别的对象进去,你也可以把它放到更大的容器中。

第四单元,根据自己的理解,还原UML图中的容器,把这个对象搭建起来。理解了容器与元素,继承与实现。不得不说,UML图单元真的是能够让人理解面向对象思想。因为UML图本身就是体现面向对象特征的,一下子层次就豁然开朗。

总结下来:面向过程——线程中面向对象和面向过程并行——JML,UML中彻底面向对象。

特别明显的就是main函数的写法,main函数越短,说明这个对象越不需要面向过程,整个交互过程也能给抽象到对象了。

以前面向过程,是单个函数中的思路,现在把面向过程的函数组装起来,就是一个面向对象的容器,有接口,它能实现你想要它实现的功能。我觉得学了一学期后,几乎思路无法面向过程了,而是自然而然开始面向对象了。

(3)   总结自己在四个单元中测试理解与实践的演进

我的测试方法是比较小白的那种,偏向于人肉Debug,的确这使得我的错误率偏高,以后要学会熟练应用Junit进行形式测试,同时学会写对拍器自动生成代码测试。我之前自己用c语言写过一些简单的代码生成方法,但是可能比较傻,感觉不能真的测出问题。实际上针对性debug还是人肉操作比较有效。

所以小白总结自己人肉测试的理解与经验。

1,找到问题:

这个最绝望的是第一单元第三次作业。怎么也找不到错的形式,但就是有一个点过不去。现在回过头想想,第一单元的形式真的是相对固定的,基本上,表达式弄对,先保证某项是对的,然后层层向外递进。错的点是没有加足够的括号,针对*-(-34+78*x)形式。

对于这种不知道错的具体点的debug有两种思路:

一种是细节问题,是不是有笔误,是不是有忽略某点,会不会并级的几个代码有一种是不对的。因为细节错误是没有什么逻辑的,所以适合用大量代码去对拍,找异常数据。当然再没有合适测试代码得时候,人眼观察也非常重要,这就需要代码层次清晰,美观,思路注释到位了。变量函数命名得到就可较少避免犯错。

一种测试逻辑漏洞,我犯得其实属于这种,虽然看着像细节。这种问题起源是没有完全思考懂,直接上手写容易出现这种问题。

这时候就要抽离开已有得(混乱得)代码,当然没有时间重构的化,就画一个代码走向图。我当时的思路是分得挺细的,三角函数和指数函数分了不同的路径,大多数递归返回答案都是有加括号。但由于我对于xy’+x’y这个形式就分了很多种情况讨论,在大框架不清晰时,这种代码写法极容易丢一两个括号,还不易de出来。后来思考,是因为总想着当时就优化,优化不应该为基础思路挡道,如为保证正确在各级求导结果上加括号。

设计时就要把括号的作用研究明白,最好是把几种作用分写成方法函数,用的时候直接调用封装好的方法函数。

嗯,谈测试最后还是到了框架部分,因为框架还是解决bug的最重要的部分。

2,解决问题:

找到问题再解决就较为容易了,我还是很喜欢打印语句+画图。

比如最后的UML图,针对问题打印出所有的继承实现关系,再看哪个环节出了问题,debug并不难。

   因为第2,3单元虽然有大量bug,但是不是比较难de的那种,是很傻很明显,的的确确是自己测试没有做好的那种。

 我认识到我薄弱的环节真的是在测试,这也与自己的拖延症严重相关,测试每次都没有做得很充分,所以也没有太多的演变的经验,因为实践比较少。相关实践主要在hack和bug修复。

(4)总结自己的课程收获

自己的课程收获分两个方面讲:

1,知识层面:

1,         Java 面向对象结构,构建比原来数据结构更为复杂有层次的工程。学习类封装(第一单元),多线程(第二单元),JML语法(第三单元),UML图的架构和各种图的含义与实现(第四单元)。

2,         什么是好的代码,如何通过练习和演进不断优化一次次作业中的代码。减少重复代码,把接口实现尽量用一个函数解决,封装起来。运用各种各样的类、接口,可通过继承、包含的关系使得整个代码涉及的元素有层次的组织起来。这里我认为一个函数60行的要求和一个文件500行的要求起了很大作用,push我去优化结构,并且一旦开始优化,就会想尽量做好。

3,         复习数据结构,并且快速的运用起来。显然,在面向对象课程中,选择合理的数据结构,是可以大量简化代码,优化实现的。尤其在第3,4单元,大量的递归算法,图算法,都要求我们运用HashMap,HashSet等等把元素放置在一个个数据结构中,这样才能合理地调用、计算。其次在数据结构的算法中,我们复习了以前的BST树算法,迪杰斯特拉算法等等,而且在运用上,是快速的通过查找模板,自己改写,测试的方式实现的。也学了新的如并查集这样的算法结构。以前头疼理解好久的图算法,经过离散数学的铺垫和对代码语言的逐渐熟练,可以15分钟半小时写出,感觉好棒。

4,         测试的重要性和如何阅读他人代码。互相hack感觉很残忍,但的确push大家去尝试测试,测试自己的代码,测试他人的代码。本人倾向去使用传统方式,自己用c语言生成测试代码,然后测试大家的代码。看着大家不同的封装形式也是个互相交流和学习的过程。

总之我认为知识层面的收获是综合的。知识点,知识面,对工程的认识,对代码的认识,对数据结构的认识和应用都是知识层面的掌握。

2,能力层面:

1,         这个能力层面和知识不直接关联。就是OO的课程设置,这种测试不公布然后让大家互相想办法通过中测,同时保强测,的确让我们锻炼了互相交流的能力以及…夜肝能力。

2,         好吧,OO还在强制提示我的拖延症不能到过分的程度,我还在斗争,谢谢OO。我会成为更好的自己!

(5)立足于自己的体会给课程提三个具体改进建议

1,理论课因为有些抽象,希望能有个知识框架图之类的东西指导大家学习、理解。

如果有个框架,学习理论课这些继承,实现,类,封装的概念能更清楚吧。

也方便大家对照着找参考书,博客什么之类的。之后可以总结下,内化为自己的知识。

2,比较异想天开的想法,因为讨论区只保留精华,所以不太感问(没有提过问),这个是挺好的。比较小白的问题就都转战水群了,水群的助教也非常认真负责。但是群还是有点水。。所以给课程单开个水群呢?比较民间的建议,然后规定一下格式,比如#提问+关键字,#回答+关键字,#讨论等,方便大家查找聊天内容,当然也可以正常水。水群比较能及时反馈,还可以总结,算是帮带小白吧。

3,我真的想不太出来第三点。感觉课程设置挺好的,讨论区讨论课一应俱全。实验课感觉如果课下给答案就更好了。课上有时不清楚自己做得对不对,课下还是希望知道哪些概念没有清楚。

转载于:https://www.cnblogs.com/jura/p/OO_unit4_Juracera.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值