Menu
Coddy logo textTech

Powtórka — hierarchia kształtów

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

challenge icon

Wyzwanie

Łatwy

Zbudujmy od podstaw kompletną hierarchię kształtów! Utworzysz klasę nadrzędną Shape, po której będą dziedziczyć wszystkie kształty, a następnie zbudujesz klasy potomne Circle i Square, z których każda będzie miała własne, unikalne właściwości, a jednocześnie będzie współdzielić wspólną funkcjonalność.

Rozmieścisz swój kod w czterech plikach:

  • Shape.lua: Klasa bazowa, po której będą dziedziczyć wszystkie kształty. Powinna mieć konstruktor :new(color), który przechowuje kolor kształtu, oraz metodę :getColor(), która go zwraca. Dzięki tej wspólnej właściwości każdy kształt, zarówno koło, jak i kwadrat, będzie miał kolor.
  • Circle.lua: Klasa potomna dziedzicząca po Shape. Jej konstruktor :new(color, radius) powinien wywołać konstruktor klasy nadrzędnej, aby ustawić kolor, a następnie dodać promień jako unikalny atrybut. Dodaj metodę :describe(), która wypisuje szczegóły koła.
  • Square.lua: Kolejna klasa potomna dziedzicząca po Shape. Jej konstruktor :new(color, side) również powinien wywołać konstruktor klasy nadrzędnej, a następnie zapisać długość boku. Dodaj także metodę :describe() dla kwadratów.
  • main.lua: Połącz wszystko w całość, tworząc instancje obu kształtów i demonstrując, że poprawnie dziedziczą po Shape, zachowując jednocześnie swoje unikalne właściwości.

Otrzymasz dwa dane wejściowe:

  1. Dane koła: kolor i promień oddzielone przecinkiem (np. blue,5)
  2. Dane kwadratu: kolor i długość boku oddzielone przecinkiem (np. red,4)

W pliku głównym utwórz koło i kwadrat z podanymi wartościami. Następnie wypisz poniższe elementy, każdy w osobnym wierszu:

  1. Wywołaj :describe() dla koła
  2. Wywołaj :describe() dla kwadratu
  3. Wypisz kolor koła za pomocą :getColor()
  4. Wypisz kolor kwadratu za pomocą :getColor()

Metoda :describe() dla Circle powinna wypisywać:

Circle with radius {radius}

Metoda :describe() dla Square powinna wypisywać:

Square with side {side}

Na przykład, jeśli dane wejściowe to blue,5 i red,4, wynikiem powinno być:

Circle with radius 5
Square with side 4
blue
red

To demonstruje kompletny wzorzec dziedziczenia: oba kształty dziedziczą :getColor() z Shape (nigdy nie definiują jej samodzielnie), a każdy z nich ma własny unikalny atrybut i metodę :describe()!

Spróbuj swoich sił

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

local Circle = require('Circle')
local Square = require('Square')

-- Odczytaj dane wejściowe dla koła (color,radius)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)

-- Odczytaj dane wejściowe dla kwadratu (color,side)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)

-- TODO: Utwórz instancję Circle o podanym kolorze i promieniu

-- TODO: Utwórz instancję Square o podanym kolorze i długości boku

-- TODO: Wywołaj :describe() dla koła

-- TODO: Wywołaj :describe() dla kwadratu

-- TODO: Wypisz kolor koła za pomocą :getColor()

-- TODO: Wypisz kolor kwadratu za pomocą :getColor()

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Lua online