Menu
CoddyTech

回顾:形状计算器

本课属于 Coddy Dart 学习旅程的“面向对象编程”单元。第 49 课,共 110 课。

challenge icon

挑战

简单

我们来构建一个形状计算器系统,将抽象类和接口结合起来,打造灵活的几何工具包。你将设计一个类层次结构,通过抽象让不同形状共享通用行为,同时由每种形状提供各自独特的计算方式。

你将把代码整理到 3 个文件中:

  • shape.dart:在这里定义抽象基类和接口:
    • 定义一个抽象类 Shape,包含 String name 属性和构造函数。添加抽象方法 double calculateArea() 和 double calculatePerimeter()。再添加一个普通方法 describe(),用于打印 [name] - Area: [calculateArea()], Perimeter: [calculatePerimeter()]
    • 定义一个 Drawable 类,其中包含方法 draw(),用于打印 Drawing shape...
  • shapes.dart:导入 shape.dart,并创建具体的形状类:
    • 定义一个 Rectangle 类,它继承 Shape 并实现 Drawable。添加 double width 和 double height 属性。面积按 width * height 计算,周长按 2 * (width + height) 计算。draw() 方法应打印 Drawing rectangle [width]x[height]
    • 定义一个 Circle 类,它继承 Shape 并实现 Drawable。添加一个 double radius 属性。圆周率使用 3.14159。面积按 pi * radius * radius 计算,周长(圆周长)按 2 * pi * radius 计算。draw() 方法应打印 Drawing circle with radius [radius]
  • main.dart:导入 shapes.dart,并演示你的形状计算器:
    • 创建一个名为 'Rectangle' 的 Rectangle,宽度为 5.0,高度为 3.0
    • 创建一个名为 'Circle' 的 Circle,半径为 4.0
    • 对每个形状,先调用 draw(),再调用 describe()
    • 在两个形状之间打印一个空行

这个挑战展示了抽象类如何定义共享结构(每种形状都有面积和周长计算),而接口如何添加额外能力(形状可以被绘制)。每个具体类都继承抽象类来确定其核心身份,并实现接口来提供额外功能。

预期输出:

Drawing rectangle 5.0x3.0
Rectangle - Area: 15.0, Perimeter: 16.0

Drawing circle with radius 4.0
Circle - Area: 50.26544, Perimeter: 25.13272

亲手试试

import 'shapes.dart';

void main() {
  // TODO:创建一个名为 'Rectangle' 的 Rectangle,宽度为 5.0,高度为 3.0
  
  // TODO:创建一个名为 'Circle' 的 Circle,半径为 4.0
  
  // TODO:对矩形先调用 draw(),再调用 describe()
  
  // TODO:打印一个空行
  
  // TODO:对圆形先调用 draw(),再调用 describe()
}

面向对象编程中的所有课

自己练习: Dart 在线编译器