第二次博客作业

第二阶段Blog作业


一、前言

1、写博感想:

  距离第一次博客作业已有近一个月之久,时间过得很快,上次写博仿佛发生在昨天,带着些许无知和迷茫。一个月的时间匆匆而过,时光的流逝,除了少量增长的知识,留下的依旧是写博的迷茫。不禁反思:这一个月的时间我究竟在干什么?老师的话经常使我想起:你设想,假设现在你就毕业了,或者四年后你毕业的时候,公司招聘你,他凭什么要你?就因为你是昌航的学生?需要不断提醒自己,不能因为高考结束就沾沾自喜,要居安思危。

2、对题目集感想:

  依旧是那熟悉题目集数量,但后三次的题目集难度却愈发增大,从之前只要随意翻翻书,查查资料就能写到满分,到现在无论怎么修改,依旧是有忘不了(过不去)的测试点。

3、题目集分析:

(1)第四次题目集:

  一共三个题目,第一题就给我们“下马威”:水文数据校验及处理。和名字一样,代码的难度对我而言也是高出我的想象。先是对业务背景的了解,就足以让我头疼。老师降低了难度,给了类图参考。后面两个相对更简单,只需要对老师给的类图进行编码即可题目分别是:日期问题面向对象设计和图形继承。

(2)第五次题目集:

  老师接到同学们的建议,将题目集的难度降低了不少,除了第四题:统计Java程序中关键词的出现次数 这个题目稍微有些难度,其他的都比较容易。(值得注意的是,此次作业的第五题还是关于日期问题的,两次用的都是聚合,但是design不一样)。

(3)第六次题目集:

  大部分是针对正则表达式的题目,可能是对Java有了一些了解,感觉不到像之前写代码时候的迷茫,难度感觉也就那样了。重点关注的是后两题:都是关于图形问题的题目,不同的是一个用的是继承design的,一个用的是接口。


 

二、题目集的设计与分析

1、题目集4(7-2)、题目集5(7-5)两种日期类聚合设计的优劣比较

  两个题目来自不同的题目集,用的是不同的聚合设计,完成同一份工作。我认为题目集4(7-2)的设计不用多说,肯定次于题目集5(7-5)。

  题目集4的设计,给我的感觉就是俄罗斯套娃,年套月,月套天,天套日期。老师给的类图如下:

 

 我将之编为代码后生成的类图如下:

 

 大致的功能基本上已实现。刚写的时候不知从何下手(好吧我承认类图我确实没看懂,聚合是什么我也不清楚),便开始边动手写代码便分析。一开始我是从Datedtil类写的,没写几行就发现不对劲:怎么会有一个Day类的私有变量。我便从year类开始动手。越写到后面渐渐开始理解类图的大致design,只是很不能理解为什么会有这么多“麻烦“的方法,像什么下一天啊,上一天啊,判断日期合法性呐,我一直都是想写在哪就写在哪。写到后面越觉得像是个套娃,也越来越觉得设计确实奇妙。写代码不是很费劲,主要是理解有些困难,之前学习c语言都是爱咋写就咋写,自己觉得舒服就怎么写,一个方法实现多个功能,但现在的Java设计原则的单一职责原则不太习惯,现在逐渐能够知道一些原因。为了能够复用。像我们现在写代码,用的很多都是方法,都是别人封装好的,我目前用到的代码没出现一行代码执行多个任务,就比如求下一年的方法,好几个地方都用到了,如果该方法在year类里进行了封装,就不必过多去思考怎么去求下一天,方法一搬出来问题就可以解决。

第二个题目,老师给的类图如下:

我写完后生成的类图如下:

 

 这次题目的耦合度相对上一个低了很多(我的看法),这也是我认为设计更合理的重要原因之一。迪米特法则也曾提示过:类之间的耦合越弱,越有利于复用。他把year类、month类、day类和日期类串在了一起,年月日这三个属性之间没太大的关联性。理解起来感觉也比上一次的更加容易。

2、题目集4(7-3)、题目集6(7-5、7-6)三种渐进式图形继承设计的思路与技术运用(封装、继承、多态、接口等):

