随着几周的进行,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. P1481 魔族密码

    题目描述 风之子刚走进他的考场,就…… 花花:当当当当~~偶是魅力女皇——花花!!^^(华丽出场,礼炮,鲜花) 风之子:我呕……(杀死人的眼神)快说题目!否则……-_-### 花花:……咦好冷我们现在 ...

  2. block本质探寻一之内存结构

    一.代码——命令行模式 //main.m #import <Foundation/Foundation.h> struct __block_impl { void *isa; int Fl ...

  3. jQuery 基础与运用

    1.  jquery引入以及入口函数 引入方式 <!--方式一:下载到本地,引入路径--> <script src="jquery-3.1.1.min.js"&g ...

  4. 使用Android studio搭建Android环境

    最近安装Android studio遇到了很多问题,现在总结一下安装过程 因为我的电脑是AMD的cpu,好像不能使用虚拟机(具体原因不知道),所以我使用 软件+手机  去开发APP 先说一下使用And ...

  5. Flash Player调试器版本的解决办法Flash Builder 找不到所需的Adobe

    Flash Player调试器版本的解决办法Flash Builder 找不到所需的Adobe   Flash Builder在Debug时出现的问题:Flash Builder 找不到所需的Adob ...

  6. 2015306 白皎 《网络攻防》Exp3 免杀原理与实践

    2015306 白皎 <网络攻防>Exp3 免杀原理与实践 一.实践基础 免杀,故名思义,指的是一种能使病毒木马免于被杀毒软件查杀的技术. 免杀的方法有很多,比如加壳改壳.加垃圾指令.以及 ...

  7. 2017-2018-1 20155338 加分项目——PWD的实现

    2017-2018-1 20155338 加分项目--PWD的实现 项目要求 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试 ...

  8. 20145226 2016-2017-2 夏艺华 《Java程序设计》 课程总结

    20145226夏艺华 <Java程序设计>课程总结 每周读书笔记链接汇总 第一周读书笔记 了解Java编程风格,认识Java的类型与变量,掌握Java流程控制的方法(分支.循环). ht ...

  9. Wannafly挑战赛18C 异或和

    傻逼题,和期望没毛关系... 分开xy坐标,n方直接统计每个坐标的曼蛤顿距离即可.. #include<bits/stdc++.h> #define il inline #define v ...

  10. SQL Server 日期格式和日期操作

    SQL Server发展至今,关于日期的格式的控制方法,有传统的方法,比如CONVERT(),也有比较便利的新方法,比如FORMAT():同样,关于日期的操作函数,也分为传统方法:DATEADD()等 ...