【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. Net core学习系列(二)——Net Core项目文件简介

    一. ASP.NET Core 项目文件夹解读 ASP.NET Core 1.0 发布以来,相较于传统项目编码发布的行为,新项目中的操作已经有了很大的变化,如解析依赖,选择运行平台和Runtime等等 ...

  2. mysql union all limit的使用

    To apply ORDER BY or LIMIT to an individual SELECT, place the clause inside the parentheses that enc ...

  3. Python3基础 tuple(list) 改变list元素的内容时,元组的id值不变

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  4. Linux目录结构和作用

    转载自:https://blog.csdn.net/wangrongrongwq/article/details/79624797 [常见目录说明] 目录 /bin 存放二进制可执行文件(ls,cat ...

  5. QLineEdit 加省略号

    第一种方法: QFontMetrics elidfont(ui->lineEdit->font()); ui->lineEdit->setText (elidfont.elid ...

  6. window10 phpstudy2018 mysql服务重启之后自动停止

    使用phpstudy集成环境开发php,但是可能版本太旧,导致有些语法用不了.所以决定删掉,再下一个新版的. 把phpstudy退出之后,就直接把phpstudy文件夹删除了.发现它并不能删除成功.然 ...

  7. 机器学习技法总结(一):支持向量机(linear support vector machine,dual support vector machine)

    第一阶段技法: large margin (the relationship between large marin and regularization), hard-SVM,soft-SVM,du ...

  8. SpringBoot系列教程web篇之Beetl环境搭建

    前面两篇分别介绍了目前流行的模板引擎Freemaker和Thymeleaf构建web应用的方式,接下来我们看一下号称性能最好的国产模板引擎Beetl,如何搭建web环境 本文主要来自官方文档,如有疑问 ...

  9. SpringBoot系列教程web篇之Thymeleaf环境搭建

    上一篇博文介绍了如何使用Freemaker引擎搭建web项目,这一篇我们则看一下另外一个常见的页面渲染引擎Thymeleaf如何搭建一个web项目 推荐结合Freemaker博文一起查看,效果更佳 1 ...

  10. javascript添加到收藏夹写法

    javascript添加到收藏夹写法 <pre>function addFavorite2() { var url = window.location; var title = docum ...