Menu
Coddy logo textTech

Końcowy sprawdzian z OOP

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

challenge icon

Wyzwanie

Łatwy

Zbierzmy w całość wszystko, czego nauczysz się o OOP w Lua! Zbudujesz system pojazdów, który demonstruje dziedziczenie, enkapsulację za pomocą konwencji nazewniczych oraz miksy dodające opcjonalne możliwości.

Rozmieścisz swój kod w pięciu plikach:

  • Vehicle.lua: Klasa bazowa dla wszystkich pojazdów. Każdy pojazd ma name oraz _speed, który zgodnie z konwencją jest prywatny (zainicjalizowany wartością 0). Dodaj metodę odczytującą :getName(), metodę odczytującą :getSpeed() oraz metodę ustawiającą :setSpeed(value), która odrzuca wartości ujemne (jeśli wartość jest ujemna, wypisz Speed cannot be negative i nie zmieniaj wartości). Dodaj metodę :describe(), która zwraca "{name} moving at {speed}".
  • Refuelable.lua: Tabela miksu zawierająca zachowanie związane z paliwem. Dodaj metodę :refuel(amount), która zwiększa wartość self._fuel, oraz metodę :getFuel(), która zwraca aktualny poziom paliwa.
  • Car.lua: Dziedziczy po Vehicle i używa miksu Refuelable. Konstruktor przyjmuje name i inicjalizuje _fuel wartością 0. Zastąp metodę :describe(), aby zwracała "{name} moving at {speed}, fuel: {fuel}". Zastosuj miks Refuelable, aby samochody mogły korzystać z paliwa.
  • Bicycle.lua: Dziedziczy wyłącznie po Vehicle — nie potrzebuje obsługi paliwa. Konstruktor przyjmuje tylko name. Rowery używają odziedziczonej metody :describe() bez modyfikacji.
  • main.lua: Zbierzmy wszystko w całość! Utwórz samochód i rower na podstawie danych wejściowych, zademonstruj ich różne możliwości i pokaż, jak współdzielą typowe zachowania pojazdów, a jednocześnie mają odrębne cechy.

Otrzymasz cztery dane wejściowe:

  1. Nazwa samochodu
  2. Nazwa roweru
  3. Prędkość do ustawienia dla obu pojazdów (liczba)
  4. Ilość paliwa do dolania do samochodu (liczba)

W pliku głównym:

  1. Utwórz samochód i rower o podanych nazwach
  2. Ustaw prędkość obu pojazdów, używając trzeciej wartości wejściowej
  3. Dolej paliwa do samochodu, używając czwartej wartości wejściowej
  4. Wypisz opis samochodu
  5. Wypisz opis roweru

Na przykład, jeśli danymi wejściowymi są Sedan, Mountain Bike, 60 i 45, wynikiem powinno być:

Sedan moving at 60, fuel: 45
Mountain Bike moving at 60

Jeśli danymi wejściowymi są Sports Car, Road Bike, 120 i 80, wynikiem powinno być:

Sports Car moving at 120, fuel: 80
Road Bike moving at 120

To wyzwanie pokazuje, jak dziedziczenie zapewnia wspólne zachowanie (oba pojazdy mogą się poruszać), miksy dodają opcjonalne możliwości (tylko samochody potrzebują paliwa), a enkapsulacja chroni integralność danych (walidacja prędkości). Każda technika pełni w Twoim projekcie inną funkcję!

Spróbuj swoich sił

-- main.lua: Połącz wszystko w całość

local Car = require('Car')
local Bicycle = require('Bicycle')

-- Wczytaj dane wejściowe
local carName = io.read()
local bicycleName = io.read()
local speed = tonumber(io.read())
local fuelAmount = tonumber(io.read())

-- TODO: Utwórz samochód o podanej nazwie

-- TODO: Utwórz rower o podanej nazwie

-- TODO: Ustaw prędkość obu pojazdów

-- TODO: Zatankuj samochód podaną ilością paliwa

-- TODO: Wypisz opis samochodu

-- TODO: Wypisz opis roweru

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Lua online