Podsumowanie — składanie robota
Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 54 z 70.
Wyzwanie
ŁatwyZłóżmy Robot z pojedynczych części składowych! Zamiast korzystać z dziedziczenia, zbudujesz robota, komponując go z oddzielnych obiektów Arm, Leg i Head, z których każdy ma własne wyspecjalizowane zachowanie. Robot będzie koordynować te części poprzez delegowanie zadań.
Rozmieścisz swój kod w pięciu plikach:
Arm.lua: Utwórz klasę Arm z konstruktorem:new(side), który przechowuje informację o tym, po której stronie znajduje się ramię (np. "left" lub "right"). Dodaj metodę:raise(), która wyświetla{side} arm raised, oraz metodę:lower(), która wyświetla{side} arm lowered.Leg.lua: Utwórz klasę Leg z konstruktorem:new(side), który przechowuje informację o stronie. Dodaj metodę:step(), która wyświetla{side} leg steps forward.Head.lua: Utwórz klasę Head z konstruktorem:new(). Dodaj metodę:nod(), która wyświetlaHead nods, oraz metodę:shake(), która wyświetlaHead shakes.Robot.lua: Utwórz klasę Robot, której konstruktor:new(name)przechowuje imię i wewnętrznie tworzy wszystkie części składowe: lewe ramię, prawe ramię, lewą nogę, prawą nogę i głowę. Robot powinien mieć następujące metody, które delegują zadania do jego części::greet(): wyświetla{name} says hello!, następnie podnosi prawe ramię, a potem je opuszcza:walk(): wykonuje krok najpierw lewą nogą, a potem prawą:respond(answer): jeśli odpowiedź to"yes", głowa kiwa; jeśli"no", głowa potrząsa się
main.lua: Odczytaj imię robota oraz odpowiedź tak/nie. Utwórz obiekt Robot, każ mu się przywitać i przejść, a następnie zareagować na podstawie odpowiedzi.
Otrzymasz dwa dane wejściowe:
- Imię robota (ciąg znaków)
- Odpowiedź:
yeslubno
Wynik powinien pokazywać, jak robot koordynuje swoje części:
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsLub jeśli odpowiedzią jest no:
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head shakesNa przykład, jeśli danymi wejściowymi są Robo i yes, wynik powinien wyglądać tak:
Robo says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsZauważ, że Robot nie wie, jak podnosić ramiona ani stawiać kroki nogami. Po prostu mówi każdej części, co ma robić. Każdy komponent jest niezależny i można go używać ponownie, a robot pełni rolę koordynatora, który łączy je wszystkie!
Spróbuj swoich sił
-- main.lua: Punkt wejścia do zadania dotyczącego kompozycji Robot
local Robot = require('Robot')
-- Odczytaj dane wejściowe
local name = io.read()
local answer = io.read()
-- TODO: Utwórz Robot o podanej nazwie
-- TODO: Spraw, aby robot się przywitał
-- TODO: Spraw, aby robot zaczął chodzić
-- TODO: Spraw, aby robot odpowiedział na podstawie danych wejściowych answer
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ów9Kompozycja i mixiny
Relacja Has-ADelegowanieProste mixinyStosowanie wielu mixinówMixiny a dziedziczeniePodsumowanie — składanie robotaPoćwicz samodzielnie: Kompilator Lua online