(1)题目集4(7-3)的类图如下:

 

 

 

 

 矩形、三角形、圆均继承shape这个类;立方体则是继承矩形这个类。求面积的方法都是重写父类的方法。

(2)题目集6(7-5)的类图如下:

 

 

 

 

该题目主要的思路还是利用利用继承,不同的是继承的父类是抽象类。相比于上一个题目,此题不需要对父类Shape类的getArea等方法进行方法体编写,也更符合Java面向对象的特点。

(3)题目集6(7-6)

改题目则是用了获得面积的接口类。相比于上一个抽象类,有了接口的存在,便于该方法的复用,解决一个子类只能继承一个父类的问题。

(4)分析:

   谈谈我个人的看法:我觉得这三种方法各有优缺点,第一种思路会更清晰,父类有方法的实现,对子类复写的时候可以提供一些帮助,并且该类也可以使用。而抽象类使得这些类有一种分类的感觉。接口则便于重复使用。

3、对三次题目集中用到的正则表达式技术的分析总结

  在这三次题目集中,或多或少有涉及到正则表达式,侧面反映了正则表达式的重要“战略地位”。

  谈谈我对Java的正则表达式的理解:

  Java的正则表达式有两个很重要的类:Matcher类和Pattern类。Pattern类用于匹配正则表达式,常用的方法compile( ),括号里是正则表达式;split()方法用正则表达式对括号里的字符串进行处理并返回一个字符串数组。例如:

匹配waterLevel字符串里的 / 并将其分割成字符串数组存在allNum中。

而Matcher类则有一些用得比较多的方法。find方法则是判断时候在字符串里匹配到正则表达式,返回Boolean类型值。

 

三、踩坑心得

题目集4(7-1):

  关于一个数据的处理,我当时需要的是不断地读取某个类数组,但我不知道这个数组的长度(当时我也没有想到用length方法,现在写博的时候发现,不过应该也不可以使用这个方法),便用了try-catch语句对其进行处理:

虽然很勉强但是成功的解决了这个问题。

之后我试了一下用length方法:

 

可能是我使用的方法有问题,但是目前而言报错了,该类变量虽然是个数组,但没有length该方法。

 


 

四、总结

  老师给的题目的难度、题目量我都能理解,老师这么做肯定有他们的原因,肯定有他们想达到的目的,我个人觉得我们应该从这些题目集中分析老师所想要我们掌握的知识。但同时我希望老师就算不能给出源代码,也能通过一些方式,提示我们这些pta作业没拿到满分的同学,那些没过的测试点,具体测的是什么,为什么没过这些测试点。我个人认为有些测试点没过是逻辑上的疏忽。就比如判断给出的三角形三边是否合法问题,可能有些人只考虑到两边之和大于第三边,却忽略了两边之差小于第三边。在一个星期里,可能还是没有想到这个问题,我们承认自己的能力不足,但是我认为老师布置这些作业的任务,也不希望同学们带有这些问题未解决而去做下一个题目,可能不是所有没过的测试点都是这种疏忽的问题,但我认为这种疏忽某些限制条件是design上的问题。

  记得老师曾提到过,有同学提议讲一下之前的题目集,觉得难度有些大,老师便说出一直未讲的原因:不值得讲,之后会有题目集去讲。话说回来,之前的题目集我一直觉得焦头烂额,难以完成,甚至在得到一些基本分的时候会有“这几分,不要也罢”的冲动,有的时候觉得为了过那几个测试点,完全觉得没必要。但是在老师眼里这些所谓的“难题”确实是比较基础的一些基本题,根本不值得去讲,证明自己的能力十分有限,甚至是严重不足。学习不是一种负担,说好听点,是一种态度,是一种人生价值的体现,说直白点,就是你养家糊口的资本。老师也多次激励我们,让我们摆正心态,并从各个角度激励我们好好学习。

  这三次题目集,我觉得难度完全没有达到老师希望的水准,我也必须承认我的懒惰,希望能改过自新,发奋图强。


 

posted @ 2021-04-30 08:56  hred~  阅读(65)  评论(0)    收藏  举报