Lua语言入门 - Lua 面向对象

发布于:2025-02-11 ⋅ 阅读:(45) ⋅ 点赞:(0)

Lua 面向对象

面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构,通过创建和操作对象来设计应用程序。

以下几种编程语言都支持面向对象编程:

  • C++
  • Java
  • Objective-C
  • Smalltalk
  • C#
  • Ruby

Lua 是一种轻量级的脚本语言,虽然它不像 Java 或 C++ 那样内置强大的面向对象(OO)特性,但它非常灵活,可以通过一些技巧实现面向对象编程。

面向对象特征

  • 封装:将数据和方法捆绑在一起,隐藏实现细节,只暴露必要的接口,提高安全性和可维护性。

  • 继承:通过派生新类复用和扩展现有代码,减少重复编码,提高开发效率和可扩展性。

  • 多态:同一操作作用于不同对象时表现不同,支持统一接口调用,增强灵活性和扩展性。

  • 抽象:简化复杂问题,定义核心类和接口,隐藏不必要的细节,便于管理复杂性。

Lua 中面向对象

我们知道,对象由属性和方法组成。

Lua 中的类可以通过 table + function 模拟出来。

至于继承,可以通过 metetable 模拟出来(不推荐用,只模拟最基本的对象大部分实现够用了)。

在 Lua 中,最基本的结构是 table,我们可以使用表(table)来创建对象。

ClassName = {}  -- 创建一个表作为类

通过 new 方法(或其他名称)创建对象,并初始化对象的属性。

function ClassName:new(...)
    local obj = {}  -- 创建一个新的空表作为对象
    setmetatable(obj, self)  -- 设置元表,使对象继承类的方法
    self.__index = self  -- 设置索引元方法
    -- 初始化对象的属性
    obj:init(...)  -- 可选:调用初始化函数
    return obj
end

表(table)是 Lua 中最基本的复合数据类型,可以用来表示对象的属性。

Lua 中的 function 可以用来表示方法:

function ClassName:sayHello()
    print("Hello, my name is " .. self.name)
end

 使用 new 方法来创建对象,并通过对象调用类的方法。

local obj = ClassName:new("Alice")  -- 创建对象
obj:sayHello()  -- 调用对象的方法
-- 定义 Person 类
Person = {name = "", age = 0}

-- Person 的构造函数
function Person:new(name, age)
    local obj = {}  -- 创建一个新的表作为对象
    setmetatable(obj, self)  -- 设置元表,使其成为 Person 的实例
    self.__index = self  -- 设置索引元方法,指向 Person
    obj.name = name
    obj.age = age
    return obj
end

-- 添加方法:打印个人信息
function Person:introduce()
    print("My name is " .. self.name .. " and I am " .. self.age .. " years old.")
end

代码说明:

  • Person 是一个表,它有两个属性:name 和 age,这两个属性是类的默认属性。
  • Person:new(name, age) 是一个构造函数,用来创建新的 Person 对象。
  • local obj = {} 创建一个新的表作为对象,setmetatable(obj, self) 设置元表,使得该表成为 Person 类的实例。
  • self.__index = self 设置索引元方法,使得 obj 可以访问 Person 类的属性和方法。
  • introduce 是 Person 类的方法,打印该 Person 对象的名字和年龄。

调用方法:

-- 创建一个 Person 对象
local person1 = Person:new("Alice", 30)

-- 调用对象的方法
person1:introduce()  -- 输出 "My name is Alice and I am 30 years old."