六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 66|回复: 0

lglib.oop 简介

[复制链接]

升级  33.33%

24

主题

24

主题

24

主题

秀才

Rank: 2

积分
100
 楼主| 发表于 2013-1-15 01:53:57 | 显示全部楼层 |阅读模式
lglib.oop是一个特殊的模块,它用于给现有lua基础提供一套好用的面向对象机制。

此模块中定义了一个对象Object(用table实现的)。这个对象是一个最基础的原生对象,任何其它的类和对象都是从这个源头衍生的。它的地位跟java中的Object地位一致。

Object定义了几个属性和方法:

属性:
__tag:每个类的定义都需要加入此属性,以标识类的名字和继承关系
_parent:指向父对象(或类对象)

方法:
new:此方法为内部接口,用于生成一个新的对象(子类对象或类的实例对象)
extend:此方法为导出接口,用于从一个现有类上定义一个新的类
isInstance:此方法用于判断自己是否是一个类的实例
isClass:此方法用于判断自己是否是一个类


在实例使用时,仿照如下形式定义一个类。
module(..., package.seeall)-- 在bamboo.model中,已经执行了 require 'lglib.oop' 了local Model = require 'bamboo.model'local Message = Model:extend {-- 属性的话,只有这个__tag是必须的__tag = 'Bamboo.Model.Message';__name = 'Message';__desc = 'General message definition.';-- 方法的话,只有这个init是必须的,参数中第一个必须为selfinit = function (self, t)if not t then return self endself.type = t.type-- self.uuid = t.uuidself.author = t.authorself.content = t.contentself.timestamp = t.timestamp or os.time()return selfend;doSomething = function (self).....end;}return Message

使用这个类:
下面创建两个消息实例local msg_obj = Message()-- 创建一个空消息local msg_obj2 = Message {-- 创建一个有内容的消息type = '100',author = 'daoge',content = 'hello',}msg_obj2:doSomething();-- 调用类中定义的方法

-----------------------------------------
实际上,此处的oop只是用table进行的模拟,关于采用的什么决策,我们后面另外详细说明。现在的机制不一定很完善,还有改进的空间。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表