第九课 封装和继承

1个月前发布 190 00

核心特性体实现进行了深入剖析

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

这节课系统讲解了面向对象编程(OOP)中的封装继承两大核心特性,并结合 Lua 语言的具体实现进行了深入剖析。以下是课程内容的核心总结:


一、封装(Encapsulation)​

  1. 核心思想​:
    • 隐藏对象内部的具体实现细节,只暴露有限的接口与外部交互。
    • 保护数据完整性,防止外部随意修改关键属性,确保对象状态始终有效。
  2. 实现方式(Lua示例)​​:
    • 使用 setmetatable和元方法(如 __index)实现属性访问控制。
    • 通过定义 set_age等方法,在方法内部加入逻辑判断(如年龄范围验证),确保数据修改的安全性。
    • 示例中对比了“散装”(直接暴露变量,可随意修改)和“封装”(通过方法控制访问)的区别。
  3. 优势​:
    • 安全性​:避免非法赋值或无效状态。
    • 灵活性​:内部实现修改不影响外部调用。
    • 维护性​:代码结构更清晰,易于扩展和维护。

二、继承(Inheritance)​

  1. 核心思想​:
    • 子类(派生类)可以继承父类的属性和方法,实现代码复用。
    • 子类可扩展或重写父类行为,实现多态(本节课未深入展开)。
  2. 实现方式(Lua示例)​​:
    • 使用 setmetatable(obj, {__index = parent})实现继承:当子类对象访问不存在的属性时,会查找父类。
    • 创建子类对象时,可通过构造函数传递参数,初始化自有属性,同时继承父类方法。
    • 示例中通过 player1player2两个对象调用同一方法(say)输出不同结果,体现了继承与实例化的效果。
  3. 关键点​:
    • 元方法 __index是实现继承的核心机制。
    • 父类(如 M)定义通用属性和方法,子类(如 Player) specialize 或扩展功能。

三、补充概念

  1. 元方法(Metamethods)​​:
    • __index:用于处理字段访问,是实现继承的关键。
    • __newindex:用于控制字段赋值(如验证或拦截赋值操作),可进一步增强封装性。
    • 示例中简要演示了 __newindex在数据校验中的应用。
  2. 面向对象在实践中的提示​:
    • 虽然 Lua 的 OOP 是通过元表模拟的,但设计思路与传统 OOP 一致。
    • 在游戏后端开发中,OOP 常用于管理角色、物品、技能等实体,提高代码组织性和可复用性。
    • 命名约定:类名首字母大写(如 Player),对象实例首字母小写(如 player1)。

四、常见问题澄清

  • ​“函数调用”不等于“封装”​​:简单的函数调用若不隐藏实现细节,仍属于“散装”。
  • __index的两种设置方式​:
    • setmetatable(obj, {__index = parent})(推荐)
    • 或直接设置 obj.__index = parent(需理解元表机制)。
  • 继承的是类(模板),实例化后才是具体对象

五、课后建议

  1. 实践作业​:尝试用面向对象方式封装1-2个游戏接口(如角色攻击、物品使用)。
  2. 阅读源码​:参考现有项目(如公开的游戏后端模块),学习如何组织 OOP 代码。
  3. 掌握元表​:深入理解 __index__newindex__call等元方法,它们是 Lua OOP 的基石。

通过本节课,你应能理解封装和继承的基本原理及其在 Lua 中的实现方式,为后续学习多态和复杂系统设计打下基础。

数据统计

相关导航

暂无评论

none
暂无评论...