Lua 面向對象(一)

      網(wǎng)友投稿 629 2025-03-31

      面向對象編程(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方法用于打印計算結果:

      Lua 面向對象(一)

      實例

      -- 元類

      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

      創(chuàng)建對象

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

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

      訪問屬性

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

      print(r.length)

      訪問成員函數(shù)

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

      r:printArea()

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

      完整實例

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

      實例

      -- 元類

      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

      -- 創(chuàng)建對象

      myshape?=?Shape:new(nil,10)

      myshape:printArea()

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

      面積為 100

      Lua 面向對象編程

      版權聲明:本文內容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內刪除侵權內容。

      上一篇:Excel中進行設置橫豎打印一張的操作技巧(excel打印怎么豎著打印)
      下一篇:項目進度計劃關鍵路徑確定原則(項目進度計劃中的關鍵路徑及關鍵路徑變化的確定原則)
      相關文章
      亚洲依依成人精品| 18亚洲男同志videos网站| 亚洲一区二区三区在线观看蜜桃| 久久久久久亚洲精品中文字幕 | 亚洲性在线看高清h片| 国产精品亚洲专区无码牛牛| 亚洲av无码成人精品国产| 亚洲欧洲精品成人久久曰| 亚洲人成色在线观看| 亚洲中文无码永久免费| 亚洲日本成本人观看| 亚洲国产成人久久一区二区三区| 亚洲精品123区在线观看| 亚洲依依成人亚洲社区| 亚洲最大天堂无码精品区| 亚洲色成人网站WWW永久四虎| 亚洲色大成网站WWW国产| 亚洲AV无码一区二区三区性色| 亚洲成a人无码亚洲成av无码| 亚洲国产美女精品久久久| 亚洲av无码专区在线观看下载 | 亚洲熟妇成人精品一区| 亚洲国产精品自在自线观看| 苍井空亚洲精品AA片在线播放 | 亚洲毛片一级带毛片基地| 亚洲成a人片7777| 亚洲情A成黄在线观看动漫软件 | 亚洲国产精品VA在线观看麻豆 | 午夜亚洲av永久无码精品| 亚洲国产免费综合| 亚洲欧洲成人精品香蕉网| 亚洲AV美女一区二区三区| 色噜噜综合亚洲av中文无码| 亚洲大香人伊一本线| 最新亚洲精品国偷自产在线| 亚洲av日韩专区在线观看| 亚洲午夜激情视频| 亚洲va中文字幕无码久久| 亚洲综合图片小说区热久久| 亚洲娇小性xxxx色| 亚洲国产成人AV网站|