Класс Rectangle
Часть раздела Объектно-ориентированное программирование путешествия по Lua на Coddy. Урок 56 из 70.
Задание
ЛегкоТеперь расширим наш Shape Manager, создав Rectangle class, которая наследует базовый Shape, созданный тобой на предыдущем уроке.
Ты будешь работать с тремя файлами, чтобы сохранить код организованным:
Shape.lua: твой базовый Shape class из предыдущего задания (с:new(name)и:getName()).Rectangle.lua: создай Rectangle class, который наследует Shape. Конструктор должен приниматьwidthиheight, вызывать конструктор parent с именем"Rectangle"и сохранять dimensions. Добавь метод:getArea(), который вычисляет и возвращает area прямоугольника.main.lua: подключи свой Rectangle module, считай width и height из input, создай Rectangle instance и выведи его имя, а затем area, в отдельных строках.
Remember правильно настроить связь inheritance, чтобы экземпляры Rectangle могли получать доступ к method Shape через цепочку prototype.
Ввод: Две строки: первая содержит width (число), вторая содержит height (число).
Вывод: Две строки: имя прямоугольника из :getName(), затем его area из :getArea().
Попробуйте сами
-- Подключить модуль Rectangle
local Rectangle = require('Rectangle')
-- Прочитать ширину и высоту из ввода
local width = tonumber(io.read())
local height = tonumber(io.read())
-- Создать новый экземпляр Rectangle с заданными размерами
local rect = Rectangle:new(width, height)
-- Вывести имя и площадь прямоугольника
print(rect:getName())
print(rect:getArea())
Все уроки раздела Объектно-ориентированное программирование
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников10Проект: Менеджер фигур
Настройка проектаКласс RectangleКласс CircleМетод PerimeterКоллекция фигурОбщая площадьФильтрация фигур2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигурПотренируйтесь самостоятельно: Онлайн-компилятор Lua