Menu
CoddyTech

Lớp hình tròn

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

challenge icon

Thử thách

Dễ

Hãy tiếp tục xây dựng trình quản lý hình dạng Shape Manager bằng cách thêm lớp Circle bên cạnh lớp Rectangle mà bạn đã tạo trong bài học trước.

Bạn sẽ làm việc với bốn tệp để sắp xếp các hình dạng:

  • Shape.lua: Lớp Shape cơ sở, có :new(name) và :getName().
  • Rectangle.lua: Lớp Rectangle từ thử thách trước, có :getArea().
  • Circle.lua: Tạo lớp Circle kế thừa từ Shape. Hàm khởi tạo cần nhận radius, gọi hàm khởi tạo của lớp cha với tên "Circle" và lưu bán kính. Thêm phương thức :getArea() để tính diện tích hình tròn bằng công thức πr². Dùng math.pi làm giá trị của π.
  • main.lua: Nạp cả hai module Rectangle và Circle. Đọc ba giá trị từ đầu vào: chiều rộng hình chữ nhật, chiều cao hình chữ nhật và bán kính hình tròn. Tạo một đối tượng cho mỗi hình dạng và in ra bốn dòng: tên hình chữ nhật, diện tích hình chữ nhật, tên hình tròn và diện tích hình tròn.

Giờ đây, cả hai hình dạng đều có cùng giao diện thông qua kế thừa: mỗi hình có phương thức :getName() từ Shape và cách triển khai riêng cho :getArea(). Giao diện chung này sẽ hữu ích trong các bài học sắp tới.

Đầu vào: Ba dòng: chiều rộng (số), chiều cao (số) và bán kính (số).

Đầu ra: Bốn dòng: tên hình chữ nhật, diện tích hình chữ nhật, tên hình tròn và diện tích hình tròn.

Tự làm thử

-- Nạp module Rectangle
local Rectangle = require('Rectangle')

-- Nạp module Circle
-- TODO: Nạp module Circle tại đây

-- Đọc chiều rộng và chiều cao từ đầu vào
local width = tonumber(io.read())
local height = tonumber(io.read())

-- TODO: Đọc bán kính từ đầu vào

-- Tạo instance Rectangle mới với kích thước đã cho
local rect = Rectangle:new(width, height)

-- TODO: Tạo instance Circle mới với bán kính đã cho

-- In ra tên và diện tích của hình chữ nhật
print(rect:getName())
print(rect:getArea())

-- TODO: In ra tên và diện tích của hình tròn

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