OO第二次博客作业

Posted on 2021-05-02 19:46  我给你一拳丶  阅读(63)  评论(0编辑  收藏  举报

题集4:
7-1(水文数据校验及处理):

  • 使用Java中的字符串处理类以及正则表达式对输入字符串数据进行合法性校验及计算
  • 难度:(困难)

7-2(日期问题面向对象设计):

  • 使类具有实体引用(采用聚合)
  • 难度:(一般)

7-3(图形继承):

  • 实现图形类的继承
  • 难度:(一般)

题集5:
7-1(找最长单词)

  • 使用空格分割,对每一个分割后的单词进行长度判断

7-2(合并两个有序数组)

  • 可以使用System.arraycopy()快速合成新的数组

7-3(数据排序)

  • 熟悉插入,选择,冒泡三种排序方式

7-4(统计Java程序中关键词的出现次数)

  • 注释中出现的关键字不用统计
  • 字符串中出现的关键字不用统计
  • 熟练使用正则表达式

7-5(日期问题面向对象设计)

  • 使类具有实体引用(聚合二)

题集6:
7-1(qq号校验)- 7-3(验证码校验)- 7-4(学号校验)

  • 对正则表达式合理并熟练的运用

7-2(字符排序)

  • char [] a=s.toCharArray();使用toCharArray()将输入的字符串转换为字符数组
  • 使用Arrays.sort(a);对转换后的数组进行排序(从小到大)

7-5(图形继承与多态 )

  • 掌握类的继承、多态性及其使用方法

7-6(实现图形接口及多态性)

  • 使用接口及类实现多态性

代码分析:

  1. 题目集4(7-2)、题目集5(7-4)两种日期类聚合设计的优劣比较
    两者的类图分别如下:

在比较前 为什么我们需要聚合,那是因为我们可以通过使用聚合关系来提高代码的可重用性。

  • 题集4.(7-2)中的聚合设计是层层往下传递,具有清晰逐递性,但是,若中间某个类中的一些信息进行了相应的修改,则后续接收“传递”的类中必须要更改其对应的类,但在进行修改的类的之前那些类则不需要进行改动。
  • 题集5.(7-4)中的聚合设计是全部集中于DateUtil()上,,若是Month类,Year类,Day类,在自己的类中进行了一些修改,信息更换,其他的类则不需要进行相应的修改。缺点:若是在DateUtil()类中进行x相关的信息修改,则其对应的Month,Year,Day类,也要进行相应的修改,一动DateUtil则会牵扯到其全部的类。
  1. 题目集4(7-3)、题目集6(7-5、7-6)三种渐进式图形继承设计的思路与技术运用(封装、继承、多态、接口等)
  • 在题集4(7-3)中:

可以看出,Shape类是在这一题中的最基本的类,Circle类、Rectangle类都继承自Shape类,对于任意一个图形来说,我们并不知道它的具体形状、具体参数情况等,但是封闭图形都会有一个面积值,因此我们将其抽取出来,形成具有计算面积大小方法的Shape父类;Circle类、Rectangle类作为子类有其特有的属性,重写计算面积的方法可以计算各自的面积;Ball类、Box类分别继承自Ciecle类和Rectangle类,重写计算面积方法可求其表面积,除此之外还可加上属于本身所独有的计算体积的方法;形成继承关系就是形成了is-a关系,比如本题中的Ball类,Ball是Circle是Shape,即球是圆是图形关系。

  • 在题集6(7-5)中:

可以看出多态的运用为我们提供了另外一个方式(Shape circle = new Shape),通过调用ciecle.getArea便可求的该圆的面积

  • 在题集6(7-6)中:

通过声明一个接口Shape,class round implements Shapeclass rectangle implements Shape分别实现Shape接口,使用接口的引用分别调用圆类对象及矩形类对象的求面积的方法。
代码如下:
import static java.lang.Math.*;
import java.util.Scanner;
import java.util.*;

interface Shape { void areas(); }
class round implements Shape {
double r; public round(double r) { this.r = r; }
public void areas() { System.out.println(String.format("%.2f", PI * r * r)); }
}`

class rectangle implements Shape {
double h, w;

public rectangle(double h, double w) {
	this.h = h;
	this.w = w;

}

public void areas() {
	System.out.println(String.format("%.2f", h*w));

}

}
public class 图形接口和多态性 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in); double x = input.nextDouble(); double y = input.nextDouble(); double z = input.nextDouble(); if(x<=0||y<=0||z<=0){ System.out.print("Wrong Format"); } else { round ro = new round(x); rectangle r = new rectangle(y, z); ro.areas(); r.areas(); } }
}

  1. 三次题目集中用到的正则表达式技术的分析总结
  • 题集6(7-1):qq号验证:String regex = "[1-9][0-9]{4,14}";
  • 题集6(7-3):验证码校验:String regex = "[a-zA-Z0-9]{4,4}";
  • 题集6(7-4):学号检验:String regex = "(2020([1-1][1-7]||61||[7-7][1-3]||[8-8[1-2]])([0-0][1-9]||[1-3][0-9]||[4-4][0-0])){8}";
    学习心得:首先在/……/,最外面有一个g,表示全局匹配,即满足要求的都替换,如果没有g,则满足要求的第一个进行替换,在里面的内容是'/',''是转义的意思,就是告诉程序,接下来我写的东西因为被你们占据了,所以需要转义一下。
  1. 题目集5(7-4)中Java集合框架应用的分析总结
  • 对于7-4水文数据处理这一题,个人而言不是太会,还在努力学习中!
  1. 学习总结
    通过这段时间的学习,确实感受到了面向对象编程的强大、思维难度之大,在这一阶段的作业中,最主要的是对正则表达式有了一定基础的了解,为以后编写程序时数据的校验打下了一定的基础;也慢慢接触并运用到了面向对象的三大特性,几大原则。

Copyright © 2024 我给你一拳丶
Powered by .NET 9.0 on Kubernetes