第一次作业——多项式计算

1.自我程序分析

  第一次作业是多项式计算,只使用了一个多项式类。第一次接触面向对象的程序,还比较生疏,不是很能理解面向对象的思想。将读入,处理,计算,都放到了main函数中,结果main函数写的过于冗余。

  这是第一次作业的度量分析,分析发现第一次作业的main函数,写的过于复杂,没有体现出面向对象高内聚,低耦合的思想。

  我在第一次作业中建立了两个对象,polyNow和polyAns,每次将新的多项式 polyNow 通过poly类的add或者sub方法加或者减到 polyAns 中。最后polyAns中存放的即为最后答案。

  

  在读入方面,我使用了正则表达式来判断是否合法,之后再用正则的find方法来获取各个多项式。

2.自我bug分析

  在做第一次的程序时,曾出现过当读入层次复杂,项数多,个数多的多项式时,会出现程序爆栈的问题。经检查后发现是正则表达式过于复杂,导致迭代层数过多,以至于崩栈。之后采取了将读入的字符串分割后再进行正则表达式匹配的方法,解决了问题。

3.互测策略

  第一次作业,互测时主要从测试对方输入格式是否判断正确的方面来测试。测试各种特殊情况如前导零,正号等。

第二次作业——傻瓜电梯

1.自我程序分析

  第二次作业,我对面向对象的思想有了一定的理解,将整个电梯程序分成了6个类,电梯类负责控制电梯状态,楼层类负责控制楼层内外的按钮和指示灯,请求类负责解析请求,请求队列类负责对需要执行的请求进行存储,判断等,最后通过电梯控制类来对各个类进行交互协调,进行电梯的调度和楼层灯的控制。

  

  对于电梯的调度方法,我使用了两个队列,一个队列用来储存执行队列,一个队列储存还未发出的请求。当执行队列为空时,从请求队列中取出一个合法请求加入执行队列。当电梯运行时,判断当前过程中有那些请求被发出,并判断是否是同质指令,然后将合法指令加入执行队列。最后更新电梯状态,然后取出执行队列第一个命令继续运行。

2.自我bug分析

  第二次作业写的比较顺利,在做出正确的设计后,写完后没什么bug了。易错的地方可能在一些电梯开关门的边界处理。

3.互测策略

  第二次作业,我写了一个自动生成随机输入数据的程序,然后通过批处理指令来将自己的程序和对方比对。然而没跑出对面什么bug。。

第三次作业——ALS电梯

1.自我程序分析

  第三次作业在第二次作业上加入了捎带的功能。

  对于新加入的捎带功能,我的理解是:因为在每次电梯运行过程中,一定会捎带运行中电梯内发出的指令的最高层。所以我将每次电梯运行不再以主指令为单位,而是在每次运行中,找到当前方向上能捎带的最高层,当次电梯运行就从当前楼层直接运行到最高层,并且将这一次运行中需要捎带的请求转化为这次运行中需要停靠的楼层。

  于是一次运行流程就转化成:首先寻找本次运行方向上的最远楼层,然后在运行过程中判断同质指令,并将各个停靠的楼层的请求输出,然后再执行下一条指令,进行下一次运行。

2.自我bug分析

  这一次在做作业的过程中,我在电梯开关门的过程中的同质指令判断有些问题,在对边界问题进行分析后解决了问题。

3.互测策略

  对方在数字前的正号的判断处理出现了问题,其余在程序运行方面没有出现什么bug。

这三次oo作业的心得体会

  通过这三次的oo作业,我对面向对象的思想有了更深刻的认识,了解了高内聚低耦合的设计理念。在第三次作业中,我对于程序的设计还不是很完善就草草开写,然而我在写完之后发现自己的设计有着许多无法解决的问题,导致我又对程序进行了重新设计并书写。希望自己在以后做作业的过程中,更重视自己的设计,先设计好再开写,往往会事半功倍。

  祝大家假期快乐,oo加油!互测能少点戾气多点和谐~祝oo课程能顺利运行

