OO第一次博客--前三次做业分析:java
第一次做业:正则表达式
第一次做业的要求是实现有必定鲁棒性的多项式加减法。对于大多数刚开始接触JAVA语言和OO思想的同窗来讲,此次的难点主要是:JAVA语法、面向对象思想、正则表达式的使用和程序的鲁棒性。相比觉得的语言,我没法理解“面向对象”这个词的含义。在膜拜已经对java有所理解并上过面向对象先导课的大佬们的代码后,我才稍微对“面向对象”的写法有所理解。虽然听起来很不现实,但在了解了一个语言的基础语法后,参观和学习大佬们的代码彷佛是快速上手的好方法(这彷佛与课程要求相违背但对于学习确实有所帮助)。在听学姐讲解后,有据说正则表达式是一个便利的工具,便利用之。对于程序的正确性以及如何保证不crash,除了本身多加try来注意,还须要大量的测试验证了。毕竟本身测得不够全面,就只能指望别人也不帮你测。。。编程
在设计上,我采用了一个Poly类型的数组Polylist来存放各个合法多项式,在首项前加“+”,再利用找操做符号来分割各项进行操做。这是一种常见的操做,效率算不得很高,但好在不至于超时并且很便于理解。数组
如下是其类图及其度量分析:数据结构
从度量分析中看出的是Match方法被标红;该方法是本次做业中个人主方法。。。函数
(附:McCabe Cyclomatic Complexity(圈复杂度)用来衡量一个模块的复杂程度,统计一个函数有多少个分支(if,while,for等),没有的话复杂度为一,每增长一个分支复杂度加一。圈复杂度的做者McCabe认为,圈复杂度在3~7为比较好的结构化方法,圈复杂度大说明程序代码可能质量低且难于测试和维护。Nested Block Depth(块嵌套深度)则为嵌套深度。这两块出现超标,每每说明程序设计有缺陷,或部分代码嵌套深,难以判断逻辑,或直接写成了面向过程的思想。)工具
做为一个菜鸡的第一个java程序(除了HelloWorld),我代码中的问题不少:学习
首先是对java语言的不熟练致使到处像C,也直接致使了一个函数到结尾(就像main)。另外由于初学面向对象编程,致使代码中对于对象的重视不够,更多则是在面向过程。。。测试
而本身被爆出的bug中也体现了本身对代码的理解不深入:被人爆数组(公测一样在爆但侥幸逃过一劫),对方刻意构造大型错误输入,瞄准我在错误输入处理时想固然的随意开了一个小数组来储存结果,被爆两组数据。这也让我在以后的两次做业中debug和找bug时对于代码中的数字更加剧视。spa
第二次做业:
傻瓜电梯的设计与验证。傻瓜电梯的难点,应是对电梯的设计上,即如何实现电梯、分别给五个或者更多的类什么功能、各个类之间如何串联等问题上。我采用了dipatcher类对操做进行处理;而电梯类elevator和floor分别存储电梯在该指令执行完成先后的时间、楼层、运动状态,并给调度器计算指令完成时间。指令demand负责读入,在work函数进行输入筛选处理后将可执行的传进指令队列,再从头开始逐条传入dipatcher取出处理。
此次的做业相比第一次做业,面向对象的思想体现的就明显多了;指导书中对于多个类的提示也在把咱们从面向过程的误区往出拉。
如下是其类图及其度量分析:
从类图中能看出demand类几乎是没有起到任何做用,由于只是在work函数对输入进行暂存,进行筛选以后直接就传给queue了。。。甚至没有均可以。。。这带来的问题也十分明显:queue类过于庞大了,在第三次做业中更会有所体现,这又致使了个人数据结构复杂冗余,本来demand中应该实现的分类只能在queue中狂开数组来分类保存。。。在调度时也麻烦的一逼。。。
好在做为第二次做业,相比上一次的青涩少年我也是有了第一次经验了。。。在数据处理上稍微严谨了一些,不幸地是,此次我被爆出的问题比上次还要多:
度量分析中红色的是新加入的度量类,几乎是代码中的核心处理部分,说明了我对于指令的处理仍是应当有所精简。
第三次做业:
学长口中的第一个“很差写”:ALS电梯。
此次电梯的最大改动为容许捎带,这就出现了主指令和最多两条捎带指令(即若存在捎带,能找到一条最早捎带的指令,以及可能会找到一条和它仅指令标识符不一样的指令一块儿被捎带)。所以排在后面的指令有可能被先完成,不能单纯只从从队列头开始向后一次遍历。将全部指令按楼层进行储存。再使用了一个指令队列,规定头指令为主指令,再每变更一层后判断同质,向后找最优捎带指令,执行后将其标记,再也不执行。当全部比主指令先执行完的捎带指令所有完成,执行主指令并从队列删除,将新的主指令置顶。循环下去至队列为空。然而在完成代码的时候,仍是被炸出了一些奇怪的bug(主指令为同质指令时没有将其筛除,说到底仍是判断逻辑不够完备)。此外,要求使用对于咱们菜鸟来讲新学习的继承、接口、重写。。。(然而惭愧的是本身代码中几乎没有对这些的体现。。。接口无用,继承基本全是重写。。。)
做为单线程第二次电梯做业,她已经向现实中的电梯有所靠拢。。。同时对于咱们第一次的电梯要求更高了(得先调好第一次才能避免第二次出现上一次的bug)。遗憾的是仍是出现了问题(上面已提到)。。。
如下是其类图及其度量分析:
度量中体现的仍是老生常谈的问题:depatcher的庞大。而致使这些的缘由之一是对数据结构的组建太混乱(第二次中的queue在本次中不减反增)。。。
好在debug方面总算把第二次的问题解决了,但是测试数据太弱仍是没能发现一些特殊的问题,好比提到的主指令为同质。。。以上这些缘由这也致使了我后来de了很久也没de完。。。
至于心得体会,从一个菜鸡的角度来看有如下几点吧。。。