blog 2
这次来分析一下后面三个题目集的一些问题和一些自己的理解和问题。
先来分析一下题目集4-6的题目的情况。
从整体上来说,这三次的题目集是比之前的几次的题目集都是具有难度的,就拿这几次题目来说,之前的题目集都是还在基础的一个类或者说是一个方法的能够解决的问题,而到了后面的题目集,就开始了出现了一个比较难的点,就是正则表达式,而且有不少的题目都需要用到正则表达式,再者,开始出现了多个类里面又要包含多个方法的题目,就比如说7-2,这是一个日期的题目,但它里面的类和方法很多,并且在实现类和方法的同时还要对它实现对应的封装,将它的属性改为私有,本来只是一道简单的日期的问题,经过这些添加以后,难度就上来了,但是程序的稳定性和安全性得到了保障。之后的题目也出现了继承,但是继承这方面的知识点还不是很难,比较容易理解和做出来,总的来说这三次的题目是有很多的知识点糅合在一起并且很多琐碎的点的集合,比较有难度,但同时很锻炼。
先看题目7-2,这道题目要求设计设计如下几个类:DateUtil、Year、Month、Day,其中年、月、日的取值范围依然为:year∈[1900,2050] ,month∈[1,12] ,day∈[1,31] ,这道题需要设计到四个类,并且再这四个类中都有属于每个类的不同的方法,在过程上较为繁琐

