OO第四单元总结及课程总结

一、前言

  紧张刺激的OO“昆仑课程”接近尾声,经过一个学期的学习,我的收获和感触颇多,借此博客作业的机会,对自己OO这门课程做一个总结。本博客主要有以下五个方面,一是第UML单元的作业总结,二是课程期间架构设计及OO方法理解的演进,三是测试理解与实践的演进,四是自己的课程收获,五是给课程的三个具体改进建议。

二、第四单元作业总结

(一)第十三次作业

 1.任务摘要

  实现一个UML类图解析器,可以通过输入各种指令来进行类图有关信息的查询。

 2.要点分析

  理解UML类图的几个关键类型对象,并通过一系列数据结构来管理这些对象,完成查询。

 3.架构设计

 (1)主要思路:

   根据各类UML元素的职能,按照逻辑关系将其整合,构建出类似类图的结构,用Hashmap这一容器存储各类UML元素的信息并实现UML元素之间的索引交互。

 (2)类图:

(由于图片较大,看不清的话可以右键将图片转到新标签页,以下皆是)

  分析:构建了MyClass类和MyInterface类,各自包含Attribute和Operation,由于Operation与其参数Parameter是包含关系,因此创建MyOperation类,以Parameter为成员变量。其中,每个MyClass类和MyInterface类可以包含多个MyOperation类,这些底层模块的上层联系在MyUMLInteraction类里构建。

 (3)方法复杂度分析:

   分析:分析复杂性比较高的几个方法,其中MyUMLInteraction的构造方法复杂度最高,原因是在构造方法中我写了三个循环,将各类UML元素elements[i]中的信息提取出来并存储到相应的数据结构中,所以设计复杂度iv(G)高,同时,有许多复杂的判断语句和if语句,导致圈复杂度v(G)较高。

 4.程序bug

 (1)一个由于粗心导致的非常愚蠢的错误。在MyInterface类里存储MyOperation的HashMap未实例化,导致要往里存东西的时候产生异常报错。

 (2)在查询类实现的全部接口时,由于对接口的多继承理解不到位,采用一个fatherID变量存储,在出现某个接口继承多个其他接口的时候就会导致漏掉某些接口。修改方法为:每个MyInterface类用一个HashMap存储与其有Generalization关系的其他接口的ID,查询的时候遍历所有“父”接口。

(二)第十四次作业

 1.任务摘要

  在上次作业基础上,扩展解析器,使得能够支持对UML顺序图和UML状态图的解析,并能够支持几个基本规则的验证

 2.要点分析

  理解UML顺序图和状态图的几个关键类型对象,并通过一系列数据结构来管理这些对象,完成查询。理解类图几个基本规则的原理并实现其验证。

 3.架构设计

 (1)主要思路:

   类似上次作业,增加顺序图和状态图这两个相对独立diagram的结构,存储关键UML元素的信息,完成新增的查询指令。同时,在上次类图的模块中增加三条检查规则,检查重名、循环继承和重复继承。

 (2)类图:

  分析:与上次的类图相比新增了顺序图SubMap类和状态图StateMap类,这两个类几乎独立于类图相关的那些类,作为新的模块与MyUMLGeneralInteraction中构建出联系。值得一提的是,上次作业的架构并不好,封装性不强,很多代码都是在顶层类中完成的,导致这次作业产生了超行问题,其实应该将类图有关的所有代码都封装起来,从而使整个架构变得整洁。这次作业,与顺序图。状态图有关的许多操作都放置在了类自身里,而MyUMLGeneralInteraction类只负责调用方法并抛出异常。

 (3)方法复杂度分析:

  分析:除了由于设计架构(在构造方法中直接提取信息)导致的难以降低的复杂度以外,这次作业有刻意降低其他方法的各类复杂度,比如简化了条件表达式、使用更为简洁的代码、令函数携带参数 - 使用代参函数,强调函数的复用性等方法。

 4.程序bug

 (1)程序超时,产生CPU_TIME_LIMIT_EXCEED

 (2)检查R003时,应注意重复继承的类的子类也通过Generalization关系产生重复继承。

