BUAA-OO-最后单元总结
BUAA-OO-最后单元总结
经过一学期的魔鬼“折磨”后,OO课程终于要结束了!总体来说我对于作业的总体完成情况还是比较满意的,希望最后可以取得一个理想成绩。
一、第四单元架构设计
第一次作业是类图的解析,我的大致思路是将类图中的每个类都建一个对象,每个对象中存储本类的所有东西,包括属性,方法,关联,父类和接口等等。然后在UmlInteraction中存储类的id和name对应该对象的hashmap,通过id和name均可找到相应的类对象。





第二次作业在第一次作业的基础上新增了顺序图和状态图,还有3个规则的检查。顺序图和状态图的处理方式和类图一致,新建类,构造类对象,再把相关元素添加到该对象中即可。至于3条规则的检查,第1条直接遍历即可;2、3条用类似bfs的方法遍历所有的类即可。








二、四次单元架构设计及OO方法的演进
第一单元
由于首次接触java及面向对象思想,可以说我第一单元的架构十分差劲,完全是用面向过程的思想去解决问题。刚开始时对于java的诸多包和语法都不是十分熟悉,在写本 单元作业时举步维艰。每次只建一两个类,把每个类当一个函数去调用,导致代码的耦合度极高,也并没有什么可扩展性可言,所以我本单元的作业全部都是重构的,完全没有 沿用上次作业的架构。除此之外还有令人头痛的WF问题,这些对于我这样的新手来说不是十分友好......所幸的是仅仅在第二次作业因为一点失误错了2个点,对自己的屎山代码 没有出现大bug而欣慰,现在想想可能会分成表达式类,因子类等去解决问题。
第二单元
我认为第二单元最难理解和处理的地方就是多线程,因为它存在不确定性,经常会出现每次运行结果不一致,或者是评测机与本地运行不一致的情况。这次的架构相比第一 次有了些改观,分出了电梯类,控制器类等等。第三次作业也保留了第二次作业的部分代码,算是第一次对面向对象有了一点理解。
第三单元
第三单元我认为比较有趣,用JML描述规格,根据描述自己去实现方法,就像是分配给你一个大项目中的一部分去完成。架构方面虽然类比较少,但也基本实现了层次的分 离,三次作业都是在前一次的基础上完成,没有进行过重构。
第四单元
第四单元是关于UML相关知识,这次的作业最难的是UML相关知识的理解,涉及到的知识面比较广。在架构方面也是基本实现了分离,将不同的图分成了不同的类,第二次 作业也没有进行重构。整体来说这四单元作业架构逐渐清晰,也逐渐对面向对象思想有了一定理解。
三、测试理解与实践演进
第一单元
第一单元由于是刚刚接触java,仅仅只会简单的手动输入测试样例,测试样例也基本都是用的指导书上的已有样例。不过对于一些边界数据和压力数据有进行测试,包括\t \r,50个x+x这样的数据。
第二单元
第二单元最主要的就是一个样例测试多次,看看会不会出现不一致的结果。第二单元的样例输入比较复杂,何时输入ctrlD是一个比较难解决的问题。总之这次的测试就是一 组数据疯狂测,需要测很多次才能确保正确。
第三单元
第三单元由于数据规模比较大,开始使用一些文件输入输出,命令行等方法进行测试。也会将其其他同学的输出结果拿来进行对比。
第四单元
第四单元基本完全自动化测试,甚至还写了一些脚本去运行多次程序,然后将输出结果与其他同学进行对比。
四、课程收获
本学期的OO课程带给我的收获主要有两方面,一是在知识方面,我学会了java语法,可以用java语言编写大规模的程序;同时我也学习了一些OO思想,在解决问题时可以用面向对象思想考虑问题。此外,还学到了一些零碎小知识,比如github的使用、JML、UML、jprofiler、Junit等。这些都对我的日后写程序有着巨大帮助。二是这门课带给我的一些抗压能力,几乎每周完成一次代码量巨大的大作业,对我的编程能力和抗压能力都是巨大的提升,以后再遇到大作业时,不会感到无从下手,毕竟有过这样的经历。同时每次完成作业也是对我的信心有着巨大提高。
五、课程建议
1、希望可以给出1天的缓冲时间进行课上实验,上午讲完的知识下午直接实验真的十分困难。希望在下学期的OO课程中可以有所改善。
2、UML单元作业的指导书感觉还有些不清楚,在讨论区里也经常会有人提问某种情况对不对,正确结果应该是什么之类的问题,希望可以在课上讲得更清楚一些,指导书也可以更清楚一些。
3、第一单元的作业难度有些大,尤其是对于更上手的像我这样的小白来说,连java语法都搞不清楚,写大规模的作业更是难上加难。希望下学期开始的OO作业可以更加友好。
最后,我的本学期的OO课程就要结束了。感谢助教和老师一学期对我们的帮助和指导,也希望我一学期的辛苦付出可以再成绩上有所收获。
BUAA-OO-最后单元总结的更多相关文章
- 电梯模拟系统——BUAA OO第二单元作业总结
需求分析 官方需求 本次作业需要模拟一个多线程实时多电梯系统,从标准输入中输入请求信息,程序进行接收和处理,模拟电梯运行,将必要的运行信息通过输出接口进行输出. 本次作业电梯系统具有的功能为:上下行, ...
- 多项式与三角函数求导——BUAA OO 第一单元作业总结
第一次作业 需求简要说明 针对符合规定的多项式表达式输出其符合格式规定的导函数多项式,格式错误输出WRONG FORMAT! 带符号整数 支持前导0的带符号整数,符号可省略,如: +02.-16> ...
- 「BUAA OO Unit 2 HW8」第二单元总结
「BUAA OO Unit 2 HW8」第二单元总结 目录 「BUAA OO Unit 2 HW8」第二单元总结 Part 0 前言 Part 1 第五次作业 1.1 作业要求 1.2 架构设计 1. ...
- 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾
「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 目录 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 Part 0 第四单元作业架构设计 架构设计概要 AppRun ...
- OO第一单元作业总结
oo第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...
- OO第一单元总结
OO第一单元作业总结 一.前言 开学四周,不知不觉已经做了三次OO作业.事实上,每一次作业对我来说都是很大的挑战,需要花费大量的时间和精力来学习. 虽然学得很艰苦,但最后还是连滚带爬地完成了.(好惨一 ...
- oo第二单元作业总结
oo第二单元博客总结 在第一单元求导结束后,迎来了第二单元的多线程电梯的问题,在本单元前两次作业中个人主要应用两个线程,采用“生产者-消费者”模式和共享数据变量的方式解决问题.在第三次作业中加入多个电 ...
- OO第二单元优化博客
OO第二单元优化博客 第五次作业没有性能分,但是,我在这一单元的宗旨就是写一个日常生活中 最常见的那种电梯,所以第五次我没有写傻瓜电梯,而是直接写了个\(look\),和第六次基本相同. 总计一下lo ...
- OO第一单元优化博客
OO第一单元优化博客 第一次作业: 合并同类项+提正系数项+优化系数指数0/1=满分 第二次作业: 初始想法 一开始是想以\(sin(x)\)和\(cos(x)\)的指数作为坐标,在图上画出来就可 ...
- 【OO学习】OO第二单元作业总结
OO第二单元作业总结 在第二单元作业中,我们通过多线程的手段实现了电梯调度,前两次作业是单电梯调度,第三次作业是多电梯调度.这个单元中的性能分要求是完成所有请求的时间最短,因此在简单实现电梯调度的基础 ...
随机推荐
- Selenium系列(十九) - Web UI 自动化基础实战(6)
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
- Identity角色管理三(创建角色)
首先创建视图模型 using System.ComponentModel; using System.ComponentModel.DataAnnotations; namespace Shop.Vi ...
- 洛谷P1603——斯诺登的密码(字符串处理)
https://www.luogu.org/problem/show?pid=1603#sub 题目描述 2013年X月X日,俄罗斯办理了斯诺登的护照,于是他混迹于一架开往委内瑞拉的飞机.但是,这件事 ...
- 数据结构逆向分析-Map
数据结构逆向分析-Map map是一个典型的二叉树结构,准确的来说是一个平衡二叉树或者红黑树,特点是数据存储是有序的存储. 参考侯杰老师的stl源码剖析,map里面采用的是RB-TREE也就是红黑树 ...
- js 签字插件
1.jq-signature http://bencentra.github.io/jq-signature/ 支持的jquery版本低 2.HTML5 canvas http://www ...
- TP5框架下实现数据库的备份功能-tp5er/tp5-databackup
1.安装扩展 方法一: composer require tp5er/tp5-databackup dev-master 方法二 composer.json: "require": ...
- TP5关联模型出现疑问,待解决
一对一: hasOne('关联模型名','外键名','主键名',['模型别名定义'],'join类型'); 说明:其他模型一对一都可以按照手册说明写,但上面代码只能这么写才能执行正确答案, 如果是 / ...
- ubuntu中如何切换普通用户、root用户
1.打开Ubuntu,输入命令:su root,回车提示输入密码,输入密码后提示:认证失败. 2.给root用户设置密码: 命令:sudo passwd root 输入密码,并确认密码. 3.重新输入 ...
- python编码问题:UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 68: illegal multibyte sequence
import yaml def test_yaml(): f = open('C:\hogwarts\Scripts\hogwarts-api\demo\yaml_data.yml') print(y ...
- linux,apache,php,mysql常用的查看版本信息的方法
1. 查看linux的内核版本,系统信息,常用的有三种办法: uname -a: more /etc/issue; cat /proc/version; 2. 查看apache的版本信息 ...