Menu
Coddy logo textTech

Итоги: Иерархия фигур

Часть раздела Object Oriented Programming путешествия по Lua на Coddy — урок 36 из 70.

challenge icon

Задание

Легко

Давайте создадим полную иерархию фигур с нуля! Вы создадите родительский класс Shape, от которого будут наследоваться все фигуры, а затем создадите дочерние классы Circle и Square, каждый из которых будет иметь свои уникальные свойства, разделяя при этом общую функциональность.

Вы организуете свой код в четырех файлах:

  • Shape.lua: Ваш базовый класс, от которого будут наследоваться все фигуры. Он должен иметь конструктор :new(color), который сохраняет цвет фигуры, и метод :getColor(), который его возвращает. Это общее свойство означает, что каждая фигура — будь то круг или квадрат — будет иметь цвет.
  • Circle.lua: Дочерний класс, наследуемый от Shape. Его конструктор :new(color, radius) должен вызывать родительский конструктор для установки цвета, а затем добавлять радиус как уникальный атрибут. Включите метод :describe(), который выводит информацию о круге.
  • Square.lua: Еще один дочерний класс, наследуемый от Shape. Его конструктор :new(color, side) также должен вызывать родительский конструктор, а затем сохранять длину стороны. Включите метод :describe() также и для квадратов.
  • main.lua: Объедините все вместе, создав экземпляры обеих фигур и продемонстрировав, что они правильно наследуются от Shape, сохраняя при этом свои уникальные свойства.

Вы получите два входных значения:

  1. Данные круга: цвет и радиус, разделенные запятой (например, blue,5)
  2. Данные квадрата: цвет и длина стороны, разделенные запятой (например, red,4)

В вашем основном файле создайте Circle и Square с заданными значениями. Затем выведите следующее на отдельных строках:

  1. Вызовите :describe() для круга
  2. Вызовите :describe() для квадрата
  3. Выведите цвет круга, используя :getColor()
  4. Выведите цвет квадрата, используя :getColor()

Метод :describe() для Circle должен выводить:

Circle with radius {radius}

Метод :describe() для Square должен выводить:

Square with side {side}

Например, если входные данные blue,5 и red,4, вывод должен быть следующим:

Circle with radius 5
Square with side 4
blue
red

Это демонстрирует полный паттерн наследования: обе фигуры наследуют :getColor() от Shape (они никогда не определяют его сами), в то время как каждая имеет свой уникальный атрибут и метод :describe()!

Попробуйте сами

-- main.lua: Собираем всё вместе

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

-- Чтение входных данных для круга (цвет, радиус)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)

-- Чтение входных данных для квадрата (цвет, сторона)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)

-- TODO: Создать экземпляр Circle с заданным цветом и радиусом

-- TODO: Создать экземпляр Square с заданным цветом и стороной

-- TODO: Вызвать :describe() для круга

-- TODO: Вызвать :describe() для квадрата

-- TODO: Вывести цвет круга, используя :getColor()

-- TODO: Вывести цвет квадрата, используя :getColor()

Все уроки раздела Object Oriented Programming