三、架构设计及OO方法理解的演进

  回首课程整个学习过程,我的架构设计和OO方法理解的发展大概有三个阶段。

  • 第一阶段为“思维转变阶段”,通过学习大一的C语言程序设计课程和数据结构课程,我初步建立起面向过程编程思想,首次接触面向对象编程,第一步需要进行编程思维的转换:在分析问题时,学会把构成问题的各个事物分解成各个对象。
  • 第二阶段是“动手实践阶段”,在把问题分解成对象后,尝试在编程时具体实现:对象作为程序的基本单位,将程序和数据封装其中,以提高程序的重用性,灵活性和可扩展性。在这个阶段,设计时争取遵循七大原则:SOLID原则(单一职责原则、开放关闭原则、里氏替换原则、接口隔离原则和依赖倒置原则)、迪米特法则组合、优于继承原则(合成复用原则)。同时,在架构设计方面,尝试运用24种设计模式。比如:工厂模式、单例模式等。
  • 第三阶段是“形成习惯阶段”,在一次次的作业中,用OO思想分析问题,欣赏学习他人优秀代码,努力形成面向对象编程的习惯,提高面向对象编程的能力,使自己的程序变得更好。

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

  回顾课程整个学习过程,我的测试理解与实践大概有四点方法。

  • 第一点是“肉眼观察”,通过walk through发现程序中的漏洞,在面向过程编程时,这种方法还算有效,毕竟代码一步一步的过程很明晰,错误也很容易找到。但是在面向对象编程时就不是很好用了。
  • 第二点是“构造边界测试用例”,这种方法需要极高的逻辑性,需要对输入需求有充分的理解。
  • 第三点是“System.out”方法,在多线程单元,线程之间的关系错综复杂,传统的断点调试方法已经不适用,我回归到原始的输出调试,在可能的地方输出标志语句,使程序的运行过程可视化,从而发现问题所在。
  • 第四点是“JUnit单元化测试”,可以使用OpenJML、JUnitNG自动化生成测试用例,抛却底层实现,而是着眼于“输入”与“输出”的顶层正确性,不关心具体的代码实现。

五、课程收获

  • 第一单元是多项式求导单元,这一单元主要收获有:Java语言的初级编程技术、正则表达式匹配字符串、面向对象的思想、面向对象程序的构成、对象与类的概念、对象的特性、可变性、类的属性和方法、类的继承多态抽象等。
  • 第二单元是多线程电梯单元,这一单元主要收获有:Java系统概览、JVM的基本结构、内存划分、对象方法调用、利用JProfile对程序进行分析、多线程程序的概念、处理方法、多线程并发时常见的线程安全问题、线程安全问题的解决方法、如何进行安全的设计、OO程序的分析与设计原则等。
  • 第三单元是JML单元,这一单元主要收获有:规格的概念、JML语法、方法、类的规格、继承层次下类规格之间的关系、基于规格的测试方法、OpenJMLJUnit等测试工具的使用、数据抽象规格等。
  • 第四单元是UML单元,这一单元主要收获有:UML语言、UML类图、UML顺序图、UML状态图、程序系统的理解、描述、StarUML的使用等。

  早有耳闻OO课程会让大家苦不堪言,的确,看不懂指导书、写不出程序、强测炸掉没进互测、互测被人刀几十下,这些都是会让大家痛苦的东西,但是,痛苦能激励我们不断学习,如果每个人都做得很好,很水的过了这门课,短期内看起来很轻松幸福,但是从长远看,这些东西在你脑子里只是如一道流星一般划过,留下的只有美好的记忆而不是坚实的知识,而我们的OO,就像一块大陨石,狠狠地砸到你身上,不仅能把知识留下,还能砸出一个巨大的陨石坑,方便以后用知识对其进行填补(笑)。

六、课程建议

  1. 合理安排理论课和实验课的内容,尽量避免上午讲、下午实验的现象。
  2. 适当减少互测屋人数,个人认为四人一组为宜。如果可能的话,可以安排一个智能测试机器人,构成五人小组。
  3. 研讨课可以增加一个讨论时间,坐在一起的同学分小组讨论,这样同学们之间更方便直接地互相交流(因为站起来提问有时候会准备不够充分,而且不好沟通)。
  4. 建一个课程通知大群微信群,重要的通知(如时间节点啥的)发布在群里,因为同学们不可能天天守着课程网站的讨论区去看通知。

