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

    一.本单元两次作业的架构设计 

    第一次作业

    架构图如下:

     

    根据uml类图元素之间的关系,通过传入的umlelement的id和parentid建好树,如上图所示,例如model(单例模式)下有umlPackage(umlPackage对象中存储的是parentid不存在的对象),umlPackage下有umlClass和umlInterface等,在MyumlInteraction的方法中,通过工厂模式和自己的类型生成各级对象,并分别存储在各自的parent对象中,第一次作业的主要部分就是建树,建好树后就可以写代码来查询信息了,其中主要方法就是通过name来找对应的umlClass和umlInterface对象,递归查找即可(从model开始);有些部分中间信息可以保存在相应对象中,下次查询时就可以直接得到结果,例如classCount,umlClass下的属性和方法等。

     

    第二次作业

    架构图如下:

     

    在第一次作业的基础上,根据元素之间的关系,增加几个类(即该类对象可能还有下一级类),第一次作业只需要改变Factory,将这些类增加进去,然后在各个等级下的对象中添加可能出现的新增的类即可,比第一次建树简单一些,建好树后,对于状态图和顺序图中的查询操作与第一次类似,先用递归找到该对象,然后查询即可,对于三个模型有效性检查,R001:针对给定的模型元素容器,不能含有重名的成员;将各个成员找出来,进行比较即可。R002:不能有循环继承;利用深度优先算法,查找是否有从自身出发,还能回到起点的元素即可;R003:任何一个类或接口不能重复继承另外一个接口;检查这个规则可以利用递归,从自身出发,先保存父类,再保存父类的祖先,并且保存ancestor(类或接口的祖先)这一中间变量,再对ancestor进行比较即可。

     

    二.在四个单元中架构设计及OO方法理解的演进 

    第一单元:表达式求导

    第一,二次作业用的是正则表达式判断全部式子的正确性,没有面向对象编程的思想,判断,处理多项式都是在一个类中,第三次作业因为以往的方法行不通了,增加了嵌套,只能分级处理,才有了点面向对象的概念,将表达式,项,因子分开处理,先保存并判断再分别进行求导,而不是在一个类中处理全部事情,整体的框架变得清晰了。

    第二单元:多线程电梯

    这个单元主要让我们学习如何让类之间信息安全高效地进行交流,通过三次作业学习到了synchronized机制和怎样有效使用notify与wait,利用notify和wait来保证cpu计算的效率,利用synchronized来保证线程的安全,处理多线程电梯作业模仿的是生产者-消费者模式,输入是生产者,电梯是消费者,调度器作为托盘。通过这三次作业,也学习到了一些设计模式,观察者模式,单例模式等,对面向对象编程有了更深入的认识。

    第三单元:JML

    通过这个单元,学习到了JML规格化语言,方法和类怎么样正确地描述,写出来的代码如何验证正确性。这三次作业,是关于建图和图中查询的问题,主要采用了迪杰斯特拉算法和广度优先算法。通过规格,能确保使一个方法不会变得太复杂,也能将设计与实现分离开,各做各的,不容易产生错误,所以,使用规格化语言进行设计符合面向对象编程的思想,对这单元的学习能改变我们以前写代码的风格,让我们先设计再写代码。

    第四单元:UML

    这个单元,我采用了工厂模式,在做第二次作业时代码的可复用性很好,在编程中认识到了接口的重要性,使用接口,能够在增加新的功能或类时,不需要改变已经写好了的代码。这个单元的代码层次十分清晰,思路也很明确,各个类做自己该做的事,这两次作业的代码最符合面向对象编程的思想。

     

    三.在四个单元中测试理解与实践的演进

    第一单元主要采用读其他人代码,用一些常见的,可能会产生错误的多项式来找bug,那时候代码量还少,也找出了几个bug;

    第二单元首先对多电梯楼层间运行时间,开关门时间和电梯容量等进行测试,然后构造一些特殊的需要换乘的请求对代码进行测试;还有就是阅读代码,根据对共享资源的操作,判断线程的安全性;

    第三单元写了个自动生成数据的测试器,容易找到bug,但不能够确保是不是同一bug,只能先改好这个bug后再进行下一次测试;

    第四单元,主要是通过评测机的测试,以及其他同学分享的测试用例。

     

    四.课程收获

    oo这门课让我学会了使用java语言,也学会了怎么样用面向对象的思想编程,在命名,代码规范,设计,测试等方面都有了很大的提高。学期初时还在为寒假布置作业担忧,对java完全不了解,但现在能够在写出千行左右的代码,轻松地使用java进行编程;同时,也学会了面向对象编程,通过面向对象编程,能够优化程序的架构,提高程序鲁棒性;以前因为代码量比较少,不用解决复杂的问题,所以变量的命名十分随意,但经过这一学期的课程,规范命名对于代码的理解很重要;以前都是拿着指导书就写代码,改了又改,但现在能够先设计好思路,再上手写,这样能够高效地写出代码;测试也是一样,以前只通过评测机进行测试,现在能够自己构造测试集,利用一些工具来进行测试,这是一个很大的提升。

     

    五.给课程提三个具体改进建议

    1.理论课应该多些例子,老师讲的一些名词概念听不懂,很多东西难以一下子理解,理论课能学到的东西少了些。

    2.UML这个单元学到的东西不是很多,没以前单元内容的充实。

    3.在前几次作业时,虽然讲了接口和继承,但完全没有用到,认为没用到接口和继承也能很好地写出代码,我认为在前几次作业时就应该提示怎样使用接口和继承,并让我们感受到使用的好处。

  • 相关阅读:
    转载 | float 清除浮动的7种方法
    转载 | CSS图片下面产生间隙的 6种解决方案
    (转载)内联元素设置宽高问题
    HTML/CSS:display:flex 布局教程
    HTML/CSS:block,inline和inline-block概念和区别
    上传文件
    分页查询 模糊查询 合体查询
    repeater的command用法
    窗体内的控制 跨窗体控制
    webform 跨窗体传值
  • 原文地址:https://www.cnblogs.com/pyb1999/p/11070511.html
Copyright © 2011-2022 走看看