From 41aa9ebca37ad3220330181467b6bb73ce2a9137 Mon Sep 17 00:00:00 2001 From: Guoyiting <654525901@qq.com> Date: Mon, 30 Mar 2026 13:03:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=9B=BE=E5=BD=A2=E9=9D=A2?= =?UTF-8?q?=E7=A7=AF=E8=AE=A1=E7=AE=97=E5=99=A8=E5=AE=9E=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ShapeAreaCalculator/Circle.java | 15 +++++++++++++++ ShapeAreaCalculator/Main.java | 13 +++++++++++++ ShapeAreaCalculator/Rectangle.java | 16 +++++++++++++++ ShapeAreaCalculator/Shape.java | 5 +++++ ShapeAreaCalculator/ShapeUtil.java | 7 +++++++ ShapeAreaCalculator/Triangle.java | 16 +++++++++++++++ 实验报告.md | 24 +++++++++++++++++++++++ 类图.puml | 31 ++++++++++++++++++++++++++++++ 8 files changed, 127 insertions(+) create mode 100644 ShapeAreaCalculator/Circle.java create mode 100644 ShapeAreaCalculator/Main.java create mode 100644 ShapeAreaCalculator/Rectangle.java create mode 100644 ShapeAreaCalculator/Shape.java create mode 100644 ShapeAreaCalculator/ShapeUtil.java create mode 100644 ShapeAreaCalculator/Triangle.java create mode 100644 实验报告.md create mode 100644 类图.puml 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