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第四单元总结与课程总结的更多相关文章

  1. OO第四单元总结及课程总结

    OO第四单元总结及课程总结 一.前言 紧张刺激的OO“昆仑课程”接近尾声,经过一个学期的学习,我的收获和感触颇多,借此博客作业的机会,对自己OO这门课程做一个总结.本博客主要有以下五个方面,一是第UM ...

  2. OO第四单元与全课程总结

    OO第四单元与全课程总结 一.作业代码架构设计 1.第一次作业 作业类图如下: 具体架构设计: 第一次作业的全部查询工作都是和类图有关,需要解决的主要问题就是如何解析原有UML类图数据的结构,并形成自 ...

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

    [OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...

  4. OO第四单元——基于UML的UML解析器总结&OO课程总结

    OO第四单元--基于UML的UML解析器总结&OO课程总结 前言:一学期愉快(痛苦)的OO课程学习结束了,OO几个单元作业都各有特色,实验也各有特色,仔细回味起来,不再是单纯的敲代码(但自己还 ...

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

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

  6. 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾

    「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 目录 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 Part 0 第四单元作业架构设计 架构设计概要 AppRun ...

  7. OO第四单元(UML)单元总结

    OO第四单元(UML)单元总结 这是OO课程的第四个单元,也是最后一个单元.这个单元只有两次作业,相比前三个单元少一次作业.而且从内容上讲这个单元的作业目的以了解UML为主,所以相对前三个单元比较简单 ...

  8. OO第四单元博客作业

    OO第四单元博客作业 BUAA_1706_HugeGun 目录 第四单元作业架构设计 四个单元架构设计及OO方法理解 四个单元测试理解与实践演进 课程收获 一点建议 第四单元作业架构设计 ### 第十 ...

  9. OO第四单元总结及学期总结

    目录 OO第四单元总结及学期总结 第四单元三次作业架构设计 第十三次作业 第十四次作业 第十五次作业 四个单元中架构设计及OO方法理解的演进 第一单元 第二单元 第三单元 第四单元 四个单元中测试理解 ...

随机推荐

  1. 使用gitlab构建基于docker的持续集成(三)

    使用gitlab构建基于docker的持续集成(三) gitlab docker aspnetcore 持续集成 构建发布思路: aspnetcore 下的dockerfile编写 发布docker- ...

  2. 后端程序员之路 37、Akka、Actor、Scala初窥

    Akkahttp://akka.io/ Akka 是一个用 Scala 编写的库,用于简化编写容错的.高可伸缩性的 Java 和 Scala 的 Actor 模型应用,是一个广泛运用的分布式应用框架. ...

  3. LeetCode674. 最长连续递增序列

    原题链接 1 class Solution: 2 def findLengthOfLCIS(self, nums: List[int]) -> int: 3 ans = begin = 0 4 ...

  4. C# 通过ServiceStack 操作Redis——String类型的使用及示例

    1.引用Nuget包 ServiceStack.Redis 我这里就用别人已经封装好的Reids操作类,来演示,并附上一些说明 RedisConfigInfo--redis配置文件信息 /// < ...

  5. Codeforces Round #541 F. Asya And Kittens

    题面: 传送门 题目描述: Asya把N只(从1-N编号)放到笼子里面,笼子是由一行N个隔间组成.两个相邻的隔间有一个隔板. Asya每天观察到有一对想一起玩,然后就会把相邻的隔间中的隔板取出来,使两 ...

  6. 如何在 ASP.Net Core 中实现 健康检查

    健康检查 常用于判断一个应用程序能否对 request 请求进行响应,ASP.Net Core 2.2 中引入了 健康检查 中间件用于报告应用程序的健康状态. ASP.Net Core 中的 健康检查 ...

  7. “/”应用程序中的服务器错误。||分析器错误消息: 未能加载类型“WebApplication1._Default”

    环境VS2008 无法运行WEB项目,Winfrom程序OK. 新创建的WEB项目直接运行报下图错误. 尝试多种方法: 1,重新生成项目,运行.(失败) 2,重装VS2008(默认.完全.自定义)安装 ...

  8. ch1_6_6求解门禁系统问题

    import java.util.HashMap; import java.util.Scanner; public class ch1_6_6求解门禁系统问题 { public static voi ...

  9. Git命令太多记不住?有了这个神器,从此告别输入命令行

    一 .SourceTree简介 SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端,拥有可视化界面,容易上手操作.同时它也是Mercurial和Subve ...

  10. 【Linux学习笔记0】-虚拟机运行CentOS(VMware12+CentOS)

    目录 一,资源 二,VMware12安装 记录自己学习linux的过程.这将会是一个系列,本文是该系列的第一部分,主要记录虚拟机(VMware12)及对应操作系统(CentOS)的安装过程. 虚拟机( ...