LUA OOP编程实现方法

lua原生不支持OOP特性

确实如此, 同时可以采用其它lua代码的方式实现OOP的特性。

OOP四大特性

抽象

封装

继承

多态

http://www.cnblogs.com/xiaosongluffy/p/5072501.html

四大基本特性:

抽象:提取现实世界中某事物的关键特性,为该事物构建模型的过程。对同一事物在不同的需求下,需要提取的特性可能不一样。得到的抽象模型中一般包含:属性(数据)和操作(行为)。这个抽象模型我们称之为。对类进行实例化得到对象。

封装:封装可以使类具有独立性和隔离性;保证类的高内聚。只暴露给类外部或者子类必须的属性和操作。类封装的实现依赖类的修饰符(public、protected和private等)

继承:对现有类的一种复用机制。一个类如果继承现有的类,则这个类将拥有被继承类的所有非私有特性(属性和操作)。这里指的继承包含:类的继承和接口的实现。

多态:多态是在继承的基础上实现的。多态的三个要素:继承、重写和父类引用指向子类对象。父类引用指向不同的子类对象时,调用相同的方法,呈现出不同的行为;就是类多态特性。多态可以分成编译时多态和运行时多态。

Code

--

-- Class helper routines

--

-- Instantiates a class

local function _instantiate(class, ...)

local inst = setmetatable({}, {__index = class})

if inst.__init__ then

inst:__init__(...)

end

return inst

end

--- Create a Class object (Python-style object model).

-- The class object can be instantiated by calling itself.

-- Any class functions or shared parameters can be attached to this object.

-- Attaching a table to the class object makes this table shared between

-- all instances of this class. For object parameters use the __init__ function.

-- Classes can inherit member functions and values from a base class.

-- Class can be instantiated by calling them. All parameters will be passed

-- to the __init__ function of this class - if such a function exists.

-- The __init__ function must be used to set any object parameters that are not shared

-- with other objects of this class. Any return values will be ignored.

-- @param base The base class to inherit from (optional)

-- @return A class object

-- @see instanceof

-- @see clone

function class(base)

-- __parent 属性缓存父类,便于子类索引父类方法

return setmetatable({__parent = base}, {

__call = _instantiate,

__index = base

})

end

--[[

local function searchParentClass(k, plist)

for i=1, #plist do

local v = plist[i][k]

if v then return v end

end

end

--- Create a Class object (Python-style object model).

-- The class object can be instantiated by calling itself.

-- Any class functions or shared parameters can be attached to this object.

-- Attaching a table to the class object makes this table shared between

-- all instances of this class. For object parameters use the __init__ function.

-- Classes can inherit member functions and values from a base class.

-- Class can be instantiated by calling them. All parameters will be passed

-- to the __init__ function of this class - if such a function exists.

-- The __init__ function must be used to set any object parameters that are not shared

-- with other objects of this class. Any return values will be ignored.

-- @param base The base class to inherit from (optional)

-- @return A class object

-- @see instanceof

-- @see clone

function class(...)

local mtb = {}

local parents = {...}

mtb = setmetatable(mtb, {

__call = _instantiate,

__index = function(t,k)

return searchParentClass(k, parents)

end})

mtb.__index = mtb

return mtb

end

]]

--- Test whether the given object is an instance of the given class.

-- @param object Object instance

-- @param class Class object to test against

-- @return Boolean indicating whether the object is an instance

-- @see class

-- @see clone

function instanceof(object, class)

local meta = getmetatable(object)

while meta and meta.__index do

if meta.__index == class then

return true

end

meta = getmetatable(meta.__index)

end

return false

end

说明:

1、 通过class来确定继承关系

2、 通过instanceof来判断继承关系

时间: 2024-10-26 09:49:40

LUA OOP编程实现方法的相关文章

Lua下通过元表模拟OOP编程,继承多态

Lua本身是没有以明确的定义来支持OOP编程的,但是我们却可以通过Lua内核提供的一些特性来间接实现简单的面向对象的编程. 通过Lua中的 table结构  metatable 以及函数可以配合实现OOP,以及继承.这些说白了都是一种伪实现,不建议在Lua下使用多重继承 . 在LUA中你想要 强制实现OOP 你必须需要懂一下几个关键词!! 什么是语法糖? 语法糖即糖衣语法,C/C++升级过程中的面向对象 整体就是一种语法糖 ,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)

