Menu
CoddyTech

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

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

challenge icon

Thử thách

Dễ

Hãy tạo một chương trình tính diện tích hình, qua đó thấy được sức mạnh của giao diện trong việc xây dựng code linh hoạt, dễ mở rộng. Bạn sẽ tạo một giao diện (interface) quy định hợp đồng tính diện tích, rồi triển khai giao diện đó trong các lớp hình khác nhau.

Bạn sẽ sắp xếp code trong bốn tệp:

  • Calculable.php: Định nghĩa giao diện Calculable với một chữ ký phương thức duy nhất: calculateArea(). Hợp đồng này đảm bảo mọi hình có thể tính diện tích đều tính được diện tích của nó.
  • Rectangle.php: Tạo lớp Rectangle triển khai Calculable. Hãy thêm tệp giao diện vào. Lớp này cần có các thuộc tính riêng tư $width và $height, được thiết lập qua hàm khởi tạo. Triển khai calculateArea() để trả về diện tích, bằng chiều rộng nhân với chiều cao.
  • Circle.php: Tạo lớp Circle, cũng triển khai Calculable. Hãy thêm tệp giao diện vào. Lớp này cần có thuộc tính riêng tư $radius, được thiết lập qua hàm khởi tạo. Triển khai calculateArea() để trả về diện tích bằng công thức pi() * radius * radius.
  • main.php: Thêm cả hai tệp hình vào. Tạo một hàm tên là displayArea, nhận một tham số kiểu Calculable và tên hình (chuỗi). Hàm sẽ in ra: "[name] area: [area]", trong đó diện tích được làm tròn đến 2 chữ số thập phân bằng number_format().

Bạn sẽ nhận bốn đầu vào: chiều rộng hình chữ nhật, chiều cao hình chữ nhật, bán kính hình tròn và tên hình tròn. Tạo một Rectangle với chiều rộng và chiều cao (chuyển sang số thực), rồi tạo một Circle với bán kính (chuyển sang số thực). Gọi displayArea() hai lần: lần đầu với hình chữ nhật và tên "Rectangle", sau đó với hình tròn và tên hình được cung cấp. In mỗi kết quả trên một dòng riêng.

Hàm displayArea() hoạt động với mọi hình triển khai Calculable. Hàm không cần biết nó đang tính diện tích hình chữ nhật, hình tròn hay bất kỳ hình nào khác mà bạn có thể thêm sau này. Đó chính là ưu điểm của việc lập trình dựa trên giao diện!

Tự làm thử

<?php
// Nhúng các tệp hình dạng
require_once 'Rectangle.php';
require_once 'Circle.php';

// TODO: Tạo hàm (function) tên là displayArea
// Hàm nhận một tham số (parameter) kiểu Calculable và tên hình dạng dạng chuỗi
// In ra: "[name] area: [area]", trong đó diện tích được làm tròn đến 2 chữ số thập phân bằng number_format()

// Đọc dữ liệu đầu vào
$width = floatval(trim(fgets(STDIN)));
$height = floatval(trim(fgets(STDIN)));
$radius = floatval(trim(fgets(STDIN)));
$circleName = trim(fgets(STDIN));

// TODO: Tạo Rectangle với chiều rộng và chiều cao

// TODO: Tạo Circle với bán kính

// TODO: Gọi displayArea() với hình chữ nhật, dùng "Rectangle" làm tên

// TODO: Gọi displayArea() với hình tròn, dùng tên hình dạng đã cho
?>

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 PHP online