Класс Rectangle
Часть раздела Object Oriented Programming путешествия по Lua на Coddy — урок 56 из 70.
Задание
ЛегкоТеперь давайте расширим наш Shape Manager, создав класс Rectangle, который наследуется от базового класса Shape, созданного вами в предыдущем уроке.
Вы будете работать с тремя файлами, чтобы поддерживать структуру кода:
Shape.lua: Ваш базовый класс Shape из предыдущего задания (с методами:new(name)и:getName()).Rectangle.lua: Создайте класс Rectangle, который наследуется от Shape. Конструктор должен приниматьwidthиheight, вызывать родительский конструктор с именем"Rectangle"и сохранять размеры. Добавьте метод:getArea(), который вычисляет и возвращает площадь прямоугольника.main.lua: Подключите модуль Rectangle, считайте ширину и высоту из входных данных, создайте экземпляр Rectangle и выведите его имя, а затем его площадь на отдельных строках.
Не забудьте правильно настроить связь наследования, чтобы экземпляры Rectangle могли обращаться к методам Shape через цепочку прототипов.
Ввод: Две строки — первая содержит ширину (число), вторая содержит высоту (число).
Вывод: Две строки — имя прямоугольника из :getName(), затем его площадь из :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())
Все уроки раздела Object Oriented Programming
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников10Проект: Менеджер фигур
Настройка проектаКласс Rectangle2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигур