亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

淺談Lua的面向對象特性

2024-07-21 23:04:53
字體:
來源:轉載
供稿:網友

 面向對象的特性

  •     類: 類是可擴展的模板用來創建對象,提供狀態的初始值(成員變量)和行為的實現。
  •     對象: 它是類的實例并具有分配給自己獨立的內存。
  •     繼承: 它是由變量和類的函數被其他類繼承的概念。
  •     封裝: 它是將數據和函數相結合的一類內的方法。數據可以在類的外部與函數的幫助下進行訪問。它也被稱為數據抽象。

Lua的OOP

在Lua中實現面向對象與表和Lua的第一類函數。通過將函數和相關數據插入表中形成一個對象。繼承可以在metatables的幫助下來實現,提供了一個查找機制不存在的函數(方法)和在父對象字段。

在Lua表有這樣的狀態和標識對象,它是獨立于值的特性。兩個對象(表),具有相同的值但在不同的對象,而一個對象可以具有在不同的值,但它始終是相同的對象。就像對象表中有一個生命周期,獨立創建或被創建。
一個真實世界的例子

面向對象的概念是廣泛的,但要明白和獲取最大利益。

讓我們考慮一個簡單的數學例子。我們經常會遇到,我們工作在不同的形狀像圓形,長方形和正方形的情況。

形狀可以有一個共同的屬性區。因此,我們可以從與共同屬性區域的基礎對象形狀擴展的其它形狀。每個形狀都可以有其自己的性質和功能類似的矩形可以有屬性的長度,寬度,面積作為其屬性,printArea中和calculateArea作為它的函數。
創建一個簡單的類

一個簡單的類實現矩形三個屬性面積,長度和寬度如下所示。它也有一個printArea中功能打印所計算的面積。

 

復制代碼 代碼如下:
-- Meta class
Rectangle = {area = 0, length = 0, breadth = 0}

 

-- Derived class method 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

-- Derived class method printArea
function Rectangle:printArea ()
  print("The area of Rectangle is ",self.area)
end

 

創建對象

創建對象是類的實例分配存儲器的過程。每個對象具有它自己的存儲器和共享公用類數據。

 

復制代碼 代碼如下:
r = Rectangle:new(nil,10,20)

 

訪問屬性

在類中用點 . 操作符,如下圖所示,可以訪問屬性

 

復制代碼 代碼如下:
print(r.length)

 

訪問成員函數

使用冒號運算符,如下圖所示,可以訪問對象成員函數。

 

復制代碼 代碼如下:
r:printArea()

 

存儲器被分配和初始值被設定。初始化過程可以比在其它面向對象的語言構造。它只是一項功能設定值,如上圖所示。
完整例子

讓我們來看看使用面向對象的Lua中一個完整的例子。

 

復制代碼 代碼如下:
-- Meta class
Shape = {area = 0}

 

-- Base class method 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

-- Base class method printArea
function Shape:printArea ()
  print("The area is ",self.area)
end

-- Creating an object
myshape = Shape:new(nil,10)

myshape:printArea()

 

當運行上面的程序,會得到如下的輸出。

 

復制代碼 代碼如下:
The area is  100

 

Lua的繼承

繼承是擴展形狀簡單的基本對象,以矩形,正方形等的處理。它通常用于在真實世界中的共享和擴展的基本性質和功能。

讓我們看一個簡單的類擴展。有一個類,如下圖所示。

 

復制代碼 代碼如下:
-- Meta class
Shape = {area = 0}
-- Base class method 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
-- Base class method printArea
function Shape:printArea ()
  print("The area is ",self.area)
end

 

我們可以擴展的形狀為正方形類如下所示。

 

復制代碼 代碼如下:
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

 

重載基礎函數

我們可以重載基類函數使用基類中的函數,而不是派生類它自己再實現,如下圖所示

 

復制代碼 代碼如下:
-- Derived class method printArea
function Square:printArea ()
  print("The area of square is ",self.area)
end

 

繼承完整的例子

Lua中我們可以擴展的簡單類實現,如上圖所示metatables另一個新的方法。所有的成員變量和基類的函數被保留在派生類。

 

復制代碼 代碼如下:
 -- Meta class
Shape = {area = 0}
-- Base class method 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
-- Base class method printArea
function Shape:printArea ()
  print("The area is ",self.area)
end

 

-- Creating an object
myshape = Shape:new(nil,10)
myshape:printArea()

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

-- Derived class method printArea
function Square:printArea ()
  print("The area of square is ",self.area)
end

-- Creating an object
mysquare = Square:new(nil,10)
mysquare:printArea()

Rectangle = Shape:new()
-- Derived class method 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

-- Derived class method printArea
function Rectangle:printArea ()
  print("The area of Rectangle is ",self.area)
end

-- Creating an object
myrectangle = Rectangle:new(nil,10,20)
myrectangle:printArea()

 

當我們運行上面的程序,會得到下面的輸出。

 

復制代碼 代碼如下:
The area is  100
The area of square is  100
The area of Rectangle is  200

 

