Latest web development tutorials

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