lua OOP实现对象的链式调用

数学中的链式法则 http://sx.zxxk.com/ArticleInfo.aspx?InfoID=164649 链式微分法则:实数运算的链式法则:对数运算的链式法则:平行公理的链式法则:向量运算的链式法则: JS对象链式调用方法 http://stackoverflow.com/questions/15029309/how-to-write-jquery-chainable-functions-for-local-usinghttp://stackoverflow.com/question

PHP面向对象(OOP)编程完全教程

转自:http://blog.snsgou.com/post-41.html 面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就通过实例来说明使用PHP的OOP进行编程的实际意义和应用方法. 我们通常在做一个有数据库后台的网站的时候,都会考虑到程序需要适用于不同的应用环境.和其他编程语言有所不同的是,在PHP中,操作数据库的是一系列的具体功能函数(如

javascript oop编程 — 实现继承的三种形式

javascript  oop编程  - 实现继承的三种形式[1] (1)模拟类的方式, 我们都知道js是原型继承机制,不存在class和instance分离的这种方式 假设,我们有两个类 function  Animal(){ this.name = "animal"; this.eat = function(){ consle.log("eating"); } } function Cat(){ this.say = function(){ console.lo

C# for Unity 编程语言快速入门教程(连载8)---C#OOP编程之抽象类与接口

C#的抽象类与接口,是C#OOP编程中非常重要的概念,对于开发出"高内聚.低耦合"的优秀项目具有重要的作用. C#抽象类是用关键字abstract 表示的,它即可以修饰类(抽象类),也可以修饰方法(抽象方法).抽象类主要的作用是:列举一个类所需要的行为,提供一系列的规定,约束子类行为. C#抽象类与抽象方法具备以下重要规则: 1:抽象类不能被实例化. 2:抽象类不明确提供具体 方法实现.(但可以包含普通的方法) 3:定义基类(父类)中的抽象方法,则派生类(子类)必须重载(重写)该方法.

python速成第二篇(小爬虫+文件操作+socket网络通信小例子+oop编程)

大家好,由于前天熬夜写完第一篇博客,然后昨天又是没休息好,昨天也就不想更新博客,就只是看了会资料就早点休息了,今天补上我这两天的所学,先记录一笔.我发现有时候我看的话会比较敷衍,而如果我写出来(无论写到笔记本中还是博客中,我都有不同的感觉)就会有不同的想法,我看书或者看资料有时候感觉就是有一种惰性,得过且过的感觉,有时候一个知识想不通道不明,想了一会儿,就会找借口给自己说这个知识不重要,不需要太纠结了,还是去看下一个吧,然后就如此往复下去,学习就会有漏洞,所以这更加坚定了我写博客来记录的想法.

PHP面向对象(OOP)编程入门教程链接

PHP官方学习OOP: http://php.net/manual/zh/oop5.intro.php 以下链接来源: http://blog.snsgou.com/post-41.html PHP面向对象(OOP)编程完全教程:1.什么是面向对象? PHP面向对象(OOP)编程完全教程:2.什么是类,什么是对象,类和对象这间的关系 PHP面向对象(OOP)编程完全教程:3.什么是面向对象编程呢? PHP面向对象(OOP)编程完全教程:4.如何抽象出一个类? PHP面向对象(OOP)编程完全教程

玩转cocos2d-x lua-binding, 实现c++与lua混合编程

引言 城市精灵GO(http://csjl.teamtop3.com/)是一款基于cocos2d-x开发的LBS社交游戏, 通过真实地图的探索, 发现和抓捕隐匿于身边的野生精灵, 利用游戏中丰富的玩法提升和进化自己的精灵团队, 一步一步成为精灵训练大师. 本游戏的开发混合使用了c++和lua编程, 既发挥了c++高性能, 跨平台系统兼容的优势, 又享受了lua敏捷方便的开发效率. cocos2d-x提供了一套完备的lua-binding工具来帮助开发者实现c++和lua的代码联合, 可以方便实现

JavaScript的OOP编程1

首先要说的是,javascript其实是可以进行OOP编程的,其次javascript的OOP编程实现方式有多种,我写的这一种只是我测试过,可行的一种 version1 // 父类 function Person(name){this.name = name} Person.prototype.say = saymyname; function saymyname(){alert(this.name)} // 子类 function Employee(name){Person.call(this