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道题目,难度较第一次题目集有 ...
随机推荐
- Docker Cache mechanism
Docker build 的 cache 机制: Docker Daemon 通过 Dockerfile 构建镜像时,当发现即将新构建出的镜像 与已有的新镜像重复时,可以选择放弃构建新的镜像,而是选用 ...
- SSM-CRUD入门项目——环境搭建
一.项目概述 项目功能点: 1.分页 2.数据校验: jQuery前端校验+JSR303后端校验 3.ajax 4.RESTful风格的URI 技术点: 1.基础框架——SSM 2.数据库——MySQ ...
- 不能存在多个@ManyToMany(fetch=FetchType.EAGER)
@LazyCollection(LazyCollectionOption.FALSE) 原地址:https://stackoverflow.com/questions/4334970/hibernat ...
- WebUploader在IE9中文件选择按钮点击没反应
一.问题: 最近做的公司项目里,用户环境一直用的火狐,但是实际的用户群体都是银行人员 政府部门怎么也要用 IE,而且还有一些用的IE版本是古董版本IE9 IE9 相比 IE8 多了图像渲染等,无法兼容 ...
- EDB*Plus的当前路径问题
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL基础知识与基本操作索引页 回到顶级页面:PostgreSQL索引页 [作者 高健@博客园 luckyjackg ...
- python 线程及线程池
一.多线程 import threading from time import ctime,sleep def music(func): for i in range(2): print(" ...
- linux中mycat的配置,分片,以及主从复制
1.1 安装环境 1.jdk:要求jdk必须是1.7及以上版本 2.Mysql:推荐mysql是5.5以上版本 1.2 安装步骤 Mycat有windows.linux多种版本.本教程为lin ...
- P2154 [SDOI2009]虔诚的墓主人
略有一点点思维的题. 首先,如果一个点上,下,左,右分别有\(a,b,c,d\)棵树,那这个点的十字架方案为\(C_{a}^{k}C_{b}^{k}C_{c}^{k}C_{d}^{k}\). 按x坐标 ...
- 【linux报错】安装好虚拟机后,挂载光盘报错:mount:you must specify the filesystem type
问题现象: 问题原因: 当时光盘的“已连接”的勾没有勾上 解决后:
- Python无参装饰器
需求:想要在test_func函数前后执行一些代码 1.第一步(定义函数,将调用原函数,使用新函数替换) def test_func(): return 'test_func' def test_ ...