日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Lua 面向对象

發(fā)布時間:2024/4/11 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lua 面向对象 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

面向對象編程(Object Oriented Programming,OOP)是一種非常流行的計算機編程架構。

以下幾種編程語言都支持面向對象編程:

?

  • C++
  • Java
  • Objective-C
  • Smalltalk
  • C#
  • Ruby

面向對象特征

  • 1) 封裝:指能夠把一個實體的信息、功能、響應都裝入一個單獨的對象中的特性。
  • 2) 繼承:繼承的方法允許在不改動原程序的基礎上對其進行擴充,這樣使得原功能得以保存,而新功能也得以擴展。這有利于減少重復編碼,提高軟件的開發(fā)效率。
  • 3) 多態(tài):同一操作作用于不同的對象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結果。在運行時,可以通過指向基類的指針,來調用實現(xiàn)派生類中的方法。
  • 4)抽象:抽象(Abstraction)是簡化復雜的現(xiàn)實問題的途徑,它可以為具體問題找到最恰當?shù)念惗x,并且可以在最恰當?shù)睦^承級別解釋問題。

Lua 中面向對象

我們知道,對象由屬性和方法組成。LUA中最基本的結構是table,所以需要用table來描述對象的屬性。

lua中的function可以用來表示方法。那么LUA中的類可以通過table + function模擬出來。

至于繼承,可以通過metetable模擬出來(不推薦用,只模擬最基本的對象大部分時間夠用了)。

?

Lua中的表不僅在某種意義上是一種對象。像對象一樣,表也有狀態(tài)(成員變量);也有與對象的值獨立的本性,特別是擁有兩個不同值的對象(table)代表兩個不同的對象;一個對象在不同的時候也可以有不同的值,但他始終是一個對象;與對象類似,表的生命周期與其由什么創(chuàng)建、在哪創(chuàng)建沒有關系。對象有他們的成員函數(shù),表也有:

Account = {balance = 0} function Account.withdraw (v)Account.balance = Account.balance - v end

這個定義創(chuàng)建了一個新的函數(shù),并且保存在Account對象的withdraw域內,下面我們可以這樣調用:

Account.withdraw(100.00)

一個簡單實例

以下簡單的類包含了三個屬性: area, length 和 breadth,printArea方法用于打印計算結果:

-- Meta class Rectangle = {area = 0, length = 0, breadth = 0}-- 派生類的方法 new function Rectangle:new (o,length,breadth)o = o or {}setmetatable(o, self)self.__index = selfself.length = length or 0self.breadth = breadth or 0self.area = length*breadth;return o end-- 派生類的方法 printArea function Rectangle:printArea ()print("矩形面積為 ",self.area) end

創(chuàng)建對象

創(chuàng)建對象是為類的實例分配內存的過程。每個類都有屬于自己的內存并共享公共數(shù)據(jù)。

r = Rectangle:new(nil,10,20)

訪問屬性

我們可以使用點號(.)來訪問類的屬性:

print(r.length)

訪問成員函數(shù)

我們可以使用冒號?:?來訪問類的成員函數(shù):

r:printArea()

內存在對象初始化時分配。

完整實例

以下我們演示了 Lua 面向對象的完整實例:

-- Meta class Shape = {area = 0}-- 基礎類方法 new function Shape:new (o,side)o = o or {}setmetatable(o, self)self.__index = selfside = side or 0self.area = side*side;return o end-- 基礎類方法 printArea function Shape:printArea ()print("面積為 ",self.area) end-- 創(chuàng)建對象 myshape = Shape:new(nil,10)myshape:printArea()

執(zhí)行以上程序,輸出結果為:

面積為 ????100

Lua 繼承

繼承是指一個對象直接使用另一對象的屬性和方法。可用于擴展基礎類的屬性和方法。

以下演示了一個簡單的繼承實例:

-- Meta class Shape = {area = 0} -- 基礎類方法 new function Shape:new (o,side)o = o or {}setmetatable(o, self)self.__index = selfside = side or 0self.area = side*side;return o end -- 基礎類方法 printArea function Shape:printArea ()print("面積為 ",self.area) end

接下來的實例,Square 對象繼承了 Shape 類:

Square = Shape:new() -- Derived class method new function Square:new (o,side)o = o or Shape:new(o,side)setmetatable(o, self)self.__index = selfreturn o end

完整實例

以下實例我們繼承了一個簡單的類,來擴展派生類的方法,派生類中保留了繼承類的成員變量和方法:

-- Meta class Shape = {area = 0} -- 基礎類方法 new function Shape:new (o,side)o = o or {}setmetatable(o, self)self.__index = selfside = side or 0self.area = side*side;return o end -- 基礎類方法 printArea function Shape:printArea ()print("面積為 ",self.area) end-- 創(chuàng)建對象 myshape = Shape:new(nil,10) myshape:printArea()Square = Shape:new() -- 派生類方法 new function Square:new (o,side)o = o or Shape:new(o,side)setmetatable(o, self)self.__index = selfreturn o end-- 派生類方法 printArea function Square:printArea ()print("正方形面積為 ",self.area) end-- 創(chuàng)建對象 mysquare = Square:new(nil,10) mysquare:printArea()Rectangle = Shape:new() -- 派生類方法 new function Rectangle:new (o,length,breadth)o = o or Shape:new(o)setmetatable(o, self)self.__index = selfself.area = length * breadthreturn o end-- 派生類方法 printArea function Rectangle:printArea ()print("矩形面積為 ",self.area) end-- 創(chuàng)建對象 myrectangle = Rectangle:new(nil,10,20) myrectangle:printArea()

執(zhí)行以上代碼,輸出結果為:

面積為 ????100 正方形面積為 ????100 矩形面積為 ????200

函數(shù)重寫

Lua 中我們可以重寫基礎類的函數(shù),在派生類中定義自己的實現(xiàn)方式:

-- 派生類方法 printArea function Square:printArea ()print("正方形面積 ",self.area) end 超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的Lua 面向对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。