OO第四单元——终章
一.架构设计
这一单元的作业主要是围绕UML来对我们的面向对象思维进行训练,刚开始接触的时候或许因为些许陌生而觉得有一定难度,但随着一次一次的代码阅读再加上思考,逐渐地也变得得心应手了起来。
1.第一次作业
本次作业最终需要实现一个UML类图分析器,可以通过输入各种指令来进行类图有关信息的查询。
在刚下载完官方的源码时,面对规模庞大的代码,我一时也不知道从哪开始读起,便硬着头皮直接开始按循序阅读,结果还没读完几个java文件,我就感觉读不下去了,一是因为有很多语法我并不是特别熟悉和了解,还有就是觉得读完似乎对这次作业的需要完成的代码没有什么帮助,便直接打开需要实现的接口代码,结果发现有很多类都需要我去使用。后来在和同学的讨论下,,原来只需要把element文件夹中的代码都通读一遍就基本上没有什么问题了。
在参考了讨论区后,我便做出了以下的层次设计,首先增加了一个接口TopClass,并创建了两个类MyUmlClass和MyUmlInterface分别实现这两个接口,以便后续的对这两个类的调用,并考虑到方法可能较为复杂,便又创建了一个MyUmlOperation类,用来管理参数。在每一个对应的MyClass中,我都存储了官方包中自带的类,以便于获取ID和name。

2.第二次作业
在第一次作业的基础上,第二次作业要求我们扩展类图解析器,使得可以支持对UML状态图和顺序图的分析,可以通过输入相应的指令来进行相关查询。
其实只要按照第一次作业的思路来进行建构,第二次作业并不是很难,就是增加几个类,恰当地管理存储某些数据。不过为了代码风格和进一步的划分各个类的职责,我又新建了一个ElementAnalyse类,用来将传入的所有的element分辨管理存储好,然后主函数直接调用get方法即可获得处理好的类图,状态图和顺序图的数据,并进行后面的操作。在第二次作业中,因为需要用到状态机,所以我专门创建了一个MyStateMachine类,用来管理UmlStateMachilne,这个类中存储的即是那些需要管理的数据。对于状态图的管理,我同样创建了一个MyInteraction类,其中存储了生命线和各个消息,方便进行统一管理。

