【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. nacos启动与sql8.0的问题解决方法

    hi all! 半年多没更新,是不是以为我消失了……直接正题~ 在搭建nacos环境的时候,有这样的一项:数据库持久化配置.(官方文档),这个配置可以灵活的帮我们进行配置而不用总是重启服务. 那么问题 ...

  2. 公司不用 Spring Boot,果断离职了!

    面试问到离职原因,我想这是很多面试者的痛,包括我自己,曾经也被离职原因所坑过. 面试回答离职原因简直特么就是巨坑,我也因此在微信公众号 "Java技术栈" 写了这篇文章<过了 ...

  3. 最精简使用MORMOT

    MORMOT是免费开源的SDK,它封装了HTTP.SYS,这是许多人使用它的原因,让人难以想像的是它居然支持DELPHI6及以上版本. 但MORMOT本身已经被封装的很庞大,它提供许多的单元,这让人不 ...

  4. JVM探究之 —— Java内存区域

    1. 概述 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的“皇帝”又是从事最基础工作的“劳动人民”——既拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的 ...

  5. BackgroundWorkerHelper

    public static class BackgroundWorkerHelper { public static void Run(DoWorkEventHandler doWork, RunWo ...

  6. 几个支持 FreeSWITCH 的网络电话的安装与使用(linphone、MicroSIP、Sipdroid)

    Ubuntu 安装 Linphone 安装命令 apt-get install linphone 安装完成后,在应用程序 --> 互联网 下就能看到 linphone,打开后注册 注意:linp ...

  7. Linux目录结构和作用

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

  8. [LeetCode] 534. Design TinyURL 设计短网址

    Note: For the coding companion problem, please see: Encode and Decode TinyURL. How would you design ...

  9. [LeetCode] 787. Cheapest Flights Within K Stops K次转机内的最便宜航班

    There are n cities connected by m flights. Each fight starts from city u and arrives at v with a pri ...

  10. 【OpenCV开发】OpenCV3后IPLimage转换成MAT的问题

    IplImage* img1 = cvCreateImage(cvGetSize(resizeRes), IPL_DEPTH_8U, 1);//创建目标图像 Mat test = img1;  报错 ...