Lua 面向对象--封装

简介: 面向对象 封装

面向对象特征

  • 1、 封装:指能够把一个实体的信息、功能、响应都装入一个单独的对象中的特性。
  • 2、继承:继承的方法允许在不改动原程序的基础上对其进行扩充,这样使得原功能得以保存,而新功能也得以扩展。这有利于减少重复编码,提高软件的开发效率。
  • 3、多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
  • 4、抽象:抽象(Abstraction)是简化复杂的现实问题的途径,它可以为具体问题找到最恰当的类定义,并且可以在最恰当的继承级别解释问题。

Lua 中面向对象

Lua本身不支持面向对象

对象由属性和方法组成。LUA中最基本的结构是table,所以需要用table来描述对象的属性。

lua 中的 function 可以用来表示方法。那么LUA中的类可以通过 table + function 模拟出来。

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

Lua 中的表不仅在某种意义上是一种对象。像对象一样,表也有状态(成员变量);也有与对象的值独立的本性,特别是拥有两个不同值的对象(table)代表两个不同的对象;一个对象在不同的时候也可以有不同的值,但他始终是一个对象;与对象类似,表的生命周期与其由什么创建、在哪创建没有关系。

实现简单的一个lua面向对象

t={a='name'}
t1 = t
t1.a='name2'
print(t.a)--因为t跟t1都是指向同一个table,所以修改t1等同于修改t里面的值

--实现一个简单面向对象
--封装
 -- 在lua中复杂数据结构都是使用表来表现的
 -- 面向对象 类 也是基于table表现
 --新建一个对象
 --对于一个对象来说,有属性、方法
 --方法1
 -- person = {name='lin',age=18}
 -- person.eat = function()
 --     print(person.name..' eat')
 -- end

 --方法2
 -- person = {
 --     name = 'lin',
 --     age = 18,
 --     eat = function()
 --         print(person.name..' eat')
 --     end
 -- }

 --方法三
 person = {
     name = 'lin',
     age = 18,     
 }

 function person.eat()
     print(person.name..' eat')
end

person.eat()

image.png

相关文章
|
7月前
|
C++ 索引 Python
Lua中self 、自索引及其面向对象应用代码示例
Lua中self 、自索引及其面向对象应用代码示例
|
2月前
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
Lua的面向对象编程、协同线程与协同函数的概念和使用,以及Lua文件I/O操作的基本方法。
37 4
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
|
Java C++ 索引
Lua 脚本 C++ 封装库 LuaWrapper
LuaWrapper 需要用到boost库的支持:boost/type_traits.hpp, boost/function.hpp, boost/bind.hpp,它使用了C++的模板部份特化,因此,C++编译器如果不支持此特性,将无法编译。目前支持此特性的编译器已经有很多。
1851 0
Lua程序设计(三)面向对象实现一个简单的类
1.Lua面向对象实现步骤 ①创建一个全局表(称之为元表) ②设置这个元表的__index值(值通常为元表自己,这样就能通过__index查找到对应的属性和方法)__index 赋值其实是一个function的语法糖,Sharp.
1323 0
Lua程序设计(四)面向对象类继承
1.类继承  ①代码 Sharp = { _val = 1} --① 父类 function Sharp:new() local new_sharp = { } self.__index = self --②,self == Sharp setmetatable(n...
855 0
|
索引
Lua程序设计(二)面向对象概念介绍
----------------------------------------------------------- Lua面向对象3 local smartMan = { name = "Tinywan", age = 26, money = 800000, ...
917 0
Lua程序设计(一)面向对象概念介绍
  完整代码 local mt = {} mt.__add = function(t1,t2) print("两个Table 相加的时候会调用我") end local t1 = {} local t2 = {} -- 给两个table 设置新的元表,一个元表...
1016 0