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

第四单元作业架构设计

第十三次作业

第十四次作业

总结

  这两次作业架构思路上是一样的。

  • 通过将需要使用的UmlElement,封装成Element的子类。每个子类存储相应的UmlElement,以及需要保存的信息。比如,Class类里保存着这个类的属性、方法以及关系、父类、实现的接口等信息。
  • Element抽象类有一个put方法,用来建立“关系”。比如,将属性、方法放到对应的Class里。
  • 建立每个类的时候使用工厂模式,这样在做第十四次作业的时候只需要新建对应的Element和查询方法就行。
  • 在第十四次作业里,由于有多个类来进行查询,所以我使用了一个单例模式的ElementContainer来存储Class、Interaction、StateMachine、Interface等,在查询的时候,只需要在ElementContainer中寻找相应的对象就行。
  • 在MyUmlGeneralInteraction中,使用组合的方式,来实现多个查询的方法。然后具体的查询,实现在具体类中,这样可以保证行数会超限制。

第十四次作业中需要进行标准判断

  • 对于Uml002,我的做法是对于每个类将类的对端名称和属性名称都取出来然后检查是否重名。
  • 对于Uml008,使用Tarjan算法,将有向图中的环都找到,最后再检查一遍自环。
  • 对于Uml009,枚举每个类和接口,如果有重复接口实现,则抛出异常DuplicateException。

OO课程中的架构设计与面向对象方法的演进

  OO课程的有趣之处在于,每个单元最后一次代码都非常复杂,这样就需要更好的架构来进行组织代码。

  • 第一单元中,我通过将每种Factor都继承同一父类,来进行存储,算是比较方便。但是没有考虑好接口共同的方法,导致多次强制转换。
  • 第二单元中,我开始学习设计模式,我仔细阅读了多线程设计模式,使用了生产者-消费者模式、单例模式等,每个电梯都使用相同的代码来处理,代码复用性较高。但是由于没有考虑好类的功能关系,导致调度类的功能特别多,代码特长。
  • 第三单元中,我开始将各个功能的代码封装起来,比如将对图的操作、查询封装起来,然后进行统一管理。
  • 第四单元中,我自己封装了每个UmlElement,然后每个Element统一管理。使用工厂模式来进行对象创建。

