Класс Circle
Часть раздела Object Oriented Programming путешествия по Lua на Coddy — урок 57 из 70.
Задание
ЛегкоДавайте продолжим создание нашего менеджера фигур, добавив класс Circle наряду с классом Rectangle, который вы создали в предыдущем уроке.
Вы будете работать с четырьмя файлами, чтобы организовать свои фигуры:
Shape.lua: Ваш базовый класс Shape с методами:new(name)и:getName().Rectangle.lua: Ваш класс Rectangle из предыдущего задания с методом:getArea().Circle.lua: Создайте класс Circle, который наследуется от Shape. Конструктор должен приниматьradius, вызывать конструктор родителя с именем"Circle"и сохранять радиус. Добавьте метод:getArea(), который вычисляет площадь круга по формуле πr². Используйтеmath.piдля значения π.main.lua: Подключите модули Rectangle и Circle. Прочитайте три значения из входных данных: ширину прямоугольника, высоту прямоугольника и радиус круга. Создайте по одному экземпляру каждой фигуры и выведите четыре строки — имя прямоугольника, площадь прямоугольника, имя круга и площадь круга.
Обе фигуры теперь имеют одинаковый интерфейс благодаря наследованию — у каждой есть метод :getName() от Shape и собственная реализация :getArea(). Этот общий интерфейс пригодится в следующих уроках.
Ввод: Три строки — ширина (число), высота (число) и радиус (число).
Вывод: Четыре строки — имя прямоугольника, площадь прямоугольника, имя круга, площадь круга.
Попробуйте сами
-- Подключить модуль Rectangle
local Rectangle = require('Rectangle')
-- Подключить модуль Circle
-- TODO: Подключите модуль Circle здесь
-- Считать ширину и высоту из ввода
local width = tonumber(io.read())
local height = tonumber(io.read())
-- TODO: Считать радиус из ввода
-- Создать новый экземпляр Rectangle с заданными размерами
local rect = Rectangle:new(width, height)
-- TODO: Создать новый экземпляр Circle с заданным радиусом
-- Вывести имя и площадь прямоугольника
print(rect:getName())
print(rect:getArea())
-- TODO: Вывести имя и площадь круга
Все уроки раздела Object Oriented Programming
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников10Проект: Менеджер фигур
Настройка проектаКласс Rectangle2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигур