diff --git a/W4/shape/AI使用记录.txt b/W4/shape/AI使用记录.txt new file mode 100644 index 0000000..723b0fa --- /dev/null +++ b/W4/shape/AI使用记录.txt @@ -0,0 +1,5 @@ +在需求分析阶段,我向AI提问“如何通过抽象类统一处理不同图形面积计算”,AI明确了抽象类 Shape 的设计思路,指导我定义抽象方法 getArea() ,并让 Circle 、 Rectangle 、 Triangle 继承该抽象类,为实验奠定了核心框架。 + +代码实现阶段,我通过AI生成了抽象类、三个图形子类及工具类 ShapeUtil 的基础代码,同时解决了“类名与文件名不一致导致编译失败”“参数传递格式错误”等问题,AI还提供了可直接运行的测试代码,提升了编码效率。 + +类图设计与问题回答环节,AI协助绘制了UML类图,并清晰解释了“组合vs继承”的核心区别,帮助我完成了实验报告的理论部分 \ No newline at end of file diff --git a/W4/shape/Main.java b/W4/shape/Main.java new file mode 100644 index 0000000..b52bc61 --- /dev/null +++ b/W4/shape/Main.java @@ -0,0 +1,80 @@ +// Main.java +public class Main { + public static void main(String[] args) { + ShapeUtil util = new ShapeUtil(); + + // 测试圆形 + Shape circle = new Circle(2); + System.out.print("圆形(半径2):"); + util.printArea(circle); + + // 测试矩形 + Shape rectangle = new Rectangle(7, 6); + System.out.print("矩形(长7,宽6):"); + util.printArea(rectangle); + + // 测试三角形 + Shape triangle = new Triangle(5, 4); + System.out.print("三角形(底5,高4):"); + util.printArea(triangle); + } +} + +// 抽象类 Shape(不加 public) +abstract class Shape { + public abstract double getArea(); +} + +// 圆形类 +class Circle extends Shape { + private double radius; + + public Circle(double radius) { + this.radius = radius; + } + + @Override + public double getArea() { + return Math.PI * radius * radius; + } +} + +// 矩形类 +class Rectangle extends Shape { + private double length; + private double width; + + public Rectangle(double length, double width) { + this.length = length; + this.width = width; + } + + @Override + public double getArea() { + return length * width; + } +} + +// 三角形类 +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 (base * height) / 2; + } +} + +// 工具类 +class ShapeUtil { + public void printArea(Shape shape) { + double area = shape.getArea(); + System.out.printf("该图形的面积为:%.2f%n", area); + } +} diff --git a/W4/shape/类图.txt b/W4/shape/类图.txt new file mode 100644 index 0000000..1d66405 --- /dev/null +++ b/W4/shape/类图.txt @@ -0,0 +1,21 @@ ++---------------------------+ +| Shape | <-- 抽象类 ++---------------------------+ +| | +| + getArea(): double | <-- 抽象方法 ++---------------------------+ + ▲ + | 继承 ++----------+----------+-----------+ +| Circle | Rectangle | Triangle | ++-----------+----------+-----------+ +| - radius: double | - width: double | - base: double | +| + Circle(r: double) | + Rectangle(w: double, h: double) | + Triangle(b: double, h: double) | +| + getArea(): double | + getArea(): double | + getArea(): double | ++-----------+----------+-----------+ + ++---------------------------+ +| ShapeUtil | <-- 工具类 ++---------------------------+ +| + printArea(s: Shape): void| ++---------------------------+ \ No newline at end of file diff --git a/W4/shape/继承vs组合.txt b/W4/shape/继承vs组合.txt new file mode 100644 index 0000000..3c34de2 --- /dev/null +++ b/W4/shape/继承vs组合.txt @@ -0,0 +1,44 @@ +1. 继承(is-a 关系) +- 优点:代码复用、多态统一处理(如  Shape  统一调用  getArea() ),符合“是一种”语义(圆是一种图形)。 +- 缺点:耦合度高,子类必须实现父类所有抽象方法;Java 单继承限制,无法复用多个类的功能;修改父类会影响所有子类; + 继承关系在编译时确定,运行时无法改变。 + +2. 组合(has-a 关系) +- 优点:低耦合、高复用,可灵活组合多个功能;不破坏封装,可动态替换组件;一个类包含另一个类的对象作为成员。 +- 缺点:需要手动委托方法,代码量稍多,没有继承的多态便捷性;无法自动继承功能。 +3.本项目使用继承的原因: + +均是继承关系 + +圆 是一种 图形 +Circle extends Shape + +矩形 是一种 图形 +Rectangle extends Shape + +三角形 是一种 图形 +Triangle extends Shape + +需要多态: + +ShapeUtil.printArea(Shape shape) 需要统一处理 +用 Shape 类型可以接受任何图形 + +代码复用: + +所有图形都有 name 属性 +继承避免重复代码 + + + + + +反思: +1. 对Java语法与命名规范的理解不足 +最初修改类名、文件名后代码无法运行,暴露了我对“ public 类必须与文件名完全一致”“构造方法参数不能带标签名”等基础规则掌握不牢。今后要先夯实语法基础,再进行代码重构,避免因细节疏忽导致编译错误。 + +2. 面向对象设计思维仍需强化 +一开始依赖AI给出抽象类框架,自己对“为何用抽象类实现多态”的理解不够深入。通过本次实验才真正体会到:抽象类 Shape 的价值在于统一接口,让 ShapeUtil 能无差别处理所有图形,这是多态思想的核心体现。 + +3. 工具依赖与自主思考的平衡待优化 +实验中多次依赖AI排查错误、生成代码,虽然提升了效率,但也削弱了自主分析问题的能力。今后要先尝试独立解决问题,再借助AI验证思路,避免过度依赖工具导致编程能力退化。 \ No newline at end of file diff --git a/W4/shape/运行截图.png b/W4/shape/运行截图.png new file mode 100644 index 0000000..4324ed3 Binary files /dev/null and b/W4/shape/运行截图.png differ