但是从整体的角度上来讲,这道题目还是比较普通的,题目中的类中都只需要对方法进行对应的撰写就行了,然后就是在主函数中需要对选择进行一个switch的选择需要人对其进行选择,但我在这里的时候出现了一点小的问题,我总是会忘记加上对应的输入导致一直提示错误,有得时候会出现可以运行的来,但是运行结果为空的状况
相比与这道题之后的聚合二难度上是更加有了一点,但是对于过程上到是简化了不少,以下是题目集五的7-4的类图
相比于之前的聚合一,这道题目将类的方式进行了改变,它是将year,month,day都写进了datautil里面,并且将这几个的属性都进行了对应的私有化(我的做法),但是在主函数的做法上到是没有改变很多,只是减少和增加了一些对应的方法,但是最后运行的结果中,聚合二的使用时间要快于聚合一的使用时间,并且聚合二的使用内存空间也要小于聚合一,并且聚合二中都是属性私有化,这大大提高了设计大的程序的安全性和自身属性,下面放上两个方法特例的对比,
class Year{
int value;
//默认构造方法
public Year(){
}
//带参构造方法
public Year(int value){
this.value=value;
}
//getter
public int getValue(){
return value;
}
//setter
public void setValue(int value){
this.value=value;
}
//判断year是否为闰年
public boolean isLeapYear(){
if((value%4==0&&value%100!=0)||value%400==0)
return true;
else
return false;
}
这个是聚合一中对于年类的方法的设计

这个是对于后面聚合二的datauntil的方法的设计,可以很明显的看出两者的比较。
下面分析一下题目集4(7-3)、题目集6(7-5、7-6)三种渐进式图形继承设计的思路与技术运用
题目集4中的图形继承设计是一道非常简单的图形设计,他首先是设计出一个shape,里面包含的是一个关于面积的算法,但是这个算法设计的一开始为0,这个时候就开始用到继承的算法,后面给出了矩形,圆和体和球的几个类,但是这几个类都是通过shape的这个父类的算法来继承,并且将对应的里面的求面积的算法进行改写完成每一个类的求面积的算法的过程,这里放上父类shape的设计
class Shape {
public Shape()
{
System.out.println("Constructing Shape");
}
public double getArea()
{
return 0.0;
}
}最后在主函数中进行switch语句的选择就完成了本道题目。从这里来看这是一道非常简单的有关的继承的题目,但后后面的题目集5的7-4却加深了对图形设计的要求。
7-4要求对图形继承进行添加,这还要加上对三角形的求解,从键盘首先输入三个整型值(例如a b c),分别代表想要创建的Circle、Rectangle及Triangle对象的数量,然后根据图形数量继续输入各对象的属性值(均为实型数),数与数之间可以用一个或多个空格或回车分隔,这是我写的三角形的解法,同样使用到了继承的算法,同样和上道题一样shape为父类的继承,而且球面也只是一个简单的0.
class Triangle extends Shape {
double a = 0, b = 0, c = 0;
public Triangle(double a, double b, double c) {
this.a = a;
this.b = b;
this.c = c;
}
@Override
public double getArea() {//④
double p = (a + b + c) / 2;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
boolean isTriangle() {
if (a < 0 || b < 0 || c < 0) {
return false;
}
double[] sides = new double[3];
sides[0] = a;
sides[1] = b;
sides[2] = c;
Arrays.sort(sides);//⑤
return sides[0] + sides[1] > sides[2];
}
}在做三角形的时候要考虑到很多的因素,就像我在做题的啥时候就忘记了有两边之和大于第三边和两边之差小于第三边的这个规则导致在输出的时候出现了三角形的范围问题的出错。这道题在主函数上也有对应的一些改动,getArea()方法为抽象方法,功能为求得图形的面积;validate()方法也为抽象方法,对图形的属 性进行合法性校验;toString()继承自 Object,功能为输出图形的面积信息,而且要运用到多态。所谓的“多态”,简单的理解就是对象在不同情况下的不同表现,具体体现在定义和功能两个方 面,简单的总结一下,多态可以用“三个定义和两个方法”来总结。三个定义分别是父类定义子类构 建、接口定义实现类构建和抽象类定义实体类构建,而两个方法分别是方法重载和方法重写。本次作 业我们采用的是抽象类定义、实体类构建的方式。即 Shape 为抽象类,Circle、Rectangle 及 Triangle 为实体类。以下是我的主函数部分实现
、
相比这一道图形继承后面的7-6就简单多了,这道图形继承需要设计一个抽象方法,所以我干脆设计了一个抽象的类
就是GetArea就是对应的抽象方法,在这里面什么都没有,没有任何的属性,这道题也是属于比较简单的
abstract class Blank{
abstract public double getArea();
}这个就是我设计的抽象的方法,因为我不不知道直接设和设一个类在类中再设置抽象方法的区别,但是我还是用了我想用的方法去完成,结果还是成功了。后面就和之前的继承一一样了就不多说了。这三道继承的题目的改进让我学习到了很多知识点,第一题是基础的继承的知识点,继承可以让我只需要写一个类中放一个后面都可以用的方法,再在后面的类去继承父类的方法,这样可以节省很多运算的时间和空间,并且在设计的同时减少再去设计方法的繁琐的过程,是一个比较不错的方法。后面第二道题的多态的问题,多态的理解也就是打开了抽象类的大门,多态可以让程序的类和方法更加多样。并且更加深入的了解了进一步深入理解面向对象设计原则中的“单一职责原则”。第三道题就是加深了我对抽象方法的运用,它侧重于相关的细节和忽略不相关的细节。抽象作为识别基本行为和消除不相关的和繁琐的细节的过程,可以更大幅度的减少计算机对程序的运算时间和储存空间的占用。
再分析一下正则表达式,题目集五中是对正则表达式的运用的练习,一开学习正则表达式的时候并没有搞懂正则表达式的作用,只是觉得一窜数字字符就能表示出对应的日期或者说是数字,后来就知道它的作用是1. 测试给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”); 2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。 在做正则表达式的时候我总是会出现一些错误,我错误的以为正则表达式必须以“^”开头,以“$”结束,然后再写一道题目的时候,就一直编译报错,显示计算机阅读不出这个类型。后来经过查看才得知答案,并且对于正则表达式这一块我还是不能灵活的运用,还是需要借助正则表达式表才能顺利的将题目的一些表达写出来,还是需要多加练习一番。
对于这三次题目集的理解和踩坑,这三次题目集难度先从高道后面的易,题目集四的比较难,设计到了正则表达式,继承,和很多类的杂糅,是一次比较难的题目,但是通过这次的我深刻的理解了继承的知识点,但是对于正则表达式还是不能完全的掌握,就比如说题目即五这是比较简单的一个题目集,但我还是花了很久的时间去做,因为正则表达式的不熟悉,和一些简单的地方总是出错,比如说static静态的方法,和一些时候输入的语法的错误这些都是很基础很简单的错误这说明我还需要多做一些题目进行练习。题目集六中学习到了多态和抽象方法的运用,更加深入了解题目的更多样的做法和更少的空间占用和运行时间的方法。还是需要多进行一些练习,在正则表达式这一块还是需要多加研究,还有在方法的设计这一块上还是需要多进行研究,还有一些时间和空间的占用上的更多样的设计。

浙公网安备 33010602011771号