第二次BLOG

1)前言

第四次作业

1.水文数据校验及处理 

2.日期问题面向对象设计

3.图形继承

知识点:继承,正则表达式,多态,日期接口的使用,封装

难度:偏难

题量:适中

第五次作业

1.日期问题面向对象设计(聚合二)

2. 统计Java程序中关键词的出现次数 

3.合并两个有序数组为新的有序数组

4.对整型数据排序

知识点:arraylist的使用,正则表达式的使用,简单算法排序

难度:适中

题量:偏少

第六次作业

1.正则表达式训练-QQ号校验

2.字符串训练-字符排序

3. 正则表达式训练-验证码校验

4.正则表达式训练-学号校验

5.图形继承与多态

6.实现图形接口及多态性

知识点:正则表达式的巩固训练,接口,继承,多态

难度:简单

题量:适中

2)设计与分析:重点对题目的提交源码进行分析,可参考SourceMonitor的生成报表内容以及PowerDesigner的相应类图,要有相应的解释和心得(做到有图有真相),本次Blog必须分析的内容如下:

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

类图:

 

 

 生成报表:

 

 

 

 

 

 这个判断该年剩余天数是自己加的一个方法,用于判断年份是否需要改变。

该题目我严格按照题目给的类图进行封装设计,体会到了封装的好处,方法调用起来比较方便,可读性也增强了许多,层次比较分明。

day,month,year类里都有相应的构造方法,检验输入是否合法,数值的变化方法。

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

7-3

这个题目主要是考查类的继承,对于继承类,就是子类继承父类的办法,然后避免了代码的复用,做这一题的时候是这一次作业的最简单的一次,因为没有对比就没有伤害,其他题目太难了,所以拿到这题的时候,就是千万不能忽略一点,就是在子类构造器中添加一个输出语句,答案中有这个点,一定不要忘记这个点,还有就是对于子类中对父类方法的重写,我认为对于这一题一定要,注意判定输入值的条件,即半径或长和宽的长度要大于零。我认为可以采用封装性,即对类中的属性进行判断,然后直接调用求面积的方法。我认为这是对类的封装性的理解。类图和圈复杂度分析如下。

 

 

 

 

 7-5

该题是图像的继承与多态,考察的是抽象类,首先这个题目是个50分,是我在题目集中最后写好的,怎么说那这题,这是我做的50分的题目中较简单的题目,其中体现了子类方法的重写,然后就是主方法的书写,我认为这道题目主方法比类更复杂一点,类中就是对于求面积的简单书写,刚开始我犯了一个错误,就是我以为输出面积只输出三种图形的面积总和,我只与测试点一对比因为一测试点巧了,每一个图形都只有一个,所以输出的面积只有三个,我就以为自己写的正确了。然后我就提交了,结果所有的测试数据错误全通过了,测试正确的点一个没通过,然后我又仔细看了看题目,原来要输出每一个图形的面积,如果一个图形一个面积都没有的话什么都不输出,改正后,结果就正确了,这是我写的最快的一次50分的题目,类图和圈复杂度分析如下。

 

7-6

改题目相当于题目5的超级简化,当然我是先做的这一题,刚开始做这一题的时候,其实也不是很难,这题是接口即多态性,这题就是类继承接口的方法,然后重写接口的方法,该子类中使用了封装性,即对子类的属性进行限定满足条件时即可正常使用,这样的目的是直接对数据进行判断。我认为这题的主要考点是接口即多态。我认为接口和抽象类的差别是子类可以继承很多个接口,而抽象类子类只能继承一个。类图和圈复杂度分析如下。

 

 

 

 

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

这三次的正则表达式难度逐渐减小,好像有意让我们感受正则表达式技术上的运用,先让我们知道正则表达式技术的运用挺难的,之后在让我们练习几道简单的正则表达式,感觉正则表达式还是在技术上需要找到相应的表达式一步步的将想要的信息找到,就我目前来讲,我没有能很好的运用正则表达式的技术,后续需要多加练习。

    ④题目集5(7-4)中Java集合框架应用的分析总结

题目内容为统计Java程序中关键词的出现次数,在保存每一行的源代码,我用到了集合框架中的ArrayList,相当于动态数组,因为在输入时并不知道源代码的行数,因此用ArrayList更加方便。

Map 接口存储一组键值对象,提供key(键)到value(值)的映射。Map集合中key是唯一的,即所有键值对的key部分都不相同。

    void clear():从映像中删除所有映射,清空集合,元素个数清0。

    int size(); 获取集合中元素的个数。

    Set keySet(); 获取集合中所有的key,返回一个包含所有key元素的Set集合。

3)采坑心得

  1. 在题目集四的第二题中,在对于DateUtil中day、month、year的传参顺序不对,Main类和DateUtil类中参数类型的顺序不同。导致最后输出的结果出现错误。
  2. 在日期计算时对于闰年平年的差别没有处理好,最后导致数据输出出现偏差。在有关日期的题目中,闰年和平年是要重视和小心的一个点。之后的题目中再碰到要想清楚如何处理再写。
  3. 在比较两个日期的地方,由于我是复制了前面差不多的语句来进行小修改,但是我复制完后忘记了进行修改,导致代码判断出现偏差。
  4. 在题目集六中对该字符串内的字符进行排序后(按ASCII码进行升序排序)输出,我的开始的思路是将字符串一个一个分开变为一个数组,在转化成整型,排序后转化为char型,最后出现了转化错误。写题真的不能用这么复杂的思路,换来换去就容易出错。
  5. 在写图形继承的那道题时,我将其它类保存后,我发现原本没有报错的Ball类中返回体积値的语句出现报错,怎么找都没找到错误。最后发现保存了其他的类时剩下的类会报错,把这个类保存报错就会消失。

4)改进建议

  1. 对于类与对象的使用还是不熟练,并且很多概念不是很清楚,还是得多多自学类与对象的知识。
  2. 对于复杂的正则表达式还是不会用,只能用来判断简单的表达式。
  3. 对于ArrayList要熟练学习它的用法,在之后的一些题目用起来可能会方便一点。
  4. 这次还使用到了接口,这个我之前都不了解,要加强对接口的学习。

5)总结

本次作业我学习到了继承、多态以及接口的运用,正则表达式的运用和ArrayList的运用,成功掌握了正则表达式中的多种使用方法。但是,我还有许多地方有待进步和改进,比如对于正则表达式的难点题目的突破和ArrayList创建对象List的运用等。其它的各种方法我也会抓紧时间去学习。这三次题目集涉及了很多面向对象的内容,在认真看过老师给出的类图设计后确实能掌握一些如何来设计一个程序的知识了,同时也能明显感到面向对象程序设计给编程带来的便利,相比于以前的代码,现在写出的代码在可读性,可拓展性上都有极大的提升,可以说受益匪浅。

posted @ 2021-11-13 21:37  NCHSH  阅读(39)  评论(0)    收藏  举报