Menu
CoddyTech

Ôn tập: Máy tính hình

Thuộc phần Lập trình hướng đối tượng trong hành trình Dart của Coddy. Bài học 49 trên 110.

challenge icon

Thử thách

Dễ

Hãy cùng xây dựng một hệ thống tính toán hình học, kết hợp lớp trừu tượng (abstract class) và giao diện (interface) để tạo nên một bộ công cụ hình học linh hoạt. Bạn sẽ thiết kế một hệ thống phân cấp lớp, trong đó các hình dạng khác nhau chia sẻ hành vi chung thông qua tính trừu tượng, đồng thời mỗi hình dạng có các phép tính riêng.

Bạn sẽ sắp xếp code thành ba tệp:

  • shape.dart: Định nghĩa lớp cơ sở trừu tượng và giao diện tại đây:
    • Một lớp trừu tượng Shape có thuộc tính String name và hàm khởi tạo. Thêm các phương thức trừu tượng double calculateArea() và double calculatePerimeter(). Thêm một phương thức thông thường describe() để in ra [name] - Area: [calculateArea()], Perimeter: [calculatePerimeter()]
    • Một lớp Drawable có phương thức draw() để in ra Drawing shape...
  • shapes.dart: Nhập shape.dart và tạo các lớp hình dạng cụ thể:
    • Một lớp Rectangle kế thừa Shape và triển khai Drawable. Thêm các thuộc tính double width và double height. Tính diện tích bằng width * height và chu vi bằng 2 * (width + height). Phương thức draw() sẽ in ra Drawing rectangle [width]x[height]
    • Một lớp Circle kế thừa Shape và triển khai Drawable. Thêm thuộc tính double radius. Dùng 3.14159 làm số pi. Tính diện tích bằng pi * radius * radius và chu vi bằng 2 * pi * radius. Phương thức draw() sẽ in ra Drawing circle with radius [radius]
  • main.dart: Nhập shapes.dart và minh họa hệ thống tính toán hình học:
    • Tạo một Rectangle có tên 'Rectangle', chiều rộng là 5.0 và chiều cao là 3.0
    • Tạo một Circle có tên 'Circle', bán kính là 4.0
    • Với mỗi hình dạng, gọi draw(), sau đó gọi describe()
    • In một dòng trống giữa hai hình dạng

Thử thách này minh họa cách lớp trừu tượng định nghĩa cấu trúc chung, trong đó mỗi hình dạng đều có phép tính diện tích và chu vi, còn giao diện bổ sung các khả năng khác, chẳng hạn như khả năng vẽ hình. Mỗi lớp cụ thể kế thừa lớp trừu tượng để có đặc điểm cốt lõi và triển khai giao diện để có thêm chức năng.

Kết quả mong đợi:

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

Tự làm thử

import 'shapes.dart';

void main() {
  // TODO: Tạo một Rectangle tên là 'Rectangle' có chiều rộng 5.0 và chiều cao 3.0
  
  // TODO: Tạo một Circle tên là 'Circle' có bán kính 4.0
  
  // TODO: Với hình chữ nhật, gọi draw() rồi gọi describe()
  
  // TODO: In ra một dòng trống
  
  // TODO: Với hình tròn, gọi draw() rồi gọi describe()
}

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Dart online