多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

中國最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2

lua教程

Lua 面向對象

閱讀 (2335)

Lua 面向對象

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

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

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

面向對象特征

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

Lua 中面向對象

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

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

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

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

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

這個定義創建了一個新的函數,并且保存在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 = self
  self.length = length or 0
  self.breadth = breadth or 0
  self.area = length*breadth;
  return o
end

-- 派生類的方法 printArea
function Rectangle:printArea ()
  print("矩形面積為 ",self.area)
end

創建對象

創建對象是位類的實例分配內存的過程。每個類都有屬于自己的內存并共享公共數據。

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

訪問屬性

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

print(r.length)

訪問成員函數

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

r:printArea()

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

完整實例

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

-- Meta class
Shape = {area = 0}

-- 基礎類方法 new
function Shape:new (o,side)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  side = side or 0
  self.area = side*side;
  return o
end

-- 基礎類方法 printArea
function Shape:printArea ()
  print("面積為 ",self.area)
end

-- 創建對象
myshape = Shape:new(nil,10)

myshape:printArea()

執行以上程序,輸出結果為:

面積為     100

Lua 繼承

繼承是指一個對象直接使用另一對象的屬性和方法??捎糜跀U展基礎類的屬性和方法。

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

 -- Meta class
Shape = {area = 0}
-- 基礎類方法 new
function Shape:new (o,side)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  side = side or 0
  self.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 = self
  return o
end

完整實例

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

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

-- 創建對象
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 = self
  return o
end

-- 派生類方法 printArea
function Square:printArea ()
  print("正方形面積為 ",self.area)
end

-- 創建對象
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 = self
  self.area = length * breadth
  return o
end

-- 派生類方法 printArea
function Rectangle:printArea ()
  print("矩形面積為 ",self.area)
end

-- 創建對象
myrectangle = Rectangle:new(nil,10,20)
myrectangle:printArea()

執行以上代碼,輸出結果為:

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

函數重寫

Lua 中我們可以重寫基礎類的函數,在派生類中定義自己的實現方式:

-- 派生類方法 printArea
function Square:printArea ()
  print("正方形面積 ",self.area)
end
關閉
程序員人生
主站蜘蛛池模板: 日韩免费影院 | 在线a人片免费观看不卡 | 欧美曰韩一区二区三区 | 亚洲欧洲久久精品 | 图片区小说欧洲区 | 欧美另类xxx | 欧美一级片手机在线观看 | 国产精品深夜福利免费观看 | 国产综合久久一区二区三区 | 亚洲不卡 | 91丨九色丨首页 | 精品一区二区三区四区乱码90 | 天堂最新版www在线观看 | 国产日韩欧美久久久 | 小说区图片区亚洲 | 国产在线欧美日韩精品一区二区 | 国产精品一区二区三区免费 | 精品国产日韩亚洲一区91 | 中文字幕亚洲无线码高清 | 97精品一区二区三区在线不卡 | 国产成人一区二区三区影院免费 | 国产高清视频免费人人爱 | 精品国产一区二区三区2021 | 亚洲欧美日韩国产精品网 | 秋霞日韩理论高清在线观看 | 欧美日韩激情一区二区三区 | 亚洲一区影院 | 亚洲福利视频在线 | 日本高清在线观看视频www | 日本午夜在线视频 | 精品视频亚洲 | 最近高清中文字幕在线国语5 | 日韩欧美国产中文字幕 | 国产成人经典三级在线观看 | 欧美乱乱 | 亚洲精品乱无伦码 | 乡下女色又黄一级毛片 | 亚洲国产aaa毛片无费看 | 国产精品亚洲第一区二区三区 | www.yw尤物| 日本aaaa片毛片免费观看 |