Lua - Lập Trình Hướng Đối Tượng
Giới Thiệu Về Lập Trình Hướng Đối Tượng (OOP)
Xin chào các bạn đang theo đuổi lập trình! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới Lập Trình Hướng Đối Tượng (OOP) bằng Lua. Đừng lo lắng nếu bạn là người mới bắt đầu; tôi sẽ hướng dẫn bạn từng bước với cùng sự chăm sóc và niềm say mê mà tôi đã sử dụng trong lớp học trong nhiều năm.
Lập Trình Hướng Đối Tượng giống như xây dựng bằng những viên gạch LEGO. Mỗi viên gạch (hoặc đối tượng) có những thuộc tính riêng và có thể thực hiện một số hành động nhất định. Khi chúng ta ráp chúng lại với nhau, chúng ta tạo ra những cấu trúc tuyệt vời (hoặc các chương trình).
Đặc Điểm Của OOP
Trước khi chúng ta nhảy vào Lua, hãy nhanh chóng xem qua các đặc điểm chính của OOP:
- Đóng gói (Encapsulation): Điều này giống như giữ đồ chơi của bạn trong một hộp. Hộp (đối tượng) chứa tất cả các thứ liên quan (dữ liệu và hàm).
- Thừa kế (Inheritance): Hãy tưởng tượng bạn có một con robot玩具. Bây giờ, bạn có một con robot mới có thể làm tất cả những gì con cũ có thể làm, cộng thêm một số kỹ năng mới. Đó là thừa kế!
- Đa hình (Polymorphism): Điều này giống như có một điều khiển từ xa hoạt động cho nhiều thiết bị khác nhau. Cùng một nút, nhưng hành động khác nhau tùy thuộc vào thứ bạn đang điều khiển.
- T抽象 (Abstraction): Hãy nghĩ về nó như việc sử dụng lò vi sóng. Bạn không cần biết nó hoạt động như thế nào bên trong; bạn chỉ cần biết哪个按钮 (nút) cần nhấn.
OOP trong Lua
Bây giờ, hãy xem cách chúng ta có thể sử dụng các khái niệm OOP trong Lua. Lua không có lớp内置 (như một số ngôn ngữ khác), nhưng chúng ta có thể tạo cấu trúc hướng đối tượng bằng cách sử dụng bảng và hàm. Đó giống như chúng ta đang xây dựng bộ LEGO của riêng mình từ đầu!
Tạo Một Lớp Đơn Giản
Hãy bắt đầu bằng cách tạo một lớp đơn giản. Trong Lua, chúng ta sử dụng bảng để đại diện cho lớp.
local Dog = {}
Dog.__index = Dog
function Dog.new(name, age)
local self = setmetatable({}, Dog)
self.name = name
self.age = age
return self
end
function Dog:bark()
print(self.name .. " nói: Woof!")
end
Hãy phân tích này:
- Chúng ta tạo một bảng gọi là
Dog
. - Chúng ta đặt
Dog.__index = Dog
. Đây là một chút phép màu của Lua giúp với việc thừa kế. - Chúng ta tạo một hàm
new
hoạt động như constructor. Nó tạo ra một con chó mới với tên và tuổi. - Chúng ta thêm một phương thức
bark
vào lớp Dog.
Tạo Một Đối Tượng
Bây giờ chúng ta đã có lớp Dog, hãy tạo một đối tượng Dog:
local myDog = Dog.new("Buddy", 3)
Chúc mừng! Bạn vừa tạo ra đối tượng đầu tiên của mình. myDog
bây giờ là một đối tượng Dog với tên "Buddy" và tuổi 3.
Truy Cập Thuộc Tính
Chúng ta có thể truy cập các thuộc tính của con chó của mình như này:
print(myDog.name) -- Xuất: Buddy
print(myDog.age) -- Xuất: 3
Nó đơn giản như việc sử dụng dấu chấm!
Truy Cập Phương Thức Thành Viên
Để làm cho con chó của chúng ta sủa, chúng ta có thể gọi phương thức bark:
myDog:bark() -- Xuất: Buddy nói: Woof!
Chú ý dấu :
thay vì dấu chấm. Đây là cách của Lua để truyền self
đến phương thức.
Ví Dụ Hoàn Chỉnh
Hãyputting it all together:
local Dog = {}
Dog.__index = Dog
function Dog.new(name, age)
local self = setmetatable({}, Dog)
self.name = name
self.age = age
return self
end
function Dog:bark()
print(self.name .. " nói: Woof!")
end
local Labrador = {}
setmetatable(Labrador, {__index = Dog})
function Labrador.new(name, age, color)
local self = Dog.new(name, age)
setmetatable(self, {__index = Labrador})
self.color = color
return self
end
function Labrador:swim()
print(self.name .. " đang bơi!")
end
function Labrador:bark()
print(self.name .. " nói: Woof woof woof!")
end
local myDog = Dog.new("Buddy", 3)
local myLabrador = Labrador.new("Max", 2, "Vàng")
myDog:bark() -- Xuất: Buddy nói: Woof!
myLabrador:bark() -- Xuất: Max nói: Woof woof woof!
myLabrador:swim() -- Xuất: Max đang bơi!
Và thế là xong! Chúng ta đã tạo ra cấu trúc lớp cơ bản, thực hiện thừa kế, và thậm chí còn ghi đè phương thức. Bạn đã trên đường trở thành chuyên gia OOP trong Lua!
Nhớ rằng, thực hành là cách tốt nhất để hoàn thiện kỹ năng. Hãy thử tạo ra các lớp của riêng bạn và thử nghiệm với các thuộc tính và phương thức khác nhau. Chúc các bạn lập trình vui vẻ!
Credits: Image by storyset