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第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...
随机推荐
- 【vue知识点】2)vue登录认证
要点: 客户端登录要唯一 ——> token除了客户端要验证外,服务器端也要校验 (处理:token应该包含用户的基本信息,这样服务端解密token的时候就知道是哪个账户) (如果只是使用to ...
- 蓝牙开发<coreBluetooth/CoreBluetooth.h>
/* 建立中心设备 扫描外设(Discover Peripheral) 连接外设(Connect Peripheral) 扫描外设中的服务和特征(Discover Services And Chara ...
- 逻辑卷管理-LVM(Logical Volume Manager)
一. 概念与由来 LVM:逻辑卷管理(Logical Volume Manager) 普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某文件时,这个文件因为受上层文件 ...
- 为什么继续选择DELPHI?
已经钻DELPHI很深了,当然现在DELPHI是过了最辉煌的时代.但为什么要继续下去,而不转向其它的?这是不是死脑筋? 我看了一下C#的LINQ的产生,然后又被实体框架所代替.思考了一下: 1)LIN ...
- bzoj1043 [HAOI2008]下落的圆盘
Description 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周长.看下面这副图, 所有的红色线条的总长度即为所求. Input 第一行为1个整数n,N<=1000 ...
- [ATL/WTL]_[初级]_[选择目录对话框]
场景 1.起因是创建标准选择目录对话框时使用了 SHCreateItemFromParsingName 函数, 这个函数支持vista以上系统. 之后再winxp上运行就报错: 无法定位程序输入点 S ...
- 10 ORM 多表操作 查询
1.子查询:基于对象的跨表查询 def query(request): """ 跨表查询: 1.基于对象查询 2.基于双下划线查询 3.聚合.分组查询 4. F Q 查询 ...
- 2_C语言中的数据类型 (七)printf与scanf
1 字符串格式化输出和输入 1.1 字符串在计算机内部的存储方式 字符串是内存中一段连续的char空间,以’\0’结尾 “”是C语言表达字符串的方式 1.2 ...
- python之shutil模块详解
shutil模块 -- --High-level file operations 高级的文件操作模块. os模块提供了对目录或者文件的新建/删除/查看文件属性,还提供了对文件以及目录的路径操作.比如 ...
- Tomcat 下载与安装
下载地址:http://tomcat.apache.org 根据自己电脑的系统下载Core节点下不同的版本. Tomcat文件目录结构 bin:存放启动与关闭Tomcat的脚本文件 conf:存放 ...