随着几周的进行,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前三次作业简单总结的更多相关文章

  1. OO前三次作业思考(第一次OO——Blog)

    OO前三次作业总结 基于度量分析程序结构 由于三次作业较多,决定分析内容.功能最为复杂的第三次作业. 上图为第三次作业的类图.我使用了一个抽象类Factor,写了五个因子继承Factor,然后又单独开 ...

  2. OO前三次作业总结

    一.第一次作业 1.程序设计分析 ![img](s1.ax1x.com/2018/04/02/CSgoSU.png) 图1 第一次作业类图 ![name](https://images2018.cnb ...

  3. OO前三次作业分析

    一,第一次作业分析 度量分析: 第一次的oo作业按照常理来说是不应该有这么多的圈复杂度,但是由于第一次写的时候,完全不了解java的相关知识,按照c语言的方式来写,完全的根据指导书的逻辑,先写好了正确 ...

  4. oo前三次作业博客总结

    第一次作业 实现多项式的加减运算,主要问题是解决输入格式的判断问题. 输入实例: {(3,0), (2,2), (12,3)} + {(3,1), (-5,3)} – {(-199,2), (29,3 ...

  5. OO第三单元作业总结

    OO第三单元作业总结--JML 第三单元的主题是JML规格的学习,其中的三次作业也是围绕JML规格的实现所展开的(虽然感觉作业中最难的还是如何正确适用数据结构以及如何正确地对于时间复杂度进行优化). ...

  6. OO第三单元作业(JML)总结

    OO第三单元作业(JML)总结 目录 OO第三单元作业(JML)总结 JML语言知识梳理 使用jml的目的 jml注释结构 jml表达式 方法规格 类型规格 SMT Solver 部署JMLUnitN ...

  7. 【OO学习】OO第三单元作业总结

    [OO学习]OO第三单元作业总结 第三单元,我们学习了JML语言,用来进行形式化设计.本单元包括三次作业,通过给定的JML来实行了一个对路径的管理系统,最后完成了一个地铁系统,来管理不同的线路,求得关 ...

  8. OO第三单元作业——魔教规格

    OO第三单元作业--魔教规格 JML的理论基础和相关工具   JML(Java Modeling Language,Java建模语言),在Java代码种增加了一些符号,这些符号用来标志一个方法是干什么 ...

  9. Blog总结(前三次作业总结)

    前三次作业总结 1.前言 (1)第一次题目集共有8道题目,难度较为简单,知识点为JAVA的一些编程基础知识点,如输入输出,选择,循环,一维数组等. (2)第二次题目集共有5道题目,难度较第一次题目集有 ...

随机推荐

  1. B. Sleepy Game

    http://codeforces.com/problemset/problem/936/B Petya and Vasya arranged a game. The game runs by the ...

  2. EasyX_无法填充圆颜色的问题

    官网:https://www.easyx.cn/ 在线帮助文档:https://docs.easyx.cn/ 目标:生成一个边框为黄色,填充为蓝色的圆 遇到的问题:使用以下代码,只能生成边框为黄色的圆 ...

  3. 新版u-boot移植到s3c2440开发板(一)--建立单板

    由于没有系统的学习shell,所以Makefile大多数看不懂,一个小小的细节,把我难住了几天.现在开始分享我的操作过程 本文所有linux下的操作是root用户,如果你使用普通用户,请在命令前加上 ...

  4. Linux下onvif客户端获取ipc摄像头 获取能力:GetCapabilities

    GetCapabilities:获取能力,主要目的获取设备能力信息(获取媒体服务地址) 鉴权:但是在调用获取设备能力之前是需要鉴权的.ONVIF协议规定,部分接口需要鉴权,部分接口不需要鉴权,在调用需 ...

  5. mypwd的实现——20155328

    mypwd的实现 分析 pwd不带参数时,实现的是查看并打印当前所在位置的绝对路径功能. 如图: 所以实现mypwd时重点在于循环打印路径名,循环的终止条件是是到了根目录.判定是否到达根目录的标准为: ...

  6. 将properties文件的配置设置为整个Web应用的全局变量。

    四种作用域: Web应用中的变量存放在不同的jsp对象中,会有不一样的作用域,四种不同的作用域排序是 pageContext < request < session < applic ...

  7. 5286: [Hnoi2018]转盘

    5286: [Hnoi2018]转盘 链接 分析: $\min\limits_{i=1}^n \{ \max\limits_{j=i}^{i + n - 1} \{ a_{j}+i \} \} +n- ...

  8. Gitlab+Jenkins学习之路(九)之Jenkins的远程管理和集群

    一.Jenkins的远程管理 Jenkins的远程管理方式包含: Shell ssh SSH Plugin ansible.saltstack (1)Shell ssh在项目构建时,jenkins使用 ...

  9. eclipse项目转移至IDEA与IDEA tomcat报错(idea自带tomcat版本太高)与war包部署到win服务器与idea提交git的总结

    eclipse导出项目到idea时,不要导出target: idea打开eclipse项目后,出现junit找不到的问题,原因是jar包缺失,而maven配置的低版本的junit也显示找不到,解决办法 ...

  10. 修复bug有哪些更快的技术?做好这6点就够了

    你有没有想过为什么有时修复错误似乎比它应该花费更长的时间?当你终于找到问题时,事实证明你所需要的只是一个小小的改变.然而,花了很多时间才能找到正在发生的事情.这种情况比我想象的更频繁. 另一方面,当您 ...