Menu
CoddyTech

Kiểm tra cuối về lập trình hướng đối tượng

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

challenge icon

Thử thách

Dễ

Hãy cùng ôn lại mọi điều bạn đã học về OOP trong Lua! Bạn sẽ xây dựng một hệ thống phương tiện để minh họa tính kế thừa, tính đóng gói thông qua quy ước đặt tên và mixin cho các khả năng tùy chọn.

Bạn sẽ sắp xếp code trong năm tệp:

  • Vehicle.lua: Lớp cơ sở cho mọi phương tiện. Mỗi phương tiện có name và _speed theo quy ước riêng tư (được khởi tạo bằng 0). Thêm hàm getter :getName(), hàm getter :getSpeed() và hàm setter :setSpeed(value) để từ chối giá trị âm (nếu giá trị âm, in ra Speed cannot be negative và không thay đổi giá trị). Thêm phương thức :describe() trả về "{name} moving at {speed}".
  • Refuelable.lua: Bảng mixin chứa các hành vi liên quan đến nhiên liệu. Thêm phương thức :refuel(amount) để cộng thêm vào self._fuel, và phương thức :getFuel() trả về mức nhiên liệu hiện tại.
  • Car.lua: Kế thừa từ Vehicle và sử dụng mixin Refuelable. Hàm khởi tạo nhận name và khởi tạo _fuel bằng 0. Ghi đè :describe() để trả về "{name} moving at {speed}, fuel: {fuel}". Áp dụng mixin Refuelable để thêm khả năng sử dụng nhiên liệu cho ô tô.
  • Bicycle.lua: Chỉ kế thừa từ Vehicle, không cần chức năng nhiên liệu. Hàm khởi tạo chỉ nhận name. Xe đạp sử dụng phương thức :describe() được kế thừa mà không chỉnh sửa.
  • main.lua: Kết hợp mọi thứ! Tạo ô tô và xe đạp dựa trên các đầu vào, minh họa những khả năng khác nhau của chúng và cho thấy chúng dùng chung hành vi phương tiện như thế nào, đồng thời có những đặc điểm riêng.

Bạn sẽ nhận bốn đầu vào:

  1. Tên ô tô
  2. Tên xe đạp
  3. Tốc độ cần đặt cho cả hai phương tiện (một số)
  4. Lượng nhiên liệu cần thêm vào ô tô (một số)

Trong tệp chính:

  1. Tạo ô tô và xe đạp với tên đã cho
  2. Đặt tốc độ cho cả hai phương tiện bằng đầu vào thứ ba
  3. Đổ nhiên liệu cho ô tô bằng đầu vào thứ tư
  4. In ra phần mô tả ô tô
  5. In ra phần mô tả xe đạp

Ví dụ, nếu các đầu vào là Sedan, Mountain Bike, 60 và 45, đầu ra sẽ là:

Sedan moving at 60, fuel: 45
Mountain Bike moving at 60

Nếu các đầu vào là Sports Car, Road Bike, 120 và 80, đầu ra sẽ là:

Sports Car moving at 120, fuel: 80
Road Bike moving at 120

Thử thách này cho thấy tính kế thừa cung cấp hành vi dùng chung (cả hai phương tiện đều có thể di chuyển), mixin bổ sung các khả năng tùy chọn (chỉ ô tô cần nhiên liệu) và tính đóng gói bảo vệ tính toàn vẹn của dữ liệu (xác thực tốc độ). Mỗi kỹ thuật phục vụ một mục đích khác nhau trong thiết kế của bạn!

Tự làm thử

-- main.lua: Kết hợp mọi thứ

local Car = require('Car')
local Bicycle = require('Bicycle')

-- Đọc dữ liệu đầu vào
local carName = io.read()
local bicycleName = io.read()
local speed = tonumber(io.read())
local fuelAmount = tonumber(io.read())

-- TODO: Tạo ô tô với tên đã cho

-- TODO: Tạo xe đạp với tên đã cho

-- TODO: Đặt tốc độ cho cả hai phương tiện

-- TODO: Đổ lượng nhiên liệu đã cho vào ô tô

-- TODO: In ra mô tả của ô tô

-- TODO: In ra mô tả của xe đạp

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