Inicjalizacja atrybutów
Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 9 z 70.
Konstruktor :new(), którego się nauczyłeś, tworzy obiekty, ale każda instancja jest na początku identyczna. Prawdziwe obiekty potrzebują unikalnych danych: osoba ma konkretne imię, a gracz — wynik początkowy. Aby obiekty były użyteczne, konstruktor musi przyjmować argumenty i przypisywać je do nowej instancji.
Oto jak rozszerzyć konstruktor, aby przyjmował wartości początkowe:
local Dog = {}
Dog.__index = Dog
function Dog:new(name, breed)
local instance = {}
setmetatable(instance, self)
instance.name = name
instance.breed = breed
return instance
end
function Dog:introduce()
print("I am " .. self.name .. ", a " .. self.breed)
endKonstruktor przyjmuje teraz parametry name i breed. Po utworzeniu pustej instancji i ustawieniu jej metatabeli przypisujemy te wartości bezpośrednio do pól instancji. Każdy utworzony obiekt będzie miał własne pola name i breed.
local dog1 = Dog:new("Rex", "German Shepherd")
local dog2 = Dog:new("Bella", "Poodle")
dog1:introduce() -- Wynik: Jestem Rex, owczarkiem niemieckim
dog2:introduce() -- Wynik: Jestem Bella, pudlemOba psy korzystają z tej samej metody :introduce() z prototypu, ale każdy z nich ma własne, unikalne imię i rasę zapisane w swojej tabeli instancji. Na tym polega siła połączenia prototypów z konstruktorami przyjmującymi parametry: wspólne zachowanie i indywidualny stan.
Wyzwanie
ŁatwyZbudujmy klasę Person, która tworzy unikalne osoby z własnymi imionami i wiekiem. Rozmieścisz kod w dwóch plikach, aby przećwiczyć prawidłową strukturę modułów.
Utworzysz:
Person.lua: Zdefiniuj klasęPersonz konstruktorem, który przyjmuje imię i wiek. Dodaj metodę:introduce(), dzięki której każda osoba może się przedstawić.main.lua: Załaduj moduł Person i utwórz instancję osoby, używając podanych danych wejściowych. Następnie wywołaj jej metodę przedstawiania się.
Konstruktor :new(name, age) powinien przyjmować obie wartości i zapisywać je w nowej instancji. Metoda :introduce() powinna wypisać tekst w dokładnie takim formacie:
Hello, my name is [name] and I am [age] years oldOtrzymasz dwa dane wejściowe:
- Imię osoby
- Wiek osoby
Na przykład, jeśli danymi wejściowymi są Alice i 25, wynik powinien wyglądać tak:
Hello, my name is Alice and I am 25 years oldSpróbuj swoich sił
-- Załaduj moduł Person
local Person = require('Person')
-- Odczytaj dane wejściowe
local name = io.read()
local age = io.read()
-- TODO: Utwórz nową instancję Person za pomocą Person:new(name, age)
-- TODO: Wywołaj metodę introduce() na swojej instancji Person
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Koncepcja „self”
Tabele z funkcjamiJawne „self”Składnia z dwukropkiemKropka czy dwukropekPodsumowanie — poruszający się punkt4Projekt: Bank cyfrowy
Konfiguracja projektuMetoda wpłaty7Polimorfizm i nadpisywanie
Nadpisywanie metodWywoływanie metod klasy nadrzędnejTypowanie kaczeWspólny interfejsSprawdzanie typuPodsumowanie — role pracowników10Projekt: Menedżer kształtów
Konfiguracja projektuKlasa prostokątaKlasa kołaMetoda obwoduKolekcja kształtówPole całkowiteFiltrowanie kształtów2Wzorzec prototypu klasy
Koncepcja prototypuŁączenie za pomocą __indexKonstruktor :new()Inicjalizacja atrybutówNiezależne instancjePodsumowanie – fabryka samochodów5Przeciążanie operatorów w OOP
Dodawanie obiektówOdejmowanie obiektówŁączenie obiektówPorównywanie obiektów (<, >)Powtórka — działania na portfelu8Hermetyzacja
Konwencje nazewnictwaDomknięcia dla prywatnościDostęp za pomocą domknięćTabele tylko do odczytuLogika walidacjiPodsumowanie — bezpieczny sejf11Wzorce projektowe (podstawy)
Funkcje fabrykująceTabela SingletonWzorzec iteratoraObserwator (nasłuchujący)Powtórka — fabryka loggera3Stan i zachowanie obiektu
Zmienne instancjiMetody dostępoweMetody ustawiająceWłaściwości obliczaneFormatowanie ciągów znakówSprawdzanie równościPodsumowanie – ocena ucznia6Podstawy dziedziczenia
Konfiguracja dziedziczeniaDziedziczenie metodRozszerzanie konstruktoraDodawanie metod potomnychWspólne i unikalne elementyPowtórka — hierarchia kształtówPoćwicz samodzielnie: Kompilator Lua online