回顾:形状计算器
本课属于 Coddy Dart 学习旅程的“面向对象编程”单元。第 49 课,共 110 课。
挑战
简单我们来构建一个形状计算器系统,将抽象类和接口结合起来,打造灵活的几何工具包。你将设计一个类层次结构,通过抽象让不同形状共享通用行为,同时由每种形状提供各自独特的计算方式。
你将把代码整理到 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 在线编译器