Metody dostępowe
Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 13 z 70.
Nauczyłeś się przechowywać dane w zmiennych instancji, takich jak self.health lub self.items. Chociaż możesz uzyskiwać dostęp do tych pól bezpośrednio spoza obiektu, istnieje czytelniejsze podejście: używanie metod pobierających.
Getter (nazywany również metodą dostępu) to prosta metoda, która zwraca wewnętrzną wartość. Zamiast bezpośrednio odwoływać się do player.health, wywołujesz player:getHealth():
local Player = {}
Player.__index = Player
function Player:new(name)
local instance = {}
setmetatable(instance, self)
instance.name = name
instance.health = 100
return instance
end
function Player:getHealth()
return self.health
end
function Player:getName()
return self.name
endPo co dodatkowa metoda? Gettery zapewniają kontrolowany dostęp do danych.
Obecnie :getHealth() po prostu zwraca wartość. Później możesz jednak chcieć dodać logikę: na przykład zwracać „Critical”, jeśli zdrowie spadnie poniżej 10, albo rejestrować każde sprawdzenie zdrowia.
Po dodaniu metody pobierającej możesz wprowadzać te zmiany bez modyfikowania kodu korzystającego z obiektu.
local hero = Player:new("Luna")
print(hero:getHealth()) -- Wynik: 100
print(hero:getName()) -- Wynik: LunaTen wzorzec tworzy wyraźną granicę między wewnętrzną strukturą obiektu a sposobem, w jaki inne fragmenty kodu z nim współdziałają. Zewnętrzny świat uzyskuje dane za pomocą metod, zamiast bezpośrednio odwoływać się do pól obiektu.
Wyzwanie
ŁatwyZbudujmy klasę Player, która używa metod pobierających do uzyskiwania dostępu do swoich danych wewnętrznych. Zamiast odwoływać się bezpośrednio do pól gracza, utworzysz metody zapewniające kontrolowany dostęp do informacji o graczu.
Podzielisz kod na dwa pliki:
Player.lua: Zdefiniuj klasęPlayerprzy użyciu standardowego wzorca prototypu. Konstruktor powinien przyjmować imię i inicjalizować zdrowie wartością100. Dodaj trzy metody pobierające::getName()zwraca imię gracza:getHealth()zwraca aktualny poziom zdrowia gracza:getStatus()zwraca sformatowany ciąg znaków łączący obie te informacje
main.lua: Załaduj moduł Player i utwórz instancję gracza. Użyj metod pobierających, aby wyświetlić informacje o graczu: uzyskuj dostęp do wszystkich danych za pomocą metod, zamiast odczytywać pola bezpośrednio.
Metoda :getStatus() powinna zwracać ciąg znaków w dokładnie takim formacie:
[name] has [health] HPOtrzymasz jedno wejście: imię gracza.
W pliku głównym utwórz gracza o podanym imieniu, a następnie wypisz trzy wiersze, używając metod pobierających:
- Imię gracza (przy użyciu
:getName()) - Poziom zdrowia gracza (przy użyciu
:getHealth()) - Pełny status gracza (przy użyciu
:getStatus())
Na przykład, jeśli wejściem jest Luna, wynikiem powinno być:
Luna
100
Luna has 100 HPSpróbuj swoich sił
-- Załaduj moduł Player
local Player = require('Player')
-- Odczytaj dane wejściowe
local name = io.read()
-- TODO: Utwórz instancję gracza o podanym imieniu
-- TODO: Wypisz imię gracza za pomocą :getName()
-- TODO: Wypisz punkty zdrowia gracza za pomocą :getHealth()
-- TODO: Wypisz status gracza za pomocą :getStatus()
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