- -- lua面向对象编程
- -- OOP 概念
- --[[面向对象编程(Object Oriented Programming,OOP)是一种目前非常主流的计算机编程思想。
- 目前支持OOP的编程的有:Smalltalk Java、C#、C++、python等。
- OOP编程三大核心
- 封装:指能够把一个实体的信息,功能、响应都装入到一个单独的对象中的特性。
- 继承:继承的方法允许在不改动原来程序继承上对其进行扩充,这样使得原功能得以保存
- 而新功能也得以扩展。这有利于减少重复编码,提高软件的开发效率。
- 多态:同一操作用于不同的对象,可以又不同的解释,产生不同的执行结果。
- lua语法没有面向对象的机制。
- lua中使用Table实现面向对象机制,把Table模拟一个'类'来使用。
- 提示:
- 其实lua的string(math,random)等就是可以看成面向对象的特殊表,--]]
-
- -- 定义表的“字段”与“方法”
- --[[使用“表名.field” 的形式,定义表的字段。
- 使用“表名.methodName()”形式,定义表的方法。
- 定义表的第二种方式,匿名方法赋值表字段。--]]
- -- 定义一个空表:相当于一个(OOP编程中)“类”
- Person = {}
- -- local this = Person
- -- 定义字段
- Person.name = 'Aitlo'
- Person.gender = 'man'
- Person.Height = '165'
- Person.Weight = '125'
- -- 定义方法
- Person.Speak =function() -- 第一种定义方式(匿名函数)
- print('人在说话')
- end
- function Person.Walking() -- 第二种定义方式(常用 )
- print('人在走路')
- end
- -- 输出个人信息(函数中调用函数)(传统定义不灵活)
- function Person.ShowInfo()
- print('调用我的个人信息')
- print('身高'..Person.Height)
- print('身高'..Person.Weight)
- Person.Speak()
- Person.Walking()
- end
- -- 改进函数的定义方式
- function Person.ShowInfo()
- print('调用我的个人信息')
- print('身高'..this.Height)
- print('身高'..this.Weight)
- this.Speak()
- this.Walking()
- end
- -- 进一步完善函数的定义方式,使用self 关键字。(配合函数使用“冒号”定义函数)
- function Person:Show()
- print('调用我的个人信息,self')
- print('身高'..self.Height)
- print('身高'..self.Weight)
- self.Speak()
- self.Walking()
- end
- -- 调用“字段”与“方法”
- print(Person.name)
- print(Person.gender)
- print(Person.Height)
- print(Person.Weight)
- -- 调用方法
- Person.Speak()
- Person.Walking()
- -- Person.ShowInfo()
- -- 演示函数中增加“this”变量提高编程的灵活性问题。
- --a= Person -- Person表赋值给a 变量
- --Person = nil -- Person 销毁,是否还哼调用表的内容(字段、函数)?
- --a.ShowInfo() -- 如果Person 销毁,则a对象无法调用,如果把Person重新指定给 this 就可以实现删除Person 调用原有数据
- Person:Show()
复制代码
|