Lua程序设计(四十八)

私有性

私有性也被称为信息隐藏是一门面向对象语言不可获取的一部分:每个对象的状态都应该由它自己控制。

Lua语言为程序员提供能够模拟许多不同机制的元机制(meta-mechanism)。这种做法的基本思想是通过两个表来表示一个对象:一个表用来保存对象的状态,另一个表用于保存对象的操作(或接口)。我们通过第二个表来访问对象本身,即通过组成其借口的操作来访问。为了避免未授权的访问,表示对象状态的表不保存在其他表的字段中,而只保存在方法的闭包中。

function newAccount (initialBalance)
	local self = {balance = initialBalance}
	
	local withdraw = function (v)
						self.balance = self.balance - v
					end
	local depoit = function (v)
					self.balance = self.balance + v
				end
	local getBalance = function() return self.balance end
	return {
		withddraw = withdraw,
		deposit = deposit,
		getBalance = getBalance
	}
end				

首先这个函数创建了一个用于保存对象内部状态的表,并将其存储在局部变量self中。然后,这个函数创建了对象的方法(接口)。最后,这个函数会创建并返回一个外部对象,该对象将方法名与真正的方法实现映射起来。这里的关键在于,这些方法不需要额外的self参数,而是直接访问self变量。由于没有了额外的参数,我们也就无须使用冒号语法来操作这些对象,而是可以像普通函数那样调用这些方法。

acc1 = newAccount(100.00)
acc1.withdraw(40.00)
print(acc1.getBalance()) -->60

这种设计给予了存储在表self中所有内容完全的私有性。当newAccount返回后,就无法直接访问这个表了,我们只能通过在newAccount中创建的函数来访问它。我们还可也将一个对象的所有私有部分都存入这个表。我们也可以定义私有方法,它们类似于公有方法但不放入接口中。

function newAccount (initialBalance)
	local self = {
		balance = initialBalance,
		LIM = 10000.00
	}
	local extra = function ()
		if self.balance > self.LIM then
			return self.balance * 0.10
		else
			return 0
		end
	end
	local getBalance = function()
		return self.balance = extra()
	end

与前一个示例一样,任何用户都无法直接访问extra函数和LIM字段。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值