OO课程中的测试方法的演进

  在OO课程的学习中,我对测试的理解也更深入了。

  在前两单元作业中,我主要是使用的黑箱随机测试,手动构造一些特殊的数据。

  第三单元作业中,我第一次使用单元测试,由于JML的特性,单元测试非常好构造,而且对每个功能的覆盖性也很好。

  在最后一单元中,由于我没有进行比较完备的测试,导致出现了第一次,以及唯一一次Bug。:(   因此,我在最后一次单元中,构造了许多数据,提高测试的覆盖率,并且检查了各种可能出现的情况,来保证程序的正确性。

OO课程收获

  OO课程算是我接触到的第一个关于软件工程类的课程了吧。课程通过作业的形式来训练我们对于面向对象的理解。

  每个单元有不同的侧重

  • 第一单元,使用面向对象的封装、继承、多态来实现一个求导程序。
  • 第二单元,使用多线程来实现多电梯和调度。
  • 第三单元,使用JML来进行设计和实现一个地铁查询系统。
  • 第四单元,学习UML模型以及实现了UML模型的解释查询系统。

  每个单元都使用大量的代码来进行训练,平均每个单元一千行,最后一个单元的代码量达到了2000行。

  我认为,OO课程最重要的不是怎么写出时间性能更好、空间性能更优的代码,而是面对一个问题的时候,怎么进行代码架构设计,使用更简单、更灵活、复用性更强、可拓展性更强的代码来实现一个系统。在最后一次作业中,我感觉自己充分做到了这一点,在做第十四次作业的时候,只是工作时间的问题,架构上已经非常好了。OO课程让我受益匪浅。

对OO课程的建议

  OO课程今年确实有很大的改善,但是还是有一些问题:

  • 在第二单元多线程作业中,互测中,虽然找到了Bug但是由于多线程的性质难以复现。因此我建议,互测的时候,可以通过提交说明来提交Bug,让助教进行检查(与Bug修复类似)。这样可以鼓励同学能通过阅读代码来找bug,而不是简单的通过“评测姬”进行黑箱测试来找bug。
  • 最后一单元的指导书上有些地方写的不够清楚,尤其是第十四次作业的指导书,没有样例,解释模糊,概念矛盾。很多详细解释都需要在讨论区寻找,很不方便。希望之后每次作业的指导书能够更清楚一些吧。比如对于每种查询,都给出相应的例子,具体的例子,这样方便理解。
  • 最后,关于一些作业上的内容,助教有时候只在6系水群中解答并没有在讨论区提出,这样可能会使部分同学错过去。希望来年助教能够注意一下这方面吧。

【OO学习】OO第四单元作业总结及OO课程总结的更多相关文章

  1. BUAA OO 2019 第四单元作业总结

    目录 第四单元总结 总 UML UML 类图 UML 时序图 UML 状态图 架构设计 第十三次作业 第十四次作业 课程总结 历次作业总结 架构设计 面向对象方法理解 测试方法理解与实践 改进建议 尽 ...

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

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

  3. OO第四单元作业总结以及课程总结

    第四单元总结--UML 第四单元作业架构分析 第一次作业其实是本单元三次作业中最难的一次.由于第一次是第一次作业,要考虑到搭建框架和设计架构,这次作业的思维性很强.在了解了各个类型元素(Element ...

  4. 2019OO第四单元作业总结&OO课程整体总结

    第四单元作业总结 第四单元的作业主题是UML图的解析,通过对UML图代码的解析,我对UML图的结构以及各种元素之间的关系的理解更加深入了. ------------------------------ ...

  5. OO第四单元作业小结

    一.本单元两次作业的架构设计 1.第一次作业 整体思路:以class为核心,建立MyInterface.MyAttribute.MyOperation.MyAssociation四个类分别储存每个类的 ...

  6. OO第四次博客作业(第四单元作业及期末总结)

    (注意:本文写作顺序与作业要求不完全一致,但涵盖了作业的所有要求) 一学期的BUAA特色OO课程结束了. PART 1  我想先写我这一学期的感想 从第一单元满怀期待地写完多项式求值到最后看着60分不 ...

  7. 北航OO第四单元作业总结(4.1~4.3)及课程总结

    前言 在学习过JML规格描述语言之后,本单元进行了UML(Unified Modeling Language)的学习.和JML单纯用语言描述的形式不同,UML通过可视化的图形形式,对一系列有关类的元素 ...

  8. OO第四单元作业总结及课程总结

    一.本单元作业架构设计 1.第一次作业 本单元首次接触到UML以及相关概念,在面对第一次作业时首先花了很大功夫去阅读官方接口中各种UmlElement的代码,才理解了输入的模型元素中各属性的含义.总的 ...

  9. oo第四单元作业总结

    一.本单元两次作业的架构: 本单元两次作业的架构基本是一致的,所以两次作业的架构就一起说了. 为了避免查询时出现同一个结果反复计算的情况(连续两次查询一个类的顶级父类,如果我们在查询的指令中来计算其父 ...

随机推荐

  1. 详解CI、CD相关概念

    CI:持续集成(CONTINUOUS INTEGRATION)基本概念CI的全称是Continuous Integration,表示持续集成. 在CI环境中,开发人员将会频繁地向主干提交代码.这些新提 ...

  2. Centos7安装Redis5.0.5并加入Systemd服务

    1. 安装gcc-c++, tcl yum install gcc-c++ tcl 2. 解压缩, 编译, 测试 tar zxvf redis-5.0.5.tar.gz make make test ...

  3. 测量MySQL的表达式和函数的速度

    测量MySQL的表达式和函数的速度,可以调用benchmark()函数.语法格式是benchmark(loop_count,expr).运行的返回值是0,但是mysql会打印一行显示语句大概要执行多长 ...

  4. Oralce 如何将查询结果中的0转成空的

    我们遇到过大多的情况的需求是查询结果中空转为0,这个可以通过oracle的NVL()函数就可以搞定. 之前做报表客户有个需求,查询出结果为0 要转成空的,不显示0 那么在oracle有没有现成函数能搞 ...

  5. chrome浏览器postman 插件安装

    postman 软件功能 模拟各种HTTPrequests 从常用的GET.POST到RESTful的PUT.DELETE…等等.甚至还可以发送文件.送出额外的header. Collection功能 ...

  6. [LeetCode] 136. Single Number 单独数

    Given a non-empty array of integers, every element appears twice except for one. Find that single on ...

  7. chrome/firefox如何设置很色背景

    firefox 菜单栏设置黑色 自带黑色主题,直接Enabled 页面背景设置黑色 下载扩展Extensions:Dark Reader chrome 菜单栏设置黑色 下载主题Theme:Just b ...

  8. python爬虫2

    学习任务 获取去哪儿网的出发地列表 获取旅游景点列表 获取景点产品列表 存储数据 1 获取出发地站点 (1)访问touch.qunar.com (2)按F12,单击自由行,在自由行页面点击搜索框 (3 ...

  9. docker安装+docker-compose

    1.docker安装 yum install -y yum-utils device-mapper-persistent-data yum-config-manager --add-repo http ...

  10. vscode插件Power Mode

    Power Mode官网 设置里添加 "powermode.enabled": true, "powermode.presets": "flames& ...