随着几周的进行,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. python 3.x 实现简单用户登录

    import os import sys import getpass login_username = 'admin' login_password = ' u = 0 while u < 3 ...

  2. 从0开始学golang--1--部署本地服务器

    部署自己的本地服务器. 找了个三方包项目:beego.看了下还不错. 上代码....: 首先直接安装三方包,CMD下:go get github.com/astaxie/beego 安装成功后会在pk ...

  3. Properties读取小结

    一.Java程序中读取properties文件 加载的工具类: import java.io.File; import java.io.FileOutputStream; import java.io ...

  4. mfc 形式参数初始化

    初始化函数形参 int add(int a,int b) { return a+b; } add(,); ,,char*s=NULL) { printf("a=%d,b=%d,c=%d\n& ...

  5. 洛谷 P3795 钟氏映射

    洛谷 P3795 钟氏映射 题目背景 2233年,CSSYZ学校的数学老师兼数学竞赛顾问钟JG已经2200+岁啦! 为了庆生,他或她给广大人民群众出了道题. 题目描述 设集合N=M={x∣x∈N+​, ...

  6. AGC 030 B - Tree Burning

    B - Tree Burning 链接 题意: 一个长度为L的环,有n个位置上有树,从0出发,每次选择一个方向(顺时针或者逆时针),一直走,直到走到一棵树的位置,烧掉这棵树,重复这个过程,直到没有树. ...

  7. GNS3 jungle newsfeed 隐藏

    windows 7 windows 8.1 1.开始---运行 输入(没有引号):“%appdata%” 2.修改---GNS3/gns3_gui.ini 的两行参数 "default_lo ...

  8. mysql查询操作之单表查询、多表查询、子查询

    一.单表查询 单表查询的完整语法: .完整语法(语法级别关键字的排列顺序如下) select distinct 字段1,字段2,字段3,... from 库名.表名 where 约束条件 group ...

  9. UWP 自然灾害App在刷新数据后卡死的解决方案

    一直以为都在纳闷,为啥我的其他app崩溃次数几乎为0,而单单这个App的崩溃次数简直逆天了,我都不敢相信. 每天都有至少上千次crash...我也是服的 不甘心,趁着这次重构的机会,把代码好好捋了1下 ...

  10. html5新特性data_*自定义属性使用

    HTML5规范里增加了一个自定义data属性. 这个自定义data属性的用法非常的简单, 就是你可以往HTML标签上添加任意以 "data-"开头的属性, 这些属性页面上是不显示的 ...