[Lua语言基础]-11、Lua面向对象编程概念

[复制链接]
查看3013 | 回复8 | 2021-8-17 21:47:40 | 显示全部楼层 |阅读模式
  1. -- lua面向对象编程
  2. -- OOP 概念
  3. --[[面向对象编程(Object Oriented Programming,OOP)是一种目前非常主流的计算机编程思想。
  4. 目前支持OOP的编程的有:Smalltalk Java、C#、C++、python等。
  5. OOP编程三大核心
  6. 封装:指能够把一个实体的信息,功能、响应都装入到一个单独的对象中的特性。
  7. 继承:继承的方法允许在不改动原来程序继承上对其进行扩充,这样使得原功能得以保存
  8.           而新功能也得以扩展。这有利于减少重复编码,提高软件的开发效率。
  9. 多态:同一操作用于不同的对象,可以又不同的解释,产生不同的执行结果。

  10. lua语法没有面向对象的机制。
  11. lua中使用Table实现面向对象机制,把Table模拟一个'类'来使用。
  12.         提示:
  13.                 其实lua的string(math,random)等就是可以看成面向对象的特殊表,--]]
  14.                
  15. -- 定义表的“字段”与“方法”
  16. --[[使用“表名.field” 的形式,定义表的字段。
  17. 使用“表名.methodName()”形式,定义表的方法。
  18. 定义表的第二种方式,匿名方法赋值表字段。--]]

  19. -- 定义一个空表:相当于一个(OOP编程中)“类”
  20. Person = {}
  21. -- local this = Person

  22. -- 定义字段
  23. Person.name = 'Aitlo'
  24. Person.gender = 'man'
  25. Person.Height = '165'
  26. Person.Weight = '125'

  27. -- 定义方法
  28. Person.Speak =function()        -- 第一种定义方式(匿名函数)
  29.         print('人在说话')
  30. end

  31. function Person.Walking()        -- 第二种定义方式(常用   )
  32.         print('人在走路')
  33. end

  34. -- 输出个人信息(函数中调用函数)(传统定义不灵活)
  35. function Person.ShowInfo()
  36.         print('调用我的个人信息')
  37.         print('身高'..Person.Height)
  38.         print('身高'..Person.Weight)
  39.         Person.Speak()
  40.         Person.Walking()

  41. end

  42. -- 改进函数的定义方式
  43. function Person.ShowInfo()
  44.         print('调用我的个人信息')
  45.         print('身高'..this.Height)
  46.         print('身高'..this.Weight)
  47.         this.Speak()
  48.         this.Walking()

  49. end
  50. -- 进一步完善函数的定义方式,使用self 关键字。(配合函数使用“冒号”定义函数)
  51. function Person:Show()
  52.         print('调用我的个人信息,self')
  53.         print('身高'..self.Height)
  54.         print('身高'..self.Weight)
  55.         self.Speak()
  56.         self.Walking()

  57. end

  58. -- 调用“字段”与“方法”
  59. print(Person.name)
  60. print(Person.gender)
  61. print(Person.Height)
  62. print(Person.Weight)
  63. -- 调用方法
  64. Person.Speak()
  65. Person.Walking()

  66. -- Person.ShowInfo()

  67. -- 演示函数中增加“this”变量提高编程的灵活性问题。
  68. --a= Person                -- Person表赋值给a 变量
  69. --Person = nil        -- Person 销毁,是否还哼调用表的内容(字段、函数)?
  70. --a.ShowInfo()        -- 如果Person 销毁,则a对象无法调用,如果把Person重新指定给 this 就可以实现删除Person 调用原有数据

  71. Person:Show()
复制代码



回复

使用道具 举报

1974199655 | 2021-8-17 23:00:53 | 显示全部楼层
白嫖成功
回复

使用道具 举报

LUA蜂群 | 2021-8-17 23:06:33 来自手机 | 显示全部楼层
能理解嘛?
回复

使用道具 举报

时之刃 | 2021-8-19 22:11:28 | 显示全部楼层
hello看看我们的大神写的代码
回复

使用道具 举报

fye123456 | 2021-10-22 22:01:42 | 显示全部楼层
print('身高'..this.Height)       this 怎么出来的
回复

使用道具 举报

Aitlo | 2021-10-23 22:00:55 | 显示全部楼层
fye123456 发表于 2021-10-22 22:01
print('身高'..this.Height)       this 怎么出来的

this 和self 是同一个调用方法的只要实例化对象之后就可以调用对象里面的函数或者变量
回复

使用道具 举报

q1151816994 | 2021-10-28 16:11:37 | 显示全部楼层
新手学习学习
回复

使用道具 举报

lijun0223 | 2021-10-30 09:49:42 | 显示全部楼层
水贴攒经验啊啊啊啊啊 !!!!!!!!!!!!!
回复

使用道具 举报

chen123cj | 2021-11-17 18:24:04 | 显示全部楼层
感谢大佬分享呀~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则