Menu
CoddyTech

Phương thức tính chu vi

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 58 trên 70.

challenge icon

Thử thách

Dễ

Hãy mở rộng Shape Manager bằng cách thêm phương thức :getPerimeter() vào cả hai lớp Rectangle và Circle. Giống như :getArea(), mỗi hình tính chu vi theo cách khác nhau, nhưng chúng dùng chung tên phương thức: đây là ví dụ điển hình về tính đa hình.

Bạn sẽ tiếp tục làm việc với các tệp hiện có:

  • Shape.lua: Lớp Shape cơ sở vẫn giữ nguyên.
  • Rectangle.lua: Thêm phương thức :getPerimeter() để trả về chu vi hình chữ nhật theo công thức 2 × (width + height).
  • Circle.lua: Thêm phương thức :getPerimeter() để trả về chu vi hình tròn theo công thức 2 × π × radius. Dùng math.pi cho π.
  • main.lua: Yêu cầu cả hai module hình dạng, đọc các kích thước từ đầu vào, tạo một Rectangle và một Circle, sau đó in ra sáu dòng: tên, diện tích và chu vi của hình chữ nhật, rồi đến tên, diện tích và chu vi của hình tròn.

Cả hai hình giờ đều có giao diện hoàn chỉnh với :getName(), :getArea() và :getPerimeter(): bạn có thể gọi chúng bằng cùng tên phương thức dù cách triển khai khác nhau.

Đầu vào: Ba dòng: width (số), height (số) và radius (số).

Đầu ra: Sáu dòng theo thứ tự: tên hình chữ nhật, diện tích hình chữ nhật, chu vi hình chữ nhật, tên hình tròn, diện tích hình tròn, chu vi hình tròn.

Tự làm thử

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

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

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

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

-- Tạo instance Circle mới với bán kính đã cho
local circ = Circle:new(radius)

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

-- In ra tên, diện tích và chu vi của hình tròn
print(circ:getName())
print(circ:getArea())
print(circ:getPerimeter())

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