在上面的例子中,我們創建了兩個派生類Rectangle和Square從基類Square。因此能夠在此改變基類的功能的派生類。在本實現例子中,派生類會取代函數printArea。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人网在线视频| 亚洲成人教育av| 日韩少妇与小伙激情| 91精品综合视频| 国产成人综合一区二区三区| 91香蕉国产在线观看| 日本高清不卡的在线| 欧美精品xxx| 中文字幕免费精品一区| 这里只有精品在线播放| 538国产精品一区二区免费视频| 国产欧美精品va在线观看| 成人激情电影一区二区| 丝袜一区二区三区| 欧美大片免费观看| 日韩在线免费av| 国产精品视频播放| 久久99精品国产99久久6尤物| 精品福利在线看| 欧美性猛交xxxx免费看久久久| 亚洲毛片在线观看| 九九热r在线视频精品| 日韩精品极品在线观看| 成人免费网站在线| 欧美日韩国产在线| 欧美小视频在线| 国产精品第三页| 91成人免费观看网站| 91免费福利视频| 日韩视频亚洲视频| 欧美大秀在线观看| 精品成人在线视频| 欧美性20hd另类| 欧美裸体xxxx极品少妇软件| www.日韩.com| 中文字幕亚洲自拍| 日韩av免费在线看| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲精品一区二区网址| 日韩在线播放av| 亚洲精品有码在线| 久久免费少妇高潮久久精品99| 亚洲一区二区精品| 欧美成人免费在线视频| 亚洲自拍偷拍区| 国产亚洲精品91在线| 久久精品91久久久久久再现| 精品久久中文字幕久久av| 欧美日韩亚洲一区二| 亚洲午夜性刺激影院| 亚洲天堂成人在线视频| 久久中文字幕视频| 萌白酱国产一区二区| 2019中文字幕在线观看| 亚洲a中文字幕| 国产福利视频一区二区| 国产免费久久av| 欧美高清在线播放| 亚洲乱码一区av黑人高潮| 97精品国产aⅴ7777| 欧美亚洲另类激情另类| 日韩成人性视频| 性色av香蕉一区二区| 亚洲精品综合久久中文字幕| 国产欧美精品一区二区三区-老狼| 亚洲无限乱码一二三四麻| 日韩在线观看免费网站| 亚洲精品福利免费在线观看| 欧美成人午夜视频| 欧美精品在线视频观看| 亚洲国产精品999| 久久久久久国产精品| 亚洲精品日产aⅴ| 精品国内自产拍在线观看| 欧美极品少妇xxxxⅹ免费视频| 伊人久久男人天堂| 色琪琪综合男人的天堂aⅴ视频| 欧美区二区三区| 成人在线播放av| 精品美女久久久久久免费| 国内精品免费午夜毛片| 国产亚洲精品91在线| 欧美性开放视频| 在线成人中文字幕| 91深夜福利视频| 久久国产精品久久久久久久久久| 欧美视频第一页| 欧美日本高清一区| 亚洲人成电影在线观看天堂色| 久久久久久这里只有精品| 久久久久久成人精品| 95av在线视频| 亚洲毛片在线观看| 亚洲精品999| 国产精品久久久久9999| 午夜精品一区二区三区在线视| 久久精品视频免费播放| 中文字幕日韩精品在线观看| 国产日韩视频在线观看| 精品久久久久久久久久ntr影视| 最近2019中文字幕一页二页| 国内精品久久久久| 色偷偷噜噜噜亚洲男人的天堂| 中文字幕日韩欧美在线视频| 欧美性高跟鞋xxxxhd| 欧美大片免费观看在线观看网站推荐| 成人www视频在线观看| 午夜精品免费视频| 欧美黑人一区二区三区| 国内精久久久久久久久久人| 国产精品久久久久久久久久小说| 亚洲电影免费观看高清完整版在线观看| 2019最新中文字幕| 国产精品久久久久久久久久99| 97久久伊人激情网| 日韩成人av网| 欧美性资源免费| xvideos亚洲| 精品亚洲一区二区三区| 97精品伊人久久久大香线蕉| 国外色69视频在线观看| 亚洲深夜福利视频| 中文字幕精品一区二区精品| 91精品视频在线播放| 亚洲国产精品久久久| 午夜精品久久久久久久男人的天堂| 久久久久久国产三级电影| 日韩免费观看av| 日本视频久久久| 中文字幕无线精品亚洲乱码一区| 亚洲欧洲第一视频| 日本91av在线播放| 日韩av免费在线| 欧美一区二区大胆人体摄影专业网站| 尤物精品国产第一福利三区| 亚洲综合中文字幕68页| 欧洲成人午夜免费大片| 在线看片第一页欧美| 国模精品一区二区三区色天香| 欧美色播在线播放| 亚洲精美色品网站| 久久久久一本一区二区青青蜜月| 国产精品极品美女粉嫩高清在线| 国产成人精品日本亚洲| 国产精品成久久久久三级| 日本在线精品视频| 亚洲一二在线观看| 日本高清不卡在线| 成人在线精品视频| 亚洲第一福利在线观看| 亚洲国产成人精品一区二区| 亚洲国产日韩一区| 久久久久中文字幕2018| 国产亚洲在线播放| www.国产一区| 亚洲韩国欧洲国产日产av| 欧美亚洲第一页| 国内精品免费午夜毛片| 国产午夜精品视频免费不卡69堂| 亚洲成人激情在线观看| 中文欧美日本在线资源| 95av在线视频| 91九色单男在线观看| 久久精品99久久久香蕉|