第八课 面向对象

1个月前发布 626 10

OOP在Lua中的实现方式

收录时间:
2025-08-29
招生信息

这节课主要讲解了面向对象编程(OOP)在Lua中的实现方式,重点介绍了原表(metatable)和原方法(metamethod)的概念及其应用。以下是课程内容的总结:

1. ​面向过程 vs 面向对象

  • 面向过程​:以步骤为中心,代码从上到下依次执行。适合简单脚本,但随着逻辑复杂化,代码会变得冗长且难以维护。
  • 面向对象​:以对象为中心,将数据和操作封装在对象中,提高代码复用性和可维护性。

2. ​原表(Metatable)和原方法(Metamethod)​

  • 原表​:允许扩展表的行为,为表添加特殊功能。
  • 原方法​:定义在原表中的特殊方法,用于实现特定操作(如相加、索引等)。
  • 示例​:
    • 通过__add实现两个表的相加。
    • 通过__index处理表中不存在的键,提供默认值或自定义逻辑。

3. ​类和对象

  • 类(Class)​​:设计图纸,定义属性和方法(如player表包含namelevel)。
  • 对象(Object)​​:类的实例,实际存在的数据(如player.new()创建的小明)。
  • 构造函数​:通过new方法创建对象,并初始化属性(如actor的初始值)。

4. ​面向对象的核心概念

  • 封装​:将数据和方法捆绑在对象中(如setLevel方法修改level)。
  • 链式调用​:通过返回self实现连续调用(如a:setLevel(1):setHp(100))。
  • 继承和多态​(后续课程):通过原表实现类的继承和方法重写。

5. ​实际应用

  • 游戏开发中,用对象管理角色属性(如namelevelhp)和行为(如攻击、升级)。
  • 示例代码展示了如何创建角色对象、修改属性,并通过链式调用简化代码。

6. ​注意事项

  • 性能​:面向对象会引入额外开销,在性能敏感场景需谨慎使用。
  • 学习曲线​:OOP是一种思维方式,新手可能需要时间适应,建议结合实践逐步掌握。

关键代码片段

-- 定义类和构造函数
Player = { name = "张三", level = 1 }
function Player.new(actor)
    local obj = { actor = actor }
    setmetatable(obj, { __index = Player })
    return obj
end

-- 创建对象并调用方法
local xm = Player.new("小明")
print(xm.name)  -- 输出"张三"
xm:setLevel(1)  -- 等级+1

课后任务

  • 练习原表和原方法的使用(如__add__index)。
  • 尝试用面向对象方式封装游戏角色或物品系统。

面向对象的核心在于“以对象为中心”的思维方式,后续课程会深入继承和多态的实现。

数据统计

相关导航

1 条评论