OO第四单元总结及课程总结的更多相关文章

  1. OO第四单元总结与课程总结

    OO第四单元总结与课程总结 第四单元作业架构设计 总体分析:本单元作业的需求集中于对UML类图进行查询.对于查询操作来说自然的想法是提前预见到需要查询的内容,在一开始就采用适当的数据结构将必要的信息进 ...

  2. OO第四单元与全课程总结

    OO第四单元与全课程总结 一.作业代码架构设计 1.第一次作业 作业类图如下: 具体架构设计: 第一次作业的全部查询工作都是和类图有关,需要解决的主要问题就是如何解析原有UML类图数据的结构,并形成自 ...

  3. 【OO学习】OO第四单元作业总结及OO课程总结

    [OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...

  4. OO第四单元——基于UML的UML解析器总结&OO课程总结

    OO第四单元--基于UML的UML解析器总结&OO课程总结 前言:一学期愉快(痛苦)的OO课程学习结束了,OO几个单元作业都各有特色,实验也各有特色,仔细回味起来,不再是单纯的敲代码(但自己还 ...

  5. oo第四单元作业总结暨课程总结

    oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...

  6. 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾

    「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 目录 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 Part 0 第四单元作业架构设计 架构设计概要 AppRun ...

  7. OO第四单元(UML)单元总结

    OO第四单元(UML)单元总结 这是OO课程的第四个单元,也是最后一个单元.这个单元只有两次作业,相比前三个单元少一次作业.而且从内容上讲这个单元的作业目的以了解UML为主,所以相对前三个单元比较简单 ...

  8. OO第四单元博客作业

    OO第四单元博客作业 BUAA_1706_HugeGun 目录 第四单元作业架构设计 四个单元架构设计及OO方法理解 四个单元测试理解与实践演进 课程收获 一点建议 第四单元作业架构设计 ### 第十 ...

  9. OO第四单元总结及学期总结

    目录 OO第四单元总结及学期总结 第四单元三次作业架构设计 第十三次作业 第十四次作业 第十五次作业 四个单元中架构设计及OO方法理解的演进 第一单元 第二单元 第三单元 第四单元 四个单元中测试理解 ...

随机推荐

  1. SVN更新报错:Checksum mismatch for 解决办法

    问题: Checksum mismatch while updating '……'; expected: '3f9fd4dd7d1a0304d8020f73300a3e07', actual: 'cd ...

  2. python函数带不带括号的问题

    Python带括号返回的是该函数的返回值 不带括号返回的是该函数的位置信息等

  3. Nginx服务项的基本配置

    由于Nginx配置项较多,把他们按照用户使用时的预期功能分为以下4类: 1.调试,定位问题的配置项 2.正常运行必备配置项 3.优化性能配置项 4.事件类配置项 1. 用于调试进程,定位问题的配置项 ...

  4. 微信小程序(19)-- 从底部向上滑出的动画效果

    从底部向上滑出的动画效果: 用到了小程序的触摸事件bindtouchmove,以及创建一个annimation对象,完成动画操作之后使用animation这个对象的export()方法导出动画数据. ...

  5. 自动化运维工具-Ansible基础及Ansible Ad-Hoc

    第58章 Ansible 目录 第58章 Ansible 一.Ansible基础概述 1.1)什么是Ansible 1.2)Ansible可以完成哪些功能呢?1.3)Ansible特点 1.4)Ans ...

  6. CSS初识

    CSS:层叠样式表,控制网页数据样式显示,使得数据的表现和内容分离 CSS的引入方式 使用元素内嵌样式表:例<a style=”font-size:40px”></a>表示在a ...

  7. Codeforces1221D. Make The Fence Great Again(dp)

    题目链接:传送门 思路: 仔细想一下可以发现:每个位置最多就增加2个高度. 所以就可以有状态: f[i][j]表示保证前i个篱笆都是great时,第i个篱笆增加j的高度所需要的最小花费(1 <= ...

  8. 深度复数网络 Deep Complex Networks

    转自:https://www.jiqizhixin.com/articles/7b1646c4-f9ae-4d5f-aa38-a6e5b42ec475  (如有版权问题,请联系本人) 目前绝大多数深度 ...

  9. 【LuoguP3264】[JLOI2015] 管道连接(斯坦那树)

    题目链接 题目描述 小铭铭最近进入了某情报部门,该部门正在被如何建立安全的通道连接困扰.该部门有 n 个情报站,用 1 到 n 的整数编号.给出 m 对情报站 ui;vi 和费用 wi,表示情报站 u ...

  10. 模块的四种形式、 import和from...import、 循环导入问题、模块的搜索路径、 python文件的两种用途

    目录 模块的四种形式 模块 模块的四种形式 import和from...import 循环导入问题 模拟问题的发生: 解决方案 模块的搜索路径 Python文件的两种用途 模块的四种形式 Nike推荐 ...