zoukankan      html  css  js  c++  java
  • OO第四次博客

    OO第四单元总结

    第十三次作业

    作业设计结构

    本次作业结构比较简单,我主要是自己构建了各种类型的类,不使用jar包中自动转换的类,这主要是为了便于我对各种类型的操作。各项操作在MyUmlInteraction类中定义,之后在对应的class类或interface类以及更底层的类型中完成执行,最后得到结果。

                                                                                                第十三次作业的类图

    作业度量分析

    本次作业中我的MyUMLInteracting类有些臃肿,写了大约490行,这主要是因为有一些方法比如一些add方法在主函数中进行了大量的循环和判断,这些是可以转移到下一级类中的。在度量分析中,我的MyUMLInteracting类中大多数public的get方法在异常处理方面做了比较多的逻辑判断,所以复杂度比较高,add类型的方法刚刚已经讨论过了,而在Operation类中,我的isTyped方法使用了很多if-else语句来判断类型导致复杂度较高。

                                                                                                      第十三次作业的度量图

    作业BUG分析

    本次作业我的程序出现了两个BUG。

    第一个BUG在于UmlClass类中getOperationVisibility方法误认为operation项的visibility中package的字符串是“package-private”,但是应当是“package”。其实这一BUG我在之前已经找出了,在attribute中已经发现了,但是没有能够想到operation处。

    if (vis.equals("package")) { //bug after fixed
        pag++;
    }

    第二个BUG在于我的异常抛出,getClassAttributeVisibility方法需要抛出四个异常,为没有对应类,多个对应类,没有变量,多个变量。我在判断是否有多个对应类时采用边检测边计算的方法,因此可能产生存在多个类且第一个类存在多个变量或没有变量,而我抛出了与变量有关的异常。

    for (int i = 0, num = 0; i < size; i++) {
           if (umlClasses.get(i).getName().equals(className) && (num++) > 1){
                throw new ClassDuplicatedException(className);
           }
     }// 修复后的代码,这一段代码先判断了是否存在多个类。

    第十四次作业

    作业设计结构

    本次作业结构比上一次稍复杂一点,但是其实并没有太大的区别,对于状态图和顺序图我按照之前处理类图的方法,建立了两个package存放相关的类型的类,按照各个类的级别依次向下计算,prejudge类我因为上一次作业的MyUmlClassModelInteraction类有490行,并且不太敢重构,所以重新构建了部分的需要的类的结构,进行计算,这样可能损失了一部分的时间复杂度。我对UML008和UML009以及statechart的SubsequentStateCount的计算方法全部使用了BFS的查找方法。

     

                              第十四次作业的主类图

                             第十四次作业的collaboration包类图

     

                                                                           第十四次作业的statechart包类图

    作业度量分析

    本次作业尽管架构比较清晰,但是我的方法所需要的代码量和类的数量确实很多,因此我的不少类都存在一定的复杂度问题,经过我的总结,主要的问题在于type的计算使用大量if-else语句,构造方法使用大量循环和条件语句,add类方法使用大量循环判断语句,get方法的异常计算使用大量循环判断语句。

                                                                                                           第十四次作业的度量图

    作业BUG分析

    我的程序并没有被发现BUG

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

    这四个单元中我们分别进行了多项式、电梯、JML、UML的练习。

    其中第一个单元多项式在我看来主要还是适应java语言,并没有应用到OO的过多思想,我的主要设计方法依然还是面向过程的方法,各个类主要是按照运行顺序分类。

    第二个单元电梯既使我们第一个开始区分请求、电梯、调度器、乘客等对象,开始按照对象建类,又使我们学习并发程序的控制方法,这时候我们对一些比较明显的对象开始区分

    第三个单元JML我们主要是填方法,在最后的练习中我们的问题相当繁琐,但是助教们通过循序渐进的作业帮助我们区分这一问题中的对象,并帮助我们按照面向对象的方式解决这一问题。

    第四个单元UML依然与上一个单元相似,但是助教的指导力度大大减少,我们还是要写出程序的核心内容,这也是对我们的面向对象思想的进一步磨练和检验。

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

    在第一个单元,测试是比较简单的,我可以通过随机生成数据,利用python来得到正确的答案,再进行对比进行测试,我所需要做的只是调整随机算法使其更加完善

    但是到了第二个单元,我就无法成功得到生成数据的答案了,这时候存在两种方法,一种是自己想一些比较普遍或者比较极端的数据,进行测试,还有一种就是与他人对拍,我这两种方法都采用了。

    在第三单元,我采用了老师所推荐的单元测试的方法,有着一定的效果,但是在我尝试随机生成数据时我并没有成功,这可能与JML的复杂性有关。

    在第四单元,由于UML图的存在,进行测试相当复杂,因此我只是对中测中给的一些图再构建了一些数据测试了一下,也测试了一些其他特殊情况,但是这单元作业我的测试确实存在很大的漏洞。

    课程收获

    首先从OO课上我学到了大量关于OO的知识并且进行了大量的实践,对面向对象的理解是我最大的收获,面向对象思想主要就是将一个问题分成若干对象,每个对象规定好它的内容和行为,通过操作对象来解决问题。

    再者这门课中我学到到了java(idea)的使用方法,也算是比较熟练的掌握了这一门面向对象语言的一些基本使用方法。

    我还从这门课中学到了对代码风格的把握,一个漂亮的代码风格让人debug时心旷神怡,也便于与他人交流,同时降低了bug率。

    同时我也从这门课上接触了一些比较新鲜的新的编程思想,比如函数式编程思想,也学到了一些工具的使用,比如JML和UML。

    建议

    1. 上机考试最好在偶数周,这样可以在从课上学到比较多知识后再进行检测。

    2. 助教在微信群中说的一些话最好是注明一下是否是铁板钉钉的,否则可能会影响一些人。

    3. 公测时查出的BUG在修复后不应该扣一分的BUG分,因为已经在强测时扣除了一些分数了。

  • 相关阅读:
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 390 消除游戏
    Java实现 LeetCode 390 消除游戏
  • 原文地址:https://www.cnblogs.com/cuogeihong/p/11079703.html
Copyright © 2011-2022 走看看