OO第四单元总结与课程总结
OO第四单元总结与课程总结
第四单元作业架构设计
总体分析:本单元作业的需求集中于对UML类图进行查询。对于查询操作来说自然的想法是提前预见到需要查询的内容,在一开始就采用适当的数据结构将必要的信息进行存储,以空间换取时间。在本单元的作业中我也是完全依据这样的想法来进行设计的。
第一次作业
本次作业只涉及类图,主要的需求是对类的内外信息进行查询,类内的信息包括属性、方法等;类外的信息包括父类、接口实现等。在课程给出的源码中,一个类只包含UML中定义的ID、name等信息,并不包含属性、方法、父类等其他信息。这显然是无法满足需求的。因此,在设计的过程中,我新增了MyClass类,其中就包含了所需的各种信息。在需要时,可以直接的查询得到相关的信息。类似的,我也新增了MyInterface和MyOperation类。在这些类的协助下,多数的查询操作只需要O(1)的复杂度,对时间复杂度进行了有效的优化。
第二次作业
本次作业增加了对状态机和顺序图的查询。经过简单分析就会发现类图、顺序图、状态机的元素之间是没有重叠的,可以说他们三者是互不影响的,因此在进行相关的查询操作时只需要在对应的类图(顺序图、状态机)中进行就好。关于类图的操作在第一次作业中已经写好,只需增加对另外两种图的查询就好。为了使程序结构清晰,我才用了分级的思路。MyUmlInteraction管理类图,MyUmlStateChartInterractin管理状态机,MyUmlCollaborationInteraction管理顺序图。最后再用MyUmlGeneralInteraction管理三种图。这种写法使每个类的长度得到了有效的控制。
第三次作业
本次作业增加了对传入的UML类图进行有效性判断的需求。类似第二次作业的思路,只需增加一个PreCheck类,按照规则进行判断即可。(UML图中省略了属性和方法)
四个单元中架构设计及OO方法理解的演进
第一单元
本单元作业的主要需求是多项式求导。在这个单元中最主要的是对面向对象的设计有一个总体性的认识。由于刚开始接触面向对象,因此在架构的设计上比较的随心所欲,具体的表现就是在写代码的过程中突然发现我需要单独建立一个类管理一个项,我就新增加一个类,最终的结果就是整体架构比较的繁琐,各个类的功能有很大的重叠。究其原因就是在动手之前缺乏对整体的思考。在这一单元的三次作业中,我经历了三次重构花费了很多精力。同时从我的个人感受来看,这一单元是最难的一个单元。通过这一单元,我初步窥探到了面向对象的基本思想和具体做法,这位我后三个单元的顺利完成打下了重要的基础。
第二单元
经过了第一单元的洗礼,我对架构的设计有了一些想法。根据需求我第一次作业就确定了主要的类应该包括:乘客队列、调度器、电梯三个部分。这种架构对迭代开发很有帮助,这一单元就免去了第一单元疯狂重构的痛苦。这一单元最重要的一部分应该是多线程的设计。由于是初次接触,死锁问题困扰了我很久。不过事实证明,实践出真知。在调式了很多死锁问题之后,在测试中我没有因为死锁问题出现过Bug,这也是对我的一点小小的鼓励。
第三单元
本单元主要是正确理解jml。但是由于把注意力过多的集中于jml上,反而对架构的设计有所忽略了。在第一次作业中,死板的根据jml进行翻译式的代码编写导致,出现了不少超时的问题。意识到问题之后后面的两次作业我也有意识的对架构进行了调整。但是有了第一次作业先入为主的设计思路,导致最终的代码架构还是不尽如人意。因此在第三次作业的bug修复中,我进行了一次不小的重构,才得到比较满意的结果。这一单元作业除了对jml的学习,使我感受最深刻的就是架构的设计是整个程序最最基础的部分,无论面对什么需求,这一部分都是需要好好思考的。
第四单元
本单元是我对自己最满意的一个单元。从设计的角度来看,在一开始就明确了各个类的功能和管理的数据,因此在迭代的过程中我只需增加新的方法即可,整个设计的思路是一脉相承的,我也真正感受到了迭代的乐趣。通过这一单元的实践,我认为对面向对象思想的掌握,我有了很大的进步,这给了我很大的肯定。
四个单元中测试理解与实践的演进
在OO的作业中测试是很重要的一个部分。在我的理解中测试应该要分为三大部分——基本的功能检查、极端数据、不合法数据。在我们的课程中比较关心的是前两种。对我来说,我比较在意的是功能的正确性,这一部分我的通常做法是构造全面的测试用例,进行覆盖性测试。而对于极端数据,一个是根据对程序的理解构造(比如第一单元的指数为0),另一种是随机生成大量的数据。对测试数据运行结果的正确性检查中,我常常采用对拍的方法。这也确实帮助我找到了很多的bug。但是我也必须认识到的一点是在测试方面我的自动化程度很低,相比使用测评机的大佬们,我还有很多需要学习的地方。虽然这学期的课程中我还没能搭建起属于我自己的测评机,但是我惊奇的发现我对bug出现的地方有了主动的预见性,在发现错误时我能很快的找到bug的位置并能很快的进行修改(这可能就是每注bug修复训练的结果)。
课程收获
第一点对java语言的熟悉。这门课是我第一次使用java语言,并且相关的使用方法基本上是通过查阅资料自学的。经过一学期的反复使用,我对java的基本语法、数据结构都有了比较深的认识。这也表明确实在掌握了一门语言后,对其他语言的掌握会起到事半功倍的作用。在预习作业中,我基本上就是边做边学,但得益于C语言的基础,因此简单了解java的语法就很快的写出简单的代码。同时由于java相比C语言,java有丰富的“轮子”可以使用,arraylist、hashmap等各种容器,因此可以使我更加专注于需求本身,而不是花很多的时间去编写结构体、栈等基本的结构。
第二点面向对象思想的初步形成。各种不同的问题有一个共性的特征就是针对一个对象做若干种操作。从这样的想法中,自然的就有面对一个需求,我先思考这个需求相关的对象有哪些、它们之间的关系是什么、每个对象可以执行什么样的操作。在把这个问题思考明白后基本的设计架构也就有了。
第三点实用的设计模式,比如:工厂模式、适配器模式等。在没有了解这些模式之前,我对设计模式的使用都是无意识无目的的,想到了什么就用什么。但是了解了之后,面对不同的问题,就可以使用不同的模式,这使代码的可读性和逻辑性都有了很大的提高。并且使用这些成熟的设计模式确实可以帮助我们简化很多的问题,不过我目前对设计模式的掌握还不够,但是OO为我推开了这一扇窗,我也会在之后的实践中多多的了解并使用这些设计模式。
改进建议
1. 预习作业的内容。这一学期的预习作业主要集中于对java语言的熟悉与使用。这对我的OO学习的确起到了很大的帮助。但我认为也可以增加一些理论上的指导,比如java中不同容器的优缺点等,这些内容可以通过推荐技术博客的方式进行,这样可以有效的减少同学们走了不必要的弯路。
2. 作业的发布时间。我认为在开启bug修复时就可以公布下一次作业的具体要求,这样同学们可以带着问题和思考听课,更有针对性;而不是在课上胡乱猜测这周的作业是什么,反而是课上内容没有得到很好的接受。
3. 实验的反馈。在实验结束后同学们只能得到是否提交成功的反馈,但是具体做的怎么样是没有反馈的,这使得每次实验过后不管正确与否,过去了就过去了,完全没有达到实验课的目的。有效的反馈可以使同学们清晰的知道自己对该部分的掌握是否到位、是否有理解错误。因此希望之后的实验课至少能给同学们正确与否的反馈,并且能提供正确的代码或者思路供参考,我认为这样同学们才能在实验中收获更多的东西。
线上学习课程的体会
线上学习对我来说有利也有弊。好的一方面是线上学习可以不断的重播,有效的解决了课堂学习由于各种因素导致的上课走神但缺没办法补上的问题,对不理解的问题也可以通过重播多看几遍。但是线上学习也有缺点,缺少同学们一起学习的氛围以及家里比较安逸的环境往往会使听课的效率降低。不过这一点可以通过重播弥补,但是更重要的一点是线上学习缺少同学们面对面的交流,设计思路、方法实现等其实每个人都有自己的想法,通过交流互相学习对开拓思路是很有效的。
简言之,虽然本学期的OO课程是在线上完成的,但是我也有很多的收获,自我评价也算是完成了课程的要求。最后,感谢各位老师和助教一整个学期的付出。
OO第四单元总结与课程总结的更多相关文章
- OO第四单元总结及课程总结
OO第四单元总结及课程总结 一.前言 紧张刺激的OO“昆仑课程”接近尾声,经过一个学期的学习,我的收获和感触颇多,借此博客作业的机会,对自己OO这门课程做一个总结.本博客主要有以下五个方面,一是第UM ...
- OO第四单元与全课程总结
OO第四单元与全课程总结 一.作业代码架构设计 1.第一次作业 作业类图如下: 具体架构设计: 第一次作业的全部查询工作都是和类图有关,需要解决的主要问题就是如何解析原有UML类图数据的结构,并形成自 ...
- 【OO学习】OO第四单元作业总结及OO课程总结
[OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...
- OO第四单元——基于UML的UML解析器总结&OO课程总结
OO第四单元--基于UML的UML解析器总结&OO课程总结 前言:一学期愉快(痛苦)的OO课程学习结束了,OO几个单元作业都各有特色,实验也各有特色,仔细回味起来,不再是单纯的敲代码(但自己还 ...
- oo第四单元作业总结暨课程总结
oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...
- 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾
「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 目录 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 Part 0 第四单元作业架构设计 架构设计概要 AppRun ...
- OO第四单元(UML)单元总结
OO第四单元(UML)单元总结 这是OO课程的第四个单元,也是最后一个单元.这个单元只有两次作业,相比前三个单元少一次作业.而且从内容上讲这个单元的作业目的以了解UML为主,所以相对前三个单元比较简单 ...
- OO第四单元博客作业
OO第四单元博客作业 BUAA_1706_HugeGun 目录 第四单元作业架构设计 四个单元架构设计及OO方法理解 四个单元测试理解与实践演进 课程收获 一点建议 第四单元作业架构设计 ### 第十 ...
- OO第四单元总结及学期总结
目录 OO第四单元总结及学期总结 第四单元三次作业架构设计 第十三次作业 第十四次作业 第十五次作业 四个单元中架构设计及OO方法理解的演进 第一单元 第二单元 第三单元 第四单元 四个单元中测试理解 ...
随机推荐
- tcp粘包情况分析
1 什么是粘包现象 TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾.在tcp长连接时,发送端发到buffer里面,接收端也有个buffe ...
- SpringBoot启动报错 Disconnected from the target VM, address: '127.0.0.1:2227', transport: 'socket'
今天搭建了一个SpringBoot项目,刚启动就报错 Disconnected from the target VM, address: '127.0.0.1:2227', transport: 's ...
- 看完我的笔记不懂也会懂----git
Git学习笔记 - 什么是Git - 首次使用Git - DOS常用命令 - Git常用命令 - 关于HEAD - 版本回退 - 工作区.暂存区与版本库 - git追踪的是修改而非文件本身 - 撤销修 ...
- loadrunner学习笔记一
这篇笔记主要是针对一个具体的loadrunner脚本里面出现的方法进行解释,具体脚本如下: ` Action() { char *transactionName = "Test"; ...
- sql之对top语句理解
起因 事情的起因是在群里和大佬讨论问题,讨论select top x后加*的问题,这时突发奇想,想搞清楚这个看起来在sql中略显突兀的语句结构,就有了这篇文 先看例子 select * from 表 ...
- 在linux下如何搭建jmeter的环境
首先 我们可以选择不同版本的jmeter 转载原连接:https://blog.csdn.net/lyl0724/article/details/79474388 Jmeter历史版本下载地址 htt ...
- WPF 基础 - 点击事件的执行顺序及 Button 点击事件的特殊性
1. 点击事件的执行顺序 PreviewMouseLeftButtonDown PreviewMouseDown MouseLeftButtonDown MouseDown PreviewMouseL ...
- Apache配置 6. 访问日记切割
日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件 (1)配置 (1)配置 # vim /usr/local/apache2 .4/conf/extra/httpd-vh ...
- slickgrid ( nsunleo-slickgrid ) 3 修正区域选择不能跨冻结列的问题
slickgrid ( nsunleo-slickgrid ) 3 修正区域选择不能跨冻结列的问题 上次解决区域选择不能跨冻结列问题的时候,剩了个尾巴,从右往左选择的时候,会出现选择不正常的情况,后 ...
- P3160 [CQOI2012]局部极小值 题解(状压DP+容斥)
题目链接 P3160 [CQOI2012]局部极小值 双倍经验,双倍快乐 解题思路 存下来每个坑(极小值点)的位置,以这个序号进行状态压缩. 显然,\(4*7\)的数据范围让极小值点在8个以内(以下示 ...