Menu
Coddy logo textTech

Podsumowanie — składanie robota

Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 54 z 70.

challenge icon

Wyzwanie

Łatwy

Złóż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świetla Head nods, oraz metodę :shake(), która wyświetla Head 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:

  1. Imię robota (ciąg znaków)
  2. Odpowiedź: yes lub no

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 nods

Lub jeśli odpowiedzią jest no:

{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head shakes

Na 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 nods

Zauważ, ż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

Poćwicz samodzielnie: Kompilator Lua online