OO第一阶段作业总结
对于OO这门课,学长学姐偶尔提起,大家都略有耳闻,但是并没有将其和计组相提并论。因此,在刚开始接触的时候,并不认为其会比计组难到哪里去,然而事实证明,还是不要想当然去判断,以及不提前学好JAVA对于OO这门课会降低很多的生存率。
代码度量分析程序结构:
第一次作业
Metric度量分析:

在度量分析中,可以看到第一行是红色标注的,这反映的是一个模块的复杂程度,而第三行反应的是各类的嵌套深度。从中不难看出,我所撰写的某个方法过于复杂,这是由于我将正则表达式的匹配加之对其是否正确的判断以及最后的输出功能都放在了这个方法中,因此出现了这个方法过于复杂的情况。从根本上来说这是由于第一次接触java语言,对于面向对象的思想还是不够理解,本质上还是撰写了一个偏面向过程的程序。因此,应当将每个功能细化和分开,这是十分重要的。
类图:

发现的bug、设计思路:
第一次作业我自认为是测试得比较详尽的,然而却忽略了指导书上提到的一个点,导致了三个测试点错误,那就是当系数为0时,不打印这对数。我当时并没有仔细去看指导书,对于这点要求是真的没有看清楚,这让我十分懊恼,也让我懂得了指导书是很重要的一个东西(还有readme)。惭愧的是,这次作业中还有一个bug没有被公测和互测测出,从而导致了第二次作业的失误。
在设计上,我将正确匹配到的数字存入一个大数组,然后用dividenum()方法将其分割为系数和指数,然后进行同指数合并并计算排序,思路简单,但是实现复杂。并且正则表达式的匹配功能并不完善,判断过于复杂和繁琐,以及对于数据的边界情况并没有进行很好的测试。
第二次作业
Metric度量分析:

在第二次作业中,同样出现了方法过于复杂的情况,也就是第一行所标注的get_list()方法,我将读取字符串,处理字符串,存储正确的字符串这三个功能,都放进了这一个方法中实现,因此过于复杂是理所应当的,同时还出现了第二行所标注的问题:参数过多。由于要实现这巨大的功能,因此大量的参数和变量是必不可少的,这就显得程序的这个方法模块很膨胀,可读性非常低,并且导致我在后来debug时十分困难,连自己都记不清楚这些参数变量代表的含义,还得花时间去回忆和重新理解,得不偿失。但是这次的作业更“OO”了一点,也就是更加的面向对象化了,对这种思想有了更进一步的理解。
类图

发现的bug、设计思路:
在我认为第二次作业已经测试得足够完善时,公测结果又一次活生生的打了我的脸,我的程序在公测中crash了,原因是数组越界。这次的作业要求实现一个傻瓜(FAFS)调度电梯,并且要求不符合要求的无效请求需立刻给出反应。因此我的程序设计成,当输入无效时,指针减一。但如果第一条指令就错误的话,数组的指针就变成了-1,也就是越界了。这也就导致了在公测样例中,只要涉及到第一条指令无效,那么我就错了。emmmmmm,越想越气,这就好比你吃鸡捡了个空投,你捡了一把AWM但是子弹忘带走了。
这次作业的难点在于判断同质,我的方法是从后往前判断,并且将指令分类为:UP,DOWN,NULL(ER),只有后一条指令和前一条指令类型相同,并且开始时间在前一条还未执行完成时,指令才会判断为同质。这个方法存在着一些小bug,当时我并没有de出来,但是在第三次作业中发现了,追悔莫及。
第三次作业:
Metric度量分析

第三次作业同样出现了方法过于复杂并且参数变量过多的情况,一部分原因是因为第三次作业是在第二次作业基础上的继承和重写,并且要求实现捎带功能。而我在ele_start()这个方法中,一是传进了过多的参数,二是在函数中既要判断同质,又要判断捎带,同时还得打印正确输出。可以说这个函数几乎完成了我整个程序的主要功能。这样的好处是,嗯,方便管理整个程序的运行情况,坏处依然是可读性极差,导致了我一点都不想debug。实质上,这个几乎万能的方法是不符合OO的基本思想的,对此我也十分惭愧和懊悔。
类图

