python入門python的基本語法
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方法用于打印計算結果:
實例
-- 元類
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小時內刪除侵權內容。