oo第一次博客作业
第一次作业:
类图:
第一次作业的成果是一个一元多项式加减法运算程序,在这个程序中,我总共编写了三个类,分别为Poly类、PolyCompute类和PolyInput类。
Poly类主要是用于生成多项式的类,它定义了多项式的属性,在该类中,使用一个int型数组book作为类的属性,用于储存多项式的数据,其中,数组下标作为多项式中项的次数,数组元素则为相应项的系数。使用这种方法来存储数组的好处是在调用数组和搜素数组元素时速度很快,但相应的会占用较多的内存空间,在有大量多项式参与计算时,会占据大量的内存空间。在该类中还包含多个方法,包括多项式的加减以及多项式元素的填入。
PolyInput类则是用于读入所需要进行运算的多个多项式加减法字符串,检查字符串的输入格式是否符合规范,并调用其他类中的方法来完成计算。其中输入格式的检查则是采用正则匹配的方式,通过正则表达式匹配成功的字符串则进行下一步计算操作,若输入的字符串不符合正则表达式的规则,则会输出非法输入提示,并终止程序。使用正则表达式可以将输入格式的检查变得更加简便,极大减少了代码量,但与此同时也会有爆栈的风险,后续需要对匹配的正则表达式进行修改。
PolyCompute类实现的主要功能则是对通过检验的字符串进行数据提取与计算,这其中主要包含了三个方法,getPoly方法、getOp方法和compute方法。getPoly方法要实现的功能是对字符串进行分割,从中提取多项式数据;getOp方法则是提取字符串中的计算符号,存入数组;而compute方法则是根据提取出的多项式数据和计算符号按顺序完成计算。
bug分析:本程序的bug主要在于无法通过压力测试,在输入大量数据时会出现爆栈,判断为正则表达式出现问题,应对正则表达式和匹配方式做进一步优化,防止爆栈现象的出现。
第二次作业:
类图:
第二次作业是一个单部电梯运行控制系统,在该程序中,我共编写了五个类,分别为Request类、Queue类、Floor类、Ele类、Controller类。
Request类主要用于请求的读入、检验以及载入请求队列,该类采用正则匹配的方式检验读入的请求是否符合输入规范,若不符合则输出错误信息,若符合规范则将读入的请求载入生成的请求队列。之后生成调度器,调用调度器中的方法进行调度。
Queue类是生成请求队列所用的类,该类包含两个队列头尾标记,以及一个容器用于存放请求,该类拥有出入队方法以及获取队列中某个请求的方法。
Ele类则是电梯类,包含电梯的基本属性,当前时间,当前所处楼层以及运行方向,还有控制电梯运动的三个方法。
Controller类则是调度器类,该类实现的主要功能是生成电梯并根据获取的请求队列进行调度,其中包含运行方法run(schedule),该方法是读取队列中的请求,检验该请求是否有效,若有效则对电梯进行调度,若无效则跳过执行下一个请求,每执行完一个请求,将调用search方法,该方法用于搜索到电梯完成当前请求为止,是否存在与当前请求同质的请求,若发现同质请求,则将该请求标为无效请求。
Floor则是楼层类,该类只包含楼层层数属性。
bug分析:在此次作业完成的过程中,出现了对指导书理解错误而产生的bug,比如边界时刻发出的指令是否算作同质指令的问题,以及在编写过程中因失误所出现的bug,在调试过程中没有使用较强的测试集,因此出现了多个bug未能修正,在之后的作业中会尽量避免再次出现此问题。
第三次作业:
第三次作业因时间问题未能及时完成,但本人已学习并基本理解了继承、接口等知识点,在之后完成本次作业之后尽量补上这次作业总结。
感想与体会:
这几次作业让我过去的编程思想产生了较大的改变,面向对象的编程思想在接触时确实令我耳目一新,但Java语言的学习和面向对象的思想也给我带来不少的困难,在通过课上和课下的学习来克服困难的过程中我学到了不少的知识,初步掌握了Java语言的使用,也让我对面向对象的编程方法有了一定的认识。