Итоги: Иерархия фигур
Часть раздела Объектно-ориентированное программирование путешествия по Lua на Coddy. Урок 36 из 70.
Задание
ЛегкоДавайте с нуля создадим полную иерархию фигур! Вы создадите родительский Shape class, от которого будут наследовать all shapes, а затем создадите дочерние classes Circle и Square, у каждого из которых будут собственные уникальные свойства при сохранении общей функциональности.
Вы организуете код в четырёх файлах:
Shape.lua: Ваш базовый class, от которого будут наследовать all shapes. В нём должны быть constructor:new(color), сохраняющий цвет shape, и method:getColor(), возвращающий его. Благодаря этому общему свойству каждая shape, будь то circle или square, будет иметь цвет.Circle.lua: Дочерний class, который inherits from Shape. Его constructor:new(color, radius)должен вызвать parent constructor для цвета, а затем добавить radius как уникальный атрибут. Добавьте method:describe(), который выводит сведения о circle.Square.lua: Ещё один дочерний class, inherits from Shape. Его constructor:new(color, side)также должен вызвать parent constructor, а затем сохранить длину side. Также добавьте method:describe()для square.main.lua: Bring everything together, создав экземпляры обеих shapes и продемонстрировав, что они корректно наследуют свойства от Shape, сохраняя при этом свои уникальные свойства.
Вы получите два входных значения:
- Данные Circle: color и radius, разделённые запятой (например,
blue,5) - Данные Square: color и длина side, разделённые запятой (например,
red,4)
В вашем основном файле создайте Circle и Square с заданными значениями. Затем выведите в отдельных строках:
- Call
:describe()для circle - Call
:describe()для square - Выведите цвет circle с использованием
:getColor() - Выведите цвет square с использованием
:getColor()
Method :describe() для Circle должен выводить:
Circle with radius {radius}Method :describe() для Square должен выводить:
Square with side {side}Например, если входные значения — blue,5 и red,4, результатом должен быть:
Circle with radius 5
Square with side 4
blue
redЭто демонстрирует полный шаблон наследования: обе shapes наследуют :getColor() от Shape (они никогда не определяют его самостоятельно), а каждая имеет собственный уникальный атрибут и method :describe()!
Попробуйте сами
-- main.lua: Собери всё вместе
local Circle = require('Circle')
local Square = require('Square')
-- Прочитай ввод для круга (color,radius)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)
-- Прочитай ввод для квадрата (color,side)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)
-- TODO: Создай экземпляр Circle с заданным цветом и радиусом
-- TODO: Создай экземпляр Square с заданным цветом и стороной
-- TODO: Вызови :describe() у круга
-- TODO: Вызови :describe() у квадрата
-- TODO: Выведи цвет круга с помощью :getColor()
-- TODO: Выведи цвет квадрата с помощью :getColor()
Все уроки раздела Объектно-ориентированное программирование
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигурПотренируйтесь самостоятельно: Онлайн-компилятор Lua