commit 41aa9ebca37ad3220330181467b6bb73ce2a9137 Author: Guoyiting <654525901@qq.com> Date: Mon Mar 30 13:03:35 2026 +0800 完成图形面积计算器实验 diff --git a/ShapeAreaCalculator/Circle.java b/ShapeAreaCalculator/Circle.java new file mode 100644 index 0000000..531c763 --- /dev/null +++ b/ShapeAreaCalculator/Circle.java @@ -0,0 +1,15 @@ +package ShapeAreaCalculator; + +public class Circle extends Shape { + private double radius; + + public Circle(double radius) { + this.radius = radius; + } + + @Override + public double getArea() { + return Math.PI * radius * radius; + } +} + diff --git a/ShapeAreaCalculator/Main.java b/ShapeAreaCalculator/Main.java new file mode 100644 index 0000000..6f8f78e --- /dev/null +++ b/ShapeAreaCalculator/Main.java @@ -0,0 +1,13 @@ +package ShapeAreaCalculator; + +public class Main { + public static void main(String[] args) { + Shape circle = new Circle(5); + Shape rectangle = new Rectangle(4, 6); + Shape triangle = new Triangle(3, 4); + + ShapeUtil.printArea(circle); + ShapeUtil.printArea(rectangle); + ShapeUtil.printArea(triangle); + } +} diff --git a/ShapeAreaCalculator/Rectangle.java b/ShapeAreaCalculator/Rectangle.java new file mode 100644 index 0000000..96b3acc --- /dev/null +++ b/ShapeAreaCalculator/Rectangle.java @@ -0,0 +1,16 @@ +package ShapeAreaCalculator; + +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; + } +} diff --git a/ShapeAreaCalculator/Shape.java b/ShapeAreaCalculator/Shape.java new file mode 100644 index 0000000..d72d164 --- /dev/null +++ b/ShapeAreaCalculator/Shape.java @@ -0,0 +1,5 @@ +package ShapeAreaCalculator; + +public abstract class Shape { + public abstract double getArea(); +} diff --git a/ShapeAreaCalculator/ShapeUtil.java b/ShapeAreaCalculator/ShapeUtil.java new file mode 100644 index 0000000..e96f107 --- /dev/null +++ b/ShapeAreaCalculator/ShapeUtil.java @@ -0,0 +1,7 @@ +package ShapeAreaCalculator; + +public class ShapeUtil { + public static void printArea(Shape shape) { + System.out.println("图形面积: " + shape.getArea()); + } +} diff --git a/ShapeAreaCalculator/Triangle.java b/ShapeAreaCalculator/Triangle.java new file mode 100644 index 0000000..8b571ad --- /dev/null +++ b/ShapeAreaCalculator/Triangle.java @@ -0,0 +1,16 @@ +package ShapeAreaCalculator; + +public class Triangle extends Shape { + private double base; + private double height; + + public Triangle(double base, double height) { + this.base = base; + this.height = height; + } + + @Override + public double getArea() { + return 0.5 * base * height; + } +} diff --git a/实验报告.md b/实验报告.md new file mode 100644 index 0000000..058d10c --- /dev/null +++ b/实验报告.md @@ -0,0 +1,24 @@ +一、实验目的 +1. 掌握抽象类的定义与使用 +2. 理解继承和多态的应用 +3. 学会统一处理不同图形对象 + +## 二、类图 +![类图](c:\Users\65452\Desktop\ketang\out\ShapeAreaCalculator\类图\类图.png) + +三、AI使用记录 +代码结构设计 + +类图生成 + +报告撰写 + +四、组合 vs 继承 +继承:子类继承父类,代码复用简单,但耦合度高 + +组合:类包含其他类对象,灵活低耦合,但代码量多 + +本实验:图形是"is-a"关系,适合用继承 + +五、实验总结 +掌握了抽象类、继承和多态的应用,能够统一处理不同类型的图形对象。 \ No newline at end of file diff --git a/类图.puml b/类图.puml new file mode 100644 index 0000000..4108af8 --- /dev/null +++ b/类图.puml @@ -0,0 +1,31 @@ +@startuml +abstract class Shape { + {abstract} + getArea(): double +} + +class Circle { + - radius: double + + getArea(): double +} + +class Rectangle { + - width: double + - height: double + + getArea(): double +} + +class Triangle { + - base: double + - height: double + + getArea(): double +} + +class ShapeUtil { + + printArea(Shape): void +} + +Shape <|-- Circle +Shape <|-- Rectangle +Shape <|-- Triangle +ShapeUtil ..> Shape +@enduml \ No newline at end of file