OO前三次作业总结

很庆幸我还活着……

千言万语尽在一言中……

好了话不多说直接进入正题,在此对前三次OO作业做一个简单的总结:

第一次作业:第一次接触面向对象…作为一个没有java编程基础的小白来说,面对这个本来比较简单的作业还是比较头疼的,首先不懂java语法,其次不理解面向对象的含义;一脸懵逼……

好在经过两天的煎熬之后也算是勉强入门了,磕磕碰碰写完了第一次作业,由于初次第一次对于面向对象这个概念没有多少理解并且作业难度也不大,所以整个程序只有一个类,代码量110行;主要难点为输入是否合法的判断以及多项式算法的选择,多项式合法性判断采用和了正则表达式,但是一开始使用的正则表达式进行一次判断故没有通过压力测试,第二次将正则表达式判断拆分为两个部分,成功解决了该问题,算法为先将所有项进行合并,然后排序,最后将指数重复项相加,最后顺序输出;

公测:由于阅读指导书不够仔细,忽略了一个多项式指数不能重复的要求,所以公测中指数重复分支错了一个样例;

互测:未被发现BUG,对于自己的测试任务,按照分支树的要求逐一进行测试,并阅读程序代码思考是否存在漏洞,最后并未发现BUG;

第二次作业:

第二次作业的难点主要在于同质请求的判断,一开始由于对此理解不够准确,采用了直接与前一条请求进行对比的方法,故进行了一次重构改进,按照指导书的要求创建了八个类:elevator , floor , scheduler , commandqueue , command , judge , allcommand , elevatorsystem 。

elevator类:描述电梯的各种行为及属性,包括发送请求,开始执行请求,结束请求,更新电梯状态等;

floor类:描述楼层的行为及属性,主要为上下行按钮,发送请求,结束请求;

scheduler类:进行电梯系统的调度;

command类:包含一条请求的各种属性,比如输入请求的字符串,请求类型,请求楼层,请求时间等;

commandqueue:描述等待执行的请求队列的属性及行为,如队列内请求数量,队首队尾,入队出队;

allcommand:包含所有输入的请求;

judge:包含对输入请求进行各种判断的方法;

elevatorsystem:主类,调用各个类运行电梯系统;

公测:未被发现BUG;

互测:通过阅读测试代码发现其未对主类一些可能发生异常的语句包含在try中,由此发现了一个crash错误;另外发现一条与指导书不符但是README并未做出声明的情况,算作一个BUG。

第三次作业:

主要在第二次作业的基础上增加了捎带功能,由于我第二次的设计采用了以电梯及楼层按钮规划电梯行为的方法,故第三次作业并未做出太大的改动,主要的改动为在判断请求是否需要加入请求队列之前先(根据电梯及楼层当前按钮状态)判断该请求是否可以捎带,若不能捎带则进入请求队列,若不能则进入请求队列;另外在电梯类中加了目标楼层及下一个停靠楼层两个属性,并在每次发送请求的时候将这两个属性进行更新;其余都是细节上的微小变动。

公测:未被发现BUG;

互测:并未发现他人BUG;

  由于README描述不够严谨,关于前零数量被发现一个BUG,未被发现功能性错误;

感想:从一个月前几乎一窍不通的小白到现在,三次OO之旅还是让我颇有感触;

1、首先在心态上:

(1)写代码时的心态:写代码实际是一个比较枯燥的过程,所以这更加要求我们要保持一个心静的状态,尤其是当你一筹莫展不知所措时,沉住气不骄不躁是高效解决问题的最重要前提;

(2)、互测时的心态:拿到他人的代码,找BUG固然是直接目的,但是别忘了这种制度的根本目的是在于在阅读代码互相测试的过程中相互学习,因此仅以钻牛角尖的形式其实并不能让我们有所收获;反过来,当被他们测出BUG时,也要摆正自己的心态,如若确实是存在那样的问题,即使该问题比较刁钻,也应该虚心接受,不然怎么叫面向对象呢……

2、关于调试的感想:

(1)、部分同学因为测试不充分导致自己写完了感觉没有任务问题,到了互测阶段就要被挑出BUG,其实根本原因在于你始终站在自己的角度去做测试,做测试时关键在于把自己当作一个客户,你面前这个代码是你需要使用的程序,而你是一个要求非常高非常刁钻的使用者,所以你会想尽各种办法找出程序的漏洞,或者通过README发现其说明与程序功能自相矛盾的地方,这样做,相当于你在互测之前已经进行了一次互测,而测试者正是你自己;

(2)、善用调试技巧,不管是输出调试也好,单步调试也罢,调试技巧在测试中显得尤为重要,当你发现一个BUG,但是又不能快速的发现这个BUG具体是由什么造成的,盯着自己的代码发呆则是大忌,是一种事倍功半的做法,此时善于使用合适的调试技巧才是正解;

3、想要写出一个真正面向对象的代码,就必须彻底抛弃面向过程的风格,第一次作业由于难度小代码规格也较小这一点并明显,但是随着要求和代码量的提高,曾经那种面向过程的编程风格注定要被彻底抛弃,最重要的一点在于——减小耦合度,减小耦合度,减小耦合度,你所写的一个类,虽然在程序正常运行时与其他类存在或多或少的关联,但是当撇开系统的功能仅仅阅读这一个类时,它应该可以成为一个几乎完全孤立的示例;

最后感谢给予我们莫大帮助的老师及助教,预祝后程OO之旅一切顺利。

原文地址:https://www.cnblogs.com/zgj982393649/p/8718719.html

时间: 2024-11-08 21:39:19

OO前三次作业总结的相关文章

软件工程课程前三次作业总结

