【OO学习】OO第四单元作业总结及OO课程总结
【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课程总结的更多相关文章
- BUAA OO 2019 第四单元作业总结
目录 第四单元总结 总 UML UML 类图 UML 时序图 UML 状态图 架构设计 第十三次作业 第十四次作业 课程总结 历次作业总结 架构设计 面向对象方法理解 测试方法理解与实践 改进建议 尽 ...
- oo第四单元作业总结暨课程总结
oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...
- OO第四单元作业总结以及课程总结
第四单元总结--UML 第四单元作业架构分析 第一次作业其实是本单元三次作业中最难的一次.由于第一次是第一次作业,要考虑到搭建框架和设计架构,这次作业的思维性很强.在了解了各个类型元素(Element ...
- 2019OO第四单元作业总结&OO课程整体总结
第四单元作业总结 第四单元的作业主题是UML图的解析,通过对UML图代码的解析,我对UML图的结构以及各种元素之间的关系的理解更加深入了. ------------------------------ ...
- OO第四单元作业小结
一.本单元两次作业的架构设计 1.第一次作业 整体思路:以class为核心,建立MyInterface.MyAttribute.MyOperation.MyAssociation四个类分别储存每个类的 ...
- OO第四次博客作业(第四单元作业及期末总结)
(注意:本文写作顺序与作业要求不完全一致,但涵盖了作业的所有要求) 一学期的BUAA特色OO课程结束了. PART 1 我想先写我这一学期的感想 从第一单元满怀期待地写完多项式求值到最后看着60分不 ...
- 北航OO第四单元作业总结(4.1~4.3)及课程总结
前言 在学习过JML规格描述语言之后,本单元进行了UML(Unified Modeling Language)的学习.和JML单纯用语言描述的形式不同,UML通过可视化的图形形式,对一系列有关类的元素 ...
- OO第四单元作业总结及课程总结
一.本单元作业架构设计 1.第一次作业 本单元首次接触到UML以及相关概念,在面对第一次作业时首先花了很大功夫去阅读官方接口中各种UmlElement的代码,才理解了输入的模型元素中各属性的含义.总的 ...
- oo第四单元作业总结
一.本单元两次作业的架构: 本单元两次作业的架构基本是一致的,所以两次作业的架构就一起说了. 为了避免查询时出现同一个结果反复计算的情况(连续两次查询一个类的顶级父类,如果我们在查询的指令中来计算其父 ...
随机推荐
- Java_jdbc 基础笔记之十 数据库连接 (ResultSetMetaData 类)
ResultSetMetaData 类 调用ResultSet 的getMetaData()方法得到ResultSetMetaData 类对象: 可用于获取关于 ResultSet 对象中列的类型和属 ...
- arcpy实例教程-地图范围导出到要素类
arcpy实例教程-地图范围导出到要素类 商务合作,科技咨询,版权转让:向日葵,135-4855_4328,xiexiaokui#qq.com 功能:将当前地图范围导出到内存要素类 描述:将当前地图的 ...
- android -------- LiveDataBus的使用
LiveData是17年GoogleIO大会上提出来的一个新技术.相对于通信总线类型的框架EventBus和RxBus来说,它更简单,更简洁.更解耦. LiveEventBus是一款Android消息 ...
- 《你必须知道的javascript(上)》- 2.this与对象原型
1 关于this 1.1 为什么使用this 随着你的使用模式越来越复杂,显式传递上下文对象会让代码变得越来越混乱,使用this则不会这样.当我们介绍对象和原型时,你就会明白函数可以自动引用合适的上下 ...
- 如何从OA系统批量整理出邮箱地址,并导入到Foxmail 地址薄中?
一.打开某位leader的OA,点击查看“下属” a. 将所有的下属信息 --- 全选 --- 复制 --- 粘贴到 excel 表格中 b. 分别提取“姓名” 和 “邮箱”地址信息,结合notepa ...
- Jmeter里http接口的执行顺序是顺序执行
1,如果在一个线程组里则是顺序执行 2,如果不在一个线程组里,就勾选独立运行各个线程组,在一个运行结束后启动下一个线程组
- pytorch ImageFolder的覆写
在为数据分类训练分类器的时候,比如猫狗分类时,我们经常会使用pytorch的ImageFolder: CLASS torchvision.datasets.ImageFolder(root, tran ...
- [LeetCode] 800. Similar RGB Color 相似的红绿蓝颜色
In the following, every capital letter represents some hexadecimal digit from 0 to f. The red-green- ...
- mongoDB主从和集群
主从(windows下的配置) 主服务器设置 mongod --dbpath=F:\mongoDB\db --master \\dbpath是设定数据存放路径 --master是指定为主库 从服务器设 ...
- dubbo源码分析01:SPI机制
一.什么是SPI SPI全称为Service Provider Interface,是一种服务发现机制,其本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件.这样可以在运行时,动态为 ...

