日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

openresty开发系列23--lua面向对象

發(fā)布時間:2025/3/20 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 openresty开发系列23--lua面向对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

openresty開發(fā)系列23--lua面向對象

面向對象編程(Object Oriented Programming,OOP)是一種非常流行的計算機編程架構。
java,c++,.net等都支持面向對象

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

一)Lua 中面向對象
對象由屬性和方法組成,lua中的面向對象是用table來描述對象的屬性,function表示方法;
LUA中的類可以通過table + function模擬出來。

一個簡單實例
以下簡單的類代表矩形類,包含了二個屬性:length 和 width;getArea方法用獲取面積大小

新建rect.lua腳本

local rect = {length = 0, width = 0}

-- 派生類的方法 new
function rect:new (length,width)
? local o = {
???? --設定各個項的值
???? length = length or 0,
???? width = width or 0
? }
? setmetatable(o, {__index = self})
? return o
end

-- 派生類的方法 getArea
function rect:getArea ()
? return self.length * self.width
end

return rect

-----------------test.lua------------------------

引用模塊
local rect = require("rect")

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

local rect1 = rect:new(10,20)
local rect2 = rect:new(5,6)

訪問屬性? ----》 rect1.length
訪問成員函數? ----》rect1:getArea()

print("長度1:",rect1.length);
print("面積1:",rect1:getArea());? --- 點號 和 冒號 調用前面課程已經介紹
print("長度2:",rect2.length);
print("面積2:",rect2:getArea());


二)Lua繼承

-------------------shape基類---------------------------

local shape = {name = ""}

-- 創(chuàng)建實體對象方法 new
function shape:new (name)
? local o = {
?? ?name = name or "shape"
? }
? setmetatable(o, {__index = self})
? return o
end

-- 獲取周長的方法 getPerimeter
function shape:getPerimeter ()
? print("getPerimeter in shape");
? return 0
end

-- 獲取面積的方法 getArea
function shape:getArea ()
? print("getArea in shape");
? return 0
end

function shape:getVum ()
? print("getVum in shape");
? return 0
end

return shape

----------------------triangle繼承類----------------------------

local shape = require("shape")

local triangle = {}

-- 派生類的方法 new
function triangle:new (name,a1,a2,a3)
? local obj = shape:new(name);
?
? --1)當方法在子類中查詢不到時,再去父類中去查找。
? local super_mt = getmetatable(obj);
? setmetatable(self, super_mt);
?
? --2)把父類的元表 賦值super對象
? obj.super = setmetatable({}, super_mt)
?
? --3)屬性賦值
? obj.a1 = a1 or 0;
? obj.a2 = a2 or 0;
? obj.a3 = a3 or 0;
?
? setmetatable(obj, { __index = self })
?
? return obj;
end

-- 派生類的方法 getPerimeter
function triangle:getPerimeter()
? print("getPerimeter in triangle");
? return (self.a1 + self.a2 + self.a3);
end

-- 派生類的方法 getHalfPerimeter
function triangle:getHalfPerimeter()
? print("getHalfPerimeter in triangle");
? return (self.a1 + self.a2 + self.a3) / 2
end

return triangle

------------------test-----------------------

local rect = require("rect")
--local shape = require("shape")
local triangle = require("triangle")
?
local rect1 = rect:new(10,20)
local rect2 = rect:new(5,6)

--local shape1 = shape:new();

local triangle1 = triangle:new("t1",1,2,3)
local triangle2 = triangle:new("t2",6,7,8)

print("長度1:",rect1.length);
print("面積1:",rect1:getArea());
print("===============");
print("長度2:",rect2.length);
print("面積2:",rect2:getArea());
print("===============");
--print("shape1 getPerimeter:",shape1:getPerimeter())
print("===============");
----覆蓋了shape的方法
print("t1 getPerimeter:",triangle1:getPerimeter())
print("t1 getHalfPerimeter:",triangle1:getHalfPerimeter())

print("t2 getPerimeter:",triangle2:getPerimeter())
print("t2 getHalfPerimeter:",triangle2:getHalfPerimeter())

---- 從shape繼承的getVum方法
print("t1 getVum:",triangle1:getVum())
print("t2 getVum:",triangle2:getVum())
print("===============");
print("t2 super getPerimeter:",triangle2.super:getPerimeter())

轉載于:https://www.cnblogs.com/reblue520/p/11434004.html

總結

以上是生活随笔為你收集整理的openresty开发系列23--lua面向对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。