发现的bug、设计思想:
第三次作业是我测试得最为粗糙的一次,由于时间没有安排好,导致几乎没有时间去debug和发现问题,因此捎带存在的问题很大,尤其是同层实现两个请求,并且是捎带请求时,不能很好的做出判断并且实行,同时连续两个捎带时程序也会出错,这也是由于我考虑不够周到造成的。但是在此基础上对第二次作业的改正是十分有效的,并没有重复出现第二次作业的bug,对正则的使用也更加得心应手。
捎带是这次作业最主要的功能实现,我的方法是使用一个变量loca,记录主请求的位置,然后判断接下来的指令存不存在捎带的情况,如果存在,就选择一条最优,也就是离当前楼层最近的请求执行,当执行完所有捎带请求后,回到loca的位置,执行主请求。可惜的是,我花了许多时间也没有de完我的bug。
心得体会:
1. OO这门课必须花费大量的时间和精力去学习和体会,不仅是面向对象的思想,还有设计思路的逐步完善和成熟,在动键盘前,应该至少有一个完整的设计思路,这样才会节省更多的时间,并且必须认真去理解指导书想表达的含义,readme也必须认真的去完成和说明。
2. 对于这门课,良好的心态是必要的。在身边的就有不少例子,互测的双方因为对方比知道自己的姓名而肆无忌惮。也有人跟我吐槽,一门课把整个系的阴暗面都展现出来了。我并没有遇到对我而言十分过分的人存在,我们并不能以一概全,只能以一个良好积极的心态去面对每次挑战。在抱怨别人给你找出bug之前,或者在给你readme挑错之前,为何不想想自己的问题出在哪里?为何不考虑自己的程序为什么没有完善?所以保持一个良好的心态吧。
OO第一阶段作业总结的更多相关文章
- OO第一阶段总结
OO第一阶段总结 一.各次作业程序结构 第一次作业 第一次作业由于初用JAVA,还没有深刻理解面向对象的编程方法,故在编程过程中只用了一个类,一个方法,即完成了相应的程序功能.这必然不是本课程的目的, ...
- 【作业1.0】OO第一单元作业总结
OO第一单元作业已全部完成,为了使这一单元的作业能够收获更多一点,我回忆起我曾经在计算机组成课设中,经常我们会写一些实验报告,经常以此对实验内容反思总结.在我们开始下一单元的作业之前,我在此对OO第一 ...
- 面向对象(OO)第一阶段学习总结
前言:对OO本阶段作业情况说明 本阶段一共完成三次作业,第一次主要是在主方法里面进行编程,也就是和之前C差不多,而随着学习的深入,慢慢了解到面向对象与面向过程的区别.作业的难度也在慢慢增大,后两次都用 ...
- 【OO学习】OO第一单元作业总结
OO第一单元作业总结 在第一单元作业中,我们只做了一件事情:求导,对多项式求导,对带三角函数的表达式求导,对有括号嵌套的表达式求导.作业难度依次递增,让我们熟悉面向对象编程方法,开始从面向过程向面向对 ...
- OO第一单元作业总结——表达式求导
OO第一单元作业总结 第一次作业 基于度量分析代码结构 基本算法 第一次作业是简单多项式导函数求解,不需要对输入数据的合法性进行判定, 基本思想是用 (coeff, expo)表示二元组 coeff* ...
- java 初学者 第一阶段作业编程总结及心得体会
0.前言 第一阶段java作业分为3次. 第一次作业是简单得一些语法和一些简单得逻辑思维,主要内容有求三角形是什么三角形的,还有就是求坐标点所在范围的,也涉及到了数字和字母的转换,总之相相当于是给ja ...
- Java第一阶段作业总结
目录 0.前言 1.作业过程总结 2.OO设计心得 3.测试的理解与实践 4.课程收获 5.对课程的建议 前言 本次博客针对第一阶段的三次作业发表总结,作业要求主要是初学者对于Java的基本语法.用法 ...
- 北航OO第一单元作业总结(1.1~1.3)
经过了三次作业之后,OO第一单元告一段落,作为一个蒟蒻,我初步了解了面向对象的编程思想,并将所学内容用于实践. 一.第一次作业 1.架构分析 本次作业需要完成的任务为简单多项式导函数的求解.表达式仅支 ...
- OO第一单元作业总结
oo第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...
随机推荐
- java学习笔记-JavaWeb篇四
86 文件上传基础 87 使用 fileupload 组件 88 文件上传案例_需求 89 文件上传案例_JS代码 90 文件上传案例_约束的可配置性 91 文件上传案例_总体步骤分析 92 文件上传 ...
- FFMpeg笔记(五) 录制小视频时几个问题解决
1. YUV数据在使用avfilter scale时在特定的分辨率下UV分量不对 由于是小视频,那么分辨率不需要太高,但是有的视频源是1080p,甚至有的是4K的,所以对视频源进行scale非常有必要 ...
- Lambda 表达式语法
本主题介绍 lambda 表达式的语法. 它演示提供 lambda 表达式的结构元素的示例,这些元素与示例. Lambda 表达式语法 下面用于定义显示语法,ISO C++11 从标准,lambda ...
- muduo 网络库学习之路(一)
前提介绍: 本人是一名大三学生,主要使用C++开发,兴趣是高性能的服务器方面. 网络开发离不开网络库,所以今天开始学一个新的网络库,陈老师的muduo库 我参考的书籍就是陈老师自己关于muduo而编著 ...
- 1.Variables-变量(Dart中文文档)
初次翻译,部分内容并非按字面翻译,是按本人理解进行了内容重组.如有错误望指正. 如下是变量定义和赋值的示例 var name = 'Bob'; 变量存储的是一个引用地址.如上的变量name指向了一个值 ...
- JQuery第三天——CSS操作与JQuery事件
JQuery的CSS_DOM与样式操作 样式: 获取 class 和设置 class : class 是元素的一个属性, 所以获取 class 和设置 class 都可以使用 attr() 方法来完成 ...
- struts2第四天——拦截器和标签库
一.拦截器(interceptor)概述 struts2是个框架,里面封装了很多功能,封装的很多功能都是在拦截器里面. (属性封装.模型驱动等都是封装在拦截器里面) struts2里面封装了很多功能, ...
- JavaScript总结(六)
使用DOM操纵样式表 ✍ 操纵元素的Style样式属性(所有的均对于CSS的内联式) 对于每个CSS样式,Style对象都包含了一个相对应的属性,只需要用到style属性即可: Div.style.c ...
- PHP数据库的 增 删 查
一.匹配数据库登录 步骤: 1.做一个普通的登录界面,注意提交方式为post. <!--登录界面--> <form action="chuli.php" meth ...
- cogs468 [NOI2010]超级钢琴
http://cogs.pro:8080/cogs/problem/problem.php?pid=468 emmmmmm 今天考试爆炸顺便切了这题 这题我肯定不会啦然后看一sol.. 固定一个右端点 ...