OO随笔的更多相关文章

  1. OO随笔之和蔼的第四单元——UML系列

    本单元的OO作业相比以前的,实在可以以和蔼来形容.但是和蔼并不意味着什么都不做,这单元的两次作业,特点在于每种查询难度不大,但是有很多需要商榷的细节点和查询种类比较多.由于UML图和java8之间,存 ...

  2. OO随笔之纠结的第二单元——多线程电梯

    综述 主要任务就是写一个电梯模拟器,读入每一个人的请求然后让电梯把他们送到想去的地方. 从第一次到第三次作业,三次的主要任务都是相同的,但是每次都增加了很多的细节,每次的难度都逐步增长,电梯复杂度和瞎 ...

  3. OO随笔之魔鬼的第一单元——多项式求导

    OO是个借助Java交我们面向对象的课,可是萌新们总是喜欢带着面向过程的脑子去写求导,然后就是各种一面(main)到底.各种方法杂糅,然后就是被hack的很惨. 第一次作业:萌新入门面向对象 题目分析 ...

  4. OO随笔之追求完美的第三单元——初试JML

    前言 这一章的JML比较简单,那么大家的关注点自然地移到了性能优化上.于是大家一股脑地去利用各种数据结构去做时间上的优化(当然很多人最后还是倒在了正确性上),故称追求完美的一单元.当然这也是得益于JM ...

  5. Linux随笔-鸟哥Linux基础篇学习总结(全)

    Linux随笔-鸟哥Linux基础篇学习总结(全) 修改Linux系统语系:LANG-en_US,如果我们想让系统默认的语系变成英文的话我们可以修改系统配置文件:/etc/sysconfig/i18n ...

  6. AI人工智能系列随笔

    初探 AI人工智能系列随笔:syntaxnet 初探(1)

  7. 【置顶】CoreCLR系列随笔

    CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ...

  8. C++随笔:.NET CoreCLR之GC探索(4)

    今天继续来 带大家讲解CoreCLR之GC,首先我们继续看这个GCSample,这篇文章是上一篇文章的继续,如果有不清楚的,还请翻到我写的上一篇随笔.下面我们继续: // Initialize fre ...

  9. C++随笔:从Hello World 探秘CoreCLR的内部(1)

    紧接着上次的问题,上次的问题其实很简单,就是HelloWorld.exe运行失败,而本文的目的,就是成功调试HelloWorld这个控制台应用程序. 通过我的寻找,其实是一个名为TryRun的文件出了 ...

随机推荐

  1. C#博客目录

    基础加强 1.索引器 2.密闭类.静态类及扩展方法 3.值.引用类型及结构体 4.秒懂IL.CTS.CLS和CLR 5.装箱与拆箱 6.引用相等与运算符重载 7.ref与out 8.委托和事件 9.对 ...

  2. jquery-ui sortable 在拖动换位置时改变元素的大小导致占位与实际不一致

    使用jquery ui sortable时 需求是在拖动的时候要隐藏一部分元素,然后按照隐藏后的元素高度换位, 解决方案是修改源码jquery-ui.js, _mouseStart方法中开头增加 if ...

  3. emqx源码编译

    1  下载  github上下载 2  找台虚拟机,安装编译所需的环境,erlang   make等 3  执行make命令 重点说一下第3步: 主要是make命令报错 解释:执行make命令后,依赖 ...

  4. openssh-win64 on windows2016 ssh pub key config

    DO NOT follow the official M$ documentation at https://docs.microsoft.com/en-us/windows-server/admin ...

  5. python 数组中数字求和是否为零

    需求是: 给定一个不少于4个元素的list(4个元素不重复): 请确认是否存在这样的4个元素,使得四数之和为0?如果有打印出符合条件的四个元素,如果没有打印False #!/usr/bin/pytho ...

  6. windows slaver 脚本执行xcopy 报错无效驱动器规格

    jenkins上配置的windows slaver机器如下: 我用这台windows 机器作为slaver机器来编译pc的exe包,但是在最后归档包倒ftp上时报错,如下: 但是我直接在windows ...

  7. jsp四大作用域

  8. 记录Django学习1

    一.Django 1.首先安装好django模块 pip3 install django 2.然后配置好相应的环境变量 C:\Python35\Scripts 3. 创建Django工程,首先可以使用 ...

  9. SV-assertion

    断言(assert)是一种描述性语言,通过描述的期望结果来进行仿真验证. 断言有一个更加基础的信息,我们称为属性(property),属性可以作为断言结果,功能覆盖点,形式检查和约束随机激励生成. 断 ...

  10. stm32 堆溢出

    STM32 堆溢出 遇到的问题 最近在给旧项目添加了段代码,程序经常到某个状态就突然崩溃了,也不一定是在运行新代码的时候崩溃.检查了几遍代码,数组越界访问,除数为0,内存泄露等常见的问题都不存在. 原 ...