OO前三次作业分析
一,第一次作业分析
度量分析:
第一次的oo作业按照常理来说是不应该有这么多的圈复杂度,但是由于第一次写的时候,完全不了解java的相关知识,按照c语言的方式来写,完全的根据指导书的逻辑,先写好了正确的方式然后又一步步的判断所有错误的方式,由于没有采用正则表达式,导致代码冗长,写了很多的if else循环导致嵌套过多。执行的次数大大的增加,使得程序的维护十分的困难。
类图分析:
第一次作业所创建的类很少,一个储存多项式的类和一个多项式集合的类。所有关于输入的判断全部都放入了一个类里面这就导致了前面度量分析的结果,嵌套过多,而且结构十分的简单,一眼望过去一个类里面300行全是判断语句,让人看起来十分的难受。但是已经能够初步的理解类的属性。勉强能够做到把一个类的属性和他的方法都写出来。通过第一次的作业,完成了java最基础的入门,就是使用类。
二,第二次作业分析
度量分析:
第二次的傻瓜电梯对比第一次的度量分析可以明显的看到,嵌套的使用次数和圈复杂度都变少了,主要原因还是使用了正则表达式,减少了判断输入错误时的判断语句。另外由于指导书的要求,强制要求用5个类来完成任务,但是可以明显的感觉到自己对于类的调度还是十分的模糊,刚开始完全不知道怎么样写出五个类来,脑子里的想法还是过于的单一,面相对象编程的水平还是很低,进行顶层的设计模块始终脑子里还是一团粥,最终还是和舍友共同讨论出了满足指导书的顶层模块的使用方式。
类图分析:
类图的分析明显的揭露了本次作业的问题,类之间的调度毛病十分的大,由于没有搞明白floor类最终是干什么的,没有加入有关的属性和方法,也没有在别的类中调用他的对象,完全就是一个空的类。而且调度的很简单,单纯的把各个类调度到主函数之中,还是没有解决代码的长度过长的问题,带有主函数的类过于的繁琐,加入了大量的判断,还是不易于维护和修改。
三,第三次作业分析
度量分析:
第三次作业,做一个有一点聪明的电梯,感觉难度比上一次的傻瓜电梯不是大了一点点,继承和接口傻傻分不清就算了,关键是感觉写完了以后有成堆的bug,可以很明显的感觉到,圈复杂程度和嵌套的复杂程度又爆炸了,因为实在是写入了太多的判断,多到自己现在也没有想好该怎么样去优化自己的代码,因为在debug的时候是十分的绝望的,经常干掉一个bug,又发现出来了更多的bug,感觉各种的控制变量定义的飞起还是无济于事,最终交上去的代码仍然有很多的bug。可能还是自己在思考这个题的时候没有想到简单的方式,感觉为了处理掉一个bug,只是单纯的解决目前出现的数据情况而去定义一个新的控制变量是完全的没用的,只会平白的加大你的代码量,而去看起来十分的蠢,这次的作业可以说是十分的不满意,仍然有很多地方需要去完善。
类图分析:
这次的电梯要求使用继承,感觉上继承很像是将父类的东西复制到子类当中,只不过可以不写,而且你可以在子类之中添加新的功能。可以说用继承在一定程度上解决了代码长度过长的问题,因为可以把一部分的程序的分析放入到父类当中,一部分放入到子类当中,而且通过继承的使用可以更方便去调试,不用单步调试一行一行的走,通过调用类的对象能够一下子运行完,看到结果,这样就能够判断到底是父类的函数错误还是子类的函数错误。可以说是一定程度上增加了代码的可读性吧,但是明显感觉自己的使用还是不够的熟练,感觉一定程度上能通过合理的使用类来减少一个类中的代码长度,把功能细分,增加代码的可读性和可修改性。但是自己目前还没有做到,希望以后能做到。
四,自己程序的bug
自己程序的bug还是很多的。利用bug树的方法确实消灭了一下bug使得自己的程序能够完成简单的样例,并且通过公测,但是对于很长的数据,就暴露了自己考虑的不周到,没有将多个bug联合起来考虑,一次消灭到底,内心中还是有那种拆东墙补西墙,就事论事,用一个错误的样例只能发现一处表面的bug,但是没有进过自己深层次的思考,思考错误的样例的根本原因和自己程序没有考虑到的地方,这种做法导致了第三次作业bug不断的出现,搞得自己很心律憔悴,最终没有de完自己所有的bug就提交。因而导致公测出现了错误,并且被发现了bug。
五,自己发现别人程序bug所采用的策略
发现别人程序的bug肯定还是先看一下对方的程序吧,了解一下他用的方法,看看是否有明显的自己写代码时考虑到的问题他没有考虑到,发现这种很明显的bug,之后就是测试一些边缘的数据,例如输入要求100行,试一下101行,看一下数组有没有可能被爆,看一下数值是否可以超过int类型,这些都是可以考虑的地方。之后就是测一些很大的数据啦,越是复杂的程序,跑很大的程序就有可能因为组合情况的出现而考虑不周出现错误。发现别人的错误代码之后,缩小错误的位置,将bug的真正原因找到。然后让别人心服口服。
六,心得体会
1,将大块的代码分开很重要,不要写在一个函数里面,把各自的功能分清楚,然后写进不同的函数不同的类里面,既有助于debug又有助于别人去阅读代码。
2,debug一定要找到bug的真正原因,不能只是表面的看到了错误就想着只消除这种情况就可以了,这样很容易导致自己前面的逻辑全盘错误,出现更多的bug。
3,对于类的调度有了一些自己的想法,但是明显调度的还不是很熟练,类之间,类内部方法之间的调度还是很松散。
4,如果不想自己在ddl前过于的慌张,交上一份自己不满意的答卷,那就早点开始吧。
OO前三次作业分析的更多相关文章
- OO前三次作业思考(第一次OO——Blog)
OO前三次作业总结 基于度量分析程序结构 由于三次作业较多,决定分析内容.功能最为复杂的第三次作业. 上图为第三次作业的类图.我使用了一个抽象类Factor,写了五个因子继承Factor,然后又单独开 ...
- OO前三次作业总结
一.第一次作业 1.程序设计分析  图1 第一次作业类图 , (2,2), (12,3)} + {(3,1), (-5,3)} – {(-199,2), (29,3 ...
- OO第三单元作业分析
一.JML的理论基础应用工具链 JML是用于对Java程序进行规格化设计的一种表示语言.基于Larch方法构建. (1)注释 JML以javadoc注释的方式来表示规格,每行都以@起头.有两种注释方式 ...
- OO第三单元作业总结
OO第三单元作业总结--JML 第三单元的主题是JML规格的学习,其中的三次作业也是围绕JML规格的实现所展开的(虽然感觉作业中最难的还是如何正确适用数据结构以及如何正确地对于时间复杂度进行优化). ...
- OO第三单元作业——魔教规格
OO第三单元作业--魔教规格 JML的理论基础和相关工具 JML(Java Modeling Language,Java建模语言),在Java代码种增加了一些符号,这些符号用来标志一个方法是干什么 ...
- 【OO学习】OO第三单元作业总结
[OO学习]OO第三单元作业总结 第三单元,我们学习了JML语言,用来进行形式化设计.本单元包括三次作业,通过给定的JML来实行了一个对路径的管理系统,最后完成了一个地铁系统,来管理不同的线路,求得关 ...
- Blog总结(前三次作业总结)
前三次作业总结 1.前言 (1)第一次题目集共有8道题目,难度较为简单,知识点为JAVA的一些编程基础知识点,如输入输出,选择,循环,一维数组等. (2)第二次题目集共有5道题目,难度较第一次题目集有 ...
随机推荐
- Shell:常用+好用命令
1.#删除15天前的数据 find /usr/local/chen/backup/ -mtime +15 -exec rm -f {} \; 2.release=`echo $name | cut - ...
- Vue初接触 stage1
开始学Vue辣!哈哈哈哈哈真的好好玩啊Vue!这个写法我真的太爱了! stage1 4-27 先写一下安装Vue devtools时遇到的问题(说来神奇,我是写第一个实例的时候试着在控制台打印了这个空 ...
- Spring源码分析——源码分析环境搭建
1.在Windows上安装Gradle gradle工具类似于maven,用于项目的构建,此处主要用于构建spring源码,以便我们将spring源码导入eclipse. 开发环境 Java:JDK8 ...
- jeecg-boot 简易部署方案
jeecg-boot采用前后端分离的方案,前后端代码不在一起.想要部署 一般是通过反向代理实现. jeecg-boot目前支持更好更简单的解决方案: jeecg 在配置文件里面指定了 webapp的存 ...
- jeecg之弹窗插件lhgdialog小结
说到弹窗,在jeecg中弹窗用到最多的地方无非是新增/编辑的弹窗. 1.列表页面新增编辑按钮触发的弹窗即lhgdialog,不论是add/update,最终走的都是curdtools.js中的crea ...
- Python序列化操作与反序列操作
一.概念 序列化:转向一个字符串数据类型序列:字符串 二.需要做序列化操作的情况1.数据存储2.网络上数据传输 从数据类型到字符串的过程叫序列化从字符串到数据类型的过程叫反序列化 三.现有序列化模块1 ...
- Servlet学习记录4
带进度条的文件上传 UploadServlet只实现了普通的文件上传,并附带普通文本域的提交.如果需要显示上传进度条,实时显示上传速度等,需要配合使用Ajax技术.这里仍然使用Apache的commo ...
- docker镜像无法下载或者下载缓慢
解决docker镜像无法下载的问题 2015年10月02日 16:01:05 阅读数:20776 克服跨洋网络延迟,使用Docker Hub Mirror加速Docker官方镜像下载 http://c ...
- infinite-loading 插件
<template> <div id="cart" class="has-top"> <!-- <v-header titl ...
- 微信小程序:request合法域名检验出错,https://apis.map.qq.com 不在以下 request 合法域名列表中
设置域名 登录微信小程序后台, 设置→开发设置→服务器设置 必须设置域名,微信小程序才能进行网络通讯,不然会报错 如果没有设置合法域名,在开发阶段是可以不设置合法域名的 详情 -项目设置 好了,完美解 ...