不知不觉间,软件工程的课程已经过半,而且团队项目也已经进入了冲刺阶段,距离最后25号的项目完成期限越来越近了,我们每个团队的每个成员都需要继续努力,争取在期末检查的时候能够给冯老师以及各位辛勤的助教老师们一份完美的答卷. 在上个月的月底4月28日下午上课时,信息系和冯老师非常荣幸的邀请到了我们课本的作者邹欣老师以及各位助教老师,并邀请各位老师现场为各位同学的初期团队项目作点评分析,为每个团队的编程方向指出了一条明路,让各个团队都有信心沿着这条大路走向期末团队作业最终的成功!在这场精彩的点评之前,

面向对象OO第5-7次作业总结

面向对象OO第5-7次作业总结 学习OO七周了,深切的感受到了这门课程的不友好.前三次作业能够算是勉强地通过了,但是从第五次作业开始就完全GG了.这三次作业,从多线程电梯开始,然后文件监控,然后到出租车,都没有写出来有效的作业.所以就不按照给定的基于度量来分析自己的程序结构了. 第五次作业 多线程电梯 这次作业是根据第三次作业改写而来的,自认为前两个电梯写的还不错,只是电梯捎带功能上少了几个判断的条件,以为这次能够加入多线程完美运行.但是实际写起来却并不如意,各个线程本身写出来了,但是在各个线程

oo第四次作业

很不幸由于一些原因,前两次的作业我都没有能够提交,虽然都尽力完成了,但没有经过公测和互测的洗礼,也不知道程序写的究竟怎么样,这里我只能简单说一下程序设计的思想了 第一次作业:多项式加减 这次作业中一共写了2个类,第一个类是poly类,用来记录每一个输入的多项式.其中有两个属性coe和index,前者记录系数,后者记录指数. 第二个类是polys,用于把输入拆分为单个的多项式,构造多项式的队列. 第二次作业:傻瓜电梯 按照要求设计了5个类: elevator:电梯类,用于构造一个电梯,并且描述和记

OO第三单元总结-规格化设计

OO规格化编程体验小结 1. JML语言的理论基础.应用工具链情况 JML 理论基础: JML建立契约式编程的基础上,是一种实现契约式编程的规格化语言.顾名思义,契约式编程,是供求双方建立在一定的契约上进行软件的开发和应用.类似于在共同完成这一个工程的时候我们对于每个方法都以一个供求双方都统一并且详细知晓的合同,在这个合同上,供应方要不多不少完成合同上的所有要求,需求方的可提出的需求范围只限于合同上的明确条文.这样同时明确了双方的权利和义务.而产生契约式编程的背景是很多工程的开发过程权责混乱,导

职业规划第三次作业

看到一个问卷不错,拟作为第三次作业的部分内容. 你对自己的未来有什么规划?做了哪些准备? 答: 学好大学四年的课程,并积极参加各种活动来锻炼自己的能力.在实习期间认真学习工作经验,学习经验然后争取能自己创业 好好交友,多读书, 你认为什么是学习?学习有什么用?现在学习动力如何?为什么? 答:学习是通过他人的言传身教了解知识,将他人的认识转化为自己的知识.学习能够取他人之长补己之短,丰富自己的认知,还避免了闭门造车和坐井观天的错误.现在的学习动力一般,因为新学知识对我来说比较陌生. 你感觉自己什么

读《构建之法-现代软件工程》前三张后感

刚开学的第一天,学校发下了书本,有六本书,当时会在上这门课的头一天晚上去看看书本的内容,去大概了解这门课程.其中有一门课程的书吸引了我,感觉这本书和其他的教科书有所不同,它不像其他书一样那么的死板,除了公式,就是理论,没什么奇特的地方.而这本书却很奇特,它不但吸引了我,还让我觉得很有趣,这本书是邹欣老师写的一本书,一本胜似小说的书,平时爱看小说的我,就开始喜欢上了这本书,这本有关软件工程的小说书. 到现在,老师也上了好几次课,我们也对软件工程有了一些初步的了解,而软件工程这本书,我也大概的看完了

第三周作业(一)VS安装及单元测试练习

第三周作业(一) 需求:练习教科书第22~25页单元测试练习,要求自行安装Visual Studio开发平台,版本至少在2010以上,要求把程序安装过程和练习过程写到博客上,越详细越好,要图文并茂,没有书的同学可以向班内助教同学借阅. 1.visual studio 开发平台安装 事实上我对Visual Studio了解不多,只知道支持的编程语言多,用的人也挺多,功能强大.至于到底好在哪里,还是要用上一阵自己体验一下才知道.听同学说VS2015有些卡,所以这里我选择了VS2013. 如图,具体版

Spark源码系列(三)作业运行过程

导读 看这篇文章的时候,最好是能够跟着代码一起看,我是边看代码边写的,所以这篇文章的前进过程也就是我看代码的推进过程. 作业执行 上一章讲了RDD的转换,但是没讲作业的运行,它和Driver Program的关系是啥,和RDD的关系是啥? 官方给的例子里面,一执行collect方法就能出结果,那我们就从collect开始看吧,进入RDD,找到collect方法. def collect(): Array[T] = { val results = sc.runJob(this, (iter: It

C语言——第三次作业

作业要求一 题目6-1 输出月份英文名 题目6-2 查找星期 题目6-3 计算最长的字符串长度 题目6-4 指定位置输出字符串 作业:C高级第三次作业(2)没有思路,知识点也没有明白,未完成. 作业要求二 题目6-1 输出月份英文名 1.设计思路 (1)主要描述题目算法 第一步:题目要求设计getmonth函数来返回输入的n相应月份的英文单词. 第二步:定义变量i,定义字符串数组,含有各个月份的英文单词. 第三步:使用for循环遍历数组,通过if判断来返回n相应的月份.因为输入的n为月份所以要大