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.
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ónamevà_speedtheo 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 raSpeed cannot be negativevà 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àoself._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ậnnamevà khởi tạo_fuelbằ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ậnname. 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:
- Tên ô tô
- Tên xe đạp
- Tốc độ cần đặt cho cả hai phương tiện (một số)
- Lượng nhiên liệu cần thêm vào ô tô (một số)
Trong tệp chính:
- Tạo ô tô và xe đạp với tên đã cho
- Đặt tốc độ cho cả hai phương tiện bằng đầu vào thứ ba
- Đổ nhiên liệu cho ô tô bằng đầu vào thứ tư
- In ra phần mô tả ô tô
- 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 60Nế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 120Thử 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
1Khái niệm “self”
Bảng với hàm“self” tường minhCú pháp dấu hai chấmDấu chấm và dấu hai chấmÔn tập: Điểm chuyển động4Dự án: Ngân hàng số
Thiết lập dự ánPhương thức nạp tiền2Mẫu Prototype cho lớp
Khái niệm PrototypeLiên kết bằng __indexHàm khởi tạo :new()Khởi tạo thuộc tínhCác instance độc lậpÔn tập: Nhà máy ô tô5Nạp chồng toán tử trong OOP
Cộng các đối tượngTrừ các đối tượngNối các đối tượngSo sánh các đối tượng (<, >)Ôn tập: phép tính với ví tiền8Đóng gói
Quy ước đặt tênClosure để bảo mậtTruy cập qua closureBảng chỉ đọcLogic kiểm tra hợp lệTổng kết: Két an toàn11Mẫu thiết kế (cơ bản)
Hàm tạo đối tượngBảng SingletonMẫu IteratorObserver (Listener)Ôn tập: Factory Logger3Trạng thái và hành vi của đối tượng
Biến instancePhương thức getterPhương thức setterThuộc tính tính toánĐịnh dạng chuỗiKiểm tra tính bằng nhauÔn tập: điểm số học sinh6Cơ bản về kế thừa
Thiết lập kế thừaKế thừa phương thứcMở rộng hàm khởi tạoThêm phương thức cho lớp conDùng chung và riêngÔn tập: hệ phân cấp hình dạng9Kết hợp và mixin
Quan hệ có-mộtỦy quyềnMixin đơn giảnÁp dụng nhiều mixinMixin và kế thừaÔn tập: Lắp ráp robot12Thử thách cuối
Ôn tập: hệ thống kho hàngÔn tập: trình quản lý người dùngÔn tập: trình theo dõi điểm sốKiểm tra cuối về lập trình hướng đối tượngTự luyện tập: Trình biên dịch Lua online