OO前三次作业简单总结
随着几周的进行,OO课堂已经经历过三次课下作业。在这三次作业中,我被扣了一些分数,也发现了自己几次作业中一些存在的共同的问题。
首先以第三次作业为例分析,我程序的类图如下
一共九个类,其中Als_scheduler是Scheduler的子类,二者分别在第二次和第三次作业中进行总调度。Request类是请求类 Requestqueue类是请求队列类,负责将输入的若干请求作为队列处理。Lift是电梯类,负责电梯的处理。FLoor类是楼层类,负责生成楼层类请求。具体流程如下:
1.程序以Main方法作为入口,然后以Reader方法来处理输入并将请求添加到队列中,其中调用了RequestQueue类的AddRequst方法来处理添加操作。
2.Reader类中也处理了不符合顺序或者不符合输入格式或者数据溢出的请求。
3.在Als_scheduler类中的smarterRun方法中进行调度,该方法是Run接口中的方法的实现:
①新建一个Reader类的实例,读入输入的请求。
②判断读入的请求是否是同层移动的请求,如果是,说明不可捎带其他请求,直接
用ExecuteAndPrint方法响应该请求并输出,然后寻找并删除同质请求,将已经执行的请求从请求队列中移除。
③如果不是同层移动的请求,便针对Lift类的实例,也就是电梯,一层一层模拟电梯移动,每移动一层遍历主请求完成时间前的所有请求,判断符合时间的请求能否符合捎带条件,用AcanTakeB方法来判断,若返回True,则添加到捎带队列。遍历完请求后遍历捎带队列,如果可以在电梯当前层执行,则用ExecuteAndPrint方法响应该请求并输出,并把相应的时间推迟。直到电梯移动到主请求的楼层并执行。执行完主请求后,如果捎带队列还有请求,则把第一条升级为主请求,接着执行。
优点:对于面向对象的思维和运用有了初步的认识,流程基本上也算是清晰。
尝试着使用继承、接口和接口的实现、抽象函数等来进行编程,这很面向对象。
命名逐渐规范。
缺点:耦合度还是不够低,有些地方改起来还是牵一发而动全身,很多内容可以再抽象出来成为一个方法却没有抽象出来,这样修改起来的时候很麻烦,可能还是受面向过程的编程影响。
·对于输入的处理不好。起初我没有利用正则表达式来处理输入,而只是想着简单地使用split方法来处理输入,结果不仅多了很多行不必要的代码,而且对于一些诸如(FR,1,UP这样的输入没办法判别为无效输入。我在做的时候也没有考虑到这些,之后发现了这些问题,我学习了正则表达式的使用,在输入的处理上基本上没遇到问题,但是浪费了很多时间。
·第一次作业对Exception进行catch,却没有catch到Error这个类的对象,对于十分巨大的输入出现Error导致crash。
·第二次作业的正则表达式判断上,我对前导0和前导正号的处理有一些遗漏。
·对于指导书的理解不深。第三次作业中一些是否捎带的问题我理解似乎和指导书有出入,也没有在讨论区进行进一步探讨而是理解为自己会了,就直接导致了我一些样例的出错。
·自我测试较少。作业完成进度较慢,没有进行一定量的自我测试就提交,一些是因为自己粗心的可以避免的错误没有发现。
问题所出现的类,第一次作业在多项式输出的处理上,也就是单项式和多项式类,输出个数能超过20个多项式和50个单项式的限制,然而因为第一次作业我采用数组的数据结构,数组开得过小,导致溢出,所幸我catch到了这个Exception没有导致crash,但是也没有输出正确结果。
第三次作业只有同层的输出顺序上的BUG,没有大问题,还好。
发现别人的Bug主要还是在一些边界情况较多,首先简单阅读代码结构,如果他的代码主要逻辑没有问题,则重点关照一些边界情况,比如小数,小数的精度;或者一些逻辑上的边界情况,比如反复走走停停的电梯等。
其次精读代码,观察他人有没有一些设计上细节的小瑕疵,所以我们自己在编写代码的时候,对于细节也要细心。
总之,在我们编写代码之前,最好对于我们的这份项目,有一个整体上的结构认知,最好先画出类图和关系,再根据类图来编写代码,这样结构清晰而严谨。
在测试自己代码的时候,要怀着测试他人代码的心态来反复找错;在测试他人代码的时候,要怀着测试自己代码的心态而一丝不苟。
OO前三次作业简单总结的更多相关文章
- OO前三次作业思考(第一次OO——Blog)
OO前三次作业总结 基于度量分析程序结构 由于三次作业较多,决定分析内容.功能最为复杂的第三次作业. 上图为第三次作业的类图.我使用了一个抽象类Factor,写了五个因子继承Factor,然后又单独开 ...
- OO前三次作业总结
一.第一次作业 1.程序设计分析  图1 第一次作业类图 , (2,2), (12,3)} + {(3,1), (-5,3)} – {(-199,2), (29,3 ...
- OO第三单元作业总结
OO第三单元作业总结--JML 第三单元的主题是JML规格的学习,其中的三次作业也是围绕JML规格的实现所展开的(虽然感觉作业中最难的还是如何正确适用数据结构以及如何正确地对于时间复杂度进行优化). ...
- OO第三单元作业(JML)总结
OO第三单元作业(JML)总结 目录 OO第三单元作业(JML)总结 JML语言知识梳理 使用jml的目的 jml注释结构 jml表达式 方法规格 类型规格 SMT Solver 部署JMLUnitN ...
- 【OO学习】OO第三单元作业总结
[OO学习]OO第三单元作业总结 第三单元,我们学习了JML语言,用来进行形式化设计.本单元包括三次作业,通过给定的JML来实行了一个对路径的管理系统,最后完成了一个地铁系统,来管理不同的线路,求得关 ...
- OO第三单元作业——魔教规格
OO第三单元作业--魔教规格 JML的理论基础和相关工具 JML(Java Modeling Language,Java建模语言),在Java代码种增加了一些符号,这些符号用来标志一个方法是干什么 ...
- Blog总结(前三次作业总结)
前三次作业总结 1.前言 (1)第一次题目集共有8道题目,难度较为简单,知识点为JAVA的一些编程基础知识点,如输入输出,选择,循环,一维数组等. (2)第二次题目集共有5道题目,难度较第一次题目集有 ...
随机推荐
- 用ansible2.5在Centos7.2上部署OpenShift3.9(转)
1.环境: 主机名 ip 角色 master 10.2.1.198 master node1 10.2.1.174 no ...
- <摘录>字节对齐与结构体大小
说明: 结 构体的sizeof值,并不是简单的将其中各元素所占字节相加,而是要考虑到存储空间的字节对齐问题.这些问题在平时编程的时候也确实不怎么用到,但在一 些笔试面试题目中出是常常出现,对sizeo ...
- Mac 使用.bash_profile
1.打开terminal(终端) 2.open .bash_profile (打开.bash_profile文件,如果文件不存在就 创建文件:touch .bash_profile 编辑文件:op ...
- v$pwfile_user表
SQL> select * from v$pwfile_users;select * from v$pwfile_users; USERNAME SYSDB SYSOP SYSAS------- ...
- jQuery学习-属性选择器
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- python基础学习1-生成器,递归函数
#!/usr/bin/env python # -*- coding:utf-8 -*- li=[11,22,33,44,55] r= filter(lambda x:x>22,li) prin ...
- 03 - django简介
1.MVC与MTV模型 2.Django的下载与基本命令 pip install django==2.0.1 第三方库安装到哪里了? 创建一个django project C:\Desktop\fir ...
- Kubernetes学习之路(十)之资源清单定义
一.Kubernetes常用资源 以下列举的内容都是 kubernetes 中的 Object,这些对象都可以在 yaml 文件中作为一种 API 类型来配置. 类别 名称 工作负载型资源对象 Pod ...
- 深度学习—caffe框架训练文档
转存:LMDB E:\机器学习2\caffe资料\caffe_root\caffe-master\Build\x64\Release>convert_imageset.exe E:/机器学习2/ ...
- Macaca环境搭建全教程
首先想要会Macaca,还得先会用github,不然你得死……因为各种例子都在git上,官网也一样,蛋疼的很…… #基础环境 1.JDK:jdk1.8-配置变量 2.Android SDK:sdk ...