Lua Object Oriented
OOP (Object Oriented Programming, OOP) jest bardzo popularną architekturę programowania komputerowego.
Następujące języki programowania wsparcia programowania obiektowego:
- C ++
- Jawa
- Objective-C
- Smalltalk
- C #
- rubin
cechy obiektowe
- 1) Opakowanie: odnosi się do zdolności podmiotu do informacji, funkcji i odpowiedzi są umieszczane w oddzielnych właściwości obiektu.
- 2) Dziedziczenie: odziedziczone metoda nie pozwala na zmianę podstawy oryginalnego programu na jego ekspansji, tak że pierwotna funkcja może być zachowane, a nowe funkcje również została rozszerzona. Pomaga to zmniejszyć powtarzalnego kodowania, w celu poprawy wydajności oprogramowania.
- 3) polimorfizm: ta sama operacja stosowane do różnych obiektów mogą mieć różne interpretacje, w wyniku różnych wyników realizacji. W czasie wykonywania można wskazać klasy bazowej wskaźnik zadzwonić pochodzące metod klasy.
- 4) Streszczenie: Streszczenie (abstrakcji) jest uproszczenie złożonej rzeczywistości w sposób, można go znaleźć najwłaściwsze Kategoria ta jest zdefiniowana jako specyficznego problemu, a może być w najbardziej odpowiedniej interpretacji poziom spadków.
Lua Object Oriented
Wiemy, że składu właściwości obiektów i metod. LUA jest najbardziej podstawowa struktura stół, trzeba korzystać ze stołu do opisania właściwości obiektu.
lua Funkcja może być używany do celów reprezentacyjnych. Klasa to funkcja LUA stół + mogą być symulowane.
Co do spadku można symulować metetable (nie zaleca się, aby symulować tylko najbardziej podstawowych przedmiotów na tyle większość czasu).
Tabele Lua nie tylko w pewnym sensie, jest obiektem. Jak przedmiot, tabela także stanu (zmiennych składowych), także wartości niezależny obiekt natury, w szczególności z dwóch przedmiotów o różnych wartościach (tabela) stanowią dwa różne obiekty, obiekt w różnym czasie może być różna wartości, ale zawsze był obiektem, obiekt jest podobny do tabeli utworzonej przez co ich cyklu życia, w którym nie tworzy się związek. Przedmioty mają swoje funkcje składowe, stoły mają również:
Account = {balance = 0} function Account.withdraw (v) Account.balance = Account.balance - v end
Definicja ta tworzy nową funkcję i zapisać wypłacić w terminie obiekt konta, możemy wywołać następujące:
Account.withdraw(100.00)
Prosty przykład
Następująca prosta klasa zawiera trzy właściwości: powierzchni, długości i szerokości, metodę printArea dla wyników drukowania:
-- Meta class 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
Tworzenie obiektu
Celem jest stworzenie instancji procesu trochę klasy przydzielić pamięci. Każda klasa ma swoją własną pamięć i korzystać ze wspólnych danych.
r = Rectangle:new(nil,10,20)
Właściwości dostępu
Możemy użyć kropki aby uzyskać dostęp do atrybutu class (.):
print(r.length)
Funkcje składowe Dostęp
Możemy użyć dwukropka (:) przypisanie klas dostępu:
r:printArea()
alokacji pamięci, gdy obiekt jest zainicjowany.
Kompletny przykład
Poniżej pokazujemy Lua obiektowego pełny przykład:
-- Meta class 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 -- 创建对象 myshape = Shape:new(nil,10) myshape:printArea()
Powyższy program, wyjście jest:
面积为 100
Lua dziedziczenie
Dziedziczenie odnosi się do obiektu bezpośrednio za pomocą właściwości i metody innego obiektu. Właściwości i metody mogą być stosowane do przedłużania klasę bazową.
Poniższa demonstruje proste przykłady dziedziczenia:
-- Meta class 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
Kolejnym przykładem, kwadratowe obiekty Shape dziedziczą klasy:
Square = Shape:new() -- Derived class method new function Square:new (o,side) o = o or Shape:new(o,side) setmetatable(o, self) self.__index = self return o end
Kompletny przykład
Poniższe przykłady odziedziczyliśmy prostą metodę klasy rozszerzyć klasę, wywodzące się z klasy pochodnej, który zapewnia zachowanie zmiennych składowych i metod dziedziczonych klas:
-- Meta class 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 -- 创建对象 myshape = Shape:new(nil,10) myshape:printArea() Square = Shape:new() -- 派生类方法 new function Square:new (o,side) o = o or Shape:new(o,side) setmetatable(o, self) self.__index = self return o end -- 派生类方法 printArea function Square:printArea () print("正方形面积为 ",self.area) end -- 创建对象 mysquare = Square:new(nil,10) mysquare:printArea() Rectangle = Shape:new() -- 派生类方法 new function Rectangle:new (o,length,breadth) o = o or Shape:new(o) setmetatable(o, self) self.__index = self self.area = length * breadth return o end -- 派生类方法 printArea function Rectangle:printArea () print("矩形面积为 ",self.area) end -- 创建对象 myrectangle = Rectangle:new(nil,10,20) myrectangle:printArea()
Realizacja powyższego kodu, wyjście jest:
面积为 100 正方形面积为 100 矩形面积为 200
Funkcja nadpisania
Lua, możemy przepisać funkcji klasy bazowej, definiować własne implementacje w klasach pochodnych:
-- 派生类方法 printArea function Square:printArea () print("正方形面积 ",self.area) end