zoukankan      html  css  js  c++  java
  • OO第四单元总结

    第四单元总结

    一、本单元作业总结

    (1)第一次作业

      第一次作业我将UmlElement进行分类,新建一个封装类Uml,用接口和类进行实例化;新建一个operation类实例化Operation元素。在MyUmlInteraction的初始化,先找到所有的类和接口实例化Uml。然后找到所有的方法,实例化Operation类,并且将类根据parentId找到对应是什么接口(类)的方法,同理属性也是这样,将改属性放进对应的类里面。类接口之间的关联,就在封装的类里面实现一个添加关联的方法,同理操作类之间的继承以及类的实现,这样就可以把整个元素的结构建立起来,方便后续的操作。

      寻找类的个数,在实例化类的时候就可以进行累加。找到类实现的方法,可以根据类的名字找到实例化的类,而我们之前已经将所有的方法放进去了,这样就可以直接找出跟要求相关的方法的数目。类的属性的数目,关联个数,关联的类,方法的可见性都可以直接get得到。得到顶层类、得到实现类继承类都可以通过bfs实现。

      第一次作业主要是需要理解UML的整个结构,以及课程组提供的代码的理解。这样整个架构建立起来,需要什么结果接很简单了。

      这次强测中碰到一个bug就是,bfs的时候标记元素记错了,应该是在push的时候标记,而不是pop的时候标记,不然就很容易出现死循环。谨记教训!!!

    (2)第二次作业

      第二次作业其实就是要实现六个方法。但是要先理解课程组给的代码的思路,就是给一个大类,封装所有实现的过程。

      顺序图就是每个元素都有一个生命线,生命线之间有消息的交互。状态图就是状态的转移,通过转移元素,得到各个状态转移的条件以及目的状态。整个架构依然是遵循第一次作业的架构,将需要的元素放在特定的数组或者字典里面,方便我们检查之间的关系。因为方法较少,所以只要需要什么遍历找就可以了。

      这次强测我还是出现了一个bug,因为我没有考虑到画布可能什么都没有的情况。还是注意hashmap取元素一定要检查有没有这个键值!!!

    (3)第三次作业

      第三次作业是对于相关UML的一些检查。这次作业的难点我觉得在于理解指导书想要表达的意思,还有找到是整个检查是怎么实现的。我先是在runner中找到这个方法是什么时候进行实现的,发现是在所有的元素都输入才进行检查,这样其实整个方法跟之前几次实现就没有什么差别了。按照第一次作业建构的思路,找到需要检查的相关的类。

      这次作业最为困难的莫过于找环,一开始我想了很多种方法,但是觉得还是很困难,因为我一直想要把找到一条路的元素都记下来,后来我发现实现的困呐系数太大了。我就一个类一个类找,如果一个类根据爸爸们路径走着走着回到自己那就是成环了。这个每个类都进行一遍就很完备了。

      这次作业因为跟同学讨论了全部的细节互相交流验证做法,所以整体上论证了实现的正确性,强测就没有出现bug了。

    二、四个单元的架构设计与OO方法理解

      第一单元因为初次认识面向对象,每个作业都重新建构,十分的痛苦。因为没有考虑到方程的可拓展性,第一次作业直接解析表达式分析求导。第二次作业理解了一下,分了x幂指数类,cos、sin类,然后整了一个工厂,面向对象的感觉就来了。但是第三次作业复合函数还是当场去世,因为复合的复杂度,我将工厂直接搬到了表达式类里面的一个方法,然后递归实现,就是一个类嵌套实现一个类,还是很绕。但是不得不说通过面向对象嵌套的做确实降低了理解上的复杂度,至少看起来很直观。第三次作业也可以面向数据结构来写,就是二叉树做法,但是理解上还需要一定时间。通过第三次作业我更好的理解了面向对象的妙处。

      第二次作业是我就不怎么重构了。第二次作业主要是要理解好多线程,然后理解怎么处理多个线程之间的关系。我用生产消费者模式实现了三次作业。在缓冲区实现数据的交互,以及根据数据的状态进行线程的控制。而电梯和客户主要是就是电梯功能和客户功能的主要体现。单电梯就比较简单,客户来,客户上下电梯,电梯上下行开门,都在缓冲区实现。优化look算法接客就行了。多电梯就直接平分,多造电梯就完事了,整体架构不变。电梯可变就将消费者类的生成也放在缓冲区里面。整体架构也是不变,电梯编号就行了。第二次作业学习了多线程的面向对象做法,学习了生产消费者模式,收获甚多,尤其是线程的理解学习!

      第三次作业就是关于JML的,需要根据JML的语言进行方法的实现。因为JML的限制,所以三次作业的架构几乎没有颠覆性的变化。第三次作业难点在于双连通的实现,还有求点的可达性。理解上不是很难,但是因为测试时间山的限制,导致第三次作业常常要为了算法快慢绞尽脑汁。这单元我收获最多的应该是数组的浅拷贝的利用,tarjan的使用,还有怎么有效聪明的滚雪球,图论知识的应用。而面向对象导致没有什么收获,就是学会了JML规范语言规范方法。

      第四次作业架构上也没有重构,因为作业上感觉联系不大。第四次作业我觉得重点在于理解UML各个元素之间的关系,所以架构就是初始化实例化类的时候把元素之间的关系整理好,在对应的方法进行相关查找报错得到结果就可以了,我感觉面向对象面向的就是各个不同的类之间关系的查找,这一单元就体现的很明显,而且操作的对象就是UML。

    三、测试理解与实践演进

      第一单元测试我就单纯看代码,和同学讨论易错的点,手工捏造数据。所以第一单元我debug就相当的慢,找错也不是很会找,理解同学的代码又是相当的困难。

      第二单元我自我测试依旧是代码验证,就是代码顺一遍,碰到bug因为多线程的原因很不好整,特别是不明白的情况下。我借助了一个profile的软件,看线程的运行,检查线程的状态。还有就是找同学,跟同学讲一遍自己整个架构的思路,跟同学讨论代码在那些细节上或者理解上存在bug,感觉讨论代码在多线程中至关重要。第二次作业我出现阻塞就是样例检查不出来,但是和同学讨论一下子就找出我对于释放锁阻塞理解的偏差。互测我主要是针对阻塞等待CPU轮询,自己构造数据。很少出现线程冲突导致的bug。

      第三单元,我找同学要测试样例,跑数据找bug,感觉这样的效果比起代码验证效果还好,因此我也学习了同学提供给我生成测试数据的py脚本,学习了同学构造数据的思路。这样我hack就根据我自己测试常碰到的一些bug,进行hack。还有就是超时互测。

      第四单元,代码debug我是在写完代码后,将课程组提供的数据跑完之后,随机生成样例检查。要是碰到一些细节问题就和同学讨论,互相验证代码的正确性。因为第四单元感觉代码不是很好生成,很难单纯的检查。

    四、课程总结

      四个单元以来,我收获最大的就是对于面向对象的理解。从面向过程,到能够利用各种容器、工厂、设计模式等实现一些看似十分复杂的实现。我还学习了多线程、数据结构中图的操作。更重要的是,我学会了自我测试,四个单元我课下测试的手段十分的多元化,代码验证、随机数据生成、脚本自动化测试、同学沟通讨论等等。还有在讨论课上学习同学的架构思路,慢慢的扩充自己对于面向对象的理解,互测中学习同学的代码,在自己下一次作业中对于一些处理不好侥幸通过的进行优化,慢慢的拿出一份满足的代码,还有博客梳理三周以来的收获,形成自己的课程笔记。总的来说,这门课我收获了很多!

    五、改进建议

       1、第四单元第三次作业给几个样例输出,不然感觉很多细节很容易出现误区。

       2、有些实验感觉难度太大了,两个小时有时候根本写不完,因为理解代码需要很长的时间,还有很多的要求,建议代码量少一点,不然真的根本完成不了。

      3、第一单元的第二次作业跟第三次作业难度跨度太大了,感觉很难从第二次作业理解到第三次作业,提前建构好。要不稍微在指导书给个建议,提示一下下一个作业写什么,提前构思好。感觉第三次作业真的四天知道怎么写还要完全正确太难了。

    六、线上OO课程体会

      一开始觉得同学之间的交流很麻烦,后来熟练掌握各种线上工具之后反而觉得线上的特别的方便,而且课程需要什么都有视频留着,可以自由的安排自己的时间,也很容易查阅资料。唯一比较麻烦的我觉得应该就是有时候实验碰到一些交不上,或者是博客插件运行不了等问题就会感觉特别的无助,因为很难立刻得到有效的解决。

     

     

     

  • 相关阅读:
    或许因为缺少默认route配置而导致的的ping超慢,甚至timeout
    zabbix没有frontends目录
    jenkins自动部署到tomcat报错:ERROR: Publisher hudson.plugins.deploy.DeployPublisher aborted due to exception
    tomcat访问manager报404;server.xml中配置了Context path
    配置使用;yum安装slatstack的master,minion<at>centos6_x86_64
    jenkins报错;自定义工作目录;
    深入剖析Java中的装箱和拆箱
    探秘Java中的String、StringBuilder以及StringBuffer
    Java异常处理和设计
    JVM的内存区域划分
  • 原文地址:https://www.cnblogs.com/llldy/p/13163862.html
Copyright © 2011-2022 走看看