ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第四单元总结及课程总结

2022-06-23 22:00:16  阅读:109  来源: 互联网

标签:总结 return 代码 作业 课程 visited id 单元


一、第四单元总结

第13次作业

  • UML类图

  • 本次作业首先要充分理解类图的层次结构,对类、接口与属性、方法之间的关系有充分了解,并对UML中继承、实现、关联关系的具体表示有充分认识,能够区分reference、source、target、assciation、associationEnd等概念。

  • 另一个重要的问题就是维护继承、关联、实现关系。由于本次作业中不需要对重复继承(实现)、循环继承等非法情况做出判断,我没可以直接将这些关系存入对应的类中。

  • 本次作业的输入其实是不具有层次结构特点的,也就是包含关系不是很明显。不像未处理前的mdj代码,有非常明显的父子关系

    因此本次作业重构了类的数据结构,对Umlxxx的结构进行了扩展,将类的属性、方法、实现关系等元素整合进一个类里。

第14次作业

  • UML类图

  • 新增了顺序图和状态图

  • 顺序图中包含lifeline,message。

  • 状态图中包括region,region中包括pseudoState、finalState、state、transition。

  • 将结构理清楚后,参照13次作业的思路构符合访问逻辑的数据结构。顺序图和状态图的统计相对简单。

  • 统计时注意dfs算法的正确性,大部分逻辑bug都来自递归时的逻辑错误。

第15次作业

  • 本次作业要求是对UML图的合法性进行一些判断,基本沿用之前的数据结构,只是在之前的基础上增加了错误判断的函数。

  • 任务的主要难度还是集中在dfs遍历的地方,对于循环继承和重复继承的判断对我们对于递归算法的理解提出了较高要求,要求我们准确的把握递归的退出条件。下面是接口循环继承和重复继承的判断函数,二者的区别仅在于退出条件不同,

    // 循环继承
    private boolean cirGeneralDfs(
        String id, HashSet<String> visited,
        HashMap<String, MyInterface> id2Interface) {
        if (visited.contains(this.id) && id.equals(this.id)) {
            return true;
        }
        if (!visited.contains(id)) {
            ArrayList<UmlGeneralization> generalizations =
                id2Interface.get(id).getGeneralizations();
            visited.add(id);
            if (generalizations != null) {
                for (UmlGeneralization generalization : generalizations) {
                    String parentId = generalization.getTarget();
                    if (cirGeneralDfs(parentId, visited, id2Interface)) {
                        return true;
                    }
                }
            }
            return false;
        }
        return false;
    }
    
    // 重复继承
    private boolean repeatGeneralDfs(
        String id, HashSet<String> visited,
        HashMap<String, MyInterface> id2Interface) {
        if (visited.contains(id)) {
            return true;
        } else {
            visited.add(id);
        }
        ArrayList<UmlGeneralization> generalizations = id2Interface.get(id).getGeneralizations();
        if (generalizations != null) {
            for (UmlGeneralization generalization: generalizations) {
                String parentId = generalization.getTarget();
                if (repeatGeneralDfs(parentId, visited, id2Interface)) {
                    return true;
                }
            }
        }
        return false;
    }
    

二、架构设计思维及OO方法理解的演进

第一单元 多项式化简

  第一个单元中,是从零经验的开始。第一次作业时,对面向对象的思想还没有完全建立,基本上是模仿课程组的training在写,正是因为对于对象理解的不到,第二次作业不出意外的挂掉了。但是在三次作业的练习的过程中,对面向对象的理解也更为深刻。逐渐体会到了对象的妙处,明白了要如何合理的设计对象,学习到了对象设计的一些方法和原则。

第二单元 电梯

  第二个单元,主要就是多线程的线程安全和如何上锁的问题。这个单元更多的是对于编程模型的应用,如果应用得当那么任务将会变得非常简单。这个单元加深了我对于编程模型的理解,以往的编程是随心所欲毫无章法,导致了许多思路不清,代码写一半要重构的情况。学习前人总结出来的模型,对于个人编程能力的提升还是很可观的。

第三单元 规格化设计

  第三个单元,主要依据规格要求写出相应函数。主要考察对于JML的理解,只要代码满足规格就可保证整个程序的正确。这是一种工程化的训练,团队合作的项目中,每一个人只需要按照规格完成自己的代码,无需担心项目其他部分的具体实现,有效的提高了协作效率。更重要的是这种形式化的语言十分的严谨,不会产生表述上的歧义,进一步确保了团队项目的正确性。

第四单元 UML类图解析架构

  第四个单元,将类图解析与OO联系起来。UML作为被广泛认同的建模语言,十分精准的描述了一个面型对象程序的运行逻辑和协作关系,对于程序员理清代码逻辑,搭建大体框架提供了有力工具。也为其他人理解程序的逻辑提供了便捷的桥梁。有效建模也大大的减轻了我们编写代码时的逻辑复杂度,使我们的逻辑更加清晰。

三、测试理解与实践的演进

1、黑盒测试

最常用的测试方式,通过输入数据检查输出来测试程序的正确性。可以通过自动生成来获取大量的测试数据,但不能保证测试的覆盖率。常常配合程序对拍一起使用

2、白盒测试

互测时用到的测试方法,通过阅读代码,找出代码存在的bug。比较消耗人力,非常容易造成遗漏,但是容易发现隐形的不容易被构造数据测出的bug。

3、单元测试

利用Junit进行测试,可以实现对于函数功能甚至每一条语句的精准测试。可以保证测试的覆盖率,但是需要手动构造数据,比较消耗时间,要完成对于程序整体的测试需要比较漫长的时间。

四、课程收获

​ 这学期的OO作业,从面向对象的基本思想开始培养,区别于以前的面相过程式编程。再进行线程及其安全性的控制与判定,然后是依据规格进行程序设计,培养工程化设计的思想并进行数据完备性的检测。最后是解析UML类图,将图形化的东西与代码结合起来,原本抽象的东西有直观图像参考,而已有的直观类图信息也可转化为不同元素及其关系。

  我一直认为一个计算机学院的学生最可贵的不是掌握了多少们语言,学会了多少精妙的算法,而是我掌握了多少可贵的思维方式,上学期的CO让我明白了设计的核心不是代码,而是敲代码前的统筹规划。这学期的OO更多的是让我掌握了更多的设计方法(面向对象本身也是),其实无所谓是java还是其他的什么语言,最大的收获都不是我熟练的掌握了这门语言,而是明白了面向对象的这种思维模式。我可以很轻松的分析出一个任务是否合适用面向对象的思维去解决,也可以很轻松的从纷繁的设计要求中提炼出我所需要的对象,并且结合我的所学进行建模,这才是有价值的学习。

五、改进建议

  • 1、开课前的pre和第一次作业的跨度还是太大了,相比减小作业难度,我更建议加大一点pre的难度,让课程难度的跨越不要太大。
  • 2、希望可以在作业的测评中开放一个强测点(尤其是有性能要求的作业),方便同学更好的评估自己程序的性能,本地对于性能的测试手段比较有限,希望课程组加以引导。
  • 3、希望可以公开一下每次上机的答案什么的,让我们对于自己的水平有个评估
  • 4、希望可以公开一些优秀的代码(往届的也可以)以供学习参考

标签:总结,return,代码,作业,课程,visited,id,单元
来源: https://www.cnblogs.com/0xiao-hei0/p/16406895.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有