面向?qū)ο缶幊蹋∣bject Oriented Programming,OOP)是一種非常流行的計算機編程架構(gòu)。
以下幾種編程語言都支持面向?qū)ο缶幊蹋?/p>
C++
Java
Objective-C
Smalltalk
C#
Ruby
面向?qū)ο筇卣?/p>
1) 封裝:指能夠把一個實體的信息涝婉、功能、響應(yīng)都裝入一個單獨的對象中的特性。
2) 繼承:繼承的方法允許在不改動原程序的基礎(chǔ)上對其進行擴充唇敞,這樣使得原功能得以保存,而新功能也得以擴展咒彤。這有利于減少重復編碼疆柔,提高軟件的開發(fā)效率。
3) 多態(tài):同一操作作用于不同的對象镶柱,可以有不同的解釋旷档,產(chǎn)生不同的執(zhí)行結(jié)果。在運行時歇拆,可以通過指向基類的指針鞋屈,來調(diào)用實現(xiàn)派生類中的方法。
4)抽象:抽象(Abstraction)是簡化復雜的現(xiàn)實問題的途徑故觅,它可以為具體問題找到最恰當?shù)念惗x厂庇,并且可以在最恰當?shù)睦^承級別解釋問題。
Lua 中面向?qū)ο?/p>
我們知道逻卖,對象由屬性和方法組成宋列。LUA中最基本的結(jié)構(gòu)是table,所以需要用table來描述對象的屬性评也。
lua中的function可以用來表示方法炼杖。那么LUA中的類可以通過table + function模擬出來。
至于繼承盗迟,可以通過metetable模擬出來(不推薦用坤邪,只模擬最基本的對象大部分時間夠用了)。
Lua中的表不僅在某種意義上是一種對象。像對象一樣,表也有狀態(tài)(成員變量);也有與對象的值獨立的本性舀瓢,特別是擁有兩個不同值的對象(table)代表兩個不同的對象黔衡;一個對象在不同的時候也可以有不同的值蚓聘,但他始終是一個對象;與對象類似盟劫,表的生命周期與其由什么創(chuàng)建夜牡、在哪創(chuàng)建沒有關(guān)系。對象有他們的成員函數(shù)侣签,表也有:
這個定義創(chuàng)建了一個新的函數(shù),并且保存在Account對象的withdraw域內(nèi)影所,下面我們可以這樣調(diào)用:
一個簡單實例
以下簡單的類包含了三個屬性: area, length 和 breadth蹦肴,printArea方法用于打印計算結(jié)果:
創(chuàng)建對象
創(chuàng)建對象是位類的實例分配內(nèi)存的過程。每個類都有屬于自己的內(nèi)存并共享公共數(shù)據(jù)猴娩。
訪問屬性
我們可以使用點號(.)來訪問類的屬性:
訪問成員函數(shù)
我們可以使用冒號:來訪問類的成員函數(shù):
內(nèi)存在對象初始化時分配阴幌。
完整實例
以下我們演示了 Lua 面向?qū)ο蟮耐暾麑嵗?/p>
執(zhí)行以上程序,輸出結(jié)果為:
Lua 繼承
繼承是指一個對象直接使用另一對象的屬性和方法卷中×哑撸可用于擴展基礎(chǔ)類的屬性和方法。
以下演示了一個簡單的繼承實例:
接下來的實例仓坞,Square 對象繼承了 Shape 類:
完整實例
以下實例我們繼承了一個簡單的類,來擴展派生類的方法腰吟,派生類中保留了繼承類的成員變量和方法:
執(zhí)行以上代碼无埃,輸出結(jié)果為:
函數(shù)重寫
Lua 中我們可以重寫基礎(chǔ)類的函數(shù),在派生類中定義自己的實現(xiàn)方式:
內(nèi)容來自:runoob.com 菜鳥教程
整理:極動云毛雇,寧波家電物聯(lián)網(wǎng)云平臺
CONTACT US: http://www.iot-jd.com