3.第三次作业
第三次作业与前两次不一样的是,在上次作业基础上,扩展解析器,使得能够支持对UML顺序图和UML状态图的解析,并对模型进行有效性检查。
所以第三次作业如果是在前两次作业已经有了好的框架之后,便只需要实现一些函数即可,我便是在交互的主函数中实现了那8个接口,并在我自己的管理三个图的类中增加了一些判断的方法,总体的架构和前两次相比较基本没有什么变化。
4.这三次作业的bug情况与反思
对于第一次作业,我刚开始抱着应该很简单的心态,试图在周六最后一天可以完成,结果万万没想到的是,实现起来还是有着一定的复杂度的,所以没有及时的完成,成了我的第一个未提交的作业,但后来在与同学的讨论中,逐渐地完善了自己的架构,这次作业也就算是完成了。而对于第二次作业,因为有个地方没有加上判断是否已经访问过就直接进行访问,导致出现了死循环,对应的强测也就出现了ctle,但在发现问题后及时地改正了bug。至于最后一次作业,或许是因为没有太注意题目的意思和各种特殊情况的讨论,导致在判断rool0的时候忽视了对名字为null的讨论,wa了好几个点,最后在修复的时候加了特判便通过了。
二.四个单元的架构总结
刚开始接触OO的时候,并不太注重整体架构的设计,往往是想好了实现的算法,便直接像数据结构那样,开始了方法的编写,偶尔新建的几个类就像struct一样,一点也没有体现出oo这门课的精髓和思想,在第一次作业中,输入输出中间处理的所有内容几乎都挤在了一个类里,到后来的时候分出来了输入处理和输出处理以及化简的过程,再到后来对每个类都进行精心的设计,或许这就是架构设计的慢慢进步的过程.到第二单元多线程,这时候架构的作用更体现了出来,如果不像老师上课讲的那样设计不同层次的类以及处理类的时候,整个工程可能会变得不堪重负甚至漏洞百出,当然为了提升性能我们不应该只看重算法,更应该仔细想想如何让在结构的设计上让代码的水平更胜一筹.而像第三单元JML,在第一次作业相信大部分同学都犯下了翻译需求的错误,没有重视到整体架构的设计,导致出现了千奇百怪的错误,也就是那次作业,让很多同学的爆0,没有进入互测,所以在接下来的后续两次作业中,我们都开始将重点放在整体的架构设计上,让代码的质量进一步提升.最后一个单元则更是如此,算法的方面其实完全可以被层次设计和架构设计所替代,只要架构设计的够好,算法再差整个工程也不会差到哪里去,这一单元的作业就是完全由我们自己来设计,指导书上并没有给出任何的提升,当然,这次训练也让我们的OO思想得到了极大的升华.
三.四个单元的测试概况
当然,我们学习OO课并不仅仅是学习编程思想,工程思想和那些总体架构的思想,我们的测试水平也需要在OO课的学习中不断地进步.在第一单元的测试中,我完全采用了自己编写java程序创建测试数据随机测试的数据模式,一边计算机在生成数据,一边shell文件在自动测试对比,大量的随机数据总能将bug测试出来.第二单元也是如此,只不过使用pathon生成测试数据要更简单一点,仍然是通过自己编写的自动评测机自己在完成大规模的数据测试.到第三单元时,我开始逐渐地使用起来JUNIT来作为辅助测试,单元测试的话更有说服力,测试的力度更大,范围更广,但是数据仍然需要自己去构造,JUNIT的最大的优点就是所有的代码都能被测试到,不留死角,但需要提前设计好测试框架与环境,这也需要一定的经验和练习.对于第四次作业,同样是采用JUNIT单元测试,再通过构造各种极端的样例来达到测试的目的.
四.课程收获
OO这门课是大二下学期和操作系统类似的大课重课,不仅难度大,需要我们花费的时间也很多,当然,有付出总有回报,在完成这么多作业的设计与编写,我的OO思想和编程思想也有了质的提升,再也不是仅仅拘泥于算法的设计,而是更注重层次化,抽象,与架构的设计.往最差的情况去想,JAVA这门语言也算是被我们熟练的掌握了.这门课带来的收获绝对不止停留在java这个语言上,对信息领域的任何地方都有着不小的帮助,因为不管什么项目都需要设计,设计都会用到这些方方面面的思想,相信在以后的工作和学习中,这门课所教会我的思想将一直陪伴在左右.
五.具体改进建议
(1)第一单元的作业难度对于刚开始接触OO的同学们来说难度可能有一点大,可以在寒假的预习作业中更多地去设计一些相仿的地方,减小同学们学期开始的压力.
(2)研讨课讨论的时候对于有些问题可能是一知半解或者不知道答案,直接找同学回答可能不是什么特别好的主意.
(3)第四单元的第一次作业的指导书上可以增加以下对阅读官方代码的建议与提示,要不然太多的代码对于某些同学来说可能是一个极大的挑战.
六.线上学习感受
感觉OO这门课线上线下的区别不是很大,除了见不着英姿飒爽的老师们和可爱的学长学姐们(似乎没有学姐),其他的没有什么太大的变化,就是在写作业的时候不太方便与同学互相debug与交流,其他的问题都不大.还有就是上理论课的时候并不能直接和老师语言交流,少了一点氛围,但录播课的好处就是可以在不懂的时候看回放,加深理解.
OO第四单元——终章的更多相关文章
- OO第四单元——基于UML的UML解析器总结&OO课程总结
OO第四单元--基于UML的UML解析器总结&OO课程总结 前言:一学期愉快(痛苦)的OO课程学习结束了,OO几个单元作业都各有特色,实验也各有特色,仔细回味起来,不再是单纯的敲代码(但自己还 ...
- 2020 OO 第四单元总结 UML
title: 2020 OO 第四单元总结 date: 2020-06-14 19:10:06 tags: OO categories: 学习 1. 本单元三次作业的架构设计 本单元的代码编写与第三单 ...
- 【OO学习】OO第四单元作业总结及OO课程总结
[OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...
- OO第四单元(UML)单元总结
OO第四单元(UML)单元总结 这是OO课程的第四个单元,也是最后一个单元.这个单元只有两次作业,相比前三个单元少一次作业.而且从内容上讲这个单元的作业目的以了解UML为主,所以相对前三个单元比较简单 ...
- OO第四单元总结及课程总结
OO第四单元总结及课程总结 一.前言 紧张刺激的OO“昆仑课程”接近尾声,经过一个学期的学习,我的收获和感触颇多,借此博客作业的机会,对自己OO这门课程做一个总结.本博客主要有以下五个方面,一是第UM ...
- OO第四单元博客作业
OO第四单元博客作业 BUAA_1706_HugeGun 目录 第四单元作业架构设计 四个单元架构设计及OO方法理解 四个单元测试理解与实践演进 课程收获 一点建议 第四单元作业架构设计 ### 第十 ...
- OO第四单元总结及学期总结
目录 OO第四单元总结及学期总结 第四单元三次作业架构设计 第十三次作业 第十四次作业 第十五次作业 四个单元中架构设计及OO方法理解的演进 第一单元 第二单元 第三单元 第四单元 四个单元中测试理解 ...
- OO第四单元总结暨期末总结
OO第四单元总结暨期末总结 目录 OO第四单元总结暨期末总结 第四单元三次作业架构与迭代 整体感受 HW1 HW2 HW3 四个单元架构设计与方法演进 Unit1 Unit2 Unit3 Unit4 ...
- oo第四单元作业总结暨课程总结
oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...
随机推荐
- 「Java面试题/知识点精华集」20000+字的Java基础知识篇(2020最新版) !
本文已经收录进我的 79K Star 的 Java 开源项目 JavaGuide:https://github.com/Snailclimb/JavaGuide (「Java学习+面试指南」一份涵盖大 ...
- 大O符号初学者指南
原文地址:https://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/ 计算机科学中,大O表示法被用来描述一个算法的性能或复杂度. ...
- 【GAN】GAN设计与训练集锦
以下内容纯属经验之谈,无公式推断!部分内容源自其他博客或课程,并已标注来源. 问题篇[1] 1.模式崩溃 在某个模式(mode)下出现大量重复样本,如左图中,生成的样本分布靠得很近,较聚集,可视化如右 ...
- 国际化之fmt标签
1. 什么是国际化和本地化: I. 本地化:一个软件在某个国家或地区使用时,采用该国家或地区的语言,数字,货币,日期等习惯.II. 国际化:软件开发时,让它能支持多个国家和地区的本地化应用.使得应用软 ...
- 【Gradle教程】Gradle 入门
本文为我在学习群内分享时在B站直播分享时的文档,直播间地址 http://live.bilibili.com/22263819 PS:问一下,Linux下有什么好用的会议软件么? 知道的朋友烦请评论告 ...
- hdl - HLS vs. Generator
https://mp.weixin.qq.com/s/n_4RKlOddr_p2S_wODvFbw 介绍硬件建模的各个层次,以及基于RTL进一步提高层次的方法. 1. 物理版图 直接画 ...
- 分享两个常用的rem布局方式
关于rem 这种技术需要一个参考点,一般都是以<body>的“font-size”为基准. 比如我们设置body,html的字体大小为10px:那么1rem就是10px, 这样一来,我们设 ...
- Java实现 蓝桥杯 算法提高 学霸的迷宫
算法提高 学霸的迷宫 时间限制:1.0s 内存限制:256.0MB 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二 ...
- Java实现 LeetCode 232 用栈实现队列
232. 用栈实现队列 使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部. pop() – 从队列首部移除元素. peek() – 返回队列首部的元素. empty() – 返 ...
- Java实现 LeetCode 75 颜色分类
75. 颜色分类 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红 ...