You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4.6 KiB

图形面积计算器重构 实验报告

一、实验目的

  1. 掌握 Java 抽象类与抽象方法的使用。
  2. 理解面向对象的继承、多态特性。
  3. 实现不同图形类的统一处理,提高代码扩展性。

二、实验任务

  1. 设计抽象类 Shape,包含抽象方法 getArea()
  2. CircleRectangleTriangle 继承 Shape 并实现面积计算。
  3. 编写工具类 ShapeUtil,提供统一打印面积的方法。
  4. 绘制 UML 类图。
  5. 完成代码测试与实验报告。

三、实验环境

  • 开发工具:Eclipse
  • 编程语言:Java
  • 版本控制:Git

四、项目结构

src/
├── Shape.java        // 抽象类
├── Circle.java       // 圆形类
├── Rectangle.java    // 矩形类
├── Triangle.java     // 三角形类
├── ShapeUtil.java    // 工具类
└── ShapeTest.java    // 测试主类

五、核心代码实现

1. 抽象类 Shape

public abstract class Shape {
    // 抽象方法:计算面积,子类必须实现
    public abstract double getArea();
}

2. 圆形类 Circle

public class Circle extends Shape {
    // 私有属性:半径
    private double radius;

    // 构造方法:初始化半径
    public Circle(double radius) {
        this.radius = radius;
    }

    // 重写父类抽象方法:计算圆面积 πr²
    @Override
    public double getArea() {
        return Math.PI * radius * radius;
    }
}

3. 矩形类 Rectangle

public class Rectangle extends Shape {
    // 私有属性:宽、高
    private double width;
    private double height;

    // 构造方法:初始化宽和高
    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }

    // 重写父类抽象方法:计算矩形面积 宽×高
    @Override
    public double getArea() {
        return width * height;
    }
}

4. 三角形类 Triangle

public class Triangle extends Shape {
    // 私有属性:底、高
    private double base;
    private double height;

    // 构造方法:初始化底和高
    public Triangle(double base, double height) {
        this.base = base;
        this.height = height;
    }

    // 重写父类抽象方法:计算三角形面积 底×高/2
    @Override
    public double getArea() {
        return base * height / 2;
    }
}

5. 工具类 ShapeUtil

public class ShapeUtil {
    // 统一打印任意图形的面积(多态实现)
    public static void printArea(Shape shape) {
        System.out.println("图形面积:" + shape.getArea());
    }
}

6. 测试主类 ShapeTest

public class ShapeTest {
    public static void main(String[] args) {
        // 1. 创建不同图形对象(向上转型为Shape父类)
        Shape circle = new Circle(5);
        Shape rectangle = new Rectangle(4, 6);
        Shape triangle = new Triangle(3, 4);

        // 2. 统一调用工具类打印面积(多态自动调用子类方法)
        System.out.print("圆形:");
        ShapeUtil.printArea(circle);

        System.out.print("矩形:");
        ShapeUtil.printArea(rectangle);

        System.out.print("三角形:");
        ShapeUtil.printArea(triangle);
    }
}

六、UML 类图

见提交作业

七、运行结果

圆形:图形面积:78.53981633974483
矩形:图形面积:24.0
三角形:图形面积:6.0

八、实验总结

  1. 抽象类的作用Shape 作为抽象父类,定义了所有图形的统一行为规范,强制子类必须实现 getArea() 方法,保证了代码的一致性。
  2. 多态的优势:通过父类引用指向子类对象,ShapeUtil 可以统一处理所有图形,无需为每个图形单独写打印方法,大幅提升了代码的扩展性。
  3. 面向对象思想:本次实验完整实践了封装(私有属性+构造方法)、继承(子类继承父类)、多态(方法重写+父类引用)三大面向对象核心特性。
  4. 代码扩展性:后续新增图形(如正方形、梯形),只需继承 Shape 并实现 getArea(),无需修改 ShapeUtil 等已有代码,符合开闭原则。

九、AI 使用情况

  1. 使用 AI 辅助理解抽象类、多态的核心概念,梳理代码结构。
  2. AI 提供了代码规范优化、类图绘制、实验报告撰写的指导。
  3. 自主完成代码编写、调试、测试,以及实验报告的最终整理。